annotate mod_admin_web/admin_web/mod_admin_web.lua @ 761:48f8b312a509

mod_admin_web: Replace core_post_stanza() with module:send()
author Florian Zeitz <florob@babelmonkeys.de>
date Wed, 01 Aug 2012 02:33:43 +0200
parents 9d5731af2c27
children 7076f58b9f48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
1 -- Copyright (C) 2010 Florian Zeitz
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
2 --
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
3 -- This file is MIT/X11 licensed. Please see the
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
4 -- COPYING file in the source package for more information.
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
5 --
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
6
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
7 -- <session xmlns="http://prosody.im/streams/c2s" jid="alice@example.com/brussels">
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
8 -- <encrypted/>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
9 -- <compressed/>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
10 -- </session>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
11
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
12 -- <session xmlns="http://prosody.im/streams/s2s" jid="example.com">
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
13 -- <encrypted>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
14 -- <valid/> / <invalid/>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
15 -- </encrypted>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
16 -- <compressed/>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
17 -- <in/> / <out/>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
18 -- </session>
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
19
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
20 local st = require "util.stanza";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
21 local uuid_generate = require "util.uuid".generate;
696
da69b65288e4 mod_admin_web: Correctly import usermanager
Florian Zeitz <florob@babelmonkeys.de>
parents: 663
diff changeset
22 local is_admin = require "core.usermanager".is_admin;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
23 local pubsub = require "util.pubsub";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
24 local jid_bare = require "util.jid".bare;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
25 local lfs = require "lfs";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
26 local open = io.open;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
27 local stat = lfs.attributes;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
28
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
29 module:set_global();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
30
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
31 local service = {};
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
32
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
33 local http_base = module.path:gsub("/[^/]+$","") .. "/www_files/";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
34
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
35 local xmlns_adminsub = "http://prosody.im/adminsub";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
36 local xmlns_c2s_session = "http://prosody.im/streams/c2s";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
37 local xmlns_s2s_session = "http://prosody.im/streams/s2s";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
38
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
39 local mime_map = {
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
40 html = "text/html";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
41 xml = "text/xml";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
42 js = "text/javascript";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
43 css = "text/css";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
44 };
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
45
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
46 local idmap = {};
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
47
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
48 function add_client(session, host)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
49 local name = session.full_jid;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
50 local id = idmap[name];
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
51 if not id then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
52 id = uuid_generate();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
53 idmap[name] = id;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
54 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
55 local item = st.stanza("item", { id = id }):tag("session", {xmlns = xmlns_c2s_session, jid = name}):up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
56 if session.secure then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
57 item:tag("encrypted"):up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
58 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
59 if session.compressed then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
60 item:tag("compressed"):up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
61 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
62 service[host]:publish(xmlns_c2s_session, host, id, item);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
63 module:log("debug", "Added client " .. name);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
64 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
65
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
66 function del_client(session, host)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
67 local name = session.full_jid;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
68 local id = idmap[name];
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
69 if id then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
70 local notifier = st.stanza("retract", { id = id });
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
71 service[host]:retract(xmlns_c2s_session, host, id, notifier);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
72 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
73 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
74
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
75 function add_host(session, type, host)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
76 local name = (type == "out" and session.to_host) or (type == "in" and session.from_host);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
77 local id = idmap[name.."_"..type];
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
78 if not id then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
79 id = uuid_generate();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
80 idmap[name.."_"..type] = id;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
81 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
82 local item = st.stanza("item", { id = id }):tag("session", {xmlns = xmlns_s2s_session, jid = name})
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
83 :tag(type):up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
84 if session.secure then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
85 if session.cert_identity_status == "valid" then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
86 item:tag("encrypted"):tag("valid"):up():up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
87 else
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
88 item:tag("encrypted"):tag("invalid"):up():up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
89 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
90 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
91 if session.compressed then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
92 item:tag("compressed"):up();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
93 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
94 service[host]:publish(xmlns_s2s_session, host, id, item);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
95 module:log("debug", "Added host " .. name .. " s2s" .. type);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
96 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
97
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
98 function del_host(session, type, host)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
99 local name = (type == "out" and session.to_host) or (type == "in" and session.from_host);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
100 local id = idmap[name.."_"..type];
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
101 if id then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
102 local notifier = st.stanza("retract", { id = id });
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
103 service[host]:retract(xmlns_s2s_session, host, id, notifier);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
104 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
105 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
106
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
107 function serve_file(event, path)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
108 local full_path = http_base .. path;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
109
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
110 if stat(full_path, "mode") == "directory" then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
111 if stat(full_path.."/index.html", "mode") == "file" then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
112 return serve_file(event, path.."/index.html");
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
113 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
114 return 403;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
115 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
116
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
117 local f, err = open(full_path, "rb");
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
118 if not f then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
119 return 404;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
120 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
121
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
122 local data = f:read("*a");
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
123 f:close();
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
124 if not data then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
125 return 403;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
126 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
127
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
128 local ext = path:match("%.([^.]*)$");
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
129 event.response.headers.content_type = mime_map[ext]; -- Content-Type should be nil when not known
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
130 return data;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
131 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
132
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
133 function module.add_host(module)
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
134 -- Setup HTTP server
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
135 module:depends("http");
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
136 module:provides("http", {
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
137 name = "admin";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
138 route = {
637
210f4ce2697c mod_admin_web: HTTP methods are now required
Florian Zeitz <florob@babelmonkeys.de>
parents: 636
diff changeset
139 ["GET"] = function(event)
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
140 event.response.headers.location = event.request.path .. "/";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
141 return 301;
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
142 end;
637
210f4ce2697c mod_admin_web: HTTP methods are now required
Florian Zeitz <florob@babelmonkeys.de>
parents: 636
diff changeset
143 ["GET /*"] = serve_file;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
144 }
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
145 });
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
146
761
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
147 local function simple_broadcast(node, jids, item)
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
148 item = st.clone(item);
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
149 item.attr.xmlns = nil; -- Clear the pubsub namespace
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
150 local message = st.message({ from = module.host, type = "headline" })
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
151 :tag("event", { xmlns = xmlns_adminsub .. "#event" })
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
152 :tag("items", { node = node })
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
153 :add_child(item);
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
154 for jid in pairs(jids) do
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
155 module:log("debug", "Sending notification to %s", jid);
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
156 message.attr.to = jid;
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
157 module:send(message);
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
158 end
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
159 end
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
160
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
161
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
162 -- Setup adminsub service
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
163 local ok, err;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
164 service[module.host] = pubsub.new({
761
48f8b312a509 mod_admin_web: Replace core_post_stanza() with module:send()
Florian Zeitz <florob@babelmonkeys.de>
parents: 753
diff changeset
165 broadcaster = simple_broadcast;
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
166 normalize_jid = jid_bare;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
167 get_affiliation = function(jid) return get_affiliation(jid, module.host) end;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
168 capabilities = {
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
169 member = {
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
170 create = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
171 publish = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
172 retract = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
173 get_nodes = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
174
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
175 subscribe = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
176 unsubscribe = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
177 get_subscription = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
178 get_subscriptions = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
179 get_items = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
180
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
181 subscribe_other = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
182 unsubscribe_other = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
183 get_subscription_other = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
184 get_subscriptions_other = false;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
185
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
186 be_subscribed = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
187 be_unsubscribed = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
188
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
189 set_affiliation = false;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
190 };
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
191
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
192 owner = {
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
193 create = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
194 publish = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
195 retract = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
196 get_nodes = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
197
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
198 subscribe = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
199 unsubscribe = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
200 get_subscription = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
201 get_subscriptions = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
202 get_items = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
203
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
204 subscribe_other = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
205 unsubscribe_other = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
206 get_subscription_other = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
207 get_subscriptions_other = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
208
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
209 be_subscribed = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
210 be_unsubscribed = true;
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
211
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
212 set_affiliation = true;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
213 };
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
214 };
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
215 });
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
216
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
217 -- Create node for s2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
218 ok, err = service[module.host]:create(xmlns_s2s_session, true);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
219 if not ok then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
220 module:log("warn", "Could not create node " .. xmlns_s2s_session .. ": " .. tostring(err));
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
221 else
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
222 service[module.host]:set_affiliation(xmlns_s2s_session, true, module.host, "owner")
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
223 end
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
224
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
225 -- Add outgoing s2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
226 for remotehost, session in pairs(hosts[module.host].s2sout) do
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
227 if session.type ~= "s2sout_unauthed" then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
228 add_host(session, "out", module.host);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
229 end
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
230 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
231
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
232 -- Add incomming s2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
233 for session in pairs(incoming_s2s) do
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
234 if session.to_host == module.host then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
235 add_host(session, "in", module.host);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
236 end
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
237 end
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
238
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
239 -- Create node for c2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
240 ok, err = service[module.host]:create(xmlns_c2s_session, true);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
241 if not ok then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
242 module:log("warn", "Could not create node " .. xmlns_c2s_session .. ": " .. tostring(err));
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
243 else
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
244 service[module.host]:set_affiliation(xmlns_c2s_session, true, module.host, "owner")
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
245 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
246
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
247 -- Add c2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
248 for username, user in pairs(hosts[module.host].sessions or {}) do
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
249 for resource, session in pairs(user.sessions or {}) do
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
250 add_client(session, module.host);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
251 end
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
252 end
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
253
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
254 -- Register adminsub handler
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
255 module:hook("iq/host/http://prosody.im/adminsub:adminsub", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
256 local origin, stanza = event.origin, event.stanza;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
257 local adminsub = stanza.tags[1];
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
258 local action = adminsub.tags[1];
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
259 local reply;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
260 if action.name == "subscribe" then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
261 local ok, ret = service[module.host]:add_subscription(action.attr.node, stanza.attr.from, stanza.attr.from);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
262 if ok then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
263 reply = st.reply(stanza)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
264 :tag("adminsub", { xmlns = xmlns_adminsub });
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
265 else
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
266 reply = st.error_reply(stanza, "cancel", ret);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
267 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
268 elseif action.name == "unsubscribe" then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
269 local ok, ret = service[module.host]:remove_subscription(action.attr.node, stanza.attr.from, stanza.attr.from);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
270 if ok then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
271 reply = st.reply(stanza)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
272 :tag("adminsub", { xmlns = xmlns_adminsub });
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
273 else
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
274 reply = st.error_reply(stanza, "cancel", ret);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
275 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
276 elseif action.name == "items" then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
277 local node = action.attr.node;
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
278 local ok, ret = service[module.host]:get_items(node, stanza.attr.from);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
279 if not ok then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
280 return origin.send(st.error_reply(stanza, "cancel", ret));
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
281 end
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
282
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
283 local data = st.stanza("items", { node = node });
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
284 for _, entry in pairs(ret) do
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
285 data:add_child(entry);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
286 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
287 if data then
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
288 reply = st.reply(stanza)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
289 :tag("adminsub", { xmlns = xmlns_adminsub })
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
290 :add_child(data);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
291 else
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
292 reply = st.error_reply(stanza, "cancel", "item-not-found");
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
293 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
294 elseif action.name == "adminfor" then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
295 local data = st.stanza("adminfor");
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
296 for host_name in pairs(hosts) do
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
297 if is_admin(stanza.attr.from, host_name) then
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
298 data:tag("item"):text(host_name):up();
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
299 end
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
300 end
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
301 reply = st.reply(stanza)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
302 :tag("adminsub", { xmlns = xmlns_adminsub })
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
303 :add_child(data);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
304 else
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
305 reply = st.error_reply(stanza, "feature-not-implemented");
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
306 end
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
307 return origin.send(reply);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
308 end);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
309
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
310 -- Add/remove c2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
311 module:hook("resource-bind", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
312 add_client(event.session, module.host);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
313 end);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
314
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
315 module:hook("resource-unbind", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
316 del_client(event.session, module.host);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
317 service[module.host]:remove_subscription(xmlns_c2s_session, module.host, event.session.full_jid);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
318 service[module.host]:remove_subscription(xmlns_s2s_session, module.host, event.session.full_jid);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
319 end);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
320
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
321 -- Add/remove s2s sessions
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
322 module:hook("s2sout-established", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
323 add_host(event.session, "out", module.host);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
324 end);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
325
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
326 module:hook("s2sin-established", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
327 add_host(event.session, "in", module.host);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
328 end);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
329
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
330 module:hook("s2sout-destroyed", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
331 del_host(event.session, "out", module.host);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
332 end);
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
333
663
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
334 module:hook("s2sin-destroyed", function(event)
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
335 del_host(event.session, "in", module.host);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
336 end);
a826b61c8f3a mod_admin_web: Utilize the shared module magic
Florian Zeitz <florob@babelmonkeys.de>
parents: 637
diff changeset
337 end
636
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
338
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
339 function get_affiliation(jid, host)
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
340 local bare_jid = jid_bare(jid);
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
341 if is_admin(bare_jid, host) then
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
342 return "member";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
343 else
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
344 return "none";
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
345 end
b3a3199255d7 mod_admin_web: Add timber version. Separate for now
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
346 end