Software /
code /
prosody
Annotate
plugins/mod_pubsub/mod_pubsub.lua @ 12271:f31bb79f51d7
tools: Allow processing instructions in some XML parsing tools
IANA registry files have XSLT references, which are harmless to ignore.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 04 Feb 2022 21:20:48 +0100 |
parent | 12215:33a93d0a9a45 |
child | 12427:018ac691ee22 |
rev | line source |
---|---|
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
1 local pubsub = require "util.pubsub"; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
2 local st = require "util.stanza"; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
3 local jid_bare = require "util.jid".bare; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
4 local usermanager = require "core.usermanager"; |
8811
f2d35eee69c9
mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents:
8808
diff
changeset
|
5 local new_id = require "util.id".medium; |
9828
8e68136cde08
mod_pubsub: Simplify configuration for node data (see #1302)
Kim Alvefur <zash@zash.se>
parents:
9597
diff
changeset
|
6 local storagemanager = require "core.storagemanager"; |
12214
82cf9d3ffeee
mod_pubsub: Use the util.xtemplate to render Atom summary
Kim Alvefur <zash@zash.se>
parents:
12212
diff
changeset
|
7 local xtemplate = require "util.xtemplate"; |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
8 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
9 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
|
10 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
11 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
12 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
13 local autocreate_on_publish = module:get_option_boolean("autocreate_on_publish", false); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
14 local autocreate_on_subscribe = module:get_option_boolean("autocreate_on_subscribe", false); |
7983
879be73c0a58
mod_pubsub: Fix syntax error introduced in 241f02bd66ce
Matthew Wild <mwild1@gmail.com>
parents:
7980
diff
changeset
|
15 local pubsub_disco_name = module:get_option_string("name", "Prosody PubSub Service"); |
6515
c9a72c64c3e2
mod_pubsub: Add support for including the publisher in item broadcasts
Philipp Hancke <fippo@goodadvice.pages.de>
parents:
6446
diff
changeset
|
16 local expose_publisher = module:get_option_boolean("expose_publisher", false) |
5626
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 service; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
19 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
20 local lib_pubsub = module:require "pubsub"; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
21 |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
22 module:depends("disco"); |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
23 module:add_identity("pubsub", "service", pubsub_disco_name); |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
24 module:add_feature("http://jabber.org/protocol/pubsub"); |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
25 |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
26 function handle_pubsub_iq(event) |
8334
036e46d12b78
mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents:
8328
diff
changeset
|
27 return lib_pubsub.handle_pubsub_iq(event, service); |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
28 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
29 |
9108
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
30 -- An itemstore supports the following methods: |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
31 -- items(): iterator over (id, item) |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
32 -- get(id): return item with id |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
33 -- set(id, item): set id to item |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
34 -- clear(): clear all items |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
35 -- resize(n): set new limit and trim oldest items |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
36 -- tail(): return the latest item |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
37 |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
38 -- A nodestore supports the following methods: |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
39 -- set(node_name, node_data) |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
40 -- get(node_name) |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
41 -- users(): iterator over (node_name) |
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
42 |
11631
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
43 local max_max_items = module:get_option_number("pubsub_max_items", 256); |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
44 |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
45 local function tonumber_max_items(n) |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
46 if n == "max" then |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
47 return max_max_items; |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
48 end |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
49 return tonumber(n); |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
50 end |
9108
86f31a2174b3
mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents:
9101
diff
changeset
|
51 |
11856
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
52 for _, field in ipairs(lib_pubsub.node_config_form) do |
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
53 if field.var == "pubsub#max_items" then |
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
54 field.range_max = max_max_items; |
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
55 break; |
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
56 end |
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
57 end |
14a679588b7b
mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents:
11732
diff
changeset
|
58 |
8504
80b8355c8b8b
mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents:
8503
diff
changeset
|
59 local node_store = module:open_store(module.name.."_nodes"); |
80b8355c8b8b
mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents:
8503
diff
changeset
|
60 |
11188
8a29e7206917
mod_pubsub: Comment on itemstore type
Kim Alvefur <zash@zash.se>
parents:
10673
diff
changeset
|
61 local function create_simple_itemstore(node_config, node_name) --> util.cache like object |
9828
8e68136cde08
mod_pubsub: Simplify configuration for node data (see #1302)
Kim Alvefur <zash@zash.se>
parents:
9597
diff
changeset
|
62 local driver = storagemanager.get_driver(module.host, "pubsub_data"); |
8e68136cde08
mod_pubsub: Simplify configuration for node data (see #1302)
Kim Alvefur <zash@zash.se>
parents:
9597
diff
changeset
|
63 local archive = driver:open("pubsub_"..node_name, "archive"); |
11631
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
64 local max_items = tonumber_max_items(node_config["max_items"]); |
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
65 return lib_pubsub.archive_itemstore(archive, max_items, nil, node_name); |
8213
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
66 end |
e1272aeef31c
mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8210
diff
changeset
|
67 |
11725
789da12cf232
mod_pubsub: Silence warning about 'service' as argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
11720
diff
changeset
|
68 function simple_broadcast(kind, node, jids, item, actor, node_obj, service) --luacheck: ignore 431/service |
9181
79cf1f74738f
mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents:
9179
diff
changeset
|
69 if node_obj then |
79cf1f74738f
mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents:
9179
diff
changeset
|
70 if node_obj.config["notify_"..kind] == false then |
79cf1f74738f
mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents:
9179
diff
changeset
|
71 return; |
79cf1f74738f
mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents:
9179
diff
changeset
|
72 end |
79cf1f74738f
mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents:
9179
diff
changeset
|
73 end |
9179
82fad995a149
util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents:
9158
diff
changeset
|
74 if kind == "retract" then |
82fad995a149
util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents:
9158
diff
changeset
|
75 kind = "items"; -- XEP-0060 signals retraction in an <items> container |
82fad995a149
util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents:
9158
diff
changeset
|
76 end |
82fad995a149
util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents:
9158
diff
changeset
|
77 |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
78 if item then |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
79 item = st.clone(item); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
80 item.attr.xmlns = nil; -- Clear the pubsub namespace |
9187
bd452e4f5a13
mod_pubsub: Only attach publisher on normal "item" broadcasts
Kim Alvefur <zash@zash.se>
parents:
9181
diff
changeset
|
81 if kind == "items" then |
9188
ef2616ade453
mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents:
9187
diff
changeset
|
82 if node_obj and node_obj.config.include_payload == false then |
ef2616ade453
mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents:
9187
diff
changeset
|
83 item:maptags(function () return nil; end); |
ef2616ade453
mod_pubsub: Add support for thin notifications (without the full payload)
Kim Alvefur <zash@zash.se>
parents:
9187
diff
changeset
|
84 end |
11718
d79f5431f31b
mod_pubsub: Remove publisher field when not exposing publisher
Kim Alvefur <zash@zash.se>
parents:
11717
diff
changeset
|
85 if not expose_publisher then |
d79f5431f31b
mod_pubsub: Remove publisher field when not exposing publisher
Kim Alvefur <zash@zash.se>
parents:
11717
diff
changeset
|
86 item.attr.publisher = nil; |
d79f5431f31b
mod_pubsub: Remove publisher field when not exposing publisher
Kim Alvefur <zash@zash.se>
parents:
11717
diff
changeset
|
87 elseif not item.attr.publisher then |
11717
605484fc1c62
mod_pubsub: Normalize 'publisher' JID
Kim Alvefur <zash@zash.se>
parents:
11715
diff
changeset
|
88 item.attr.publisher = service.config.normalize_jid(actor); |
9187
bd452e4f5a13
mod_pubsub: Only attach publisher on normal "item" broadcasts
Kim Alvefur <zash@zash.se>
parents:
9181
diff
changeset
|
89 end |
6515
c9a72c64c3e2
mod_pubsub: Add support for including the publisher in item broadcasts
Philipp Hancke <fippo@goodadvice.pages.de>
parents:
6446
diff
changeset
|
90 end |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
91 end |
8811
f2d35eee69c9
mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents:
8808
diff
changeset
|
92 |
f2d35eee69c9
mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents:
8808
diff
changeset
|
93 local id = new_id(); |
11201
4ae1d485a9c6
mod_pubsub: Fix notification stanza type setting (fixes #1605)
Kim Alvefur <zash@zash.se>
parents:
11199
diff
changeset
|
94 local msg_type = node_obj and node_obj.config.notification_type or "headline"; |
8814
07197f29e2b8
mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents:
8811
diff
changeset
|
95 local message = st.message({ from = module.host, type = msg_type, id = id }) |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
96 :tag("event", { xmlns = xmlns_pubsub_event }) |
9720
e7ddf70ae417
mod_pubsub: Add semicolon (code style)
Kim Alvefur <zash@zash.se>
parents:
9597
diff
changeset
|
97 :tag(kind, { node = node }); |
8946
3a095233e178
mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents:
8815
diff
changeset
|
98 |
3a095233e178
mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents:
8815
diff
changeset
|
99 if item then |
3a095233e178
mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents:
8815
diff
changeset
|
100 message:add_child(item); |
3a095233e178
mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents:
8815
diff
changeset
|
101 end |
8814
07197f29e2b8
mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents:
8811
diff
changeset
|
102 |
9039
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
103 local summary; |
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
104 if item and item.tags[1] then |
8815
5974c9da1391
mod_pubsub: Add support for generation of a plain text <body> from Atom payloads
Kim Alvefur <zash@zash.se>
parents:
8814
diff
changeset
|
105 local payload = item.tags[1]; |
12212
bc6fc1cb04ae
mod_pubsub: Use the 'pubsub#type' setting to pick summary generator
Kim Alvefur <zash@zash.se>
parents:
12153
diff
changeset
|
106 local payload_type = node_obj and node_obj.config.payload_type or payload.attr.xmlns; |
bc6fc1cb04ae
mod_pubsub: Use the 'pubsub#type' setting to pick summary generator
Kim Alvefur <zash@zash.se>
parents:
12153
diff
changeset
|
107 summary = module:fire_event("pubsub-summary/"..payload_type, { |
9045
4336a2b97aba
mod_pubsub: Make generation of notification body into an event to allow extensibility
Kim Alvefur <zash@zash.se>
parents:
9044
diff
changeset
|
108 kind = kind, node = node, jids = jids, actor = actor, item = item, payload = payload, |
4336a2b97aba
mod_pubsub: Make generation of notification body into an event to allow extensibility
Kim Alvefur <zash@zash.se>
parents:
9044
diff
changeset
|
109 }); |
8815
5974c9da1391
mod_pubsub: Add support for generation of a plain text <body> from Atom payloads
Kim Alvefur <zash@zash.se>
parents:
8814
diff
changeset
|
110 end |
5974c9da1391
mod_pubsub: Add support for generation of a plain text <body> from Atom payloads
Kim Alvefur <zash@zash.se>
parents:
8814
diff
changeset
|
111 |
9039
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
112 for jid, options in pairs(jids) do |
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
113 local new_stanza = st.clone(message); |
9044
18cd5102253c
mod_pubsub: Skip checks for adding body if no body generated
Kim Alvefur <zash@zash.se>
parents:
9043
diff
changeset
|
114 if summary and type(options) == "table" and options["pubsub#include_body"] then |
9039
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
115 new_stanza:body(summary); |
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
116 end |
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
117 new_stanza.attr.to = jid; |
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
118 module:send(new_stanza); |
0124e5ec1556
mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents:
8980
diff
changeset
|
119 end |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
120 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
121 |
9724
8e6a0e1c1876
mod_pubsub: Change order of luacheck directives to match arguments they apply to
Kim Alvefur <zash@zash.se>
parents:
9720
diff
changeset
|
122 function check_node_config(node, actor, new_config) -- luacheck: ignore 212/node 212/actor |
11631
6641ca266d94
mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents:
11202
diff
changeset
|
123 if (tonumber_max_items(new_config["max_items"]) or 1) > max_max_items then |
9100
e01c7d0cbbf4
mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents:
9045
diff
changeset
|
124 return false; |
e01c7d0cbbf4
mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents:
9045
diff
changeset
|
125 end |
9725
8ad689b6d26f
mod_pubsub: Split line in config check to improve readability
Kim Alvefur <zash@zash.se>
parents:
9724
diff
changeset
|
126 if new_config["access_model"] ~= "whitelist" |
8ad689b6d26f
mod_pubsub: Split line in config check to improve readability
Kim Alvefur <zash@zash.se>
parents:
9724
diff
changeset
|
127 and new_config["access_model"] ~= "open" then |
9101
1ff694534e98
mod_pubsub: Restrict access model to 'whitelist' and 'open'
Kim Alvefur <zash@zash.se>
parents:
9100
diff
changeset
|
128 return false; |
1ff694534e98
mod_pubsub: Restrict access model to 'whitelist' and 'open'
Kim Alvefur <zash@zash.se>
parents:
9100
diff
changeset
|
129 end |
9100
e01c7d0cbbf4
mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents:
9045
diff
changeset
|
130 return true; |
e01c7d0cbbf4
mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents:
9045
diff
changeset
|
131 end |
e01c7d0cbbf4
mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents:
9045
diff
changeset
|
132 |
8695
09e7fd8b16cd
mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents:
8505
diff
changeset
|
133 function is_item_stanza(item) |
10672
657e61531b33
mod_pubsub, mod_pep: Ensure correct number of children of <item/> (fixes #1496)
Kim Alvefur <zash@zash.se>
parents:
9828
diff
changeset
|
134 return st.is_stanza(item) and item.attr.xmlns == xmlns_pubsub and item.name == "item" and #item.tags == 1; |
8695
09e7fd8b16cd
mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents:
8505
diff
changeset
|
135 end |
09e7fd8b16cd
mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents:
8505
diff
changeset
|
136 |
10070
d7cae7187943
mod_pubsub: Move a comment to where it makes sense
Kim Alvefur <zash@zash.se>
parents:
9829
diff
changeset
|
137 -- Compose a textual representation of Atom payloads |
12215
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
138 local summary_templates = module:get_option("pubsub_summary_templates", { |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
139 ["http://www.w3.org/2005/Atom"] = "{summary|or{{author/name|and{{author/name} posted }}{title}}}"; |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
140 }) |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
141 |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
142 for pubsub_type, template in pairs(summary_templates) do |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
143 module:hook("pubsub-summary/"..pubsub_type, function (event) |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
144 local payload = event.payload; |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
145 return xtemplate.render(template, payload, tostring); |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
146 end, -1); |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
147 end |
33a93d0a9a45
mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents:
12214
diff
changeset
|
148 |
9045
4336a2b97aba
mod_pubsub: Make generation of notification body into an event to allow extensibility
Kim Alvefur <zash@zash.se>
parents:
9044
diff
changeset
|
149 |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
150 module:hook("iq/host/"..xmlns_pubsub..":pubsub", handle_pubsub_iq); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
151 module:hook("iq/host/"..xmlns_pubsub_owner..":pubsub", handle_pubsub_iq); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
152 |
8505
c9bdb4dfed96
mod_pubsub: Ignore unused parameter [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
8504
diff
changeset
|
153 local function add_disco_features_from_service(service) --luacheck: ignore 431/service |
8340
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8339
diff
changeset
|
154 for feature in lib_pubsub.get_feature_set(service) do |
7c1fb8c042dc
mod_pubsub: Move service feature dection to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8339
diff
changeset
|
155 module:add_feature(xmlns_pubsub.."#"..feature); |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
156 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
157 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
158 |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
159 module:hook("host-disco-info-node", function (event) |
8980
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8957
diff
changeset
|
160 return lib_pubsub.handle_disco_info_node(event, service); |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
161 end); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
162 |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
163 module:hook("host-disco-items-node", function (event) |
8980
4d2738b99b07
mod_pubsub: Move service discovery to pubsub.lib to allow reuse
Kim Alvefur <zash@zash.se>
parents:
8957
diff
changeset
|
164 return lib_pubsub.handle_disco_items_node(event, service); |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
165 end); |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
166 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
167 |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
168 module:hook("host-disco-items", function (event) |
8210
352d605b1178
mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7984
diff
changeset
|
169 local stanza, reply = event.stanza, event.reply; |
352d605b1178
mod_pubsub: Fix a few warnings [luacheck]
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7984
diff
changeset
|
170 local ok, ret = service:get_nodes(stanza.attr.from); |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
171 if not ok then |
5970
6a2c3293d4d7
mod_pubsub: Don't sent error replies from service disco events, let mod_disco handle that
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
172 return; |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
173 end |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
174 for node, node_obj in pairs(ret) do |
9597
17d43543f9b6
pubsub: Set pubsub#title as name attribute in disco#items (fixes #1226)
Kim Alvefur <zash@zash.se>
parents:
9234
diff
changeset
|
175 reply:tag("item", { jid = module.host, node = node, name = node_obj.config.title }):up(); |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
176 end |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
177 end); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
178 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
179 local admin_aff = module:get_option_string("default_admin_affiliation", "owner"); |
7708
c420a38db5ef
Backed out changeset f1af4edd5722, doesn't work as intended (node is the name of the node and always present)
Kim Alvefur <zash@zash.se>
parents:
6841
diff
changeset
|
180 local function get_affiliation(jid) |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
181 local bare_jid = jid_bare(jid); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
182 if bare_jid == module.host or usermanager.is_admin(bare_jid, module.host) then |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
183 return admin_aff; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
184 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
185 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
186 |
9118
70f34c663fb3
mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents:
9108
diff
changeset
|
187 function get_service() |
70f34c663fb3
mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents:
9108
diff
changeset
|
188 return service; |
70f34c663fb3
mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents:
9108
diff
changeset
|
189 end |
70f34c663fb3
mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents:
9108
diff
changeset
|
190 |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
191 function set_service(new_service) |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
192 service = new_service; |
11726
76156c675456
mod_pubsub: Update configuration on reload (fixes #1382)
Kim Alvefur <zash@zash.se>
parents:
11725
diff
changeset
|
193 service.config.autocreate_on_publish = autocreate_on_publish; |
76156c675456
mod_pubsub: Update configuration on reload (fixes #1382)
Kim Alvefur <zash@zash.se>
parents:
11725
diff
changeset
|
194 service.config.autocreate_on_subscribe = autocreate_on_subscribe; |
76156c675456
mod_pubsub: Update configuration on reload (fixes #1382)
Kim Alvefur <zash@zash.se>
parents:
11725
diff
changeset
|
195 service.config.expose_publisher = expose_publisher; |
11732
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
196 |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
197 service.config.nodestore = node_store; |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
198 service.config.itemstore = create_simple_itemstore; |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
199 service.config.broadcaster = simple_broadcast; |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
200 service.config.itemcheck = is_item_stanza; |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
201 service.config.check_node_config = check_node_config; |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
202 service.config.get_affiliation = get_affiliation; |
5735f931f5c4
mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents:
11726
diff
changeset
|
203 |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
204 module.environment.service = service; |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
205 add_disco_features_from_service(service); |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
206 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
207 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
208 function module.save() |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
209 return { service = service }; |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
210 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
211 |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
212 function module.restore(data) |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
213 set_service(data.service); |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
214 end |
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
215 |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
216 function module.load() |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
217 if module.reloading then return; end |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
218 |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
219 set_service(pubsub.new({ |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
220 autocreate_on_publish = autocreate_on_publish; |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
221 autocreate_on_subscribe = autocreate_on_subscribe; |
11715
ddd6e21e58bf
mod_pubsub: Respect 'expose publisher' setting in item retrieval
Kim Alvefur <zash@zash.se>
parents:
11631
diff
changeset
|
222 expose_publisher = expose_publisher; |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
223 |
11720
72512c0858b3
mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents:
11718
diff
changeset
|
224 node_defaults = { |
72512c0858b3
mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents:
11718
diff
changeset
|
225 ["persist_items"] = true; |
72512c0858b3
mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents:
11718
diff
changeset
|
226 }; |
12153
26af75c20163
util.pubsub: Fix item store resize to "max"
Kim Alvefur <zash@zash.se>
parents:
12021
diff
changeset
|
227 max_items = max_max_items; |
8504
80b8355c8b8b
mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents:
8503
diff
changeset
|
228 nodestore = node_store; |
8503
3b86134c56ea
mod_pubsub: Some variable renames for clarity
Matthew Wild <mwild1@gmail.com>
parents:
8340
diff
changeset
|
229 itemstore = create_simple_itemstore; |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
230 broadcaster = simple_broadcast; |
8695
09e7fd8b16cd
mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents:
8505
diff
changeset
|
231 itemcheck = is_item_stanza; |
9100
e01c7d0cbbf4
mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents:
9045
diff
changeset
|
232 check_node_config = check_node_config; |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
233 get_affiliation = get_affiliation; |
5626
8416d4619d80
mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff
changeset
|
234 |
12021
376522fb3f52
mod_pubsub: Allow specifying the JID of the pubsub service
Kim Alvefur <zash@zash.se>
parents:
11856
diff
changeset
|
235 jid = module.host; |
5690
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
236 normalize_jid = jid_bare; |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
237 })); |
630e7224a65f
mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents:
5626
diff
changeset
|
238 end |