prosodyctl: Nicer errors when addplugin command fails
[prosody.git] / prosodyctl
index 522ebde9a3e62e73c006f6eb52ed9ac6a92f92d9..575948a1745833eb7ef6d9443bd37469efa486ca 100755 (executable)
@@ -462,6 +462,32 @@ 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 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
+                       local ok, err = datamanager.store(url:match("/mod_([^/]+)$"), "*", "plugins", {code});
+                       if not ok then
+                               show_message("Failed to save to data store: "..err);
+                               return 1;
+                       end
+               end
+               show_message("Saved. Don't forget to load the module using the config file or admin console!");
+       else
+               show_message("Sorry, I don't understand how to fetch plugins from there.");
+       end
+end
 
 ---------------------