annotate plugins/mod_pubsub/mod_pubsub.lua @ 14167:f149652cb5ff 13.0

mod_cloud_notify: Use correct stanza id when clearing table entries (mem leak) The memory leak fix in 041c7ff18f76 was insufficient, as the wrong stanza id was used to clear the table entries.
author Matthew Wild <mwild1@gmail.com>
date Tue, 19 May 2026 19:26:42 +0100
parents cc916272c30f
children 354427afb638
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14037
cc916272c30f mod_pubsub: Error if loaded outside of a component
Matthew Wild <mwild1@gmail.com>
parents: 13608
diff changeset
1 if module:get_host_type() ~= "component" then
cc916272c30f mod_pubsub: Error if loaded outside of a component
Matthew Wild <mwild1@gmail.com>
parents: 13608
diff changeset
2 error("Pubsub should be loaded as a component, please see https://prosody.im/doc/modules/mod_pubsub", 0);
cc916272c30f mod_pubsub: Error if loaded outside of a component
Matthew Wild <mwild1@gmail.com>
parents: 13608
diff changeset
3 end
cc916272c30f mod_pubsub: Error if loaded outside of a component
Matthew Wild <mwild1@gmail.com>
parents: 13608
diff changeset
4
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
5 local pubsub = require "prosody.util.pubsub";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
6 local st = require "prosody.util.stanza";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
7 local jid_bare = require "prosody.util.jid".bare;
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
8 local new_id = require "prosody.util.id".medium;
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
9 local storagemanager = require "prosody.core.storagemanager";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
10 local xtemplate = require "prosody.util.xtemplate";
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_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
14 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
15
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
16 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
17 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
18 local pubsub_disco_name = module:get_option_string("name", "Prosody PubSub Service");
12960
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
19 local service_expose_publisher = module:get_option_boolean("expose_publisher")
5626
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 service;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
22
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
23 local lib_pubsub = module:require "pubsub";
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
24
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
25 module:depends("disco");
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
26 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
27 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
28
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
29 function handle_pubsub_iq(event)
8334
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8328
diff changeset
30 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
31 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
32
9108
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
33 -- 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
34 -- items(): iterator over (id, item)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
35 -- 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
36 -- 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
37 -- clear(): clear all items
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
38 -- 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
39 -- tail(): return the latest item
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
40
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
41 -- 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
42 -- set(node_name, node_data)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
43 -- get(node_name)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
44 -- users(): iterator over (node_name)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
45
13213
50324f66ca2a plugins: Use integer config API with interval specification where sensible
Kim Alvefur <zash@zash.se>
parents: 13202
diff changeset
46 local max_max_items = module:get_option_integer("pubsub_max_items", 256, 1);
11631
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
47
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
48 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
49 if n == "max" then
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
50 return max_max_items;
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
51 end
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
52 return tonumber(n);
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
53 end
9108
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
54
11856
14a679588b7b mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents: 11732
diff changeset
55 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
56 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
57 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
58 break;
14a679588b7b mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents: 11732
diff changeset
59 end
14a679588b7b mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents: 11732
diff changeset
60 end
14a679588b7b mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents: 11732
diff changeset
61
8504
80b8355c8b8b mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents: 8503
diff changeset
62 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
63
11188
8a29e7206917 mod_pubsub: Comment on itemstore type
Kim Alvefur <zash@zash.se>
parents: 10673
diff changeset
64 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
65 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
66 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
67 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
68 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
69 end
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
70
11725
789da12cf232 mod_pubsub: Silence warning about 'service' as argument [luacheck]
Kim Alvefur <zash@zash.se>
parents: 11720
diff changeset
71 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
72 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
73 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
74 return;
79cf1f74738f mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents: 9179
diff changeset
75 end
79cf1f74738f mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents: 9179
diff changeset
76 end
9179
82fad995a149 util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents: 9158
diff changeset
77 if kind == "retract" then
82fad995a149 util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents: 9158
diff changeset
78 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
79 end
82fad995a149 util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents: 9158
diff changeset
80
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
81 if item then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
82 item = st.clone(item);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
83 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
84 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
85 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
86 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
87 end
12960
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
88 local node_expose_publisher = service_expose_publisher;
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
89 if node_expose_publisher == nil and node_obj and node_obj.config.itemreply == "publisher" then
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
90 node_expose_publisher = true;
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
91 end
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
92 if not node_expose_publisher then
11718
d79f5431f31b mod_pubsub: Remove publisher field when not exposing publisher
Kim Alvefur <zash@zash.se>
parents: 11717
diff changeset
93 item.attr.publisher = nil;
12427
018ac691ee22 mod_pubsub: Don't attempt to use server actor as publisher (fixes #1723)
Matthew Wild <mwild1@gmail.com>
parents: 12215
diff changeset
94 elseif not item.attr.publisher and actor ~= true then
11717
605484fc1c62 mod_pubsub: Normalize 'publisher' JID
Kim Alvefur <zash@zash.se>
parents: 11715
diff changeset
95 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
96 end
6515
c9a72c64c3e2 mod_pubsub: Add support for including the publisher in item broadcasts
Philipp Hancke <fippo@goodadvice.pages.de>
parents: 6446
diff changeset
97 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
98 end
8811
f2d35eee69c9 mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents: 8808
diff changeset
99
f2d35eee69c9 mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents: 8808
diff changeset
100 local id = new_id();
11201
4ae1d485a9c6 mod_pubsub: Fix notification stanza type setting (fixes #1605)
Kim Alvefur <zash@zash.se>
parents: 11199
diff changeset
101 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
102 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
103 :tag("event", { xmlns = xmlns_pubsub_event })
9720
e7ddf70ae417 mod_pubsub: Add semicolon (code style)
Kim Alvefur <zash@zash.se>
parents: 9597
diff changeset
104 :tag(kind, { node = node });
8946
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
105
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
106 if item then
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
107 message:add_child(item);
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
108 end
8814
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8811
diff changeset
109
9039
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
110 local summary;
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
111 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
112 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
113 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
114 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
115 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
116 });
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
117 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
118
9039
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
119 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
120 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
121 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
122 new_stanza:body(summary);
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
123 end
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
124 new_stanza.attr.to = jid;
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
125 module:send(new_stanza);
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
126 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
127 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
128
9724
8e6a0e1c1876 mod_pubsub: Change order of luacheck directives to match arguments they apply to
Kim Alvefur <zash@zash.se>
parents: 9720
diff changeset
129 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
130 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
131 return false;
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
132 end
9725
8ad689b6d26f mod_pubsub: Split line in config check to improve readability
Kim Alvefur <zash@zash.se>
parents: 9724
diff changeset
133 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
134 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
135 return false;
1ff694534e98 mod_pubsub: Restrict access model to 'whitelist' and 'open'
Kim Alvefur <zash@zash.se>
parents: 9100
diff changeset
136 end
9100
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
137 return true;
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
138 end
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
139
8695
09e7fd8b16cd mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents: 8505
diff changeset
140 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
141 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
142 end
09e7fd8b16cd mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents: 8505
diff changeset
143
10070
d7cae7187943 mod_pubsub: Move a comment to where it makes sense
Kim Alvefur <zash@zash.se>
parents: 9829
diff changeset
144 -- Compose a textual representation of Atom payloads
12215
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
145 local summary_templates = module:get_option("pubsub_summary_templates", {
13339
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
146 ["http://www.w3.org/2005/Atom"] = "{@pubsub:title|and{*{@pubsub:title}*\n\n}}{summary|or{{author/name|and{{author/name} posted }}{title}}}";
12215
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
147 })
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
148
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
149 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
150 module:hook("pubsub-summary/"..pubsub_type, function (event)
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
151 local payload = event.payload;
13339
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
152
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
153 local got_config, node_config = service:get_node_config(event.node, true);
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
154 if got_config then
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
155 payload = st.clone(payload);
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
156 payload.attr["xmlns:pubsub"] = xmlns_pubsub;
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
157 payload.attr["pubsub:node"] = event.node;
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
158 payload.attr["pubsub:title"] = node_config.title;
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
159 payload.attr["pubsub:description"] = node_config.description;
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
160 end
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
161
12215
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
162 return xtemplate.render(template, payload, tostring);
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
163 end, -1);
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
164 end
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
165
9045
4336a2b97aba mod_pubsub: Make generation of notification body into an event to allow extensibility
Kim Alvefur <zash@zash.se>
parents: 9044
diff changeset
166
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
167 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
168 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
169
8505
c9bdb4dfed96 mod_pubsub: Ignore unused parameter [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8504
diff changeset
170 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
171 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
172 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
173 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
174 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
175
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
176 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
177 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
178 end);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
179
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
180 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
181 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
182 end);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
183
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
184
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
185 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
186 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
187 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
188 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
189 return;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
190 end
13608
df32fff0963d mod_pubsub: Remove unused loop variable [luacheck]
Kim Alvefur <zash@zash.se>
parents: 13602
diff changeset
191 for node in pairs(ret) do
13601
0338a5569178 mod_pubsub: Limit node listing based on new ACL-aware metadata method
Kim Alvefur <zash@zash.se>
parents: 13585
diff changeset
192 local ok, meta = service:get_node_metadata(node, stanza.attr.from);
0338a5569178 mod_pubsub: Limit node listing based on new ACL-aware metadata method
Kim Alvefur <zash@zash.se>
parents: 13585
diff changeset
193 if ok then
0338a5569178 mod_pubsub: Limit node listing based on new ACL-aware metadata method
Kim Alvefur <zash@zash.se>
parents: 13585
diff changeset
194 reply:tag("item", { jid = module.host, node = node, name = meta.title }):up();
0338a5569178 mod_pubsub: Limit node listing based on new ACL-aware metadata method
Kim Alvefur <zash@zash.se>
parents: 13585
diff changeset
195 end
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
196 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
197 end);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
198
13202
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
199 local admin_aff = module:get_option_enum("default_admin_affiliation", "owner", "publisher", "member", "outcast", "none");
13524
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
200
12642
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 12427
diff changeset
201 module:default_permission("prosody:admin", ":service-admin");
13524
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
202 module:default_permission("prosody:admin", ":create-node");
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
203
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
204 local function get_affiliation(jid, _, action)
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
205 local bare_jid = jid_bare(jid);
13524
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
206 if bare_jid == module.host then
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
207 -- The host itself (i.e. local modules) is treated as an admin.
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
208 -- Check this first as to avoid sendig a host JID to :may()
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
209 return admin_aff;
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
210 end
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
211 if action == "create" and module:may(":create-node", bare_jid) then
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
212 -- Only one affiliation is allowed to create nodes by default
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
213 return "owner";
cfc42ed3892c mod_pubsub: Check new role framework for node creation privileges
Kim Alvefur <zash@zash.se>
parents: 13457
diff changeset
214 end
13602
5033029130f5 mod_pubsub: Quiet down check for service admin
Kim Alvefur <zash@zash.se>
parents: 13601
diff changeset
215 if module:could(":service-admin", bare_jid) then
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
216 return admin_aff;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
217 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
218 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
219
9118
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
220 function get_service()
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
221 return service;
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
222 end
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
223
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
224 function set_service(new_service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
225 service = new_service;
11726
76156c675456 mod_pubsub: Update configuration on reload (fixes #1382)
Kim Alvefur <zash@zash.se>
parents: 11725
diff changeset
226 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
227 service.config.autocreate_on_subscribe = autocreate_on_subscribe;
12960
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
228 service.config.expose_publisher = service_expose_publisher;
11732
5735f931f5c4 mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents: 11726
diff changeset
229
5735f931f5c4 mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents: 11726
diff changeset
230 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
231 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
232 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
233 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
234 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
235 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
236
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
237 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
238 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
239 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
240
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
241 function module.save()
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
242 return { service = service };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
243 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
244
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
245 function module.restore(data)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
246 set_service(data.service);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
247 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
248
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
249 function module.load()
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
250 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
251
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
252 set_service(pubsub.new({
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
253 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
254 autocreate_on_subscribe = autocreate_on_subscribe;
12960
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
255 expose_publisher = service_expose_publisher;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
256
11720
72512c0858b3 mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents: 11718
diff changeset
257 node_defaults = {
72512c0858b3 mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents: 11718
diff changeset
258 ["persist_items"] = true;
72512c0858b3 mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents: 11718
diff changeset
259 };
12153
26af75c20163 util.pubsub: Fix item store resize to "max"
Kim Alvefur <zash@zash.se>
parents: 12021
diff changeset
260 max_items = max_max_items;
8504
80b8355c8b8b mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents: 8503
diff changeset
261 nodestore = node_store;
8503
3b86134c56ea mod_pubsub: Some variable renames for clarity
Matthew Wild <mwild1@gmail.com>
parents: 8340
diff changeset
262 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
263 broadcaster = simple_broadcast;
8695
09e7fd8b16cd mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents: 8505
diff changeset
264 itemcheck = is_item_stanza;
9100
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
265 check_node_config = check_node_config;
13550
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
266 metadata_subset = {
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
267 "title";
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
268 "description";
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
269 "payload_type";
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
270 "access_model";
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
271 "publish_model";
eae0272b87e3 mod_pubsub: Use new metadata method
Kim Alvefur <zash@zash.se>
parents: 13524
diff changeset
272 };
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
273 get_affiliation = get_affiliation;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
274
12021
376522fb3f52 mod_pubsub: Allow specifying the JID of the pubsub service
Kim Alvefur <zash@zash.se>
parents: 11856
diff changeset
275 jid = module.host;
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
276 normalize_jid = jid_bare;
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
277 }));
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
278 end
13456
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
279
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
280 local function get_service(service_jid)
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
281 return assert(assert(prosody.hosts[service_jid], "Unknown pubsub service").modules.pubsub, "Not a pubsub service").service;
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
282 end
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
283
13585
8091c1b8023e mod_pubsub: Expand shell commands to include node/item management
Matthew Wild <mwild1@gmail.com>
parents: 13550
diff changeset
284 module:require("commands").add_commands(get_service);