core/componentmanager.lua

changeset 2447
9eb539222f22
parent 2323
b7f683c55a44
child 2629
fe207a2c5cef
equal deleted inserted replaced
2446:62aa1b465e05 2447:9eb539222f22
14 local fire_event = require "core.eventmanager".fire_event; 14 local fire_event = require "core.eventmanager".fire_event;
15 local events_new = require "util.events".new; 15 local events_new = require "util.events".new;
16 local st = require "util.stanza"; 16 local st = require "util.stanza";
17 local prosody, hosts = prosody, prosody.hosts; 17 local prosody, hosts = prosody, prosody.hosts;
18 local ssl = ssl; 18 local ssl = ssl;
19 local uuid_gen = require "util.uuid".generate;
19 20
20 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring; 21 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring;
21 22
22 local components = {}; 23 local components = {};
23 24
89 ssl_ctx = ssl.newcontext(prosody.global_ssl_ctx); 90 ssl_ctx = ssl.newcontext(prosody.global_ssl_ctx);
90 ssl_ctx_in = ssl.newcontext(setmetatable({ mode = "server" }, { __index = prosody.global_ssl_ctx })); 91 ssl_ctx_in = ssl.newcontext(setmetatable({ mode = "server" }, { __index = prosody.global_ssl_ctx }));
91 end 92 end
92 end 93 end
93 return { type = "component", host = host, connected = true, s2sout = {}, 94 return { type = "component", host = host, connected = true, s2sout = {},
94 ssl_ctx = ssl_ctx, ssl_ctx_in = ssl_ctx_in, events = events or events_new() }; 95 ssl_ctx = ssl_ctx, ssl_ctx_in = ssl_ctx_in, events = events or events_new(),
96 dialback_secret = configmanager.get(host, "core", "dialback_secret") or uuid_gen() };
95 end 97 end
96 98
97 function register_component(host, component, session) 99 function register_component(host, component, session)
98 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then 100 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then
99 local old_events = hosts[host] and hosts[host].events; 101 local old_events = hosts[host] and hosts[host].events;
100 102
101 components[host] = component; 103 components[host] = component;
102 hosts[host] = session or create_component(host, component, old_events); 104 hosts[host] = session or create_component(host, component, old_events);
103 105
104 -- Add events object if not already one 106 -- Add events object if not already one
105 if not hosts[host].events then 107 if not hosts[host].events then
106 hosts[host].events = old_events or events_new(); 108 hosts[host].events = old_events or events_new();
107 end 109 end
108 110
111 if not hosts[host].dialback_secret then
112 hosts[host].dialback_secret = configmanager.get(host, "core", "dialback_secret") or uuid_gen();
113 end
114
109 -- add to disco_items 115 -- add to disco_items
110 if not(host:find("@", 1, true) or host:find("/", 1, true)) and host:find(".", 1, true) then 116 if not(host:find("@", 1, true) or host:find("/", 1, true)) and host:find(".", 1, true) then
111 disco_items:set(host:sub(host:find(".", 1, true)+1), host, true); 117 disco_items:set(host:sub(host:find(".", 1, true)+1), host, true);
112 end 118 end
113 modulemanager.load(host, "dialback"); 119 modulemanager.load(host, "dialback");

mercurial