Annotate

plugins/mod_pubsub/pubsub.lib.lua @ 12532:8e4033213c62

luacheck: Ignore new warning about using variables prefixed with '_' luacheck 0.26 considers the _ prefix as a hint that the variable or argument is unused, then warns if they are used despite this. We have several places where this prefix is used to avoid shadowing another similarly named variable, resulting in many instances of this warning.
author Kim Alvefur <zash@zash.se>
date Mon, 30 May 2022 16:49:52 +0200
parent 12021:376522fb3f52
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;