Changeset

3527:59cdb9166bd0

mod_legacyauth: Updated to use the new events API.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 16 Oct 2010 05:41:49 +0500
parents 3526:69a8c7e635c5
children 3528:5cdcd7ee6ef5
files plugins/mod_legacyauth.lua
diffstat 1 files changed, 43 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_legacyauth.lua	Sat Oct 16 05:31:40 2010 +0500
+++ b/plugins/mod_legacyauth.lua	Sat Oct 16 05:41:49 2010 +0500
@@ -29,47 +29,48 @@
 	end
 end);
 
-module:add_iq_handler("c2s_unauthed", "jabber:iq:auth", 
-		function (session, stanza)
-			if secure_auth_only and not session.secure then
-				session.send(st.error_reply(stanza, "modify", "not-acceptable", "Encryption (SSL or TLS) is required to connect to this server"));
-				return true;
-			end
-			
-			local username = stanza.tags[1]:child_with_name("username");
-			local password = stanza.tags[1]:child_with_name("password");
-			local resource = stanza.tags[1]:child_with_name("resource");
-			if not (username and password and resource) then
-				local reply = st.reply(stanza);
-				session.send(reply:query("jabber:iq:auth")
-					:tag("username"):up()
-					:tag("password"):up()
-					:tag("resource"):up());
-			else
-				username, password, resource = t_concat(username), t_concat(password), t_concat(resource);
-				username = nodeprep(username);
-				resource = resourceprep(resource)
-				local reply = st.reply(stanza);
-				if usermanager.test_password(username, session.host, password) then
-					-- Authentication successful!
-					local success, err = sessionmanager.make_authenticated(session, username);
-					if success then
-						local err_type, err_msg;
-						success, err_type, err, err_msg = sessionmanager.bind_resource(session, resource);
-						if not success then
-							session.send(st.error_reply(stanza, err_type, err, err_msg));
-							session.username, session.type = nil, "c2s_unauthed"; -- FIXME should this be placed in sessionmanager?
-							return true;
-						elseif resource ~= session.resource then -- server changed resource, not supported by legacy auth
-							session.send(st.error_reply(stanza, "cancel", "conflict", "The requested resource could not be assigned to this session."));
-							session:close(); -- FIXME undo resource bind and auth instead of closing the session?
-							return true;
-						end
-					end
-					session.send(st.reply(stanza));
-				else
-					session.send(st.error_reply(stanza, "auth", "not-authorized"));
+module:hook("stanza/iq/jabber:iq:auth:query", function(event)
+	local session, stanza = event.origin, event.stanza;
+
+	if secure_auth_only and not session.secure then
+		session.send(st.error_reply(stanza, "modify", "not-acceptable", "Encryption (SSL or TLS) is required to connect to this server"));
+		return true;
+	end
+	
+	local username = stanza.tags[1]:child_with_name("username");
+	local password = stanza.tags[1]:child_with_name("password");
+	local resource = stanza.tags[1]:child_with_name("resource");
+	if not (username and password and resource) then
+		local reply = st.reply(stanza);
+		session.send(reply:query("jabber:iq:auth")
+			:tag("username"):up()
+			:tag("password"):up()
+			:tag("resource"):up());
+	else
+		username, password, resource = t_concat(username), t_concat(password), t_concat(resource);
+		username = nodeprep(username);
+		resource = resourceprep(resource)
+		local reply = st.reply(stanza);
+		if usermanager.test_password(username, session.host, password) then
+			-- Authentication successful!
+			local success, err = sessionmanager.make_authenticated(session, username);
+			if success then
+				local err_type, err_msg;
+				success, err_type, err, err_msg = sessionmanager.bind_resource(session, resource);
+				if not success then
+					session.send(st.error_reply(stanza, err_type, err, err_msg));
+					session.username, session.type = nil, "c2s_unauthed"; -- FIXME should this be placed in sessionmanager?
+					return true;
+				elseif resource ~= session.resource then -- server changed resource, not supported by legacy auth
+					session.send(st.error_reply(stanza, "cancel", "conflict", "The requested resource could not be assigned to this session."));
+					session:close(); -- FIXME undo resource bind and auth instead of closing the session?
+					return true;
 				end
 			end
-			return true;
-		end);
+			session.send(st.reply(stanza));
+		else
+			session.send(st.error_reply(stanza, "auth", "not-authorized"));
+		end
+	end
+	return true;
+end);