Software /
code /
prosody
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 |
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 | 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 | 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 | 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; |