mod_s2s: Do not include xmlns:db declaration in stream header if mod_dialback is...
[prosody.git] / plugins / mod_register.lua
index a621b9a98d290d6a58d6ea614c6232361e5e9eff..b3abd394159c1660b5a217c393c663de8ccd4d04 100644 (file)
@@ -96,16 +96,22 @@ local function handle_registration_stanza(event)
        else -- stanza.attr.type == "set"
                if query.tags[1] and query.tags[1].name == "remove" then
                        local username, host = session.username, session.host;
+
+                       local old_session_close = session.close;
+                       session.close = function(session, ...)
+                               session.send(st.reply(stanza));
+                               return old_session_close(session, ...);
+                       end
                        
                        local ok, err = usermanager_delete_user(username, host);
                        
                        if not ok then
                                module:log("debug", "Removing user account %s@%s failed: %s", username, host, err);
+                               session.close = old_session_close;
                                session.send(st.error_reply(stanza, "cancel", "service-unavailable", err));
                                return true;
                        end
                        
-                       session.send(st.reply(stanza));
                        module:log("info", "User removed their account: %s@%s", username, host);
                        module:fire_event("user-deregistered", { username = username, host = host, source = "mod_register", session = session });
                else
@@ -217,6 +223,12 @@ module:hook("stanza/iq/jabber:iq:register:query", function(event)
                                        local host = module.host;
                                        if not username or username == "" then
                                                session.send(st.error_reply(stanza, "modify", "not-acceptable", "The requested username is invalid."));
+                                               return true;
+                                       end
+                                       local user = { username = username , host = host, allowed = true }
+                                       module:fire_event("user-registering", user);
+                                       if not user.allowed then
+                                               session.send(st.error_reply(stanza, "modify", "not-acceptable", "The requested username is forbidden."));
                                        elseif usermanager_user_exists(username, host) then
                                                session.send(st.error_reply(stanza, "cancel", "conflict", "The requested username already exists."));
                                        else