author | Matthew Wild <mwild1@gmail.com> |
Wed, 10 Dec 2008 15:44:03 +0000 | |
changeset 615 | 4ae3e81513f3 |
parent 560 | 6c07f15a34f4 |
child 621 | cd2cab5400fc |
permissions | -rw-r--r-- |
615 | 1 |
-- Prosody IM v0.2 |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
2 |
-- Copyright (C) 2008 Matthew Wild |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
3 |
-- Copyright (C) 2008 Waqas Hussain |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
4 |
-- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
5 |
-- This program is free software; you can redistribute it and/or |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
6 |
-- modify it under the terms of the GNU General Public License |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
7 |
-- as published by the Free Software Foundation; either version 2 |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
8 |
-- of the License, or (at your option) any later version. |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
9 |
-- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
10 |
-- This program is distributed in the hope that it will be useful, |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
11 |
-- but WITHOUT ANY WARRANTY; without even the implied warranty of |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
12 |
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
13 |
-- GNU General Public License for more details. |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
14 |
-- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
15 |
-- You should have received a copy of the GNU General Public License |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
16 |
-- along with this program; if not, write to the Free Software |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
17 |
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
18 |
-- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
19 |
|
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
20 |
|
191 | 21 |
|
22 |
local send_s2s = require "core.s2smanager".send_to_host; |
|
23 |
local s2s_make_authenticated = require "core.s2smanager".make_authenticated; |
|
24 |
local s2s_verify_dialback = require "core.s2smanager".verify_dialback; |
|
25 |
||
559
fa4a51fe6442
Remove an incorrect line which I didn't add, and fix the proper way. Corrects the sending of stanzas over unauthed s2sout's. Also fixes mod_dialback to send stanzas and not strings.
Matthew Wild <mwild1@gmail.com>
parents:
519
diff
changeset
|
26 |
local st = require "util.stanza"; |
fa4a51fe6442
Remove an incorrect line which I didn't add, and fix the proper way. Corrects the sending of stanzas over unauthed s2sout's. Also fixes mod_dialback to send stanzas and not strings.
Matthew Wild <mwild1@gmail.com>
parents:
519
diff
changeset
|
27 |
|
191 | 28 |
local log = require "util.logger".init("mod_dialback"); |
29 |
||
30 |
local xmlns_dialback = "jabber:server:dialback"; |
|
31 |
||
438
193f9dd64f17
Bumper commit for the new modulemanager API \o/ Updates all the modules, though some more changes may be in store.
Matthew Wild <mwild1@gmail.com>
parents:
352
diff
changeset
|
32 |
module:add_handler({"s2sin_unauthed", "s2sin"}, "verify", xmlns_dialback, |
219 | 33 |
function (origin, stanza) |
34 |
-- We are being asked to verify the key, to ensure it was generated by us |
|
35 |
log("debug", "verifying dialback key..."); |
|
36 |
local attr = stanza.attr; |
|
37 |
-- FIXME: Grr, ejabberd breaks this one too?? it is black and white in XEP-220 example 34 |
|
38 |
--if attr.from ~= origin.to_host then error("invalid-from"); end |
|
39 |
local type; |
|
40 |
if s2s_verify_dialback(attr.id, attr.from, attr.to, stanza[1]) then |
|
41 |
type = "valid" |
|
42 |
else |
|
43 |
type = "invalid" |
|
44 |
log("warn", "Asked to verify a dialback key that was incorrect. An imposter is claiming to be %s?", attr.to); |
|
45 |
end |
|
559
fa4a51fe6442
Remove an incorrect line which I didn't add, and fix the proper way. Corrects the sending of stanzas over unauthed s2sout's. Also fixes mod_dialback to send stanzas and not strings.
Matthew Wild <mwild1@gmail.com>
parents:
519
diff
changeset
|
46 |
log("debug", "verified dialback key... it is %s", type); |
560
6c07f15a34f4
Fix the last couple of places where we send strings from mod_dialback
Matthew Wild <mwild1@gmail.com>
parents:
559
diff
changeset
|
47 |
origin.sends2s(st.stanza("db:verify", { from = attr.to, to = attr.from, id = attr.id, type = type }):text(stanza[1])); |
219 | 48 |
end); |
191 | 49 |
|
438
193f9dd64f17
Bumper commit for the new modulemanager API \o/ Updates all the modules, though some more changes may be in store.
Matthew Wild <mwild1@gmail.com>
parents:
352
diff
changeset
|
50 |
module:add_handler("s2sin_unauthed", "result", xmlns_dialback, |
219 | 51 |
function (origin, stanza) |
52 |
-- he wants to be identified through dialback |
|
53 |
-- We need to check the key with the Authoritative server |
|
54 |
local attr = stanza.attr; |
|
55 |
local attr = stanza.attr; |
|
56 |
origin.from_host = attr.from; |
|
57 |
origin.to_host = attr.to; |
|
58 |
origin.dialback_key = stanza[1]; |
|
59 |
log("debug", "asking %s if key %s belongs to them", origin.from_host, origin.dialback_key); |
|
60 |
send_s2s(origin.to_host, origin.from_host, |
|
559
fa4a51fe6442
Remove an incorrect line which I didn't add, and fix the proper way. Corrects the sending of stanzas over unauthed s2sout's. Also fixes mod_dialback to send stanzas and not strings.
Matthew Wild <mwild1@gmail.com>
parents:
519
diff
changeset
|
61 |
st.stanza("db:verify", { from = origin.to_host, to = origin.from_host, id = origin.streamid }):text(origin.dialback_key)); |
260
182f0c895676
Now outgoing s2s sessions are associated with their from_host, fixes #15
Matthew Wild <mwild1@gmail.com>
parents:
259
diff
changeset
|
62 |
hosts[origin.to_host].s2sout[origin.from_host].dialback_verifying = origin; |
219 | 63 |
end); |
191 | 64 |
|
438
193f9dd64f17
Bumper commit for the new modulemanager API \o/ Updates all the modules, though some more changes may be in store.
Matthew Wild <mwild1@gmail.com>
parents:
352
diff
changeset
|
65 |
module:add_handler({ "s2sout_unauthed", "s2sout" }, "verify", xmlns_dialback, |
219 | 66 |
function (origin, stanza) |
67 |
if origin.dialback_verifying then |
|
68 |
local valid; |
|
69 |
local attr = stanza.attr; |
|
70 |
if attr.type == "valid" then |
|
71 |
s2s_make_authenticated(origin.dialback_verifying); |
|
72 |
valid = "valid"; |
|
73 |
else |
|
74 |
-- Warn the original connection that is was not verified successfully |
|
75 |
log("warn", "dialback for "..(origin.dialback_verifying.from_host or "(unknown)").." failed"); |
|
76 |
valid = "invalid"; |
|
191 | 77 |
end |
347
fba39fda0879
Don't error if the original s2s connection has closed before we get the dialback result
Matthew Wild <mwild1@gmail.com>
parents:
260
diff
changeset
|
78 |
if not origin.dialback_verifying.sends2s then |
348
aab28eacd84e
Show which session got disconnected in log message
Matthew Wild <mwild1@gmail.com>
parents:
347
diff
changeset
|
79 |
log("warn", "Incoming s2s session %s was closed in the meantime, so we can't notify it of the db result", tostring(origin.dialback_verifying):match("%w+$")); |
347
fba39fda0879
Don't error if the original s2s connection has closed before we get the dialback result
Matthew Wild <mwild1@gmail.com>
parents:
260
diff
changeset
|
80 |
else |
560
6c07f15a34f4
Fix the last couple of places where we send strings from mod_dialback
Matthew Wild <mwild1@gmail.com>
parents:
559
diff
changeset
|
81 |
origin.dialback_verifying.sends2s( |
6c07f15a34f4
Fix the last couple of places where we send strings from mod_dialback
Matthew Wild <mwild1@gmail.com>
parents:
559
diff
changeset
|
82 |
st.stanza("db:result", { from = attr.to, to = attr.from, id = attr.id, type = valid }) |
6c07f15a34f4
Fix the last couple of places where we send strings from mod_dialback
Matthew Wild <mwild1@gmail.com>
parents:
559
diff
changeset
|
83 |
:text(origin.dialback_verifying.dialback_key)); |
347
fba39fda0879
Don't error if the original s2s connection has closed before we get the dialback result
Matthew Wild <mwild1@gmail.com>
parents:
260
diff
changeset
|
84 |
end |
219 | 85 |
end |
86 |
end); |
|
191 | 87 |
|
438
193f9dd64f17
Bumper commit for the new modulemanager API \o/ Updates all the modules, though some more changes may be in store.
Matthew Wild <mwild1@gmail.com>
parents:
352
diff
changeset
|
88 |
module:add_handler({ "s2sout_unauthed", "s2sout" }, "result", xmlns_dialback, |
219 | 89 |
function (origin, stanza) |
90 |
if stanza.attr.type == "valid" then |
|
91 |
s2s_make_authenticated(origin); |
|
92 |
else |
|
93 |
-- FIXME |
|
94 |
error("dialback failed!"); |
|
95 |
end |
|
96 |
end); |