configmanager: Add parsers() method to return an array of supported config formats
[prosody.git] / prosodyctl
index 8f79046f9fd08b9a5576b696d6f7cfabe98a7665..e095ba398f93029fabd44a0b4c1b1083000811c1 100755 (executable)
@@ -137,18 +137,33 @@ function show_usage(usage, desc)
 end
 
 local function getchar(n)
-       os.execute("stty raw -echo");
-       local ok, char = pcall(io.read, n or 1);
-       os.execute("stty sane");
+       local stty_ret = os.execute("stty raw -echo 2>/dev/null");
+       local ok, char;
+       if stty_ret == 0 then
+               ok, char = pcall(io.read, n or 1);
+               os.execute("stty sane");
+       else
+               ok, char = pcall(io.read, "*l");
+               if ok then
+                       char = char:sub(1, n or 1);
+               end
+       end
        if ok then
                return char;
        end
 end
        
 local function getpass()
-       os.execute("stty -echo");
+       local stty_ret = os.execute("stty -echo 2>/dev/null");
+       if stty_ret ~= 0 then
+               io.write("\027[08m"); -- ANSI 'hidden' text attribute
+       end
        local ok, pass = pcall(io.read, "*l");
-       os.execute("stty sane");
+       if stty_ret == 0 then
+               os.execute("stty sane");
+       else
+               io.write("\027[00m");
+       end
        io.write("\n");
        if ok then
                return pass;
@@ -462,14 +477,18 @@ function commands.unregister(arg)
        return 1;
 end
 
+local http_errors = {
+       [404] = "Plugin not found, did you type the address correctly?"
+       };
+
 function commands.addplugin(arg)
        local url = arg[1];
        if url:match("^http://") then
                local http = require "socket.http";
                show_message("Fetching...");
                local code, err = http.request(url);
-               if not code then
-                       show_message("Failed: "..err);
+               if not code or not tostring(err):match("^[23]") then
+                       show_message("Failed: "..(http_errors[err] or ("HTTP error "..err)));
                        return 1;
                end
                if url:match("%.lua$") then