plugins/mod_dialback.lua

changeset 3533
0385b9f29049
parent 2923
b7049746bd29
child 3534
c68590b13a6d
--- a/plugins/mod_dialback.lua	Sat Oct 16 06:53:59 2010 +0500
+++ b/plugins/mod_dialback.lua	Sat Oct 16 07:06:16 2010 +0500
@@ -23,8 +23,10 @@
 
 local dialback_requests = setmetatable({}, { __mode = 'v' });
 
-module:add_handler({"s2sin_unauthed", "s2sin"}, "verify", xmlns_dialback,
-	function (origin, stanza)
+module:hook("stanza/jabber:server:dialback:verify", function(event)
+	local origin, stanza = event.origin, event.stanza;
+	
+	if origin.type == "s2sin_unauthed" or origin.type == "s2sin" then
 		-- We are being asked to verify the key, to ensure it was generated by us
 		origin.log("debug", "verifying that dialback key is ours...");
 		local attr = stanza.attr;
@@ -39,10 +41,14 @@
 		end
 		origin.log("debug", "verified dialback key... it is %s", type);
 		origin.sends2s(st.stanza("db:verify", { from = attr.to, to = attr.from, id = attr.id, type = type }):text(stanza[1]));
-	end);
+		return true;
+	end
+end);
 
-module:add_handler({ "s2sin_unauthed", "s2sin" }, "result", xmlns_dialback,
-	function (origin, stanza)
+module:hook("stanza/jabber:server:dialback:result", function(event)
+	local origin, stanza = event.origin, event.stanza;
+	
+	if origin.type == "s2sin_unauthed" or origin.type == "s2sin" then
 		-- he wants to be identified through dialback
 		-- We need to check the key with the Authoritative server
 		local attr = stanza.attr;
@@ -52,7 +58,7 @@
 			-- Not a host that we serve
 			origin.log("info", "%s tried to connect to %s, which we don't serve", attr.from, attr.to);
 			origin:close("host-unknown");
-			return;
+			return true;
 		end
 		
 		dialback_requests[attr.from] = origin;
@@ -69,10 +75,14 @@
 		origin.log("debug", "asking %s if key %s belongs to them", attr.from, stanza[1]);
 		send_s2s(attr.to, attr.from,
 			st.stanza("db:verify", { from = attr.to, to = attr.from, id = origin.streamid }):text(stanza[1]));
-	end);
+		return true;
+	end
+end);
 
-module:add_handler({ "s2sout_unauthed", "s2sout" }, "verify", xmlns_dialback,
-	function (origin, stanza)
+module:hook("stanza/jabber:server:dialback:verify", function(event)
+	local origin, stanza = event.origin, event.stanza;
+	
+	if origin.type == "s2sout_unauthed" or origin.type == "s2sout" then
 		local attr = stanza.attr;
 		local dialback_verifying = dialback_requests[attr.from];
 		if dialback_verifying then
@@ -94,27 +104,33 @@
 			end
 			dialback_requests[attr.from] = nil;
 		end
-	end);
+		return true;
+	end
+end);
 
-module:add_handler({ "s2sout_unauthed", "s2sout" }, "result", xmlns_dialback,
-	function (origin, stanza)
+module:hook("stanza/jabber:server:dialback:result", function(event)
+	local origin, stanza = event.origin, event.stanza;
+	
+	if origin.type == "s2sout_unauthed" or origin.type == "s2sout" then
 		-- Remote server is telling us whether we passed dialback
 		
 		local attr = stanza.attr;
 		if not hosts[attr.to] then
 			origin:close("host-unknown");
-			return;
+			return true;
 		elseif hosts[attr.to].s2sout[attr.from] ~= origin then
 			-- This isn't right
 			origin:close("invalid-id");
-			return;
+			return true;
 		end
 		if stanza.attr.type == "valid" then
 			s2s_make_authenticated(origin, attr.from);
 		else
 			s2s_destroy_session(origin)
 		end
-	end);
+		return true;
+	end
+end);
 
 module:hook_stanza(xmlns_stream, "features", function (origin, stanza)
 		s2s_initiate_dialback(origin);

mercurial