Comparison

plugins/mod_component.lua @ 3531:f41e1cfe92f4

mod_component: Updated to use the new events API.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 16 Oct 2010 06:38:38 +0500
parent 3503:85e511e01d3c
child 3540:bc139431830b
comparison
equal deleted inserted replaced
3530:73909cca846c 3531:f41e1cfe92f4
21 local st = require "util.stanza"; 21 local st = require "util.stanza";
22 22
23 local log = module._log; 23 local log = module._log;
24 24
25 --- Handle authentication attempts by components 25 --- Handle authentication attempts by components
26 function handle_component_auth(session, stanza) 26 function handle_component_auth(event)
27 local session, stanza = event.origin, event.stanza;
28
29 if session.type ~= "component" then return; end
30
27 log("info", "Handling component auth"); 31 log("info", "Handling component auth");
28 if (not session.host) or #stanza.tags > 0 then 32 if (not session.host) or #stanza.tags > 0 then
29 (session.log or log)("warn", "Component handshake invalid"); 33 (session.log or log)("warn", "Component handshake invalid");
30 session:close("not-authorized"); 34 session:close("not-authorized");
31 return; 35 return true;
32 end 36 end
33 37
34 local secret = config.get(session.host, "core", "component_secret"); 38 local secret = config.get(session.host, "core", "component_secret");
35 if not secret then 39 if not secret then
36 (session.log or log)("warn", "Component attempted to identify as %s, but component_secret is not set", session.host); 40 (session.log or log)("warn", "Component attempted to identify as %s, but component_secret is not set", session.host);
37 session:close("not-authorized"); 41 session:close("not-authorized");
38 return; 42 return true;
39 end 43 end
40 44
41 local supplied_token = t_concat(stanza); 45 local supplied_token = t_concat(stanza);
42 local calculated_token = sha1(session.streamid..secret, true); 46 local calculated_token = sha1(session.streamid..secret, true);
43 if supplied_token:lower() ~= calculated_token:lower() then 47 if supplied_token:lower() ~= calculated_token:lower() then
44 log("info", "Component for %s authentication failed", session.host); 48 log("info", "Component for %s authentication failed", session.host);
45 session:close{ condition = "not-authorized", text = "Given token does not match calculated token" }; 49 session:close{ condition = "not-authorized", text = "Given token does not match calculated token" };
46 return; 50 return true;
47 end 51 end
48 52
49 53
50 -- Authenticated now 54 -- Authenticated now
51 log("info", "Component authenticated: %s", session.host); 55 log("info", "Component authenticated: %s", session.host);
67 log("error", "Multiple components bound to the same address, first one wins (TODO: Implement stanza distribution)"); 71 log("error", "Multiple components bound to the same address, first one wins (TODO: Implement stanza distribution)");
68 end 72 end
69 73
70 -- Signal successful authentication 74 -- Signal successful authentication
71 session.send(st.stanza("handshake")); 75 session.send(st.stanza("handshake"));
76 return true;
72 end 77 end
73 78
74 module:add_handler("component", "handshake", "jabber:component:accept", handle_component_auth); 79 module:hook("stanza/jabber:component:accept:handshake", handle_component_auth);