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"); |