Annotate

plugins/mod_pubsub/mod_pubsub.lua @ 13456:e9ab660b9c5f

mod_pubsub: Add shell commands to create and list nodes
author Matthew Wild <mwild1@gmail.com>
date Wed, 06 Mar 2024 17:38:21 +0000
parent 13339:c94989c557cd
child 13457:3347ed1014b8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12977
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
1 local pubsub = require "prosody.util.pubsub";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
2 local st = require "prosody.util.stanza";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
3 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
4 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
5 local storagemanager = require "prosody.core.storagemanager";
74b9e05af71e plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12960
diff changeset
6 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
7
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
8 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
9 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
10 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
11
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
12 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
13 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
14 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
15 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
16
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
17 local service;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
18
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
19 local lib_pubsub = module:require "pubsub";
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
20
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
21 module:depends("disco");
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
22 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
23 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
24
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
25 function handle_pubsub_iq(event)
8334
036e46d12b78 mod_pubsub: Move dispatch function into pubsub.lib
Kim Alvefur <zash@zash.se>
parents: 8328
diff changeset
26 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
27 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
28
9108
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
29 -- 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
30 -- items(): iterator over (id, item)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
31 -- 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
32 -- 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
33 -- clear(): clear all items
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
34 -- 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
35 -- tail(): return the latest item
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
36
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
37 -- 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
38 -- set(node_name, node_data)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
39 -- get(node_name)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
40 -- users(): iterator over (node_name)
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
41
13213
50324f66ca2a plugins: Use integer config API with interval specification where sensible
Kim Alvefur <zash@zash.se>
parents: 13202
diff changeset
42 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
43
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
44 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
45 if n == "max" then
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
46 return max_max_items;
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
47 end
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
48 return tonumber(n);
6641ca266d94 mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items'
Kim Alvefur <zash@zash.se>
parents: 11202
diff changeset
49 end
9108
86f31a2174b3 mod_pubsub: Add comment to document nodestore/itemstore methods
Matthew Wild <mwild1@gmail.com>
parents: 9101
diff changeset
50
11856
14a679588b7b mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents: 11732
diff changeset
51 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
52 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
53 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
54 break;
14a679588b7b mod_pubsub,mod_pep: Advertise maximum number of items via XEP-0122
Kim Alvefur <zash@zash.se>
parents: 11732
diff changeset
55 end
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
8504
80b8355c8b8b mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents: 8503
diff changeset
58 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
59
11188
8a29e7206917 mod_pubsub: Comment on itemstore type
Kim Alvefur <zash@zash.se>
parents: 10673
diff changeset
60 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
61 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
62 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
63 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
64 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
65 end
e1272aeef31c mod_pubsub: Add item persistence using mod_storage_*’s archive store.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8210
diff changeset
66
11725
789da12cf232 mod_pubsub: Silence warning about 'service' as argument [luacheck]
Kim Alvefur <zash@zash.se>
parents: 11720
diff changeset
67 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
68 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
69 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
70 return;
79cf1f74738f mod_pubsub: Prepare to support turning notifications off for each kind of broadcast
Kim Alvefur <zash@zash.se>
parents: 9179
diff changeset
71 end
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
9179
82fad995a149 util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents: 9158
diff changeset
73 if kind == "retract" then
82fad995a149 util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents: 9158
diff changeset
74 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
75 end
82fad995a149 util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents: 9158
diff changeset
76
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
77 if item then
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
78 item = st.clone(item);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
79 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
80 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
81 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
82 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
83 end
12960
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
84 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
85 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
86 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
87 end
31b22cc221b5 mod_pubsub, mod_pep: Support per-node configurable inclusion of publisher
Matthew Wild <mwild1@gmail.com>
parents: 12642
diff changeset
88 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
89 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
90 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
91 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
92 end
6515
c9a72c64c3e2 mod_pubsub: Add support for including the publisher in item broadcasts
Philipp Hancke <fippo@goodadvice.pages.de>
parents: 6446
diff changeset
93 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
94 end
8811
f2d35eee69c9 mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents: 8808
diff changeset
95
f2d35eee69c9 mod_pubsub: Set an id attribute on outgoing event messages
Kim Alvefur <zash@zash.se>
parents: 8808
diff changeset
96 local id = new_id();
11201
4ae1d485a9c6 mod_pubsub: Fix notification stanza type setting (fixes #1605)
Kim Alvefur <zash@zash.se>
parents: 11199
diff changeset
97 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
98 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
99 :tag("event", { xmlns = xmlns_pubsub_event })
9720
e7ddf70ae417 mod_pubsub: Add semicolon (code style)
Kim Alvefur <zash@zash.se>
parents: 9597
diff changeset
100 :tag(kind, { node = node });
8946
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
101
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
102 if item then
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
103 message:add_child(item);
3a095233e178 mod_pubsub: Handle optional item (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8815
diff changeset
104 end
8814
07197f29e2b8 mod_pubsub: Make the 'type' attribute on broadcast messages configurable
Kim Alvefur <zash@zash.se>
parents: 8811
diff changeset
105
9039
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
106 local summary;
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
107 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
108 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
109 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
110 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
111 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
112 });
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
113 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
114
9039
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
115 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
116 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
117 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
118 new_stanza:body(summary);
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
119 end
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
120 new_stanza.attr.to = jid;
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
121 module:send(new_stanza);
0124e5ec1556 mod_pubsub: Move include_body option into subscription options
Kim Alvefur <zash@zash.se>
parents: 8980
diff changeset
122 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
123 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
124
9724
8e6a0e1c1876 mod_pubsub: Change order of luacheck directives to match arguments they apply to
Kim Alvefur <zash@zash.se>
parents: 9720
diff changeset
125 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
126 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
127 return false;
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
128 end
9725
8ad689b6d26f mod_pubsub: Split line in config check to improve readability
Kim Alvefur <zash@zash.se>
parents: 9724
diff changeset
129 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
130 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
131 return false;
1ff694534e98 mod_pubsub: Restrict access model to 'whitelist' and 'open'
Kim Alvefur <zash@zash.se>
parents: 9100
diff changeset
132 end
9100
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
133 return true;
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
134 end
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
135
8695
09e7fd8b16cd mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents: 8505
diff changeset
136 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
137 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
138 end
09e7fd8b16cd mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents: 8505
diff changeset
139
10070
d7cae7187943 mod_pubsub: Move a comment to where it makes sense
Kim Alvefur <zash@zash.se>
parents: 9829
diff changeset
140 -- Compose a textual representation of Atom payloads
12215
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
141 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
142 ["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
143 })
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
144
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
145 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
146 module:hook("pubsub-summary/"..pubsub_type, function (event)
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
147 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
148
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
149 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
150 if got_config then
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
151 payload = st.clone(payload);
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
152 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
153 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
154 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
155 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
156 end
c94989c557cd mod_pubsub: Provide some node properties in summary template #1809
Kim Alvefur <zash@zash.se>
parents: 13213
diff changeset
157
12215
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
158 return xtemplate.render(template, payload, tostring);
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
159 end, -1);
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
160 end
33a93d0a9a45 mod_pubsub: Allow configuring summary templates
Kim Alvefur <zash@zash.se>
parents: 12214
diff changeset
161
9045
4336a2b97aba mod_pubsub: Make generation of notification body into an event to allow extensibility
Kim Alvefur <zash@zash.se>
parents: 9044
diff changeset
162
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
163 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
164 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
165
8505
c9bdb4dfed96 mod_pubsub: Ignore unused parameter [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 8504
diff changeset
166 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
167 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
168 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
169 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
170 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
171
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
172 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
173 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
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-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
177 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
178 end);
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
179
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
180
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
181 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
182 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
183 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
184 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
185 return;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
186 end
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
187 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
188 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
189 end
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
190 end);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
191
13202
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 12977
diff changeset
192 local admin_aff = module:get_option_enum("default_admin_affiliation", "owner", "publisher", "member", "outcast", "none");
12642
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 12427
diff changeset
193 module:default_permission("prosody:admin", ":service-admin");
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
194 local function get_affiliation(jid)
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
195 local bare_jid = jid_bare(jid);
12642
9061f9621330 Switch to a new role-based authorization framework, removing is_admin()
Matthew Wild <mwild1@gmail.com>
parents: 12427
diff changeset
196 if bare_jid == module.host or module:may(":service-admin", bare_jid) then
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
197 return admin_aff;
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
198 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
199 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
200
9118
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
201 function get_service()
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
202 return service;
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
203 end
70f34c663fb3 mod_pubsub: Add a public method for retrieving the service object
Kim Alvefur <zash@zash.se>
parents: 9108
diff changeset
204
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
205 function set_service(new_service)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
206 service = new_service;
11726
76156c675456 mod_pubsub: Update configuration on reload (fixes #1382)
Kim Alvefur <zash@zash.se>
parents: 11725
diff changeset
207 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
208 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
209 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
210
5735f931f5c4 mod_pubsub: Update callbacks on reload to more completely refresh config
Kim Alvefur <zash@zash.se>
parents: 11726
diff changeset
211 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
212 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
213 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
214 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
215 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
216 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
217
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
218 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
219 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
220 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
221
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
222 function module.save()
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
223 return { service = service };
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
224 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
225
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
226 function module.restore(data)
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
227 set_service(data.service);
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
228 end
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
229
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
230 function module.load()
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
231 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
232
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
233 set_service(pubsub.new({
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
234 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
235 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
236 expose_publisher = service_expose_publisher;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
237
11720
72512c0858b3 mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents: 11718
diff changeset
238 node_defaults = {
72512c0858b3 mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents: 11718
diff changeset
239 ["persist_items"] = true;
72512c0858b3 mod_pubsub: Explicitly enable persistence by default to preserve behavior
Kim Alvefur <zash@zash.se>
parents: 11718
diff changeset
240 };
12153
26af75c20163 util.pubsub: Fix item store resize to "max"
Kim Alvefur <zash@zash.se>
parents: 12021
diff changeset
241 max_items = max_max_items;
8504
80b8355c8b8b mod_pubsub: Add nodestore to service configuration
Matthew Wild <mwild1@gmail.com>
parents: 8503
diff changeset
242 nodestore = node_store;
8503
3b86134c56ea mod_pubsub: Some variable renames for clarity
Matthew Wild <mwild1@gmail.com>
parents: 8340
diff changeset
243 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
244 broadcaster = simple_broadcast;
8695
09e7fd8b16cd mod_pubsub: Reject publishing of non-items
Kim Alvefur <zash@zash.se>
parents: 8505
diff changeset
245 itemcheck = is_item_stanza;
9100
e01c7d0cbbf4 mod_pubsub: Add configurable maximum on number of items
Kim Alvefur <zash@zash.se>
parents: 9045
diff changeset
246 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
247 get_affiliation = get_affiliation;
5626
8416d4619d80 mod_pubsub: Split out handlers into a module library
Florian Zeitz <florob@babelmonkeys.de>
parents:
diff changeset
248
12021
376522fb3f52 mod_pubsub: Allow specifying the JID of the pubsub service
Kim Alvefur <zash@zash.se>
parents: 11856
diff changeset
249 jid = module.host;
5690
630e7224a65f mod_pubsub: Utilize mod_disco, instead of reimplementing disco handling
Florian Zeitz <florob@babelmonkeys.de>
parents: 5626
diff changeset
250 normalize_jid = jid_bare;
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 end
13456
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
253
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
254 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
255 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
256 end
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
257
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
258 module:add_item("shell-command", {
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
259 section = "pubsub";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
260 section_desc = "Manage publish/subscribe nodes";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
261 name = "create_node";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
262 desc = "Create a node with the specified name";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
263 args = {
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
264 { name = "service_jid", type = "string" };
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
265 { name = "node_name", type = "string" };
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
266 };
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
267 host_selector = "service_jid";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
268
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
269 handler = function (self, service_jid, node_name) --luacheck: ignore 212/self
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
270 return get_service(service_jid):create(node_name, true);
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
271 end;
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
272 });
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
273
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
274 module:add_item("shell-command", {
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
275 section = "pubsub";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
276 section_desc = "Manage publish/subscribe nodes";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
277 name = "list_nodes";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
278 desc = "List nodes on a pubsub service";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
279 args = {
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
280 { name = "service_jid", type = "string" };
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
281 };
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
282 host_selector = "service_jid";
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
283
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
284 handler = function (self, service_jid) --luacheck: ignore 212/self
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
285 local service = get_service(service_jid);
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
286 local nodes = select(2, assert(service:get_nodes(true)));
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
287 local count = 0;
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
288 for node_name in pairs(nodes) do
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
289 count = count + 1;
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
290 self.session.print(node_name);
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
291 end
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
292 return true, ("%d nodes"):format(count);
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
293 end;
e9ab660b9c5f mod_pubsub: Add shell commands to create and list nodes
Matthew Wild <mwild1@gmail.com>
parents: 13339
diff changeset
294 });