Software / code / prosody
Annotate
plugins/mod_pubsub/pubsub.lib.lua @ 11821:a9ad287c3388
core.moduleapi: Filter out unrelated direct replies to module:send_iq
This is primarily something that happens with an internal query to
mod_mam, which calls origin.send() several times with results, leading
to the first such result being treated as the final response and
resolving the promise.
Now, these responses pass trough to the underlying origin.send(), where
they can be caught. Tricky but not impossible. For remote queries, it's
even trickier, you would likely need to bind a resource or similar.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 24 Sep 2021 20:12:16 +0200 |
| parent | 11803:024b44ad5651 |
| child | 11854:b605cbd5f13b |
| 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"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
89 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
|
90 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
|
91 }; |
|
8320
fe5eaf4ed631
mod_pep_plus: Make node persistence configurable via pubsub#persist_items
Kim Alvefur <zash@zash.se>
parents:
8318
diff
changeset
|
92 { |
|
fe5eaf4ed631
mod_pep_plus: Make node persistence configurable via pubsub#persist_items
Kim Alvefur <zash@zash.se>
parents:
8318
diff
changeset
|
93 type = "boolean"; |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
94 name = "persist_items"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
95 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
|
96 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
|
97 }; |
|
8814
07197f29e2b8
mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents:
8400
diff
changeset
|
98 { |
|
07197f29e2b8
mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents:
8400
diff
changeset
|
99 type = "list-single"; |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
100 name = "access_model"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
101 var = "pubsub#access_model"; |
|
9096
7de4eec02ece
mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents:
9076
diff
changeset
|
102 label = "Specify the subscriber model"; |
|
7de4eec02ece
mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents:
9076
diff
changeset
|
103 options = { |
|
9135
c68d62ae9cb7
pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9124
diff
changeset
|
104 "authorize", |
|
c68d62ae9cb7
pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9124
diff
changeset
|
105 "open", |
|
c68d62ae9cb7
pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9124
diff
changeset
|
106 "presence", |
|
c68d62ae9cb7
pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9124
diff
changeset
|
107 "roster", |
|
c68d62ae9cb7
pubsub.lib: correctly emit data form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9124
diff
changeset
|
108 "whitelist", |
|
9096
7de4eec02ece
mod_pubsub: Add access model to configuration form
Kim Alvefur <zash@zash.se>
parents:
9076
diff
changeset
|
109 }; |
|
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 type = "list-single"; |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
113 name = "publish_model"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
114 var = "pubsub#publish_model"; |
|
9130
74525b8104d5
pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents:
9128
diff
changeset
|
115 label = "Specify the publisher model"; |
|
74525b8104d5
pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents:
9128
diff
changeset
|
116 options = { |
|
9137
4803d2feeecb
pubsub.lib: fix more form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9136
diff
changeset
|
117 "publishers"; |
|
4803d2feeecb
pubsub.lib: fix more form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9136
diff
changeset
|
118 "subscribers"; |
|
4803d2feeecb
pubsub.lib: fix more form fields
Jonas Wielicki <jonas@wielicki.name>
parents:
9136
diff
changeset
|
119 "open"; |
|
9130
74525b8104d5
pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents:
9128
diff
changeset
|
120 }; |
|
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 { |
|
9182
ec48c02ded0c
mod_pubsub: Add support for "quiet nodes" (disabling notifications)
Kim Alvefur <zash@zash.se>
parents:
9180
diff
changeset
|
123 type = "boolean"; |
|
9211
a476d80761cd
mod_pubsub: Fix boolean value in form
Kim Alvefur <zash@zash.se>
parents:
9210
diff
changeset
|
124 value = true; |
|
9186
9f33a13eb011
mod_pubsub: Use the correct form field
Kim Alvefur <zash@zash.se>
parents:
9185
diff
changeset
|
125 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
|
126 name = "notify_items"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
127 var = "pubsub#deliver_notifications"; |
|
9182
ec48c02ded0c
mod_pubsub: Add support for "quiet nodes" (disabling notifications)
Kim Alvefur <zash@zash.se>
parents:
9180
diff
changeset
|
128 }; |
|
ec48c02ded0c
mod_pubsub: Add support for "quiet nodes" (disabling notifications)
Kim Alvefur <zash@zash.se>
parents:
9180
diff
changeset
|
129 { |
|
9188
ef2616ade453
mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents:
9186
diff
changeset
|
130 type = "boolean"; |
|
9212
127af0795e93
mod_pubsub: Add missing default value for deliver_payloads
Kim Alvefur <zash@zash.se>
parents:
9211
diff
changeset
|
131 value = true; |
|
9188
ef2616ade453
mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents:
9186
diff
changeset
|
132 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
|
133 name = "include_payload"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
134 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
|
135 }; |
|
ef2616ade453
mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents:
9186
diff
changeset
|
136 { |
|
9130
74525b8104d5
pubsub.lib: Add support for pubsub#publish_model
Matthew Wild <mwild1@gmail.com>
parents:
9128
diff
changeset
|
137 type = "list-single"; |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
138 name = "notification_type"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
139 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
|
140 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
|
141 options = { |
|
07197f29e2b8
mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents:
8400
diff
changeset
|
142 { 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
|
143 { 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
|
144 }; |
| 8822 | 145 }; |
|
9183
8239f24e38df
mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents:
9182
diff
changeset
|
146 { |
|
8239f24e38df
mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents:
9182
diff
changeset
|
147 type = "boolean"; |
|
8239f24e38df
mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents:
9182
diff
changeset
|
148 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
|
149 name = "notify_delete"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
150 var = "pubsub#notify_delete"; |
|
9185
60f163e7a7a7
mod_pubsub: Specify defaults for notification settings
Kim Alvefur <zash@zash.se>
parents:
9184
diff
changeset
|
151 value = true; |
|
9183
8239f24e38df
mod_pubsub: Make notification of node deletion configurable
Kim Alvefur <zash@zash.se>
parents:
9182
diff
changeset
|
152 }; |
|
9184
9fbddb80803b
mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents:
9183
diff
changeset
|
153 { |
|
9fbddb80803b
mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents:
9183
diff
changeset
|
154 type = "boolean"; |
|
9fbddb80803b
mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents:
9183
diff
changeset
|
155 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
|
156 name = "notify_retract"; |
|
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
157 var = "pubsub#notify_retract"; |
|
9185
60f163e7a7a7
mod_pubsub: Specify defaults for notification settings
Kim Alvefur <zash@zash.se>
parents:
9184
diff
changeset
|
158 value = true; |
|
9184
9fbddb80803b
mod_pubsub: Make notification of item retraction configurable
Kim Alvefur <zash@zash.se>
parents:
9183
diff
changeset
|
159 }; |
|
6446
011ca9b88179
mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents:
6445
diff
changeset
|
160 }; |
|
11785
b1381e302cab
mod_pubsub/pubsub.lib: Export config forms for use by other modules
Matthew Wild <mwild1@gmail.com>
parents:
11769
diff
changeset
|
161 _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
|
162 |
|
9116
9f36f5c14545
mod_pubsub: Rename variable subscription options form to improve readability
Kim Alvefur <zash@zash.se>
parents:
9115
diff
changeset
|
163 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
|
164 { |
|
d614003a82c1
mod_pubsub: Add support for parsing subscription options form (no options supported yet)
Kim Alvefur <zash@zash.se>
parents:
8825
diff
changeset
|
165 type = "hidden"; |
|
9274
1712e366b081
mod_pubsub: Exclude value of FORM_TYPE from stored data
Kim Alvefur <zash@zash.se>
parents:
9247
diff
changeset
|
166 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
|
167 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
|
168 }; |
|
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
9038
diff
changeset
|
169 { |
|
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
9038
diff
changeset
|
170 type = "boolean"; |
|
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
9038
diff
changeset
|
171 name = "pubsub#include_body"; |
|
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
9038
diff
changeset
|
172 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
|
173 }; |
|
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 }; |
|
11785
b1381e302cab
mod_pubsub/pubsub.lib: Export config forms for use by other modules
Matthew Wild <mwild1@gmail.com>
parents:
11769
diff
changeset
|
175 _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
|
176 |
|
8981
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
177 local node_metadata_form = dataform { |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
178 { |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
179 type = "hidden"; |
|
9274
1712e366b081
mod_pubsub: Exclude value of FORM_TYPE from stored data
Kim Alvefur <zash@zash.se>
parents:
9247
diff
changeset
|
180 var = "FORM_TYPE"; |
|
8981
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
181 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
|
182 }; |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
183 { |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
184 type = "text-single"; |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
185 name = "pubsub#title"; |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
186 }; |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
187 { |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
188 type = "text-single"; |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
189 name = "pubsub#description"; |
|
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
190 }; |
|
9180
cc68cb03f85e
mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents:
9137
diff
changeset
|
191 { |
|
cc68cb03f85e
mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents:
9137
diff
changeset
|
192 type = "text-single"; |
|
cc68cb03f85e
mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents:
9137
diff
changeset
|
193 name = "pubsub#type"; |
|
cc68cb03f85e
mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents:
9137
diff
changeset
|
194 }; |
|
10062
6ffed67356e9
mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents:
9817
diff
changeset
|
195 { |
|
6ffed67356e9
mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents:
9817
diff
changeset
|
196 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
|
197 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
|
198 }; |
|
6ffed67356e9
mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents:
9817
diff
changeset
|
199 { |
|
6ffed67356e9
mod_pubsub: Expose pubsub#access_model and pubsub#publish_model (fixes #1387)
Kim Alvefur <zash@zash.se>
parents:
9817
diff
changeset
|
200 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
|
201 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
|
202 }; |
|
8981
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
203 }; |
|
11785
b1381e302cab
mod_pubsub/pubsub.lib: Export config forms for use by other modules
Matthew Wild <mwild1@gmail.com>
parents:
11769
diff
changeset
|
204 _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
|
205 |
|
8340
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
206 local service_method_feature_map = { |
|
9199
596d0d82a113
mod_pubsub: Advertise support for subscription-options
Kim Alvefur <zash@zash.se>
parents:
9198
diff
changeset
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 node_defaults = { "retrieve-default" }; |
|
9131
d0d676b86013
pubsub.lib: Enable publish-options unconditionally
Matthew Wild <mwild1@gmail.com>
parents:
9130
diff
changeset
|
213 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
|
214 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
|
215 retract = { "delete-items", "retract-items" }; |
|
9198
2ce27be5fdd1
mod_pubsub: Advertise support for node meta-data
Kim Alvefur <zash@zash.se>
parents:
9188
diff
changeset
|
216 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
|
217 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
|
218 }; |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
219 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
|
220 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
|
221 }; |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
222 |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
223 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
|
224 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
|
225 |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
232 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
233 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
234 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
235 |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
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 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
243 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
244 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
245 |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
246 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
|
247 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
|
248 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
|
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 |
|
9102
f3a1ecc46f20
mod_pubsub: Advertise default access model in disco
Kim Alvefur <zash@zash.se>
parents:
9096
diff
changeset
|
252 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
|
253 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
|
254 end |
|
f3a1ecc46f20
mod_pubsub: Advertise default access model in disco
Kim Alvefur <zash@zash.se>
parents:
9096
diff
changeset
|
255 |
|
9109
31bf4b3abc7f
pubsub.lib: Advertise peristent-items feature when nodes and items are persisted
Matthew Wild <mwild1@gmail.com>
parents:
9102
diff
changeset
|
256 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
|
257 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
|
258 end |
|
31bf4b3abc7f
pubsub.lib: Advertise peristent-items feature when nodes and items are persisted
Matthew Wild <mwild1@gmail.com>
parents:
9102
diff
changeset
|
259 |
|
11803
024b44ad5651
mod_pubsub: Advertise support for 'max' as value for max_items
Kim Alvefur <zash@zash.se>
parents:
11785
diff
changeset
|
260 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
|
261 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
|
262 end |
|
024b44ad5651
mod_pubsub: Advertise support for 'max' as value for max_items
Kim Alvefur <zash@zash.se>
parents:
11785
diff
changeset
|
263 |
|
8340
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
264 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
|
265 end |
|
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8338
diff
changeset
|
266 |
|
8980
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
267 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
|
268 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
|
269 local ok, ret = service:get_nodes(stanza.attr.from); |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
270 local node_obj = ret[node]; |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
271 if not ok or not node_obj then |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
272 return; |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
273 end |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
274 event.exists = true; |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
275 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
|
276 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
|
277 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
|
278 ["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
|
279 ["pubsub#description"] = node_obj.config.description; |
|
9180
cc68cb03f85e
mod_pubsub: Add payload type metadata field
Kim Alvefur <zash@zash.se>
parents:
9137
diff
changeset
|
280 ["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
|
281 ["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
|
282 ["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
|
283 }, "result")); |
|
8981
b6cb0a8f75b1
mod_pubsub: Advertise title and description in disco#info
Kim Alvefur <zash@zash.se>
parents:
8980
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 end |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
286 |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
287 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
|
288 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
|
289 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
|
290 if not ok then |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
291 return; |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
292 end |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
293 |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
294 for _, id in ipairs(ret) do |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
295 reply:tag("item", { jid = module.host, name = id }):up(); |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
296 end |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
297 event.exists = true; |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
298 end |
|
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8979
diff
changeset
|
299 |
|
8334
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
300 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
|
301 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
|
302 local pubsub_tag = stanza.tags[1]; |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
303 local action = pubsub_tag.tags[1]; |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
304 if not action then |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
305 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
|
306 end |
|
8336
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
307 local prefix = ""; |
|
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
308 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
|
309 prefix = "owner_"; |
|
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
310 end |
|
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
311 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
|
312 if handler then |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
313 handler(origin, stanza, action, service); |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
314 return true; |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
315 end |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
316 end |
|
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8333
diff
changeset
|
317 |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
318 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
|
319 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
|
320 |
|
7aad9eb7f050
mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents:
9274
diff
changeset
|
321 local requested_items = {}; |
|
7aad9eb7f050
mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents:
9274
diff
changeset
|
322 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
|
323 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
|
324 end |
|
7aad9eb7f050
mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents:
9274
diff
changeset
|
325 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
|
326 requested_items = nil; |
|
7aad9eb7f050
mod_pubsub: Support requests for multiple items (fixes #1305)
Kim Alvefur <zash@zash.se>
parents:
9274
diff
changeset
|
327 end |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
328 |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
329 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
|
330 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
|
331 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
332 end |
|
11768
aa6ab07544c2
mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents:
11723
diff
changeset
|
333 local resultspec; -- TODO rsm.get() |
|
aa6ab07544c2
mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents:
11723
diff
changeset
|
334 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
|
335 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
|
336 end |
|
aa6ab07544c2
mod_pubsub: Add support for limiting result size #1608
Kim Alvefur <zash@zash.se>
parents:
11723
diff
changeset
|
337 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
|
338 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
|
339 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
|
340 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
341 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
342 |
|
11715
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11714
diff
changeset
|
343 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
|
344 |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
345 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
|
346 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
|
347 if not requested_items then |
|
071715a18394
mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents:
11768
diff
changeset
|
348 -- 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
|
349 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
|
350 end |
|
071715a18394
mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents:
11768
diff
changeset
|
351 |
|
071715a18394
mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents:
11768
diff
changeset
|
352 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
|
353 local item = results[id]; |
|
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11714
diff
changeset
|
354 if not expose_publisher then |
|
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11714
diff
changeset
|
355 item = st.clone(item); |
|
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11714
diff
changeset
|
356 item.attr.publisher = nil; |
|
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11714
diff
changeset
|
357 end |
|
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11714
diff
changeset
|
358 data:add_child(item); |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
359 end |
|
10090
cdcf26331b9f
mod_pubsub: Eliminate dead code
Kim Alvefur <zash@zash.se>
parents:
10062
diff
changeset
|
360 local reply = st.reply(stanza) |
|
cdcf26331b9f
mod_pubsub: Eliminate dead code
Kim Alvefur <zash@zash.se>
parents:
10062
diff
changeset
|
361 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
cdcf26331b9f
mod_pubsub: Eliminate dead code
Kim Alvefur <zash@zash.se>
parents:
10062
diff
changeset
|
362 :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
|
363 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
|
364 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
365 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
366 |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
367 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
|
368 local node = subscriptions.attr.node; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
369 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
|
370 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
|
371 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
|
372 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
373 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
374 local reply = st.reply(stanza) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
375 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
376 :tag("subscriptions"); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
377 for _, sub in ipairs(ret) do |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
378 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
|
379 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
|
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 |
|
9032
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
384 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
|
385 local node = subscriptions.attr.node; |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
386 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
|
387 if not ok then |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
388 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
|
389 return true; |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
390 end |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
391 local reply = st.reply(stanza) |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
392 :tag("pubsub", { xmlns = xmlns_pubsub_owner }) |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
393 :tag("subscriptions"); |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
394 for _, sub in ipairs(ret) do |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
395 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
|
396 end |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
397 origin.send(reply); |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
398 return true; |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
399 end |
|
029e1e18d65c
mod_pubsub: Add support for owner subscription retrieval
Kim Alvefur <zash@zash.se>
parents:
9006
diff
changeset
|
400 |
|
9033
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
401 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
|
402 local node = subscriptions.attr.node; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
403 if not node then |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
404 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
|
405 return true; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
406 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
407 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
|
408 origin.send(pubsub_error_reply(stanza, "forbidden")); |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
409 return true; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
410 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
411 |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
412 local node_obj = service.nodes[node]; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
413 if not node_obj then |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
414 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
|
415 return true; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
416 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
417 |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
418 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
|
419 if subscription_tag.attr.subscription == 'subscribed' then |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
420 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
|
421 if not ok then |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
422 origin.send(pubsub_error_reply(stanza, err)); |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
423 return true; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
424 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
425 elseif subscription_tag.attr.subscription == 'none' then |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
426 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
|
427 if not ok then |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
428 origin.send(pubsub_error_reply(stanza, err)); |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
429 return true; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
430 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
431 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
432 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
433 |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
434 local reply = st.reply(stanza); |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
435 origin.send(reply); |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
436 return true; |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
437 end |
|
f1b6efd5b379
mod_pubsub: Add support for modifying subscriptions
Kim Alvefur <zash@zash.se>
parents:
9032
diff
changeset
|
438 |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
439 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
|
440 local node = create.attr.node; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
441 local ok, ret, reply; |
|
8337
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
442 local config; |
|
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
443 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
|
444 if configure then |
|
8338
30d8157391e9
mod_pubsub: Use correct variable name [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8337
diff
changeset
|
445 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
|
446 if not config_form then |
|
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
447 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
|
448 return true; |
|
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
449 end |
|
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
450 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
|
451 if err then |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
452 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
|
453 return true; |
|
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
454 end |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
455 config = form_data; |
|
8337
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
456 end |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
457 if node then |
|
8337
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
458 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
|
459 if ok then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
460 reply = st.reply(stanza); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
461 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
462 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
463 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
464 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
465 repeat |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
466 node = uuid_generate(); |
|
8337
dc4ea43ac463
mod_pubsub: Add support for Create and Configure
Kim Alvefur <zash@zash.se>
parents:
8336
diff
changeset
|
467 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
|
468 until ok or ret ~= "conflict"; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
469 if ok then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
470 reply = st.reply(stanza) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
471 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
472 :tag("create", { node = node }); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
473 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
474 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
475 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
476 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
|
477 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
|
478 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
479 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
480 |
|
8336
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
481 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
|
482 local node = delete.attr.node; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
483 |
|
8210
352d605b1178
mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7358
diff
changeset
|
484 local reply; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
485 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
|
486 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
|
487 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
488 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
489 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
|
490 if ok then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
491 reply = st.reply(stanza); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
492 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
493 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
494 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
|
495 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
|
496 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
497 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
498 |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
499 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
|
500 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
|
501 jid = jid_prep(jid); |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
502 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
|
503 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
|
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 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
|
507 if options_tag then |
|
9247
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
508 -- FIXME form parsing errors ignored here, why? |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
509 local err |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
510 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
|
511 if err then |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
512 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
|
513 return true |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
514 end |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
515 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
516 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
|
517 local reply; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
518 if ok then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
519 reply = st.reply(stanza) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
520 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
521 :tag("subscription", { |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
522 node = node, |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
523 jid = jid, |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
524 subscription = "subscribed" |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
525 }):up(); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
526 if options_tag then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
527 reply:add_child(options_tag); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
528 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
529 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
530 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
531 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
532 origin.send(reply); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
533 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
534 |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
535 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
|
536 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
|
537 jid = jid_prep(jid); |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
538 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
|
539 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
|
540 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
541 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
542 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
|
543 local reply; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
544 if ok then |
|
11429
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
545 reply = st.reply(stanza) |
|
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
546 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
547 :tag("subscription", { |
|
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
548 node = node, |
|
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
549 jid = jid, |
|
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
550 subscription = "none" |
|
ef623d719894
mod_pubsub: Include <pubsub> with unsubscribe reply
Kim Alvefur <zash@zash.se>
parents:
11187
diff
changeset
|
551 }):up(); |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
552 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
553 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
554 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
|
555 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
|
556 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
557 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
558 |
|
9040
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
559 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
|
560 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
|
561 jid = jid_prep(jid); |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
562 if not (node and jid) then |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
563 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
|
564 return true; |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
565 end |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
566 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
|
567 if not ok then |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
568 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
|
569 return true; |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
570 end |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
571 if ret == true then ret = {} end |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
572 origin.send(st.reply(stanza) |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
573 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
574 :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
|
575 :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
|
576 return true; |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
577 end |
|
e993fad0cc62
mod_pubsub: Add support for retrieving subscription options
Kim Alvefur <zash@zash.se>
parents:
9039
diff
changeset
|
578 |
|
9041
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
579 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
|
580 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
|
581 jid = jid_prep(jid); |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
582 if not (node and jid) then |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
583 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
|
584 return true; |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
585 end |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
586 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
|
587 if not ok then |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
588 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
|
589 return true; |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
590 elseif not ret then |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
591 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
|
592 return true; |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
593 end |
|
9235
7fbcabee6df1
mod_pubsub: Preserve current subscription options if given a partial form
Kim Alvefur <zash@zash.se>
parents:
9212
diff
changeset
|
594 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
|
595 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
|
596 if err then |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
597 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
|
598 return true; |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
599 end |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
600 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
|
601 if not ok then |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
602 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
|
603 return true; |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
604 end |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
605 origin.send(st.reply(stanza)); |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
606 return true; |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
607 end |
|
b3bc742ee188
mod_pubsub: Add support for changing subscription options
Kim Alvefur <zash@zash.se>
parents:
9040
diff
changeset
|
608 |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
609 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
|
610 local node = publish.attr.node; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
611 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
|
612 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
|
613 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
614 end |
|
9200
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9199
diff
changeset
|
615 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
|
616 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
|
617 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
|
618 -- 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
|
619 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
|
620 local err; |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
621 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
|
622 if err then |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
623 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
|
624 return true |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
625 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
|
626 end |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
627 local item = publish:get_child("item"); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
628 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
|
629 if not id then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
630 id = uuid_generate(); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
631 if item then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
632 item.attr.id = id; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
633 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
634 end |
|
11714
d783716103c1
mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents:
11631
diff
changeset
|
635 if item then |
|
d783716103c1
mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents:
11631
diff
changeset
|
636 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
|
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 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
|
639 local reply; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
640 if ok then |
|
8400
518b56d806bd
mod_pubsub: Allow itemstore to override item ids
Kim Alvefur <zash@zash.se>
parents:
8399
diff
changeset
|
641 if type(ok) == "string" then |
|
518b56d806bd
mod_pubsub: Allow itemstore to override item ids
Kim Alvefur <zash@zash.se>
parents:
8399
diff
changeset
|
642 id = ok; |
|
518b56d806bd
mod_pubsub: Allow itemstore to override item ids
Kim Alvefur <zash@zash.se>
parents:
8399
diff
changeset
|
643 end |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
644 reply = st.reply(stanza) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
645 :tag("pubsub", { xmlns = xmlns_pubsub }) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
646 :tag("publish", { node = node }) |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
647 :tag("item", { id = id }); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
648 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
649 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
650 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
|
651 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
|
652 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
653 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
654 |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
655 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
|
656 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
|
657 notify = (notify == "1") or (notify == "true"); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
658 local item = retract:get_child("item"); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
659 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
|
660 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
|
661 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
|
662 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
663 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
664 local reply, notifier; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
665 if notify then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
666 notifier = st.stanza("retract", { id = id }); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
667 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
668 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
|
669 if ok then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
670 reply = st.reply(stanza); |
|
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 |
|
8336
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
678 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
|
679 local node = purge.attr.node; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
680 local reply; |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
681 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
|
682 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
|
683 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
684 end |
|
10276
4e4ce7400b39
mod_pubsub: Remove the unwanted check for @notify on <purge/>.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
10090
diff
changeset
|
685 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
|
686 if ok then |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
687 reply = st.reply(stanza); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
688 else |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
689 reply = pubsub_error_reply(stanza, ret); |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
690 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
|
691 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
|
692 return true; |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
693 end |
|
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
694 |
|
8336
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
695 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
|
696 local node = config.attr.node; |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
697 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
|
698 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
|
699 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
700 end |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
701 |
|
9120
01fc8ba0a7fa
mod_pubsub: Use util.pubsub API for retrieving node config instead
Kim Alvefur <zash@zash.se>
parents:
9116
diff
changeset
|
702 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
|
703 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
|
704 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
|
705 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
706 end |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
707 |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
708 local reply = st.reply(stanza) |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
709 :tag("pubsub", { xmlns = xmlns_pubsub_owner }) |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
710 :tag("configure", { node = node }) |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
711 :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
|
712 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
|
713 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
714 end |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
715 |
|
8336
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
716 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
|
717 local node = config.attr.node; |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
718 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
|
719 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
|
720 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
721 end |
|
6446
011ca9b88179
mod_pubsub: Move node config form into pubsub.lib (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents:
6445
diff
changeset
|
722 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
|
723 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
|
724 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
725 end |
|
8317
ff57b3cc5a8e
mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents:
8308
diff
changeset
|
726 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
|
727 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
|
728 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
|
729 return true; |
|
ff57b3cc5a8e
mod_pubsub: Make sure that a dataform is given to configure
Kim Alvefur <zash@zash.se>
parents:
8308
diff
changeset
|
730 end |
|
9122
a69dc9c729ec
mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents:
9120
diff
changeset
|
731 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
|
732 if not ok then |
|
a69dc9c729ec
mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents:
9120
diff
changeset
|
733 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
|
734 return true; |
|
a69dc9c729ec
mod_pubsub: Pass the current values to dataforms
Kim Alvefur <zash@zash.se>
parents:
9120
diff
changeset
|
735 end |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
736 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
|
737 if err then |
|
26854d7a4947
mod_pubsub: Fix dataforms error handling
Kim Alvefur <zash@zash.se>
parents:
9245
diff
changeset
|
738 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
|
739 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
740 end |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
741 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
|
742 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
|
743 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
|
744 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
745 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
|
746 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
|
747 return true; |
|
6438
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
748 end |
|
b1c40054b59d
mod_pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
5851
diff
changeset
|
749 |
|
8336
587305c0ff85
mod_pubsub: Fix namespace conflict with the pubsub#owner namespace
Kim Alvefur <zash@zash.se>
parents:
8334
diff
changeset
|
750 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
|
751 local reply = st.reply(stanza) |
|
bcb1ea9047d3
mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents:
6438
diff
changeset
|
752 :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
|
753 :tag("default") |
|
9244
b3b156bd9914
mod_pubsub: Use field mapping in util.dataforms
Kim Alvefur <zash@zash.se>
parents:
9235
diff
changeset
|
754 :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
|
755 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
|
756 return true; |
|
6441
bcb1ea9047d3
mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents:
6438
diff
changeset
|
757 end |
|
bcb1ea9047d3
mod_pubsub: Add support for requesting default node configuration
Kim Alvefur <zash@zash.se>
parents:
6438
diff
changeset
|
758 |
|
8932
12a9731aef0b
mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents:
8826
diff
changeset
|
759 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
|
760 local node = affiliations.attr.node; |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
761 if not node then |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
762 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
|
763 return true; |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
764 end |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
765 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
|
766 origin.send(pubsub_error_reply(stanza, "forbidden")); |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
767 return true; |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
768 end |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
769 |
|
8934
365bcf899093
mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents:
8933
diff
changeset
|
770 local node_obj = service.nodes[node]; |
|
365bcf899093
mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents:
8933
diff
changeset
|
771 if not node_obj then |
|
365bcf899093
mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents:
8933
diff
changeset
|
772 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
|
773 return true; |
|
365bcf899093
mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents:
8933
diff
changeset
|
774 end |
|
365bcf899093
mod_pubsub: Retrieve the node object
Kim Alvefur <zash@zash.se>
parents:
8933
diff
changeset
|
775 |
|
8933
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
776 local reply = st.reply(stanza) |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
777 :tag("pubsub", { xmlns = xmlns_pubsub_owner }) |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
778 :tag("affiliations", { node = node }); |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
779 |
|
8935
a825ef6de45a
mod_pubsub: Add the list of affiliations to reply
Kim Alvefur <zash@zash.se>
parents:
8934
diff
changeset
|
780 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
|
781 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
|
782 end |
|
a825ef6de45a
mod_pubsub: Add the list of affiliations to reply
Kim Alvefur <zash@zash.se>
parents:
8934
diff
changeset
|
783 |
|
8933
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
784 origin.send(reply); |
|
6d3ecf9e8277
mod_pubsub: Boilerplate checks for affiliation retrieval
Kim Alvefur <zash@zash.se>
parents:
8932
diff
changeset
|
785 return true; |
|
8932
12a9731aef0b
mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents:
8826
diff
changeset
|
786 end |
|
12a9731aef0b
mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents:
8826
diff
changeset
|
787 |
|
12a9731aef0b
mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents:
8826
diff
changeset
|
788 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
|
789 local node = affiliations.attr.node; |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
790 if not node then |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
791 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
|
792 return true; |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
793 end |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
794 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
|
795 origin.send(pubsub_error_reply(stanza, "forbidden")); |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
796 return true; |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
797 end |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
798 |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
799 local node_obj = service.nodes[node]; |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
800 if not node_obj then |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
801 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
|
802 return true; |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
803 end |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
804 |
|
8938
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
805 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
|
806 local jid = affiliation_tag.attr.jid; |
|
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
807 local affiliation = affiliation_tag.attr.affiliation; |
|
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
808 |
|
8940
365b16109d95
mod_pubsub: Apply normalization to JIDs retrieved from attributes
Kim Alvefur <zash@zash.se>
parents:
8939
diff
changeset
|
809 jid = jid_prep(jid); |
|
8938
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
810 if affiliation == "none" then affiliation = nil; end |
|
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
811 |
|
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
812 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
|
813 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
|
814 -- 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
|
815 -- 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
|
816 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
|
817 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
|
818 end |
|
8938
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
819 end |
|
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
820 |
|
384ef9732b81
mod_pubsub: Support for setting affiliations (#622)
Kim Alvefur <zash@zash.se>
parents:
8937
diff
changeset
|
821 local reply = st.reply(stanza); |
|
8937
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
822 origin.send(reply); |
|
0ae46e6ea647
mod_pubsub: Add boilerplate for changing affiliations
Kim Alvefur <zash@zash.se>
parents:
8935
diff
changeset
|
823 return true; |
|
8932
12a9731aef0b
mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents:
8826
diff
changeset
|
824 end |
|
12a9731aef0b
mod_pubsub: Add stubs for affiliation handling
Kim Alvefur <zash@zash.se>
parents:
8826
diff
changeset
|
825 |
|
11714
d783716103c1
mod_pubsub: Fix inclusion of publisher (fixes #1399)
Kim Alvefur <zash@zash.se>
parents:
11631
diff
changeset
|
826 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
|
827 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
|
828 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
|
829 return item; |
|
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
830 end |
|
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
831 |
|
11631
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11429
diff
changeset
|
832 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
|
833 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
|
834 local get_set = {}; |
|
8308
ab189d3f55d1
mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents:
8302
diff
changeset
|
835 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
|
836 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
|
837 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
|
838 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
|
839 }); |
|
8213
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
840 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
|
841 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
|
842 return true; |
|
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
843 end |
|
8308
ab189d3f55d1
mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents:
8302
diff
changeset
|
844 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
|
845 return function() |
|
10554
e1de29c41259
mod_pubsub: Ignore an unused variable [luacheck]
Kim Alvefur <zash@zash.se>
parents:
10356
diff
changeset
|
846 -- 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
|
847 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
|
848 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
|
849 return; |
|
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
850 end |
|
8327
0b561f8bc790
mod_pubsub: Remove expose_publisher argument since it is handled in broadcaster
Kim Alvefur <zash@zash.se>
parents:
8325
diff
changeset
|
851 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
|
852 return id, item; |
|
11769
071715a18394
mod_pubsub: Move reversal of item order in <items>
Kim Alvefur <zash@zash.se>
parents:
11768
diff
changeset
|
853 end; |
|
8213
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
854 end |
|
8308
ab189d3f55d1
mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents:
8302
diff
changeset
|
855 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
|
856 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
|
857 key = key; |
|
8302
4852def7dc49
mod_pubsub: Workaround some storage modules without archive key deduplication
Kim Alvefur <zash@zash.se>
parents:
8301
diff
changeset
|
858 -- 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
|
859 reverse = true, |
|
4852def7dc49
mod_pubsub: Workaround some storage modules without archive key deduplication
Kim Alvefur <zash@zash.se>
parents:
8301
diff
changeset
|
860 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
|
861 }); |
|
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
862 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
|
863 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
|
864 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
|
865 end |
|
8296
e23328adca25
mod_pubsub: Remove workaround for SQL issue (fixed in becb593ed86d)
Kim Alvefur <zash@zash.se>
parents:
8295
diff
changeset
|
866 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
|
867 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
|
868 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
|
869 return nil; |
|
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
870 end |
|
8327
0b561f8bc790
mod_pubsub: Remove expose_publisher argument since it is handled in broadcaster
Kim Alvefur <zash@zash.se>
parents:
8325
diff
changeset
|
871 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
|
872 end |
|
8308
ab189d3f55d1
mod_pubsub: Remove use of non-existent fields
Kim Alvefur <zash@zash.se>
parents:
8302
diff
changeset
|
873 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
|
874 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
|
875 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
|
876 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
|
877 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
|
878 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
|
879 else |
|
8300
7759eb130938
mod_pep_plus, mod_pubsub: Store node content in separate archive stores
Kim Alvefur <zash@zash.se>
parents:
8298
diff
changeset
|
880 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
|
881 end |
|
9072
9603a6a1ec85
mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents:
9041
diff
changeset
|
882 -- TODO archive support for maintaining maximum items |
|
9603a6a1ec85
mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents:
9041
diff
changeset
|
883 archive:delete(user, { |
|
9603a6a1ec85
mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents:
9041
diff
changeset
|
884 truncate = max_items; |
|
9603a6a1ec85
mod_pubsub: Enforce max_items on insertion
Kim Alvefur <zash@zash.se>
parents:
9041
diff
changeset
|
885 }); |
|
8213
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
886 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
|
887 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
|
888 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
|
889 end |
|
8217
5f4e0d67b82a
util.pubsub: Catch overriden id from storage
Kim Alvefur <zash@zash.se>
parents:
8216
diff
changeset
|
890 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
|
891 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
|
892 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
|
893 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
|
894 end |
|
8825
7270258fec77
mod_pubsup: Ignore unused 'self' argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8822
diff
changeset
|
895 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
|
896 max_items = size; |
|
8399
07443fe9df5b
mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents:
8375
diff
changeset
|
897 return archive:delete(user, { |
|
07443fe9df5b
mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents:
8375
diff
changeset
|
898 truncate = size; |
|
07443fe9df5b
mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents:
8375
diff
changeset
|
899 }); |
|
07443fe9df5b
mod_pubsub/archive_itemstore: Support resize operation
Kim Alvefur <zash@zash.se>
parents:
8375
diff
changeset
|
900 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
|
901 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
|
902 -- 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
|
903 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
|
904 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
|
905 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
|
906 end |
|
e2037634cdd9
mod_pubsub: Add a tail method (like util.cache) to archive_itemstore
Kim Alvefur <zash@zash.se>
parents:
8374
diff
changeset
|
907 end |
|
11186
15fe9f0bb483
mod_pubsub: Don't set store as metatable
Kim Alvefur <zash@zash.se>
parents:
10554
diff
changeset
|
908 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
|
909 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
|
910 _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
|
911 |
|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
912 return _M; |