Software /
code /
prosody
Comparison
plugins/mod_pubsub/pubsub.lib.lua @ 6438:b1c40054b59d
mod_pubsub: Add support for node configuration
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 28 Sep 2014 01:46:17 +0200 |
parent | 6434:382e03a40dd2 |
child | 6441:bcb1ea9047d3 |
comparison
equal
deleted
inserted
replaced
6437:3f1f11dfdf10 | 6438:b1c40054b59d |
---|---|
1 local st = require "util.stanza"; | 1 local st = require "util.stanza"; |
2 local uuid_generate = require "util.uuid".generate; | 2 local uuid_generate = require "util.uuid".generate; |
3 | 3 |
4 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; | 4 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
5 local xmlns_pubsub_errors = "http://jabber.org/protocol/pubsub#errors"; | 5 local xmlns_pubsub_errors = "http://jabber.org/protocol/pubsub#errors"; |
6 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; | |
6 | 7 |
7 local _M = {}; | 8 local _M = {}; |
8 | 9 |
9 local handlers = {}; | 10 local handlers = {}; |
10 _M.handlers = handlers; | 11 _M.handlers = handlers; |
15 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" }; | 16 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" }; |
16 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" }; | 17 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" }; |
17 ["item-not-found"] = { "cancel", "item-not-found" }; | 18 ["item-not-found"] = { "cancel", "item-not-found" }; |
18 ["not-subscribed"] = { "modify", "unexpected-request", nil, "not-subscribed" }; | 19 ["not-subscribed"] = { "modify", "unexpected-request", nil, "not-subscribed" }; |
19 ["forbidden"] = { "cancel", "forbidden" }; | 20 ["forbidden"] = { "cancel", "forbidden" }; |
21 ["not-allowed"] = { "cancel", "not-allowed" }; | |
20 }; | 22 }; |
21 local function pubsub_error_reply(stanza, error) | 23 local function pubsub_error_reply(stanza, error) |
22 local e = pubsub_errors[error]; | 24 local e = pubsub_errors[error]; |
23 local reply = st.error_reply(stanza, unpack(e, 1, 3)); | 25 local reply = st.error_reply(stanza, unpack(e, 1, 3)); |
24 if e[4] then | 26 if e[4] then |
220 reply = pubsub_error_reply(stanza, ret); | 222 reply = pubsub_error_reply(stanza, ret); |
221 end | 223 end |
222 return origin.send(reply); | 224 return origin.send(reply); |
223 end | 225 end |
224 | 226 |
227 function handlers.get_configure(origin, stanza, config, service) | |
228 local node = config.attr.node; | |
229 if not node then | |
230 return origin.send(pubsub_error_reply(stanza, "nodeid-required")); | |
231 end | |
232 | |
233 if not service:may(node, actor, "configure") then | |
234 return origin.send(pubsub_error_reply(stanza, "forbidden")); | |
235 end | |
236 | |
237 local node_obj = service.nodes[node]; | |
238 if not node_obj then | |
239 return origin.send(pubsub_error_reply(stanza, "item-not-found")); | |
240 end | |
241 | |
242 local form = self.config.node_config_form; | |
243 if not form then | |
244 return origin.send(pubsub_error_reply(stanza, "not-allowed")); | |
245 end | |
246 | |
247 local reply = st.reply(stanza) | |
248 :tag("pubsub", { xmlns = xmlns_pubsub_owner }) | |
249 :tag("configure", { node = node }) | |
250 :add_child(form:form(node_obj.config)); | |
251 return origin.send(reply); | |
252 end | |
253 | |
254 function handlers.set_configure(origin, stanza, config, service) | |
255 local node = config.attr.node; | |
256 if not node then | |
257 return origin.send(pubsub_error_reply(stanza, "nodeid-required")); | |
258 end | |
259 local form, node_obj = service:get_node_config_form(node, stanza.attr.from); | |
260 if not form then | |
261 return origin.send(pubsub_error_reply(stanza, node_obj)); | |
262 end | |
263 local new_config, err = form:data(config.tags[1]); | |
264 if not new_config then | |
265 return origin.send(st.error_reply(stanza, "modify", "bad-request", err)); | |
266 end | |
267 local ok, err = service:set_node_config(node, stanza.attr.from, new_config); | |
268 if not ok then | |
269 return origin.send(pubsub_error_reply(stanza, err)); | |
270 end | |
271 return origin.send(st.reply(stanza)); | |
272 end | |
273 | |
225 return _M; | 274 return _M; |