Annotate

plugins/mod_pubsub/pubsub.lib.lua @ 12021:376522fb3f52

mod_pubsub: Allow specifying the JID of the pubsub service This allows overriding it in cases where it is not equal to module.host, like say, in mod_pep
author Kim Alvefur <zash@zash.se>
date Tue, 07 Dec 2021 13:03:55 +0100 (2021-12-07)
parent 11904:313d01cc4258
child 12589:39ae08180c81
child 13177:6f64542a1336
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8210
352d605b1178 mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7358
diff changeset
1 local t_unpack = table.unpack or unpack; -- luacheck: ignore 113
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
2 local time_now = os.time;
8210
352d605b1178 mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7358
diff changeset
3
8940
365b16109d95 mod_pubsub: Apply normalization to JIDs retrieved from attributes
Kim Alvefur <zash@zash.se>
parents: 8939
diff changeset
4 local jid_prep = require "util.jid".prep;
8340
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
5 local set = require "util.set";
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
6 local st = require "util.stanza";
8325
9a845e9e9cbf mod_pubsub: Fix typo in import
Kim Alvefur <zash@zash.se>
parents: 8324
diff changeset
7 local it = require "util.iterators";
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
8 local uuid_generate = require "util.uuid".generate;
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
9 local dataform = require"util.dataforms".new;
10356
0a2d7efca039 util.pubsub, pubsub.lib and tests: Add text to precondition-not-met error (fixes #1455)
Matthew Wild <mwild1@gmail.com>
parents: 10276
diff changeset
10 local errors = require "util.error";
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
11
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
12 local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
13 local xmlns_pubsub_errors = "http://jabber.org/protocol/pubsub#errors";
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
14 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner";
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
15
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
16 local _M = {};
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
17
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
18 local handlers = {};
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
19 _M.handlers = handlers;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
20
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
21 local pubsub_errors = {
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
22 ["conflict"] = { "cancel", "conflict" };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
23 ["invalid-jid"] = { "modify", "bad-request", nil, "invalid-jid" };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
24 ["jid-required"] = { "modify", "bad-request", nil, "jid-required" };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
25 ["nodeid-required"] = { "modify", "bad-request", nil, "nodeid-required" };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
26 ["item-not-found"] = { "cancel", "item-not-found" };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
27 ["not-subscribed"] = { "modify", "unexpected-request", nil, "not-subscribed" };
9041
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
28 ["invalid-options"] = { "modify", "bad-request", nil, "invalid-options" };
6473
7c8f58d2b331 Merge 0.9->0.10
Matthew Wild <mwild1@gmail.com>
parents: 6448
diff changeset
29 ["forbidden"] = { "auth", "forbidden" };
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
30 ["not-allowed"] = { "cancel", "not-allowed" };
9076
00d89430d77e pubsub.lib: Support for not-acceptable error
Matthew Wild <mwild1@gmail.com>
parents: 9072
diff changeset
31 ["not-acceptable"] = { "modify", "not-acceptable" };
8953
19cbe80df9c8 mod_pubsub: Make pubsub.lib aware of internal-server-error condition
Kim Alvefur <zash@zash.se>
parents: 8940
diff changeset
32 ["internal-server-error"] = { "wait", "internal-server-error" };
9110
3dbecb399dfb pubsub.lib: Add support for precondition-not-met error
Matthew Wild <mwild1@gmail.com>
parents: 9109
diff changeset
33 ["precondition-not-met"] = { "cancel", "conflict", nil, "precondition-not-met" };
9207
76d593b35958 util.pubsub, pubsub.lib: Improve error on attempt to publish invalid item
Matthew Wild <mwild1@gmail.com>
parents: 9206
diff changeset
34 ["invalid-item"] = { "modify", "bad-request", "invalid item" };
11723
3ead0967e04d util.pubsub: Signal that 'persistent-items' is unsupported when disabled
Kim Alvefur <zash@zash.se>
parents: 11715
diff changeset
35 ["persistent-items-unsupported"] = { "cancel", "feature-not-implemented", nil, "persistent-items" };
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
36 };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
37 local function pubsub_error_reply(stanza, error)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
38 local e = pubsub_errors[error];
10356
0a2d7efca039 util.pubsub, pubsub.lib and tests: Add text to precondition-not-met error (fixes #1455)
Matthew Wild <mwild1@gmail.com>
parents: 10276
diff changeset
39 if not e and errors.is_err(error) then
0a2d7efca039 util.pubsub, pubsub.lib and tests: Add text to precondition-not-met error (fixes #1455)
Matthew Wild <mwild1@gmail.com>
parents: 10276
diff changeset
40 e = { error.type, error.condition, error.text, error.pubsub_condition };
0a2d7efca039 util.pubsub, pubsub.lib and tests: Add text to precondition-not-met error (fixes #1455)
Matthew Wild <mwild1@gmail.com>
parents: 10276
diff changeset
41 end
8210
352d605b1178 mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7358
diff changeset
42 local reply = st.error_reply(stanza, t_unpack(e, 1, 3));
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
43 if e[4] then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
44 reply:tag(e[4], { xmlns = xmlns_pubsub_errors }):up();
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
45 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
46 return reply;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
47 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
48 _M.pubsub_error_reply = pubsub_error_reply;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
49
9247
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
50 local function dataform_error_message(err) -- ({ string : string }) -> string?
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
51 local out = {};
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
52 for field, errmsg in pairs(err) do
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
53 table.insert(out, ("%s: %s"):format(field, errmsg))
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
54 end
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
55 return table.concat(out, "; ");
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
56 end
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
57
9115
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
58 -- Note: If any config options are added that are of complex types,
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
59 -- (not simply strings/numbers) then the publish-options code will
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
60 -- need to be revisited
7358
d0390bc9c5d1 mod_pubsub: Don’t require util.dataforms twice
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 6841
diff changeset
61 local node_config_form = dataform {
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
62 {
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
63 type = "hidden";
9274
1712e366b081 mod_pubsub: Exclude value of FORM_TYPE from stored data
Kim Alvefur <zash@zash.se>
parents: 9247
diff changeset
64 var = "FORM_TYPE";
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
65 value = "http://jabber.org/protocol/pubsub#node_config";
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
66 };
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
67 {
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
68 type = "text-single";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
69 name = "title";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
70 var = "pubsub#title";
8979
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
71 label = "Title";
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
72 };
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
73 {
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
74 type = "text-single";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
75 name = "description";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
76 var = "pubsub#description";
8979
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
77 label = "Description";
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
78 };
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
79 {
6897b2e18bdf mod_pubsub: Support configurable title and description fields
Kim Alvefur <zash@zash.se>
parents: 8978
diff changeset
80 type = "text-single";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
81 name = "payload_type";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
82 var = "pubsub#type";
9180
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
83 label = "The type of node data, usually specified by the namespace of the payload (if any)";
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
84 };
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
85 {
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
86 type = "text-single";
11631
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11429
diff changeset
87 datatype = "pubsub:integer-or-max";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
88 name = "max_items";
11855
8890eaa69446 mod_pubsub: Prevent max_items from being set to zero
Kim Alvefur <zash@zash.se>
parents: 11854
diff changeset
89 range_min = 1;
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
90 var = "pubsub#max_items";
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
91 label = "Max # of items to persist";
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
92 };
8320
fe5eaf4ed631 mod_pep_plus: Make node persistence configurable via pubsub#persist_items
Kim Alvefur <zash@zash.se>
parents: 8318
diff changeset
93 {
fe5eaf4ed631 mod_pep_plus: Make node persistence configurable via pubsub#persist_items
Kim Alvefur <zash@zash.se>
parents: 8318
diff changeset
94 type = "boolean";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
95 name = "persist_items";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
96 var = "pubsub#persist_items";
8320
fe5eaf4ed631 mod_pep_plus: Make node persistence configurable via pubsub#persist_items
Kim Alvefur <zash@zash.se>
parents: 8318
diff changeset
97 label = "Persist items to storage";
fe5eaf4ed631 mod_pep_plus: Make node persistence configurable via pubsub#persist_items
Kim Alvefur <zash@zash.se>
parents: 8318
diff changeset
98 };
8814
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
99 {
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
100 type = "list-single";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
101 name = "access_model";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
102 var = "pubsub#access_model";
9096
7de4eec02ece mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents: 9076
diff changeset
103 label = "Specify the subscriber model";
7de4eec02ece mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents: 9076
diff changeset
104 options = {
9135
c68d62ae9cb7 pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9124
diff changeset
105 "authorize",
c68d62ae9cb7 pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9124
diff changeset
106 "open",
c68d62ae9cb7 pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9124
diff changeset
107 "presence",
c68d62ae9cb7 pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9124
diff changeset
108 "roster",
c68d62ae9cb7 pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9124
diff changeset
109 "whitelist",
9096
7de4eec02ece mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents: 9076
diff changeset
110 };
7de4eec02ece mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents: 9076
diff changeset
111 };
7de4eec02ece mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents: 9076
diff changeset
112 {
7de4eec02ece mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents: 9076
diff changeset
113 type = "list-single";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
114 name = "publish_model";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
115 var = "pubsub#publish_model";
9130
74525b8104d5 pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents: 9128
diff changeset
116 label = "Specify the publisher model";
74525b8104d5 pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents: 9128
diff changeset
117 options = {
9137
4803d2feeecb pubsub.lib: fix more form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9136
diff changeset
118 "publishers";
4803d2feeecb pubsub.lib: fix more form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9136
diff changeset
119 "subscribers";
4803d2feeecb pubsub.lib: fix more form fields
Jonas Wielicki <jonas@wielicki.name>
parents: 9136
diff changeset
120 "open";
9130
74525b8104d5 pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents: 9128
diff changeset
121 };
74525b8104d5 pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents: 9128
diff changeset
122 };
74525b8104d5 pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents: 9128
diff changeset
123 {
11854
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
124 type = "list-single";
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
125 var = "pubsub#send_last_published_item";
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
126 name = "send_last_published_item";
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
127 options = { "never"; "on_sub"; "on_sub_and_presence" };
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
128 };
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
129 {
9182
ec48c02ded0c mod_pubsub: Add support for "quiet nodes" (disabling notifications)
Kim Alvefur <zash@zash.se>
parents: 9180
diff changeset
130 type = "boolean";
9211
a476d80761cd mod_pubsub: Fix boolean value in form
Kim Alvefur <zash@zash.se>
parents: 9210
diff changeset
131 value = true;
9186
9f33a13eb011 mod_pubsub: Use the correct form field
Kim Alvefur <zash@zash.se>
parents: 9185
diff changeset
132 label = "Whether to deliver event notifications";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
133 name = "notify_items";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
134 var = "pubsub#deliver_notifications";
9182
ec48c02ded0c mod_pubsub: Add support for "quiet nodes" (disabling notifications)
Kim Alvefur <zash@zash.se>
parents: 9180
diff changeset
135 };
ec48c02ded0c mod_pubsub: Add support for "quiet nodes" (disabling notifications)
Kim Alvefur <zash@zash.se>
parents: 9180
diff changeset
136 {
9188
ef2616ade453 mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents: 9186
diff changeset
137 type = "boolean";
9212
127af0795e93 mod_pubsub: Add missing default value for deliver_payloads
Kim Alvefur <zash@zash.se>
parents: 9211
diff changeset
138 value = true;
9188
ef2616ade453 mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents: 9186
diff changeset
139 label = "Whether to deliver payloads with event notifications";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
140 name = "include_payload";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
141 var = "pubsub#deliver_payloads";
9188
ef2616ade453 mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents: 9186
diff changeset
142 };
ef2616ade453 mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents: 9186
diff changeset
143 {
9130
74525b8104d5 pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents: 9128
diff changeset
144 type = "list-single";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
145 name = "notification_type";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
146 var = "pubsub#notification_type";
8814
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
147 label = "Specify the delivery style for notifications";
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
148 options = {
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
149 { label = "Messages of type normal", value = "normal" },
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
150 { label = "Messages of type headline", value = "headline", default = true },
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8400
diff changeset
151 };
8822
4afa77e0d2b0 mod_pubsub: Fix syntax error
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
152 };
9183
8239f24e38df mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents: 9182
diff changeset
153 {
8239f24e38df mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents: 9182
diff changeset
154 type = "boolean";
8239f24e38df mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents: 9182
diff changeset
155 label = "Whether to notify subscribers when the node is deleted";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
156 name = "notify_delete";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
157 var = "pubsub#notify_delete";
9185
60f163e7a7a7 mod_pubsub: Specify defaults for notification settings
Kim Alvefur <zash@zash.se>
parents: 9184
diff changeset
158 value = true;
9183
8239f24e38df mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents: 9182
diff changeset
159 };
9184
9fbddb80803b mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents: 9183
diff changeset
160 {
9fbddb80803b mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents: 9183
diff changeset
161 type = "boolean";
9fbddb80803b mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents: 9183
diff changeset
162 label = "Whether to notify subscribers when items are removed from the node";
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
163 name = "notify_retract";
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
164 var = "pubsub#notify_retract";
9185
60f163e7a7a7 mod_pubsub: Specify defaults for notification settings
Kim Alvefur <zash@zash.se>
parents: 9184
diff changeset
165 value = true;
9184
9fbddb80803b mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents: 9183
diff changeset
166 };
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
167 };
11785
b1381e302cab mod_pubsub/pubsub.lib: Export config forms for use by other modules
Matthew Wild <mwild1@gmail.com>
parents: 11769
diff changeset
168 _M.node_config_form = node_config_form;
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
169
9116
9f36f5c14545 mod_pubsub: Rename variable subscription options form to improve readability
Kim Alvefur <zash@zash.se>
parents: 9115
diff changeset
170 local subscribe_options_form = dataform {
8826
d614003a82c1 mod_pubsub: Add support for parsing subscription options form (no options supported yet)
Kim Alvefur <zash@zash.se>
parents: 8825
diff changeset
171 {
d614003a82c1 mod_pubsub: Add support for parsing subscription options form (no options supported yet)
Kim Alvefur <zash@zash.se>
parents: 8825
diff changeset
172 type = "hidden";
9274
1712e366b081 mod_pubsub: Exclude value of FORM_TYPE from stored data
Kim Alvefur <zash@zash.se>
parents: 9247
diff changeset
173 var = "FORM_TYPE";
8826
d614003a82c1 mod_pubsub: Add support for parsing subscription options form (no options supported yet)
Kim Alvefur <zash@zash.se>
parents: 8825
diff changeset
174 value = "http://jabber.org/protocol/pubsub#subscribe_options";
9039
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 9038
diff changeset
175 };
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 9038
diff changeset
176 {
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 9038
diff changeset
177 type = "boolean";
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 9038
diff changeset
178 name = "pubsub#include_body";
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 9038
diff changeset
179 label = "Receive message body in addition to payload?";
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 9038
diff changeset
180 };
8826
d614003a82c1 mod_pubsub: Add support for parsing subscription options form (no options supported yet)
Kim Alvefur <zash@zash.se>
parents: 8825
diff changeset
181 };
11785
b1381e302cab mod_pubsub/pubsub.lib: Export config forms for use by other modules
Matthew Wild <mwild1@gmail.com>
parents: 11769
diff changeset
182 _M.subscribe_options_form = subscribe_options_form;
8826
d614003a82c1 mod_pubsub: Add support for parsing subscription options form (no options supported yet)
Kim Alvefur <zash@zash.se>
parents: 8825
diff changeset
183
8981
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
184 local node_metadata_form = dataform {
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
185 {
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
186 type = "hidden";
9274
1712e366b081 mod_pubsub: Exclude value of FORM_TYPE from stored data
Kim Alvefur <zash@zash.se>
parents: 9247
diff changeset
187 var = "FORM_TYPE";
8981
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
188 value = "http://jabber.org/protocol/pubsub#meta-data";
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
189 };
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
190 {
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
191 type = "text-single";
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
192 name = "pubsub#title";
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
193 };
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
194 {
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
195 type = "text-single";
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
196 name = "pubsub#description";
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
197 };
9180
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
198 {
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
199 type = "text-single";
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
200 name = "pubsub#type";
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
201 };
10062
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
202 {
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
203 type = "text-single";
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
204 name = "pubsub#access_model";
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
205 };
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
206 {
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
207 type = "text-single";
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
208 name = "pubsub#publish_model";
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
209 };
8981
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
210 };
11785
b1381e302cab mod_pubsub/pubsub.lib: Export config forms for use by other modules
Matthew Wild <mwild1@gmail.com>
parents: 11769
diff changeset
211 _M.node_metadata_form = node_metadata_form;
8981
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
212
8340
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
213 local service_method_feature_map = {
9199
596d0d82a113 mod_pubsub: Advertise support for subscription-options
Kim Alvefur <zash@zash.se>
parents: 9198
diff changeset
214 add_subscription = { "subscribe", "subscription-options" };
8340
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
215 create = { "create-nodes", "instant-nodes", "item-ids", "create-and-configure" };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
216 delete = { "delete-nodes" };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
217 get_items = { "retrieve-items" };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
218 get_subscriptions = { "retrieve-subscriptions" };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
219 node_defaults = { "retrieve-default" };
9131
d0d676b86013 pubsub.lib: Enable publish-options unconditionally
Matthew Wild <mwild1@gmail.com>
parents: 9130
diff changeset
220 publish = { "publish", "multi-items", "publish-options" };
8340
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
221 purge = { "purge-nodes" };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
222 retract = { "delete-items", "retract-items" };
9198
2ce27be5fdd1 mod_pubsub: Advertise support for node meta-data
Kim Alvefur <zash@zash.se>
parents: 9188
diff changeset
223 set_node_config = { "config-node", "meta-data" };
8938
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
224 set_affiliation = { "modify-affiliations" };
8340
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
225 };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
226 local service_config_feature_map = {
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
227 autocreate_on_publish = { "auto-create" };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
228 };
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
229
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
230 function _M.get_feature_set(service)
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
231 local supported_features = set.new();
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
232
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
233 for method, features in pairs(service_method_feature_map) do
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
234 if service[method] then
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
235 for _, feature in ipairs(features) do
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
236 if feature then
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
237 supported_features:add(feature);
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
238 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
239 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
240 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
241 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
242
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
243 for option, features in pairs(service_config_feature_map) do
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
244 if service.config[option] then
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
245 for _, feature in ipairs(features) do
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
246 if feature then
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
247 supported_features:add(feature);
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
248 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
249 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
250 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
251 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
252
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
253 for affiliation in pairs(service.config.capabilities) do
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
254 if affiliation ~= "none" and affiliation ~= "owner" then
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
255 supported_features:add(affiliation.."-affiliation");
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
256 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
257 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
258
9102
f3a1ecc46f20 mod_pubsub: Advertise default access model in disco
Kim Alvefur <zash@zash.se>
parents: 9096
diff changeset
259 if service.node_defaults.access_model then
f3a1ecc46f20 mod_pubsub: Advertise default access model in disco
Kim Alvefur <zash@zash.se>
parents: 9096
diff changeset
260 supported_features:add("access-"..service.node_defaults.access_model);
f3a1ecc46f20 mod_pubsub: Advertise default access model in disco
Kim Alvefur <zash@zash.se>
parents: 9096
diff changeset
261 end
f3a1ecc46f20 mod_pubsub: Advertise default access model in disco
Kim Alvefur <zash@zash.se>
parents: 9096
diff changeset
262
11854
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
263 if service.node_defaults.send_last_published_item ~= "never" then
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
264 supported_features:add("last-published");
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
265 end
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
266
9109
31bf4b3abc7f pubsub.lib: Advertise peristent-items feature when nodes and items are persisted
Matthew Wild <mwild1@gmail.com>
parents: 9102
diff changeset
267 if rawget(service.config, "itemstore") and rawget(service.config, "nodestore") then
31bf4b3abc7f pubsub.lib: Advertise peristent-items feature when nodes and items are persisted
Matthew Wild <mwild1@gmail.com>
parents: 9102
diff changeset
268 supported_features:add("persistent-items");
31bf4b3abc7f pubsub.lib: Advertise peristent-items feature when nodes and items are persisted
Matthew Wild <mwild1@gmail.com>
parents: 9102
diff changeset
269 end
31bf4b3abc7f pubsub.lib: Advertise peristent-items feature when nodes and items are persisted
Matthew Wild <mwild1@gmail.com>
parents: 9102
diff changeset
270
11803
024b44ad5651 mod_pubsub: Advertise support for 'max' as value for max_items
Kim Alvefur <zash@zash.se>
parents: 11785
diff changeset
271 if true --[[ node_metadata_form[max_items].datatype == "pubsub:integer-or-max" ]] then
024b44ad5651 mod_pubsub: Advertise support for 'max' as value for max_items
Kim Alvefur <zash@zash.se>
parents: 11785
diff changeset
272 supported_features:add("config-node-max");
024b44ad5651 mod_pubsub: Advertise support for 'max' as value for max_items
Kim Alvefur <zash@zash.se>
parents: 11785
diff changeset
273 end
024b44ad5651 mod_pubsub: Advertise support for 'max' as value for max_items
Kim Alvefur <zash@zash.se>
parents: 11785
diff changeset
274
8340
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
275 return supported_features;
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
276 end
7c1fb8c042dc mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8338
diff changeset
277
8980
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
278 function _M.handle_disco_info_node(event, service)
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
279 local stanza, reply, node = event.stanza, event.reply, event.node;
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
280 local ok, ret = service:get_nodes(stanza.attr.from);
11904
313d01cc4258 mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 11882
diff changeset
281 if not ok then
313d01cc4258 mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 11882
diff changeset
282 event.origin.send(pubsub_error_reply(stanza, ret));
313d01cc4258 mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 11882
diff changeset
283 return true;
313d01cc4258 mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 11882
diff changeset
284 end
8980
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
285 local node_obj = ret[node];
11904
313d01cc4258 mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 11882
diff changeset
286 if not node_obj then
313d01cc4258 mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
Kim Alvefur <zash@zash.se>
parents: 11882
diff changeset
287 event.origin.send(pubsub_error_reply(stanza, "item-not-found"));
11882
c3bd71227e17 mod_pubsub: Return proper errors for disco queries on nodes
Kim Alvefur <zash@zash.se>
parents: 11855
diff changeset
288 return true;
8980
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
289 end
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
290 event.exists = true;
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
291 reply:tag("identity", { category = "pubsub", type = "leaf" }):up();
8981
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
292 if node_obj.config then
9038
fd053fcaf9bc mod_pubsub: Revert disco#info part from previous commit
Kim Alvefur <zash@zash.se>
parents: 9037
diff changeset
293 reply:add_child(node_metadata_form:form({
fd053fcaf9bc mod_pubsub: Revert disco#info part from previous commit
Kim Alvefur <zash@zash.se>
parents: 9037
diff changeset
294 ["pubsub#title"] = node_obj.config.title;
fd053fcaf9bc mod_pubsub: Revert disco#info part from previous commit
Kim Alvefur <zash@zash.se>
parents: 9037
diff changeset
295 ["pubsub#description"] = node_obj.config.description;
9180
cc68cb03f85e mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents: 9137
diff changeset
296 ["pubsub#type"] = node_obj.config.payload_type;
10062
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
297 ["pubsub#access_model"] = node_obj.config.access_model;
6ffed67356e9 mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents: 9817
diff changeset
298 ["pubsub#publish_model"] = node_obj.config.publish_model;
9038
fd053fcaf9bc mod_pubsub: Revert disco#info part from previous commit
Kim Alvefur <zash@zash.se>
parents: 9037
diff changeset
299 }, "result"));
8981
b6cb0a8f75b1 mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
300 end
8980
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
301 end
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
302
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
303 function _M.handle_disco_items_node(event, service)
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
304 local stanza, reply, node = event.stanza, event.reply, event.node;
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
305 local ok, ret = service:get_items(node, stanza.attr.from);
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
306 if not ok then
11882
c3bd71227e17 mod_pubsub: Return proper errors for disco queries on nodes
Kim Alvefur <zash@zash.se>
parents: 11855
diff changeset
307 event.origin.send(pubsub_error_reply(stanza, ret));
c3bd71227e17 mod_pubsub: Return proper errors for disco queries on nodes
Kim Alvefur <zash@zash.se>
parents: 11855
diff changeset
308 return true;
8980
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
309 end
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
310
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
311 for _, id in ipairs(ret) do
12021
376522fb3f52 mod_pubsub: Allow specifying the JID of the pubsub service
Kim Alvefur <zash@zash.se>
parents: 11904
diff changeset
312 reply:tag("item", { jid = service.jid or module.host, name = id }):up();
8980
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
313 end
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
314 event.exists = true;
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
315 end
4d2738b99b07 mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents: 8979
diff changeset
316
8334
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
317 function _M.handle_pubsub_iq(event, service)
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
318 local origin, stanza = event.origin, event.stanza;
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
319 local pubsub_tag = stanza.tags[1];
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
320 local action = pubsub_tag.tags[1];
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
321 if not action then
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
322 return origin.send(st.error_reply(stanza, "cancel", "bad-request"));
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
323 end
8336
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
324 local prefix = "";
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
325 if pubsub_tag.attr.xmlns == xmlns_pubsub_owner then
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
326 prefix = "owner_";
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
327 end
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
328 local handler = handlers[prefix..stanza.attr.type.."_"..action.name];
8334
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
329 if handler then
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
330 handler(origin, stanza, action, service);
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
331 return true;
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
332 end
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
333 end
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
334
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
335 function handlers.get_items(origin, stanza, items, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
336 local node = items.attr.node;
9817
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
337
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
338 local requested_items = {};
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
339 for item in items:childtags("item") do
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
340 table.insert(requested_items, item.attr.id);
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
341 end
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
342 if requested_items[1] == nil then
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
343 requested_items = nil;
7aad9eb7f050 mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents: 9274
diff changeset
344 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
345
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
346 if not node then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
347 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
348 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
349 end
11768
aa6ab07544c2 mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents: 11723
diff changeset
350 local resultspec; -- TODO rsm.get()
aa6ab07544c2 mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents: 11723
diff changeset
351 if items.attr.max_items then
aa6ab07544c2 mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents: 11723
diff changeset
352 resultspec = { max = tonumber(items.attr.max_items) };
aa6ab07544c2 mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents: 11723
diff changeset
353 end
aa6ab07544c2 mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents: 11723
diff changeset
354 local ok, results = service:get_items(node, stanza.attr.from, requested_items, resultspec);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
355 if not ok then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
356 origin.send(pubsub_error_reply(stanza, results));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
357 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
358 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
359
11715
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
360 local expose_publisher = service.config.expose_publisher;
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
361
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
362 local data = st.stanza("items", { node = node });
11769
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
363 local iter, v, i = ipairs(results);
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
364 if not requested_items then
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
365 -- XXX Hack to preserve order of explicitly requested items.
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
366 iter, v, i = it.reverse(iter, v, i);
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
367 end
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
368
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
369 for _, id in iter, v, i do
11715
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
370 local item = results[id];
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
371 if not expose_publisher then
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
372 item = st.clone(item);
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
373 item.attr.publisher = nil;
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
374 end
ddd6e21e58bf mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents: 11714
diff changeset
375 data:add_child(item);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
376 end
10090
cdcf26331b9f mod_pubsub: Eliminate dead code
Kim Alvefur <zash@zash.se>
parents: 10062
diff changeset
377 local reply = st.reply(stanza)
cdcf26331b9f mod_pubsub: Eliminate dead code
Kim Alvefur <zash@zash.se>
parents: 10062
diff changeset
378 :tag("pubsub", { xmlns = xmlns_pubsub })
cdcf26331b9f mod_pubsub: Eliminate dead code
Kim Alvefur <zash@zash.se>
parents: 10062
diff changeset
379 :add_child(data);
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
380 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
381 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
382 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
383
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
384 function handlers.get_subscriptions(origin, stanza, subscriptions, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
385 local node = subscriptions.attr.node;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
386 local ok, ret = service:get_subscriptions(node, stanza.attr.from, stanza.attr.from);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
387 if not ok then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
388 origin.send(pubsub_error_reply(stanza, ret));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
389 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
390 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
391 local reply = st.reply(stanza)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
392 :tag("pubsub", { xmlns = xmlns_pubsub })
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
393 :tag("subscriptions");
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
394 for _, sub in ipairs(ret) do
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
395 reply:tag("subscription", { node = sub.node, jid = sub.jid, subscription = 'subscribed' }):up();
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
396 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
397 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
398 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
399 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
400
9032
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
401 function handlers.owner_get_subscriptions(origin, stanza, subscriptions, service)
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
402 local node = subscriptions.attr.node;
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
403 local ok, ret = service:get_subscriptions(node, stanza.attr.from);
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
404 if not ok then
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
405 origin.send(pubsub_error_reply(stanza, ret));
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
406 return true;
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
407 end
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
408 local reply = st.reply(stanza)
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
409 :tag("pubsub", { xmlns = xmlns_pubsub_owner })
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
410 :tag("subscriptions");
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
411 for _, sub in ipairs(ret) do
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
412 reply:tag("subscription", { node = sub.node, jid = sub.jid, subscription = 'subscribed' }):up();
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
413 end
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
414 origin.send(reply);
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
415 return true;
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
416 end
029e1e18d65c mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents: 9006
diff changeset
417
9033
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
418 function handlers.owner_set_subscriptions(origin, stanza, subscriptions, service)
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
419 local node = subscriptions.attr.node;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
420 if not node then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
421 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
422 return true;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
423 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
424 if not service:may(node, stanza.attr.from, "subscribe_other") then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
425 origin.send(pubsub_error_reply(stanza, "forbidden"));
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
426 return true;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
427 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
428
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
429 local node_obj = service.nodes[node];
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
430 if not node_obj then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
431 origin.send(pubsub_error_reply(stanza, "item-not-found"));
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
432 return true;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
433 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
434
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
435 for subscription_tag in subscriptions:childtags("subscription") do
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
436 if subscription_tag.attr.subscription == 'subscribed' then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
437 local ok, err = service:add_subscription(node, stanza.attr.from, subscription_tag.attr.jid);
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
438 if not ok then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
439 origin.send(pubsub_error_reply(stanza, err));
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
440 return true;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
441 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
442 elseif subscription_tag.attr.subscription == 'none' then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
443 local ok, err = service:remove_subscription(node, stanza.attr.from, subscription_tag.attr.jid);
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
444 if not ok then
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
445 origin.send(pubsub_error_reply(stanza, err));
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
446 return true;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
447 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
448 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
449 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
450
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
451 local reply = st.reply(stanza);
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
452 origin.send(reply);
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
453 return true;
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
454 end
f1b6efd5b379 mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents: 9032
diff changeset
455
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
456 function handlers.set_create(origin, stanza, create, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
457 local node = create.attr.node;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
458 local ok, ret, reply;
8337
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
459 local config;
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
460 local configure = stanza.tags[1]:get_child("configure");
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
461 if configure then
8338
30d8157391e9 mod_pubsub: Use correct variable name [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8337
diff changeset
462 local config_form = configure:get_child("x", "jabber:x:data");
8337
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
463 if not config_form then
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
464 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing dataform"));
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
465 return true;
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
466 end
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
467 local form_data, err = node_config_form:data(config_form);
9247
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
468 if err then
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
469 origin.send(st.error_reply(stanza, "modify", "bad-request", dataform_error_message(err)));
8337
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
470 return true;
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
471 end
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
472 config = form_data;
8337
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
473 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
474 if node then
8337
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
475 ok, ret = service:create(node, stanza.attr.from, config);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
476 if ok then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
477 reply = st.reply(stanza);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
478 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
479 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
480 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
481 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
482 repeat
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
483 node = uuid_generate();
8337
dc4ea43ac463 mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents: 8336
diff changeset
484 ok, ret = service:create(node, stanza.attr.from, config);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
485 until ok or ret ~= "conflict";
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
486 if ok then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
487 reply = st.reply(stanza)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
488 :tag("pubsub", { xmlns = xmlns_pubsub })
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
489 :tag("create", { node = node });
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
490 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
491 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
492 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
493 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
494 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
495 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
496 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
497
8336
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
498 function handlers.owner_set_delete(origin, stanza, delete, service)
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
499 local node = delete.attr.node;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
500
8210
352d605b1178 mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7358
diff changeset
501 local reply;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
502 if not node then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
503 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
504 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
505 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
506 local ok, ret = service:delete(node, stanza.attr.from);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
507 if ok then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
508 reply = st.reply(stanza);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
509 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
510 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
511 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
512 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
513 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
514 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
515
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
516 function handlers.set_subscribe(origin, stanza, subscribe, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
517 local node, jid = subscribe.attr.node, subscribe.attr.jid;
8940
365b16109d95 mod_pubsub: Apply normalization to JIDs retrieved from attributes
Kim Alvefur <zash@zash.se>
parents: 8939
diff changeset
518 jid = jid_prep(jid);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
519 if not (node and jid) then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
520 origin.send(pubsub_error_reply(stanza, jid and "nodeid-required" or "invalid-jid"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
521 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
522 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
523 local options_tag, options = stanza.tags[1]:get_child("options"), nil;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
524 if options_tag then
9247
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
525 -- FIXME form parsing errors ignored here, why?
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
526 local err
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
527 options, err = subscribe_options_form:data(options_tag.tags[1]);
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
528 if err then
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
529 origin.send(st.error_reply(stanza, "modify", "bad-request", dataform_error_message(err)));
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
530 return true
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
531 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
532 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
533 local ok, ret = service:add_subscription(node, stanza.attr.from, jid, options);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
534 local reply;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
535 if ok then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
536 reply = st.reply(stanza)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
537 :tag("pubsub", { xmlns = xmlns_pubsub })
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
538 :tag("subscription", {
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
539 node = node,
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
540 jid = jid,
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
541 subscription = "subscribed"
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
542 }):up();
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
543 if options_tag then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
544 reply:add_child(options_tag);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
545 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
546 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
547 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
548 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
549 origin.send(reply);
11854
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
550 local ok, config = service:get_node_config(node, true);
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
551 if ok and config.send_last_published_item ~= "never" then
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
552 local ok, id, item = service:get_last_item(node, jid);
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
553 if not (ok and id) then return; end
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
554 service.config.broadcaster("items", node, { [jid] = true }, item);
b605cbd5f13b mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Kim Alvefur <zash@zash.se>
parents: 11803
diff changeset
555 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
556 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
557
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
558 function handlers.set_unsubscribe(origin, stanza, unsubscribe, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
559 local node, jid = unsubscribe.attr.node, unsubscribe.attr.jid;
8940
365b16109d95 mod_pubsub: Apply normalization to JIDs retrieved from attributes
Kim Alvefur <zash@zash.se>
parents: 8939
diff changeset
560 jid = jid_prep(jid);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
561 if not (node and jid) then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
562 origin.send(pubsub_error_reply(stanza, jid and "nodeid-required" or "invalid-jid"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
563 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
564 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
565 local ok, ret = service:remove_subscription(node, stanza.attr.from, jid);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
566 local reply;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
567 if ok then
11429
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
568 reply = st.reply(stanza)
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
569 :tag("pubsub", { xmlns = xmlns_pubsub })
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
570 :tag("subscription", {
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
571 node = node,
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
572 jid = jid,
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
573 subscription = "none"
ef623d719894 mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents: 11187
diff changeset
574 }):up();
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
575 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
576 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
577 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
578 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
579 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
580 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
581
9040
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
582 function handlers.get_options(origin, stanza, options, service)
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
583 local node, jid = options.attr.node, options.attr.jid;
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
584 jid = jid_prep(jid);
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
585 if not (node and jid) then
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
586 origin.send(pubsub_error_reply(stanza, jid and "nodeid-required" or "invalid-jid"));
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
587 return true;
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
588 end
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
589 local ok, ret = service:get_subscription(node, stanza.attr.from, jid);
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
590 if not ok then
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
591 origin.send(pubsub_error_reply(stanza, "not-subscribed"));
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
592 return true;
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
593 end
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
594 if ret == true then ret = {} end
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
595 origin.send(st.reply(stanza)
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
596 :tag("pubsub", { xmlns = xmlns_pubsub })
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
597 :tag("options", { node = node, jid = jid })
9116
9f36f5c14545 mod_pubsub: Rename variable subscription options form to improve readability
Kim Alvefur <zash@zash.se>
parents: 9115
diff changeset
598 :add_child(subscribe_options_form:form(ret)));
9040
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
599 return true;
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
600 end
e993fad0cc62 mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents: 9039
diff changeset
601
9041
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
602 function handlers.set_options(origin, stanza, options, service)
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
603 local node, jid = options.attr.node, options.attr.jid;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
604 jid = jid_prep(jid);
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
605 if not (node and jid) then
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
606 origin.send(pubsub_error_reply(stanza, jid and "nodeid-required" or "invalid-jid"));
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
607 return true;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
608 end
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
609 local ok, ret = service:get_subscription(node, stanza.attr.from, jid);
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
610 if not ok then
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
611 origin.send(pubsub_error_reply(stanza, ret));
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
612 return true;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
613 elseif not ret then
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
614 origin.send(pubsub_error_reply(stanza, "not-subscribed"));
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
615 return true;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
616 end
9235
7fbcabee6df1 mod_pubsub: Preserve current subscription options if given a partial form
Kim Alvefur <zash@zash.se>
parents: 9212
diff changeset
617 local old_subopts = ret;
7fbcabee6df1 mod_pubsub: Preserve current subscription options if given a partial form
Kim Alvefur <zash@zash.se>
parents: 9212
diff changeset
618 local new_subopts, err = subscribe_options_form:data(options.tags[1], old_subopts);
9247
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
619 if err then
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
620 origin.send(st.error_reply(stanza, "modify", "bad-request", dataform_error_message(err)));
9041
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
621 return true;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
622 end
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
623 local ok, err = service:add_subscription(node, stanza.attr.from, jid, new_subopts);
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
624 if not ok then
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
625 origin.send(pubsub_error_reply(stanza, err));
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
626 return true;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
627 end
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
628 origin.send(st.reply(stanza));
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
629 return true;
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
630 end
b3bc742ee188 mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents: 9040
diff changeset
631
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
632 function handlers.set_publish(origin, stanza, publish, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
633 local node = publish.attr.node;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
634 if not node then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
635 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
636 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
637 end
9200
249d90ff992e pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents: 9199
diff changeset
638 local required_config = nil;
9115
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
639 local publish_options = stanza.tags[1]:get_child("publish-options");
9131
d0d676b86013 pubsub.lib: Enable publish-options unconditionally
Matthew Wild <mwild1@gmail.com>
parents: 9130
diff changeset
640 if publish_options then
9115
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
641 -- Ensure that the node configuration matches the values in publish-options
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
642 local publish_options_form = publish_options:get_child("x", "jabber:x:data");
9247
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
643 local err;
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
644 required_config, err = node_config_form:data(publish_options_form);
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
645 if err then
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
646 origin.send(st.error_reply(stanza, "modify", "bad-request", dataform_error_message(err)));
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
647 return true
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
648 end
9115
fddebfaae7d9 pubsub.lib: Support for publish-options behind a feature flag, 'enable_publish_options'
Matthew Wild <mwild1@gmail.com>
parents: 9110
diff changeset
649 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
650 local item = publish:get_child("item");
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
651 local id = (item and item.attr.id);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
652 if not id then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
653 id = uuid_generate();
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
654 if item then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
655 item.attr.id = id;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
656 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
657 end
11714
d783716103c1 mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents: 11631
diff changeset
658 if item then
d783716103c1 mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents: 11631
diff changeset
659 item.attr.publisher = service.config.normalize_jid(stanza.attr.from);
d783716103c1 mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents: 11631
diff changeset
660 end
9200
249d90ff992e pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents: 9199
diff changeset
661 local ok, ret = service:publish(node, stanza.attr.from, id, item, required_config);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
662 local reply;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
663 if ok then
8400
518b56d806bd mod_pubsub: Allow itemstore to override item ids
Kim Alvefur <zash@zash.se>
parents: 8399
diff changeset
664 if type(ok) == "string" then
518b56d806bd mod_pubsub: Allow itemstore to override item ids
Kim Alvefur <zash@zash.se>
parents: 8399
diff changeset
665 id = ok;
518b56d806bd mod_pubsub: Allow itemstore to override item ids
Kim Alvefur <zash@zash.se>
parents: 8399
diff changeset
666 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
667 reply = st.reply(stanza)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
668 :tag("pubsub", { xmlns = xmlns_pubsub })
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
669 :tag("publish", { node = node })
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
670 :tag("item", { id = id });
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
671 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
672 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
673 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
674 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
675 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
676 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
677
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
678 function handlers.set_retract(origin, stanza, retract, service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
679 local node, notify = retract.attr.node, retract.attr.notify;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
680 notify = (notify == "1") or (notify == "true");
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
681 local item = retract:get_child("item");
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
682 local id = item and item.attr.id
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
683 if not (node and id) then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
684 origin.send(pubsub_error_reply(stanza, node and "item-not-found" or "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
685 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
686 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
687 local reply, notifier;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
688 if notify then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
689 notifier = st.stanza("retract", { id = id });
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
690 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
691 local ok, ret = service:retract(node, stanza.attr.from, id, notifier);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
692 if ok then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
693 reply = st.reply(stanza);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
694 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
695 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
696 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
697 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
698 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
699 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
700
8336
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
701 function handlers.owner_set_purge(origin, stanza, purge, service)
10276
4e4ce7400b39 mod_pubsub: Remove the unwanted check for @notify on <purge/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10090
diff changeset
702 local node = purge.attr.node;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
703 local reply;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
704 if not node then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
705 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
706 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
707 end
10276
4e4ce7400b39 mod_pubsub: Remove the unwanted check for @notify on <purge/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 10090
diff changeset
708 local ok, ret = service:purge(node, stanza.attr.from, true);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
709 if ok then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
710 reply = st.reply(stanza);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
711 else
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
712 reply = pubsub_error_reply(stanza, ret);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
713 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
714 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
715 return true;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
716 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
717
8336
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
718 function handlers.owner_get_configure(origin, stanza, config, service)
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
719 local node = config.attr.node;
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
720 if not node then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
721 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
722 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
723 end
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
724
9120
01fc8ba0a7fa mod_pubsub: Use util.pubsub API for retrieving node config instead
Kim Alvefur <zash@zash.se>
parents: 9116
diff changeset
725 local ok, node_config = service:get_node_config(node, stanza.attr.from);
01fc8ba0a7fa mod_pubsub: Use util.pubsub API for retrieving node config instead
Kim Alvefur <zash@zash.se>
parents: 9116
diff changeset
726 if not ok then
01fc8ba0a7fa mod_pubsub: Use util.pubsub API for retrieving node config instead
Kim Alvefur <zash@zash.se>
parents: 9116
diff changeset
727 origin.send(pubsub_error_reply(stanza, node_config));
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
728 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
729 end
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
730
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
731 local reply = st.reply(stanza)
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
732 :tag("pubsub", { xmlns = xmlns_pubsub_owner })
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
733 :tag("configure", { node = node })
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
734 :add_child(node_config_form:form(node_config));
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
735 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
736 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
737 end
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
738
8336
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
739 function handlers.owner_set_configure(origin, stanza, config, service)
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
740 local node = config.attr.node;
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
741 if not node then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
742 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
743 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
744 end
6446
011ca9b88179 mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 6445
diff changeset
745 if not service:may(node, stanza.attr.from, "configure") then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
746 origin.send(pubsub_error_reply(stanza, "forbidden"));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
747 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
748 end
8317
ff57b3cc5a8e mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents: 8308
diff changeset
749 local config_form = config:get_child("x", "jabber:x:data");
ff57b3cc5a8e mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents: 8308
diff changeset
750 if not config_form then
ff57b3cc5a8e mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents: 8308
diff changeset
751 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing dataform"));
ff57b3cc5a8e mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents: 8308
diff changeset
752 return true;
ff57b3cc5a8e mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents: 8308
diff changeset
753 end
9122
a69dc9c729ec mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents: 9120
diff changeset
754 local ok, old_config = service:get_node_config(node, stanza.attr.from);
a69dc9c729ec mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents: 9120
diff changeset
755 if not ok then
a69dc9c729ec mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents: 9120
diff changeset
756 origin.send(pubsub_error_reply(stanza, old_config));
a69dc9c729ec mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents: 9120
diff changeset
757 return true;
a69dc9c729ec mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents: 9120
diff changeset
758 end
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
759 local new_config, err = node_config_form:data(config_form, old_config);
9247
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
760 if err then
26854d7a4947 mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents: 9245
diff changeset
761 origin.send(st.error_reply(stanza, "modify", "bad-request", dataform_error_message(err)));
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
762 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
763 end
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
764 local ok, err = service:set_node_config(node, stanza.attr.from, new_config);
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
765 if not ok then
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
766 origin.send(pubsub_error_reply(stanza, err));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
767 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
768 end
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
769 origin.send(st.reply(stanza));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
770 return true;
6438
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
771 end
b1c40054b59d mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 5851
diff changeset
772
8336
587305c0ff85 mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents: 8334
diff changeset
773 function handlers.owner_get_default(origin, stanza, default, service) -- luacheck: ignore 212/default
6441
bcb1ea9047d3 mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents: 6438
diff changeset
774 local reply = st.reply(stanza)
bcb1ea9047d3 mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents: 6438
diff changeset
775 :tag("pubsub", { xmlns = xmlns_pubsub_owner })
6447
8c2dc2ac5a40 mod_pubsub: Fix retreival of node config defaults
Kim Alvefur <zash@zash.se>
parents: 6446
diff changeset
776 :tag("default")
9244
b3b156bd9914 mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents: 9235
diff changeset
777 :add_child(node_config_form:form(service.node_defaults));
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
778 origin.send(reply);
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6473
diff changeset
779 return true;
6441
bcb1ea9047d3 mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents: 6438
diff changeset
780 end
bcb1ea9047d3 mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents: 6438
diff changeset
781
8932
12a9731aef0b mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents: 8826
diff changeset
782 function handlers.owner_get_affiliations(origin, stanza, affiliations, service)
8933
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
783 local node = affiliations.attr.node;
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
784 if not node then
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
785 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
786 return true;
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
787 end
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
788 if not service:may(node, stanza.attr.from, "set_affiliation") then
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
789 origin.send(pubsub_error_reply(stanza, "forbidden"));
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
790 return true;
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
791 end
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
792
8934
365bcf899093 mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents: 8933
diff changeset
793 local node_obj = service.nodes[node];
365bcf899093 mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents: 8933
diff changeset
794 if not node_obj then
365bcf899093 mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents: 8933
diff changeset
795 origin.send(pubsub_error_reply(stanza, "item-not-found"));
365bcf899093 mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents: 8933
diff changeset
796 return true;
365bcf899093 mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents: 8933
diff changeset
797 end
365bcf899093 mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents: 8933
diff changeset
798
8933
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
799 local reply = st.reply(stanza)
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
800 :tag("pubsub", { xmlns = xmlns_pubsub_owner })
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
801 :tag("affiliations", { node = node });
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
802
8935
a825ef6de45a mod_pubsub: Add the list of affiliations to reply
Kim Alvefur <zash@zash.se>
parents: 8934
diff changeset
803 for jid, affiliation in pairs(node_obj.affiliations) do
a825ef6de45a mod_pubsub: Add the list of affiliations to reply
Kim Alvefur <zash@zash.se>
parents: 8934
diff changeset
804 reply:tag("affiliation", { jid = jid, affiliation = affiliation }):up();
a825ef6de45a mod_pubsub: Add the list of affiliations to reply
Kim Alvefur <zash@zash.se>
parents: 8934
diff changeset
805 end
a825ef6de45a mod_pubsub: Add the list of affiliations to reply
Kim Alvefur <zash@zash.se>
parents: 8934
diff changeset
806
8933
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
807 origin.send(reply);
6d3ecf9e8277 mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents: 8932
diff changeset
808 return true;
8932
12a9731aef0b mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents: 8826
diff changeset
809 end
12a9731aef0b mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents: 8826
diff changeset
810
12a9731aef0b mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents: 8826
diff changeset
811 function handlers.owner_set_affiliations(origin, stanza, affiliations, service)
8937
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
812 local node = affiliations.attr.node;
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
813 if not node then
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
814 origin.send(pubsub_error_reply(stanza, "nodeid-required"));
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
815 return true;
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
816 end
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
817 if not service:may(node, stanza.attr.from, "set_affiliation") then
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
818 origin.send(pubsub_error_reply(stanza, "forbidden"));
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
819 return true;
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
820 end
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
821
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
822 local node_obj = service.nodes[node];
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
823 if not node_obj then
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
824 origin.send(pubsub_error_reply(stanza, "item-not-found"));
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
825 return true;
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
826 end
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
827
8938
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
828 for affiliation_tag in affiliations:childtags("affiliation") do
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
829 local jid = affiliation_tag.attr.jid;
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
830 local affiliation = affiliation_tag.attr.affiliation;
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
831
8940
365b16109d95 mod_pubsub: Apply normalization to JIDs retrieved from attributes
Kim Alvefur <zash@zash.se>
parents: 8939
diff changeset
832 jid = jid_prep(jid);
8938
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
833 if affiliation == "none" then affiliation = nil; end
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
834
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
835 local ok, err = service:set_affiliation(node, stanza.attr.from, jid, affiliation);
8939
849c4683eaa0 mod_pubsub: Handle :set_affiliation errors (not completely in line with the XEP)
Kim Alvefur <zash@zash.se>
parents: 8938
diff changeset
836 if not ok then
849c4683eaa0 mod_pubsub: Handle :set_affiliation errors (not completely in line with the XEP)
Kim Alvefur <zash@zash.se>
parents: 8938
diff changeset
837 -- FIXME Incomplete error handling,
849c4683eaa0 mod_pubsub: Handle :set_affiliation errors (not completely in line with the XEP)
Kim Alvefur <zash@zash.se>
parents: 8938
diff changeset
838 -- see XEP 60 8.9.2.4 Multiple Simultaneous Modifications
849c4683eaa0 mod_pubsub: Handle :set_affiliation errors (not completely in line with the XEP)
Kim Alvefur <zash@zash.se>
parents: 8938
diff changeset
839 origin.send(pubsub_error_reply(stanza, err));
849c4683eaa0 mod_pubsub: Handle :set_affiliation errors (not completely in line with the XEP)
Kim Alvefur <zash@zash.se>
parents: 8938
diff changeset
840 return true;
849c4683eaa0 mod_pubsub: Handle :set_affiliation errors (not completely in line with the XEP)
Kim Alvefur <zash@zash.se>
parents: 8938
diff changeset
841 end
8938
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
842 end
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
843
384ef9732b81 mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents: 8937
diff changeset
844 local reply = st.reply(stanza);
8937
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
845 origin.send(reply);
0ae46e6ea647 mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents: 8935
diff changeset
846 return true;
8932
12a9731aef0b mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents: 8826
diff changeset
847 end
12a9731aef0b mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents: 8826
diff changeset
848
11714
d783716103c1 mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents: 11631
diff changeset
849 local function create_encapsulating_item(id, payload, publisher)
d783716103c1 mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents: 11631
diff changeset
850 local item = st.stanza("item", { id = id, publisher = publisher, xmlns = xmlns_pubsub });
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
851 item:add_child(payload);
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
852 return item;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
853 end
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
854
11631
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11429
diff changeset
855 local function archive_itemstore(archive, max_items, user, node)
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11429
diff changeset
856 module:log("debug", "Creation of archive itemstore for node %s with limit %d", node, max_items);
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
857 local get_set = {};
8308
ab189d3f55d1 mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents: 8302
diff changeset
858 function get_set:items() -- luacheck: ignore 212/self
8324
58d228da618f mod_pubsub: Limit number of items to fetch from archive storage to pubsub#max_items to prevent unbounded query (thanks Martin and lovetox)
Kim Alvefur <zash@zash.se>
parents: 8323
diff changeset
859 local data, err = archive:find(user, {
9005
7203a1b65d1b mod_pubsub: Cache only max_items to avoid holding reference to possibly outdated config
Kim Alvefur <zash@zash.se>
parents: 8981
diff changeset
860 limit = tonumber(max_items);
8324
58d228da618f mod_pubsub: Limit number of items to fetch from archive storage to pubsub#max_items to prevent unbounded query (thanks Martin and lovetox)
Kim Alvefur <zash@zash.se>
parents: 8323
diff changeset
861 reverse = true;
58d228da618f mod_pubsub: Limit number of items to fetch from archive storage to pubsub#max_items to prevent unbounded query (thanks Martin and lovetox)
Kim Alvefur <zash@zash.se>
parents: 8323
diff changeset
862 });
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
863 if not data then
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
864 module:log("error", "Unable to get items: %s", err);
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
865 return true;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
866 end
8308
ab189d3f55d1 mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents: 8302
diff changeset
867 module:log("debug", "Listed items %s", data);
11769
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
868 return function()
10554
e1de29c41259 mod_pubsub: Ignore an unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 10356
diff changeset
869 -- luacheck: ignore 211/when
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
870 local id, payload, when, publisher = data();
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
871 if id == nil then
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
872 return;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
873 end
8327
0b561f8bc790 mod_pubsub: Remove expose_publisher argument since it is handled in broadcaster
Kim Alvefur <zash@zash.se>
parents: 8325
diff changeset
874 local item = create_encapsulating_item(id, payload, publisher);
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
875 return id, item;
11769
071715a18394 mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents: 11768
diff changeset
876 end;
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
877 end
8308
ab189d3f55d1 mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents: 8302
diff changeset
878 function get_set:get(key) -- luacheck: ignore 212/self
8219
2e68ae095645 mod_pubsub: Store data in users store, node in 'with' metadata field
Kim Alvefur <zash@zash.se>
parents: 8218
diff changeset
879 local data, err = archive:find(user, {
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
880 key = key;
8302
4852def7dc49 mod_pubsub: Workaround some storage modules without archive key deduplication
Kim Alvefur <zash@zash.se>
parents: 8301
diff changeset
881 -- Get the last item with that key, if the archive doesn't deduplicate
4852def7dc49 mod_pubsub: Workaround some storage modules without archive key deduplication
Kim Alvefur <zash@zash.se>
parents: 8301
diff changeset
882 reverse = true,
4852def7dc49 mod_pubsub: Workaround some storage modules without archive key deduplication
Kim Alvefur <zash@zash.se>
parents: 8301
diff changeset
883 limit = 1;
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
884 });
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
885 if not data then
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
886 module:log("error", "Unable to get item: %s", err);
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
887 return nil, err;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
888 end
8296
e23328adca25 mod_pubsub: Remove workaround for SQL issue (fixed in becb593ed86d)
Kim Alvefur <zash@zash.se>
parents: 8295
diff changeset
889 local id, payload, when, publisher = data();
8308
ab189d3f55d1 mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents: 8302
diff changeset
890 module:log("debug", "Get item %s (published at %s by %s)", id, when, publisher);
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
891 if id == nil then
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
892 return nil;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
893 end
8327
0b561f8bc790 mod_pubsub: Remove expose_publisher argument since it is handled in broadcaster
Kim Alvefur <zash@zash.se>
parents: 8325
diff changeset
894 return create_encapsulating_item(id, payload, publisher);
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
895 end
8308
ab189d3f55d1 mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents: 8302
diff changeset
896 function get_set:set(key, value) -- luacheck: ignore 212/self
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
897 local data, err;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
898 if value ~= nil then
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
899 local publisher = value.attr.publisher;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
900 local payload = value.tags[1];
8300
7759eb130938 mod_pep_plus, mod_pubsub: Store node content in separate archive stores
Kim Alvefur <zash@zash.se>
parents: 8298
diff changeset
901 data, err = archive:append(user, key, payload, time_now(), publisher);
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
902 else
8300
7759eb130938 mod_pep_plus, mod_pubsub: Store node content in separate archive stores
Kim Alvefur <zash@zash.se>
parents: 8298
diff changeset
903 data, err = archive:delete(user, { key = key; });
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
904 end
9072
9603a6a1ec85 mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents: 9041
diff changeset
905 -- TODO archive support for maintaining maximum items
9603a6a1ec85 mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents: 9041
diff changeset
906 archive:delete(user, {
9603a6a1ec85 mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents: 9041
diff changeset
907 truncate = max_items;
9603a6a1ec85 mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents: 9041
diff changeset
908 });
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
909 if not data then
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
910 module:log("error", "Unable to set item: %s", err);
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
911 return nil, err;
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
912 end
8217
5f4e0d67b82a util.pubsub: Catch overriden id from storage
Kim Alvefur <zash@zash.se>
parents: 8216
diff changeset
913 return data;
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
914 end
8301
e2ab440a3437 mod_pubsub: Ignore unused 'self' since the data used is an upvalue [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8300
diff changeset
915 function get_set:clear() -- luacheck: ignore 212/self
8300
7759eb130938 mod_pep_plus, mod_pubsub: Store node content in separate archive stores
Kim Alvefur <zash@zash.se>
parents: 8298
diff changeset
916 return archive:delete(user);
8298
dd9fa511494a mod_pubsub: Add method to clear data from a simple_itemstore
Kim Alvefur <zash@zash.se>
parents: 8296
diff changeset
917 end
8825
7270258fec77 mod_pubsup: Ignore unused 'self' argument [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8822
diff changeset
918 function get_set:resize(size) -- luacheck: ignore 212/self
9006
935e5ca43792 mod_pubsub: Update max_items on resize (fixes #1082)
Kim Alvefur <zash@zash.se>
parents: 9005
diff changeset
919 max_items = size;
8399
07443fe9df5b mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents: 8375
diff changeset
920 return archive:delete(user, {
07443fe9df5b mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents: 8375
diff changeset
921 truncate = size;
07443fe9df5b mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents: 8375
diff changeset
922 });
07443fe9df5b mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents: 8375
diff changeset
923 end
9206
33ee40dc3e25 Pubsub: Add tests for :get_last_item() and fix for non-persistent nodes
Matthew Wild <mwild1@gmail.com>
parents: 9200
diff changeset
924 function get_set:head()
33ee40dc3e25 Pubsub: Add tests for :get_last_item() and fix for non-persistent nodes
Matthew Wild <mwild1@gmail.com>
parents: 9200
diff changeset
925 -- This should conveniently return the most recent item
8375
e2037634cdd9 mod_pubsub: Add a tail method (like util.cache) to archive_itemstore
Kim Alvefur <zash@zash.se>
parents: 8374
diff changeset
926 local item = self:get(nil);
e2037634cdd9 mod_pubsub: Add a tail method (like util.cache) to archive_itemstore
Kim Alvefur <zash@zash.se>
parents: 8374
diff changeset
927 if item then
e2037634cdd9 mod_pubsub: Add a tail method (like util.cache) to archive_itemstore
Kim Alvefur <zash@zash.se>
parents: 8374
diff changeset
928 return item.attr.id, item;
e2037634cdd9 mod_pubsub: Add a tail method (like util.cache) to archive_itemstore
Kim Alvefur <zash@zash.se>
parents: 8374
diff changeset
929 end
e2037634cdd9 mod_pubsub: Add a tail method (like util.cache) to archive_itemstore
Kim Alvefur <zash@zash.se>
parents: 8374
diff changeset
930 end
11186
15fe9f0bb483 mod_pubsub: Don't set store as metatable
Kim Alvefur <zash@zash.se>
parents: 10554
diff changeset
931 return get_set;
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
932 end
8318
d0a7fc7614de mod_pubsub, mod_pep_plus: Rename simple_itemstore to reflect that it's based on archive storage
Kim Alvefur <zash@zash.se>
parents: 8317
diff changeset
933 _M.archive_itemstore = archive_itemstore;
8213
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
934
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
935 return _M;