aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mod_dialback.lua46
1 files changed, 31 insertions, 15 deletions
diff --git a/plugins/mod_dialback.lua b/plugins/mod_dialback.lua
index 189aeb36..9a1e28f9 100644
--- a/plugins/mod_dialback.lua
+++ b/plugins/mod_dialback.lua
@@ -23,8 +23,10 @@ local xmlns_dialback = "jabber:server:dialback";
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 @@ module:add_handler({"s2sin_unauthed", "s2sin"}, "verify", xmlns_dialback,
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 @@ module:add_handler({ "s2sin_unauthed", "s2sin" }, "result", xmlns_dialback,
-- 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 @@ module:add_handler({ "s2sin_unauthed", "s2sin" }, "result", xmlns_dialback,
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 @@ module:add_handler({ "s2sout_unauthed", "s2sout" }, "verify", xmlns_dialback,
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);