Mercurial > prosody-modules
comparison mod_admin_web/admin_web/mod_admin_web.lua @ 1646:95b8b1f9a882
mod_admin_web: Cleanup
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Fri, 03 Apr 2015 23:54:03 +0200 |
| parents | 7dbde05b48a9 |
| children | db8b256f51ff |
comparison
equal
deleted
inserted
replaced
| 1645:9a862059bd97 | 1646:95b8b1f9a882 |
|---|---|
| 21 local uuid_generate = require "util.uuid".generate; | 21 local uuid_generate = require "util.uuid".generate; |
| 22 local is_admin = require "core.usermanager".is_admin; | 22 local is_admin = require "core.usermanager".is_admin; |
| 23 local pubsub = require "util.pubsub"; | 23 local pubsub = require "util.pubsub"; |
| 24 local jid_bare = require "util.jid".bare; | 24 local jid_bare = require "util.jid".bare; |
| 25 | 25 |
| 26 local hosts = prosody.hosts; | |
| 27 local incoming_s2s = prosody.incoming_s2s; | |
| 28 | |
| 26 module:set_global(); | 29 module:set_global(); |
| 27 | 30 |
| 28 local service = {}; | 31 local service = {}; |
| 29 | 32 |
| 30 local xmlns_adminsub = "http://prosody.im/adminsub"; | 33 local xmlns_adminsub = "http://prosody.im/adminsub"; |
| 31 local xmlns_c2s_session = "http://prosody.im/streams/c2s"; | 34 local xmlns_c2s_session = "http://prosody.im/streams/c2s"; |
| 32 local xmlns_s2s_session = "http://prosody.im/streams/s2s"; | 35 local xmlns_s2s_session = "http://prosody.im/streams/s2s"; |
| 33 | 36 |
| 34 local idmap = {}; | 37 local idmap = {}; |
| 35 | 38 |
| 36 function add_client(session, host) | 39 local function add_client(session, host) |
| 37 local name = session.full_jid; | 40 local name = session.full_jid; |
| 38 local id = idmap[name]; | 41 local id = idmap[name]; |
| 39 if not id then | 42 if not id then |
| 40 id = uuid_generate(); | 43 id = uuid_generate(); |
| 41 idmap[name] = id; | 44 idmap[name] = id; |
| 54 end | 57 end |
| 55 service[host]:publish(xmlns_c2s_session, host, id, item); | 58 service[host]:publish(xmlns_c2s_session, host, id, item); |
| 56 module:log("debug", "Added client " .. name); | 59 module:log("debug", "Added client " .. name); |
| 57 end | 60 end |
| 58 | 61 |
| 59 function del_client(session, host) | 62 local function del_client(session, host) |
| 60 local name = session.full_jid; | 63 local name = session.full_jid; |
| 61 local id = idmap[name]; | 64 local id = idmap[name]; |
| 62 if id then | 65 if id then |
| 63 local notifier = st.stanza("retract", { id = id }); | 66 local notifier = st.stanza("retract", { id = id }); |
| 64 service[host]:retract(xmlns_c2s_session, host, id, notifier); | 67 service[host]:retract(xmlns_c2s_session, host, id, notifier); |
| 65 end | 68 end |
| 66 end | 69 end |
| 67 | 70 |
| 68 function add_host(session, type, host) | 71 local function add_host(session, type, host) |
| 69 local name = (type == "out" and session.to_host) or (type == "in" and session.from_host); | 72 local name = (type == "out" and session.to_host) or (type == "in" and session.from_host); |
| 70 local id = idmap[name.."_"..type]; | 73 local id = idmap[name.."_"..type]; |
| 71 if not id then | 74 if not id then |
| 72 id = uuid_generate(); | 75 id = uuid_generate(); |
| 73 idmap[name.."_"..type] = id; | 76 idmap[name.."_"..type] = id; |
| 94 end | 97 end |
| 95 service[host]:publish(xmlns_s2s_session, host, id, item); | 98 service[host]:publish(xmlns_s2s_session, host, id, item); |
| 96 module:log("debug", "Added host " .. name .. " s2s" .. type); | 99 module:log("debug", "Added host " .. name .. " s2s" .. type); |
| 97 end | 100 end |
| 98 | 101 |
| 99 function del_host(session, type, host) | 102 local function del_host(session, type, host) |
| 100 local name = (type == "out" and session.to_host) or (type == "in" and session.from_host); | 103 local name = (type == "out" and session.to_host) or (type == "in" and session.from_host); |
| 101 local id = idmap[name.."_"..type]; | 104 local id = idmap[name.."_"..type]; |
| 102 if id then | 105 if id then |
| 103 local notifier = st.stanza("retract", { id = id }); | 106 local notifier = st.stanza("retract", { id = id }); |
| 104 service[host]:retract(xmlns_s2s_session, host, id, notifier); | 107 service[host]:retract(xmlns_s2s_session, host, id, notifier); |
| 108 end | |
| 109 end | |
| 110 | |
| 111 local function get_affiliation(jid, host) | |
| 112 local bare_jid = jid_bare(jid); | |
| 113 if is_admin(bare_jid, host) then | |
| 114 return "member"; | |
| 115 else | |
| 116 return "none"; | |
| 105 end | 117 end |
| 106 end | 118 end |
| 107 | 119 |
| 108 function module.add_host(module) | 120 function module.add_host(module) |
| 109 -- Dependencies | 121 -- Dependencies |
| 141 message.attr.to = jid; | 153 message.attr.to = jid; |
| 142 module:send(message); | 154 module:send(message); |
| 143 end | 155 end |
| 144 end | 156 end |
| 145 | 157 |
| 146 local ok, err; | |
| 147 service[module.host] = pubsub.new({ | 158 service[module.host] = pubsub.new({ |
| 148 broadcaster = simple_broadcast; | 159 broadcaster = simple_broadcast; |
| 149 normalize_jid = jid_bare; | 160 normalize_jid = jid_bare; |
| 150 get_affiliation = function(jid) return get_affiliation(jid, module.host) end; | 161 get_affiliation = function(jid) return get_affiliation(jid, module.host) end; |
| 151 capabilities = { | 162 capabilities = { |
| 196 }; | 207 }; |
| 197 }; | 208 }; |
| 198 }); | 209 }); |
| 199 | 210 |
| 200 -- Create node for s2s sessions | 211 -- Create node for s2s sessions |
| 201 ok, err = service[module.host]:create(xmlns_s2s_session, true); | 212 local ok, err = service[module.host]:create(xmlns_s2s_session, true); |
| 202 if not ok then | 213 if not ok then |
| 203 module:log("warn", "Could not create node " .. xmlns_s2s_session .. ": " .. tostring(err)); | 214 module:log("warn", "Could not create node " .. xmlns_s2s_session .. ": " .. tostring(err)); |
| 204 else | 215 else |
| 205 service[module.host]:set_affiliation(xmlns_s2s_session, true, module.host, "owner") | 216 service[module.host]:set_affiliation(xmlns_s2s_session, true, module.host, "owner") |
| 206 end | 217 end |
| 207 | 218 |
| 208 -- Add outgoing s2s sessions | 219 -- Add outgoing s2s sessions |
| 209 for remotehost, session in pairs(hosts[module.host].s2sout) do | 220 for _, session in pairs(hosts[module.host].s2sout) do |
| 210 if session.type ~= "s2sout_unauthed" then | 221 if session.type ~= "s2sout_unauthed" then |
| 211 add_host(session, "out", module.host); | 222 add_host(session, "out", module.host); |
| 212 end | 223 end |
| 213 end | 224 end |
| 214 | 225 |
| 226 else | 237 else |
| 227 service[module.host]:set_affiliation(xmlns_c2s_session, true, module.host, "owner") | 238 service[module.host]:set_affiliation(xmlns_c2s_session, true, module.host, "owner") |
| 228 end | 239 end |
| 229 | 240 |
| 230 -- Add c2s sessions | 241 -- Add c2s sessions |
| 231 for username, user in pairs(hosts[module.host].sessions or {}) do | 242 for _, user in pairs(hosts[module.host].sessions or {}) do |
| 232 for resource, session in pairs(user.sessions or {}) do | 243 for _, session in pairs(user.sessions or {}) do |
| 233 add_client(session, module.host); | 244 add_client(session, module.host); |
| 234 end | 245 end |
| 235 end | 246 end |
| 236 | 247 |
| 237 -- Register adminsub handler | 248 -- Register adminsub handler |
| 316 | 327 |
| 317 module:hook("s2sin-destroyed", function(event) | 328 module:hook("s2sin-destroyed", function(event) |
| 318 del_host(event.session, "in", module.host); | 329 del_host(event.session, "in", module.host); |
| 319 end); | 330 end); |
| 320 end | 331 end |
| 321 | |
| 322 function get_affiliation(jid, host) | |
| 323 local bare_jid = jid_bare(jid); | |
| 324 if is_admin(bare_jid, host) then | |
| 325 return "member"; | |
| 326 else | |
| 327 return "none"; | |
| 328 end | |
| 329 end |
