lib/core/stream: LineIterator use CachedIterator
[nit.git] / src / nitpm.nit
index 12fc960..1e9de9c 100644 (file)
@@ -104,11 +104,10 @@ class CommandInstall
        do
                if package_id.is_package_name then
                        # Ask a centralized server
-                       # TODO choose a future safe URL
                        # TODO customizable server list
                        # TODO parse ini file in memory
 
-                       var url = "https://xymus.net/nitpm/{package_id}.ini"
+                       var url = "https://nitlanguage.org/catalog/p/{package_id}.ini"
                        var ini_path = "/tmp/{package_id}.ini"
 
                        if verbose then print "Looking for a package description at '{url}'"
@@ -262,7 +261,19 @@ class CommandUninstall
                end
 
                for name in args do
-                       var target_dir = nitpm_lib_dir / name
+
+                       var clean_nitpm_lib_dir = nitpm_lib_dir.simplify_path
+                       var target_dir = clean_nitpm_lib_dir / name
+
+                       # Check validity of the package to delete
+                       target_dir = target_dir.simplify_path
+                       var within_dir = target_dir.has_prefix(clean_nitpm_lib_dir + "/") and
+                               target_dir.length > clean_nitpm_lib_dir.length + 1
+                       var valid_name = name.length > 0 and name.chars.first.is_lower
+                       if not valid_name or not within_dir then
+                               print_error "Package name '{name}' is invalid"
+                               continue
+                       end
 
                        if not target_dir.file_exists or not target_dir.to_path.is_dir then
                                print_error "Package not found"
@@ -359,10 +370,10 @@ redef class Sys
        var opts = new OptionContext
 
        # Help option
-       var opt_help = new OptionBool("Show this help message", "--help", "-h")
+       var opt_help = new OptionBool("Show help message", "-h", "--help")
 
        # Verbose mode option
-       var opt_verbose = new OptionBool("Print more information", "--verbose", "-v")
+       var opt_verbose = new OptionBool("Print more information", "-v", "--verbose")
        private fun verbose: Bool do return opt_verbose.value
 
        # All command line actions, mapped to their short `name`