Comparison

plugins/mod_register.lua @ 5098:fca8b5946f6f

mod_register: Hijack the session close call to send the final iq reply when deleting
author Kim Alvefur <zash@zash.se>
date Sat, 25 Aug 2012 01:29:38 +0200
parent 5096:50a64fd79c07
child 5165:39bb9344f194
comparison
equal deleted inserted replaced
5097:6c52a7a881cc 5098:fca8b5946f6f
94 :tag("password"):up(); 94 :tag("password"):up();
95 session.send(reply); 95 session.send(reply);
96 else -- stanza.attr.type == "set" 96 else -- stanza.attr.type == "set"
97 if query.tags[1] and query.tags[1].name == "remove" then 97 if query.tags[1] and query.tags[1].name == "remove" then
98 local username, host = session.username, session.host; 98 local username, host = session.username, session.host;
99
100 local old_session_close = session.close;
101 session.close = function(session, ...)
102 session.send(st.reply(stanza));
103 return old_session_close(session, ...);
104 end
99 105
100 local ok, err = usermanager_delete_user(username, host); 106 local ok, err = usermanager_delete_user(username, host);
101 107
102 if not ok then 108 if not ok then
103 module:log("debug", "Removing user account %s@%s failed: %s", username, host, err); 109 module:log("debug", "Removing user account %s@%s failed: %s", username, host, err);
110 session.close = old_session_close;
104 session.send(st.error_reply(stanza, "cancel", "service-unavailable", err)); 111 session.send(st.error_reply(stanza, "cancel", "service-unavailable", err));
105 return true; 112 return true;
106 end 113 end
107 114
108 session.send(st.reply(stanza));
109 module:log("info", "User removed their account: %s@%s", username, host); 115 module:log("info", "User removed their account: %s@%s", username, host);
110 module:fire_event("user-deregistered", { username = username, host = host, source = "mod_register", session = session }); 116 module:fire_event("user-deregistered", { username = username, host = host, source = "mod_register", session = session });
111 else 117 else
112 local username = nodeprep(query:get_child("username"):get_text()); 118 local username = nodeprep(query:get_child("username"):get_text());
113 local password = query:get_child("password"):get_text(); 119 local password = query:get_child("password"):get_text();