Annotate

util/pubsub.lua @ 8954:3b6095686498

util.pubsub: Persistence on affiliation change
author Kim Alvefur <zash@zash.se>
date Sun, 01 Jul 2018 04:33:15 +0200
parent 8952:15bb54f96dd1
child 8955:ca6a09cf2829
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4365
6704b3cd032e util.pubsub: Support for events (currently subscription-added and subscription-removed)
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
1 local events = require "util.events";
7695
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
2 local cache = require "util.cache";
4365
6704b3cd032e util.pubsub: Support for events (currently subscription-added and subscription-removed)
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
3
8501
8d9e2c2095dd util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents: 8500
diff changeset
4 local service_mt = {};
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
8500
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
6 local default_config = {
8333
2abbb01cd756 pubsub: Distinguish internal representation of node config from XEP-0060 form (util.pubsub should be protocol-agnostic)
Kim Alvefur <zash@zash.se>
parents: 8326
diff changeset
7 itemstore = function (config, _) return cache.new(config["max_items"]) end;
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
8 broadcaster = function () end;
8694
059183e5571e util.pubsub: Allow setting a callback for validating items to be published
Kim Alvefur <zash@zash.se>
parents: 8502
diff changeset
9 itemcheck = function () return true; end;
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
10 get_affiliation = function () end;
8810
9f8a746f99c1 util.pubsub: Add a default/fallback JID normalization function
Kim Alvefur <zash@zash.se>
parents: 8809
diff changeset
11 normalize_jid = function (jid) return jid; end;
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
12 capabilities = {};
8500
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
13 };
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
14 local default_config_mt = { __index = default_config };
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
15
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
16 local default_node_config = {
8333
2abbb01cd756 pubsub: Distinguish internal representation of node config from XEP-0060 form (util.pubsub should be protocol-agnostic)
Kim Alvefur <zash@zash.se>
parents: 8326
diff changeset
17 ["persist_items"] = false;
2abbb01cd756 pubsub: Distinguish internal representation of node config from XEP-0060 form (util.pubsub should be protocol-agnostic)
Kim Alvefur <zash@zash.se>
parents: 8326
diff changeset
18 ["max_items"] = 20;
8500
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
19 };
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
20 local default_node_config_mt = { __index = default_node_config };
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
21
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
22 -- Storage helper functions
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
23
8950
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
24 local function load_node_from_store(service, node_name)
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
25 local node = service.config.nodestore:get(node_name);
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
26 node.config = setmetatable(node.config or {}, {__index=service.node_defaults});
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
27 return node;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
28 end
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
29
8950
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
30 local function save_node_to_store(service, node)
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
31 return service.config.nodestore:set(node.name, {
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
32 name = node.name;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
33 config = node.config;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
34 subscribers = node.subscribers;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
35 affiliations = node.affiliations;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
36 });
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
37 end
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
38
8952
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
39 local function delete_node_in_store(service, node_name)
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
40 return service.config.nodestore:set(node_name, nil);
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
41 end
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
42
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
43 -- Create and return a new service object
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 6515
diff changeset
44 local function new(config)
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
45 config = config or {};
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
46
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
47 local service = setmetatable({
8500
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
48 config = setmetatable(config, default_config_mt);
9bf00d0734c8 util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents: 8401
diff changeset
49 node_defaults = setmetatable(config.node_defaults or {}, default_node_config_mt);
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
50 affiliations = {};
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
51 subscriptions = {};
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
52 nodes = {};
5972
f365d3c8fd2c util.pubsub: Separate data from node configuration
Kim Alvefur <zash@zash.se>
parents: 5971
diff changeset
53 data = {};
4365
6704b3cd032e util.pubsub: Support for events (currently subscription-added and subscription-removed)
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
54 events = events.new();
3909
c2dc7f7eed94 util.pubsub: Modify new() to take a config, and add a default config via a metatable
Matthew Wild <mwild1@gmail.com>
parents: 3759
diff changeset
55 }, service_mt);
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
56
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
57 -- Load nodes from storage, if we have a store and it supports iterating over stored items
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
58 if config.nodestore and config.nodestore.users then
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
59 for node_name in config.nodestore:users() do
8950
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
60 service.nodes[node_name] = load_node_from_store(service, node_name);
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
61 service.data[node_name] = config.itemstore(service.nodes[node_name].config, node_name);
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
62 end
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
63 end
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
64
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
65 return service;
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 end
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67
8501
8d9e2c2095dd util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents: 8500
diff changeset
68 --- Service methods
8d9e2c2095dd util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents: 8500
diff changeset
69
8d9e2c2095dd util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents: 8500
diff changeset
70 local service = {};
8d9e2c2095dd util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents: 8500
diff changeset
71 service_mt.__index = service;
8d9e2c2095dd util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents: 8500
diff changeset
72
3934
4bd994df7296 util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents: 3931
diff changeset
73 function service:jids_equal(jid1, jid2)
4bd994df7296 util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents: 3931
diff changeset
74 local normalize = self.config.normalize_jid;
4bd994df7296 util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents: 3931
diff changeset
75 return normalize(jid1) == normalize(jid2);
4bd994df7296 util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents: 3931
diff changeset
76 end
4bd994df7296 util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents: 3931
diff changeset
77
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
78 function service:may(node, actor, action)
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
79 if actor == true then return true; end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5675
diff changeset
80
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
81 local node_obj = self.nodes[node];
8816
0f9d5cfa84f9 util.pubsub: Also check for affiliation set on bare JID
Kim Alvefur <zash@zash.se>
parents: 8813
diff changeset
82 local node_aff = node_obj and (node_obj.affiliations[actor]
0f9d5cfa84f9 util.pubsub: Also check for affiliation set on bare JID
Kim Alvefur <zash@zash.se>
parents: 8813
diff changeset
83 or node_obj.affiliations[self.config.normalize_jid(actor)]);
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
84 local service_aff = self.affiliations[actor]
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
85 or self.config.get_affiliation(actor, node, action)
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
86 or "none";
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5675
diff changeset
87
4099
5c0b7947f0ef util.pubsub: Some tidying/optimisation to service:may()
Matthew Wild <mwild1@gmail.com>
parents: 3945
diff changeset
88 -- Check if node allows/forbids it
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
89 local node_capabilities = node_obj and node_obj.capabilities;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
90 if node_capabilities then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
91 local caps = node_capabilities[node_aff or service_aff];
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
92 if caps then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
93 local can = caps[action];
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
94 if can ~= nil then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
95 return can;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
96 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
97 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
98 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5675
diff changeset
99
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
100 -- Check service-wide capabilities instead
4099
5c0b7947f0ef util.pubsub: Some tidying/optimisation to service:may()
Matthew Wild <mwild1@gmail.com>
parents: 3945
diff changeset
101 local service_capabilities = self.config.capabilities;
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
102 local caps = service_capabilities[node_aff or service_aff];
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
103 if caps then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
104 local can = caps[action];
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
105 if can ~= nil then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
106 return can;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
107 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
108 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5675
diff changeset
109
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
110 return false;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
111 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
112
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
113 function service:set_affiliation(node, actor, jid, affiliation)
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
114 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
115 if not self:may(node, actor, "set_affiliation") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
116 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
117 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
118 --
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 local node_obj = self.nodes[node];
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 if not node_obj then
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 return false, "item-not-found";
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122 end
8941
f0beba9c2822 util.pubsub: Fix typo
Kim Alvefur <zash@zash.se>
parents: 8936
diff changeset
123 jid = self.config.normalize_jid(jid);
8954
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
124 local old_affiliation = node_obj.affiliations[jid];
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
125 node_obj.affiliations[jid] = affiliation;
8954
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
126
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
127 if self.config.nodestore then
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
128 local ok, err = save_node_to_store(self, node_obj);
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
129 if not ok then
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
130 node_obj.affiliations[jid] = old_affiliation;
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
131 return ok, "internal-server-error";
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
132 end
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
133 end
3b6095686498 util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents: 8952
diff changeset
134
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
135 local _, jid_sub = self:get_subscription(node, true, jid);
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
136 if not jid_sub and not self:may(node, jid, "be_unsubscribed") then
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
137 local ok, err = self:add_subscription(node, true, jid);
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
138 if not ok then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
139 return ok, err;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
140 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
141 elseif jid_sub and not self:may(node, jid, "be_subscribed") then
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
142 local ok, err = self:add_subscription(node, true, jid);
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
143 if not ok then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
144 return ok, err;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
145 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
146 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
147 return true;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
148 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
149
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
150 function service:add_subscription(node, actor, jid, options)
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
151 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
152 local cap;
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
153 if actor == true or jid == actor or self:jids_equal(actor, jid) then
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
154 cap = "subscribe";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
155 else
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
156 cap = "subscribe_other";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
157 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
158 if not self:may(node, actor, cap) then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
159 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
160 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
161 if not self:may(node, jid, "be_subscribed") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
162 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
163 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
164 --
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
165 local node_obj = self.nodes[node];
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
166 if not node_obj then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
167 if not self.config.autocreate_on_subscribe then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
168 return false, "item-not-found";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
169 else
4364
af40cf682eba util.pubsub: Use built-in actor for auto-creating nodes on publish and subscribe (so they never fail due to permissions)
Matthew Wild <mwild1@gmail.com>
parents: 4100
diff changeset
170 local ok, err = self:create(node, true);
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
171 if not ok then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
172 return ok, err;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
173 end
3936
61f12f8a8539 util.pubsub: Fix traceback when using autocreate-on-subscribe
Matthew Wild <mwild1@gmail.com>
parents: 3934
diff changeset
174 node_obj = self.nodes[node];
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
175 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
176 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
177 node_obj.subscribers[jid] = options or true;
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
178 local normal_jid = self.config.normalize_jid(jid);
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
179 local subs = self.subscriptions[normal_jid];
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
180 if subs then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
181 if not subs[jid] then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
182 subs[jid] = { [node] = true };
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
183 else
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
184 subs[jid][node] = true;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
185 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
186 else
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
187 self.subscriptions[normal_jid] = { [jid] = { [node] = true } };
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
188 end
4365
6704b3cd032e util.pubsub: Support for events (currently subscription-added and subscription-removed)
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
189 self.events.fire_event("subscription-added", { node = node, jid = jid, normalized_jid = normal_jid, options = options });
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 return true;
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191 end
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 function service:remove_subscription(node, actor, jid)
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
194 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
195 local cap;
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
196 if actor == true or jid == actor or self:jids_equal(actor, jid) then
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
197 cap = "unsubscribe";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
198 else
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
199 cap = "unsubscribe_other";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
200 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
201 if not self:may(node, actor, cap) then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
202 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
203 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
204 if not self:may(node, jid, "be_unsubscribed") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
205 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
206 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
207 --
3698
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
208 local node_obj = self.nodes[node];
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
209 if not node_obj then
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
210 return false, "item-not-found";
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
211 end
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
212 if not node_obj.subscribers[jid] then
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
213 return false, "not-subscribed";
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
214 end
77171fd1dc3c mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents: 3672
diff changeset
215 node_obj.subscribers[jid] = nil;
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
216 local normal_jid = self.config.normalize_jid(jid);
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
217 local subs = self.subscriptions[normal_jid];
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
218 if subs then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
219 local jid_subs = subs[jid];
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
220 if jid_subs then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
221 jid_subs[node] = nil;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
222 if next(jid_subs) == nil then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
223 subs[jid] = nil;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
224 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
225 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
226 if next(subs) == nil then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
227 self.subscriptions[normal_jid] = nil;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
228 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
229 end
4365
6704b3cd032e util.pubsub: Support for events (currently subscription-added and subscription-removed)
Matthew Wild <mwild1@gmail.com>
parents: 4364
diff changeset
230 self.events.fire_event("subscription-removed", { node = node, jid = jid, normalized_jid = normal_jid });
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
231 return true;
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
232 end
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233
3626
444f965baed8 util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents: 3619
diff changeset
234 function service:get_subscription(node, actor, jid)
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
235 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
236 local cap;
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
237 if actor == true or jid == actor or self:jids_equal(actor, jid) then
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
238 cap = "get_subscription";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
239 else
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
240 cap = "get_subscription_other";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
241 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
242 if not self:may(node, actor, cap) then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
243 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
244 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
245 --
3626
444f965baed8 util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents: 3619
diff changeset
246 local node_obj = self.nodes[node];
3937
843ee23cc91a util.pubsub: Small code tidying for :get_subscription()
Matthew Wild <mwild1@gmail.com>
parents: 3936
diff changeset
247 if not node_obj then
843ee23cc91a util.pubsub: Small code tidying for :get_subscription()
Matthew Wild <mwild1@gmail.com>
parents: 3936
diff changeset
248 return false, "item-not-found";
3626
444f965baed8 util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents: 3619
diff changeset
249 end
3937
843ee23cc91a util.pubsub: Small code tidying for :get_subscription()
Matthew Wild <mwild1@gmail.com>
parents: 3936
diff changeset
250 return true, node_obj.subscribers[jid];
3626
444f965baed8 util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents: 3619
diff changeset
251 end
444f965baed8 util.pubsub: Add :get_subscription() to return the current subscription for a JID, if any
Matthew Wild <mwild1@gmail.com>
parents: 3619
diff changeset
252
6437
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
253 function service:create(node, actor, options)
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
254 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
255 if not self:may(node, actor, "create") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
256 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
257 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
258 --
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
259 if self.nodes[node] then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
260 return false, "conflict";
3672
b24db47995ac mod_pubsub, util.pubsub: Support node creation
Florian Zeitz <florob@babelmonkeys.de>
parents: 3641
diff changeset
261 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5675
diff changeset
262
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
263 self.nodes[node] = {
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
264 name = node;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
265 subscribers = {};
6437
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
266 config = setmetatable(options or {}, {__index=self.node_defaults});
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
267 affiliations = {};
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
268 };
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
269
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
270 if self.config.nodestore then
8950
03ba5b4f131a util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents: 8941
diff changeset
271 local ok, err = save_node_to_store(self, self.nodes[node]);
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
272 if not ok then
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
273 self.nodes[node] = nil;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
274 return ok, err;
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
275 end
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
276 end
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
277
8211
5cbbe825d9d1 util.pubsub: Add a node parameter to itemstore().
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 7727
diff changeset
278 self.data[node] = self.config.itemstore(self.nodes[node].config, node);
5971
637731f0b9a3 util.pubsub: Fire events on more actions
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
279 self.events.fire_event("node-created", { node = node, actor = actor });
8809
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
280 if actor ~= true then
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
281 local ok, err = self:set_affiliation(node, true, actor, "owner");
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
282 if not ok then
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
283 self.nodes[node] = nil;
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
284 self.data[node] = nil;
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
285 return ok, err;
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
286 end
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
287 end
8502
6c2c2fc4b8dd util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents: 8501
diff changeset
288
8809
6cba2df3817c util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents: 8694
diff changeset
289 return true;
3672
b24db47995ac mod_pubsub, util.pubsub: Support node creation
Florian Zeitz <florob@babelmonkeys.de>
parents: 3641
diff changeset
290 end
b24db47995ac mod_pubsub, util.pubsub: Support node creation
Florian Zeitz <florob@babelmonkeys.de>
parents: 3641
diff changeset
291
5320
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
292 function service:delete(node, actor)
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
293 -- Access checking
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
294 if not self:may(node, actor, "delete") then
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
295 return false, "forbidden";
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
296 end
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
297 --
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
298 local node_obj = self.nodes[node];
5675
e29ece65e3b0 util.pubsub: Check whether node exists, when deleting
Florian Zeitz <florob@babelmonkeys.de>
parents: 5628
diff changeset
299 if not node_obj then
e29ece65e3b0 util.pubsub: Check whether node exists, when deleting
Florian Zeitz <florob@babelmonkeys.de>
parents: 5628
diff changeset
300 return false, "item-not-found";
e29ece65e3b0 util.pubsub: Check whether node exists, when deleting
Florian Zeitz <florob@babelmonkeys.de>
parents: 5628
diff changeset
301 end
5320
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
302 self.nodes[node] = nil;
8312
6fd36e73082b util.pubsub: Clear data on node deletion
Kim Alvefur <zash@zash.se>
parents: 8297
diff changeset
303 if self.data[node] and self.data[node].clear then
6fd36e73082b util.pubsub: Clear data on node deletion
Kim Alvefur <zash@zash.se>
parents: 8297
diff changeset
304 self.data[node]:clear();
6fd36e73082b util.pubsub: Clear data on node deletion
Kim Alvefur <zash@zash.se>
parents: 8297
diff changeset
305 end
5972
f365d3c8fd2c util.pubsub: Separate data from node configuration
Kim Alvefur <zash@zash.se>
parents: 5971
diff changeset
306 self.data[node] = nil;
8952
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
307
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
308 if self.config.nodestore then
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
309 local ok, err = delete_node_in_store(self, node);
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
310 if not ok then
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
311 self.nodes[node] = nil;
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
312 return ok, err;
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
313 end
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
314 end
15bb54f96dd1 util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents: 8951
diff changeset
315
5971
637731f0b9a3 util.pubsub: Fire events on more actions
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
316 self.events.fire_event("node-deleted", { node = node, actor = actor });
8813
2c55fccb0c0c util.pubsub: Pass node and service objects to broadcaster to allow eg config access
Kim Alvefur <zash@zash.se>
parents: 8810
diff changeset
317 self.config.broadcaster("delete", node, node_obj.subscribers, nil, actor, node_obj, self);
5320
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
318 return true;
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
319 end
518d864b2ab8 mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents: 5315
diff changeset
320
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
321 function service:publish(node, actor, id, item)
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
322 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
323 if not self:may(node, actor, "publish") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
324 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
325 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
326 --
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
327 local node_obj = self.nodes[node];
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
328 if not node_obj then
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
329 if not self.config.autocreate_on_publish then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
330 return false, "item-not-found";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
331 end
4364
af40cf682eba util.pubsub: Use built-in actor for auto-creating nodes on publish and subscribe (so they never fail due to permissions)
Matthew Wild <mwild1@gmail.com>
parents: 4100
diff changeset
332 local ok, err = self:create(node, true);
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
333 if not ok then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
334 return ok, err;
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
335 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
336 node_obj = self.nodes[node];
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
337 end
8694
059183e5571e util.pubsub: Allow setting a callback for validating items to be published
Kim Alvefur <zash@zash.se>
parents: 8502
diff changeset
338 if not self.config.itemcheck(item) then
059183e5571e util.pubsub: Allow setting a callback for validating items to be published
Kim Alvefur <zash@zash.se>
parents: 8502
diff changeset
339 return nil, "internal-server-error";
059183e5571e util.pubsub: Allow setting a callback for validating items to be published
Kim Alvefur <zash@zash.se>
parents: 8502
diff changeset
340 end
5972
f365d3c8fd2c util.pubsub: Separate data from node configuration
Kim Alvefur <zash@zash.se>
parents: 5971
diff changeset
341 local node_data = self.data[node];
7695
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
342 local ok = node_data:set(id, item);
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
343 if not ok then
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
344 return nil, "internal-server-error";
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
345 end
8217
5f4e0d67b82a util.pubsub: Catch overriden id from storage
Kim Alvefur <zash@zash.se>
parents: 8212
diff changeset
346 if type(ok) == "string" then id = ok; end
5181
1e9508ae44cc util.pubsub: Add item-published event
Matthew Wild <mwild1@gmail.com>
parents: 4367
diff changeset
347 self.events.fire_event("item-published", { node = node, actor = actor, id = id, item = item });
8813
2c55fccb0c0c util.pubsub: Pass node and service objects to broadcaster to allow eg config access
Kim Alvefur <zash@zash.se>
parents: 8810
diff changeset
348 self.config.broadcaster("items", node, node_obj.subscribers, item, actor, node_obj, self);
3619
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
349 return true;
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 end
291ae816d800 mod_pubsub: It's aliiiive!
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351
3699
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
352 function service:retract(node, actor, id, retract)
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
353 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
354 if not self:may(node, actor, "retract") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
355 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
356 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
357 --
3699
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
358 local node_obj = self.nodes[node];
7695
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
359 if (not node_obj) or (not self.data[node]:get(id)) then
3699
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
360 return false, "item-not-found";
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
361 end
7695
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
362 local ok = self.data[node]:set(id, nil);
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
363 if not ok then
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
364 return nil, "internal-server-error";
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
365 end
5971
637731f0b9a3 util.pubsub: Fire events on more actions
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
366 self.events.fire_event("item-retracted", { node = node, actor = actor, id = id });
3699
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
367 if retract then
8813
2c55fccb0c0c util.pubsub: Pass node and service objects to broadcaster to allow eg config access
Kim Alvefur <zash@zash.se>
parents: 8810
diff changeset
368 self.config.broadcaster("items", node, node_obj.subscribers, retract, actor, node_obj, self);
3699
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
369 end
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
370 return true
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
371 end
150e58d69e60 mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents: 3698
diff changeset
372
5312
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
373 function service:purge(node, actor, notify)
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
374 -- Access checking
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
375 if not self:may(node, actor, "retract") then
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
376 return false, "forbidden";
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
377 end
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
378 --
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
379 local node_obj = self.nodes[node];
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
380 if not node_obj then
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
381 return false, "item-not-found";
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
382 end
8297
ac5c90230c2c util.pubsub: Clear data store if it supports being cleared, otherwise fall back to creating a new one
Kim Alvefur <zash@zash.se>
parents: 8220
diff changeset
383 if self.data[node] and self.data[node].clear then
ac5c90230c2c util.pubsub: Clear data store if it supports being cleared, otherwise fall back to creating a new one
Kim Alvefur <zash@zash.se>
parents: 8220
diff changeset
384 self.data[node]:clear()
ac5c90230c2c util.pubsub: Clear data store if it supports being cleared, otherwise fall back to creating a new one
Kim Alvefur <zash@zash.se>
parents: 8220
diff changeset
385 else
ac5c90230c2c util.pubsub: Clear data store if it supports being cleared, otherwise fall back to creating a new one
Kim Alvefur <zash@zash.se>
parents: 8220
diff changeset
386 self.data[node] = self.config.itemstore(self.nodes[node].config, node);
ac5c90230c2c util.pubsub: Clear data store if it supports being cleared, otherwise fall back to creating a new one
Kim Alvefur <zash@zash.se>
parents: 8220
diff changeset
387 end
5971
637731f0b9a3 util.pubsub: Fire events on more actions
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
388 self.events.fire_event("node-purged", { node = node, actor = actor });
5312
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
389 if notify then
8813
2c55fccb0c0c util.pubsub: Pass node and service objects to broadcaster to allow eg config access
Kim Alvefur <zash@zash.se>
parents: 8810
diff changeset
390 self.config.broadcaster("purge", node, node_obj.subscribers, nil, actor, node_obj, self);
5312
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
391 end
fdcd2ac7c22d mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents: 5305
diff changeset
392 return true
5305
391b72fede9f mod_pubsub, util.pubsub: Implement the purge action
Kim Alvefur <zash@zash.se>
parents: 5181
diff changeset
393 end
391b72fede9f mod_pubsub, util.pubsub: Implement the purge action
Kim Alvefur <zash@zash.se>
parents: 5181
diff changeset
394
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
395 function service:get_items(node, actor, id)
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
396 -- Access checking
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
397 if not self:may(node, actor, "get_items") then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
398 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
399 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
400 --
3641
3603aeb325de mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents: 3626
diff changeset
401 local node_obj = self.nodes[node];
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
402 if not node_obj then
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
403 return false, "item-not-found";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
404 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
405 if id then -- Restrict results to a single specific item
8316
8648cb171213 util.pubsub: Return item-not-found if a single item is requested, and not there
Kim Alvefur <zash@zash.se>
parents: 8312
diff changeset
406 local with_id = self.data[node]:get(id);
8648cb171213 util.pubsub: Return item-not-found if a single item is requested, and not there
Kim Alvefur <zash@zash.se>
parents: 8312
diff changeset
407 if not with_id then
8343
5df2f240173b util.pubsub: Return an empty list if specific item asked for does not exist (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 8333
diff changeset
408 return true, { };
8316
8648cb171213 util.pubsub: Return item-not-found if a single item is requested, and not there
Kim Alvefur <zash@zash.se>
parents: 8312
diff changeset
409 end
8648cb171213 util.pubsub: Return item-not-found if a single item is requested, and not there
Kim Alvefur <zash@zash.se>
parents: 8312
diff changeset
410 return true, { id, [id] = with_id };
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
411 else
7695
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
412 local data = {}
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
413 for key, value in self.data[node]:items() do
7726
29c20eefa306 util.pubsub: Fix item retrieval by including the item order as it was before using util.cache (thanks walduhu)
Kim Alvefur <zash@zash.se>
parents: 7703
diff changeset
414 data[#data+1] = key;
7695
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
415 data[key] = value;
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
416 end
56ce32cfd6d9 util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
417 return true, data;
3641
3603aeb325de mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents: 3626
diff changeset
418 end
3603aeb325de mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents: 3626
diff changeset
419 end
3603aeb325de mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents: 3626
diff changeset
420
8376
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
421 function service:get_last_item(node, actor)
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
422 -- Access checking
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
423 if not self:may(node, actor, "get_items") then
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
424 return false, "forbidden";
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
425 end
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
426 --
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
427 return true, self.data[node]:tail();
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
428 end
eb6a9c314c86 util.pubsub: Add method for retreiving the last item (useful for sending on subscribe)
Kim Alvefur <zash@zash.se>
parents: 8343
diff changeset
429
3759
1f7305784e12 util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents: 3699
diff changeset
430 function service:get_nodes(actor)
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
431 -- Access checking
3917
263a133bdf5a util.pubsub: Fix nil global access in get_nodes()
Matthew Wild <mwild1@gmail.com>
parents: 3910
diff changeset
432 if not self:may(nil, actor, "get_nodes") then
3910
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
433 return false, "forbidden";
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
434 end
80fe910f912a util.pubsub: Too many changes to list or split sensibly. Added access control to all methods, with capabilities support. Renamed get() -> get_items() and changed it to return true, result on success. Support for autocreate_on_subscribe and autocreate_on_publish config options.
Matthew Wild <mwild1@gmail.com>
parents: 3909
diff changeset
435 --
3759
1f7305784e12 util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents: 3699
diff changeset
436 return true, self.nodes;
1f7305784e12 util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents: 3699
diff changeset
437 end
1f7305784e12 util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents: 3699
diff changeset
438
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
439 function service:get_subscriptions(node, actor, jid)
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
440 -- Access checking
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
441 local cap;
4100
69e3f1e7111e util.pubsub: Pass true instead of nil as the actor in a bunch of places, and fix a bunch of methods to not traceback on this (those with *_other capability checking).
Matthew Wild <mwild1@gmail.com>
parents: 4099
diff changeset
442 if actor == true or jid == actor or self:jids_equal(actor, jid) then
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
443 cap = "get_subscriptions";
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
444 else
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
445 cap = "get_subscriptions_other";
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
446 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
447 if not self:may(node, actor, cap) then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
448 return false, "forbidden";
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
449 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
450 --
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
451 local node_obj;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
452 if node then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
453 node_obj = self.nodes[node];
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
454 if not node_obj then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
455 return false, "item-not-found";
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
456 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
457 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
458 local normal_jid = self.config.normalize_jid(jid);
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
459 local subs = self.subscriptions[normal_jid];
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
460 -- We return the subscription object from the node to save
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
461 -- a get_subscription() call for each node.
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
462 local ret = {};
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
463 if subs then
7703
74e755674e0f util.pubsub: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7696
diff changeset
464 for subscribed_jid, subscribed_nodes in pairs(subs) do
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
465 if node then -- Return only subscriptions to this node
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
466 if subscribed_nodes[node] then
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
467 ret[#ret+1] = {
5628
ba5c2f6b799e util.pubsub: Fix get_subscriptions to not pass a boolean as node name (thanks jonas)
Kim Alvefur <zash@zash.se>
parents: 5320
diff changeset
468 node = node;
7703
74e755674e0f util.pubsub: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7696
diff changeset
469 jid = subscribed_jid;
74e755674e0f util.pubsub: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7696
diff changeset
470 subscription = node_obj.subscribers[subscribed_jid];
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
471 };
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
472 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
473 else -- Return subscriptions to all nodes
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
474 local nodes = self.nodes;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
475 for subscribed_node in pairs(subscribed_nodes) do
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
476 ret[#ret+1] = {
3942
0323beb7183c util.pubsub: Use correct node name when returning a list of multiple nodes in a subscriptions response
Matthew Wild <mwild1@gmail.com>
parents: 3938
diff changeset
477 node = subscribed_node;
7703
74e755674e0f util.pubsub: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7696
diff changeset
478 jid = subscribed_jid;
74e755674e0f util.pubsub: Rename loop variable to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7696
diff changeset
479 subscription = nodes[subscribed_node].subscribers[subscribed_jid];
3938
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
480 };
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
481 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
482 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
483 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
484 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
485 return true, ret;
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
486 end
a3ecaf46bd82 util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents: 3937
diff changeset
487
3928
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
488 -- Access models only affect 'none' affiliation caps, service/default access level...
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
489 function service:set_node_capabilities(node, actor, capabilities)
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
490 -- Access checking
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
491 if not self:may(node, actor, "configure") then
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
492 return false, "forbidden";
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
493 end
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
494 --
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
495 local node_obj = self.nodes[node];
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
496 if not node_obj then
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
497 return false, "item-not-found";
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
498 end
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
499 node_obj.capabilities = capabilities;
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
500 return true;
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
501 end
4dfb345e33ec util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents: 3917
diff changeset
502
6437
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
503 function service:set_node_config(node, actor, new_config)
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
504 if not self:may(node, actor, "configure") then
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
505 return false, "forbidden";
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
506 end
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
507
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
508 local node_obj = self.nodes[node];
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
509 if not node_obj then
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
510 return false, "item-not-found";
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
511 end
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
512
8951
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
513 local old_config = node_obj.config;
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
514 node_obj.config = setmetatable(new_config, {__index=self.node_defaults});
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
515
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
516 if self.config.nodestore then
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
517 local ok, err = save_node_to_store(self, node_obj);
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
518 if not ok then
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
519 node_obj.config = old_config;
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
520 return ok, "internal-server-error";
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
521 end
6437
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
522 end
8401
f1923a79c93d util.pubsub: Recreate itemstore if persist_items changes or resize it if max_items changes
Kim Alvefur <zash@zash.se>
parents: 8382
diff changeset
523
8951
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
524 if old_config["persist_items"] ~= node_obj.config["persist_items"] then
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
525 self.data[node] = self.config.itemstore(self.nodes[node].config, node);
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
526 elseif old_config["max_items"] ~= node_obj.config["max_items"] then
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
527 self.data[node]:resize(self.nodes[node].config["max_items"]);
9baac001fccb util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents: 8950
diff changeset
528 end
8401
f1923a79c93d util.pubsub: Recreate itemstore if persist_items changes or resize it if max_items changes
Kim Alvefur <zash@zash.se>
parents: 8382
diff changeset
529
6437
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
530 return true;
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
531 end
3f1f11dfdf10 util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents: 6436
diff changeset
532
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 6515
diff changeset
533 return {
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 6515
diff changeset
534 new = new;
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 6515
diff changeset
535 };