Software /
code /
prosody
Annotate
util/pubsub.lua @ 10390:82705ec87253 0.11
util.startup: Ensure prosody.paths are absolute (see #1430)
Normally these paths are injected into the installed 'prosody'
executable as absolute paths, but it is possible to override at least
the config path via environment variable or command line argument. This
makes sure a path relative to pwd stays relative to that instead of the
data directory.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 04 Nov 2019 00:29:49 +0100 |
parent | 9840:ec353524b739 |
child | 10356:0a2d7efca039 |
child | 10518:9f50489c2033 |
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 | 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; |
9158
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
12 capabilities = { |
9160
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
13 outcast = { |
9233
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
14 create = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
15 publish = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
16 retract = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
17 get_nodes = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
18 |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
19 subscribe = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
20 unsubscribe = false; |
9172
822e9c5ff4a4
util.pubsub: Allow outcasts to get their subscription status
Matthew Wild <mwild1@gmail.com>
parents:
9161
diff
changeset
|
21 get_subscription = true; |
822e9c5ff4a4
util.pubsub: Allow outcasts to get their subscription status
Matthew Wild <mwild1@gmail.com>
parents:
9161
diff
changeset
|
22 get_subscriptions = true; |
9233
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
23 get_items = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
24 |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
25 subscribe_other = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
26 unsubscribe_other = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
27 get_subscription_other = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
28 get_subscriptions_other = false; |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
29 |
9158
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
30 be_subscribed = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
31 be_unsubscribed = true; |
9233
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
32 |
885dd6845e62
util.pubsub: Explicitly add all capabilities to the 'outcast' affiliation for completeness
Kim Alvefur <zash@zash.se>
parents:
9232
diff
changeset
|
33 set_affiliation = false; |
9158
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
34 }; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
35 none = { |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
36 create = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
37 publish = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
38 retract = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
39 get_nodes = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
40 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
41 subscribe = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
42 unsubscribe = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
43 get_subscription = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
44 get_subscriptions = true; |
9160
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
45 get_items = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
46 |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
47 subscribe_other = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
48 unsubscribe_other = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
49 get_subscription_other = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
50 get_subscriptions_other = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
51 |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
52 be_subscribed = true; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
53 be_unsubscribed = true; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
54 |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
55 set_affiliation = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
56 }; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
57 member = { |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
58 create = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
59 publish = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
60 retract = false; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
61 get_nodes = true; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
62 |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
63 subscribe = true; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
64 unsubscribe = true; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
65 get_subscription = true; |
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
66 get_subscriptions = true; |
9158
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
67 get_items = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
68 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
69 subscribe_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
70 unsubscribe_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
71 get_subscription_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
72 get_subscriptions_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
73 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
74 be_subscribed = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
75 be_unsubscribed = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
76 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
77 set_affiliation = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
78 }; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
79 publisher = { |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
80 create = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
81 publish = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
82 retract = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
83 get_nodes = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
84 get_configuration = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
85 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
86 subscribe = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
87 unsubscribe = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
88 get_subscription = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
89 get_subscriptions = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
90 get_items = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
91 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
92 subscribe_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
93 unsubscribe_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
94 get_subscription_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
95 get_subscriptions_other = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
96 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
97 be_subscribed = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
98 be_unsubscribed = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
99 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
100 set_affiliation = false; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
101 }; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
102 owner = { |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
103 create = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
104 publish = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
105 retract = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
106 delete = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
107 get_nodes = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
108 configure = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
109 get_configuration = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
110 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
111 subscribe = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
112 unsubscribe = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
113 get_subscription = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
114 get_subscriptions = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
115 get_items = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
116 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
117 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
118 subscribe_other = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
119 unsubscribe_other = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
120 get_subscription_other = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
121 get_subscriptions_other = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
122 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
123 be_subscribed = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
124 be_unsubscribed = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
125 |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
126 set_affiliation = true; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
127 }; |
37e814a680ab
mod_pubsub, mod_pep, util.pubsub: Move capability definitions into util.pubsub to avoid duplication
Matthew Wild <mwild1@gmail.com>
parents:
9144
diff
changeset
|
128 }; |
8500
9bf00d0734c8
util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents:
8401
diff
changeset
|
129 }; |
9bf00d0734c8
util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents:
8401
diff
changeset
|
130 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
|
131 |
9bf00d0734c8
util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents:
8401
diff
changeset
|
132 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
|
133 ["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
|
134 ["max_items"] = 20; |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
135 ["access_model"] = "open"; |
9129
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
136 ["publish_model"] = "publishers"; |
8500
9bf00d0734c8
util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents:
8401
diff
changeset
|
137 }; |
9bf00d0734c8
util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents:
8401
diff
changeset
|
138 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
|
139 |
8502
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
140 -- 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
|
141 |
8950
03ba5b4f131a
util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents:
8941
diff
changeset
|
142 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
|
143 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
|
144 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
|
145 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
|
146 end |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
147 |
8950
03ba5b4f131a
util.pubsub: Fix applying per service node defaults when loading from nodestore
Kim Alvefur <zash@zash.se>
parents:
8941
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 }); |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
155 end |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
156 |
8952
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
157 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
|
158 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
|
159 end |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
160 |
8502
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
161 -- 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
|
162 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
|
163 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
|
164 |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
165 local service = setmetatable({ |
8500
9bf00d0734c8
util.pubsub: For clarity, split config tables from their metatables
Matthew Wild <mwild1@gmail.com>
parents:
8401
diff
changeset
|
166 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
|
167 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
|
168 affiliations = {}; |
3938
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
169 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
|
170 nodes = {}; |
5972
f365d3c8fd2c
util.pubsub: Separate data from node configuration
Kim Alvefur <zash@zash.se>
parents:
5971
diff
changeset
|
171 data = {}; |
4365
6704b3cd032e
util.pubsub: Support for events (currently subscription-added and subscription-removed)
Matthew Wild <mwild1@gmail.com>
parents:
4364
diff
changeset
|
172 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
|
173 }, 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
|
174 |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
175 -- 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
|
176 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
|
177 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
|
178 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
|
179 service.data[node_name] = config.itemstore(service.nodes[node_name].config, node_name); |
9742
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
180 |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
181 for jid in pairs(service.nodes[node_name].subscribers) do |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
182 local normal_jid = service.config.normalize_jid(jid); |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
183 local subs = service.subscriptions[normal_jid]; |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
184 if subs then |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
185 if not subs[jid] then |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
186 subs[jid] = { [node_name] = true }; |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
187 else |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
188 subs[jid][node_name] = true; |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
189 end |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
190 else |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
191 service.subscriptions[normal_jid] = { [jid] = { [node_name] = true } }; |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
192 end |
18eca6afb367
util.pubsub: Restore subscription index from stored data (fixes #1281)
Kim Alvefur <zash@zash.se>
parents:
9539
diff
changeset
|
193 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
|
194 end |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
195 end |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
196 |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
197 return service; |
3619 | 198 end |
199 | |
8501
8d9e2c2095dd
util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents:
8500
diff
changeset
|
200 --- Service methods |
8d9e2c2095dd
util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents:
8500
diff
changeset
|
201 |
8d9e2c2095dd
util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents:
8500
diff
changeset
|
202 local service = {}; |
8d9e2c2095dd
util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents:
8500
diff
changeset
|
203 service_mt.__index = service; |
8d9e2c2095dd
util.pubsub: Move service methods object creation (just code reorganisation)
Matthew Wild <mwild1@gmail.com>
parents:
8500
diff
changeset
|
204 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
205 function service:jids_equal(jid1, jid2) --> boolean |
3934
4bd994df7296
util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents:
3931
diff
changeset
|
206 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
|
207 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
|
208 end |
4bd994df7296
util.pubsub: Add service:jids_equal() and new config option normalize_jid
Matthew Wild <mwild1@gmail.com>
parents:
3931
diff
changeset
|
209 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
210 function service:may(node, actor, action) --> boolean |
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
|
211 if actor == true then return true; end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5675
diff
changeset
|
212 |
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
|
213 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
|
214 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
|
215 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
|
216 local service_aff = self.affiliations[actor] |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
217 or self.config.get_affiliation(actor, node, action); |
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
218 local default_aff = self:get_default_affiliation(node, actor) or "none"; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5675
diff
changeset
|
219 |
4099
5c0b7947f0ef
util.pubsub: Some tidying/optimisation to service:may()
Matthew Wild <mwild1@gmail.com>
parents:
3945
diff
changeset
|
220 -- 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
|
221 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
|
222 if node_capabilities then |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
223 local caps = node_capabilities[node_aff or service_aff or default_aff]; |
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
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5675
diff
changeset
|
231 |
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
|
232 -- Check service-wide capabilities instead |
4099
5c0b7947f0ef
util.pubsub: Some tidying/optimisation to service:may()
Matthew Wild <mwild1@gmail.com>
parents:
3945
diff
changeset
|
233 local service_capabilities = self.config.capabilities; |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
234 local caps = service_capabilities[node_aff or service_aff or default_aff]; |
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 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5675
diff
changeset
|
241 |
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
|
242 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
|
243 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
|
244 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
245 function service:get_default_affiliation(node, actor) --> affiliation |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
246 local node_obj = self.nodes[node]; |
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
247 local access_model = node_obj and node_obj.config.access_model |
9106
e70b9e8bc443
util.pubsub: Use service.node_defaults in case config.node_defaults was not provided (thanks jonasw)
Matthew Wild <mwild1@gmail.com>
parents:
9104
diff
changeset
|
248 or self.node_defaults.access_model; |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
249 |
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
250 if access_model == "open" then |
9161
da154ced7de4
util.pubsub: For open nodes, default affiliation is "member"
Matthew Wild <mwild1@gmail.com>
parents:
9160
diff
changeset
|
251 return "member"; |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
252 elseif access_model == "whitelist" then |
9160
e13a1a0b0107
mod_pep, util.pubsub: Rename restricted->outcast, none->member and add new 'none' affiliation to better match XEP-0060
Matthew Wild <mwild1@gmail.com>
parents:
9158
diff
changeset
|
253 return "outcast"; |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
254 end |
9098
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
255 |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
256 if self.config.access_models then |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
257 local check = self.config.access_models[access_model]; |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
258 if check then |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
259 local aff = check(actor); |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
260 if aff then |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
261 return aff; |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
262 end |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
263 end |
d5bc306e93aa
util.pubsub: Look for a configured callback for more complicated access models
Kim Alvefur <zash@zash.se>
parents:
9095
diff
changeset
|
264 end |
9095
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
265 end |
5639dc1a3f85
util.pubsub: Add initial support for configurable access models
Kim Alvefur <zash@zash.se>
parents:
9075
diff
changeset
|
266 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
267 function service:set_affiliation(node, actor, jid, affiliation) --> ok, err |
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
|
268 -- 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
|
269 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
|
270 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
|
271 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
|
272 -- |
3619 | 273 local node_obj = self.nodes[node]; |
274 if not node_obj then | |
275 return false, "item-not-found"; | |
276 end | |
8941 | 277 jid = self.config.normalize_jid(jid); |
8954
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
278 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
|
279 node_obj.affiliations[jid] = affiliation; |
8954
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
280 |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
281 if self.config.nodestore then |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
282 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
|
283 if not ok then |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
284 node_obj.affiliations[jid] = old_affiliation; |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
285 return ok, "internal-server-error"; |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
286 end |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
287 end |
3b6095686498
util.pubsub: Persistence on affiliation change
Kim Alvefur <zash@zash.se>
parents:
8952
diff
changeset
|
288 |
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
|
289 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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 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
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 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
|
302 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
|
303 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
304 function service:add_subscription(node, actor, jid, options) --> ok, err |
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
|
305 -- 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
|
306 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
|
307 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
|
308 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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 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
|
315 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
|
316 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
|
317 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
|
318 -- |
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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 end |
3936
61f12f8a8539
util.pubsub: Fix traceback when using autocreate-on-subscribe
Matthew Wild <mwild1@gmail.com>
parents:
3934
diff
changeset
|
328 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
|
329 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
|
330 end |
8955
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
331 local old_subscription = node_obj.subscribers[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
|
332 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
|
333 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
|
334 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
|
335 if subs then |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
336 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
|
337 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
|
338 else |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
339 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
|
340 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
341 else |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
342 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
|
343 end |
8955
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
344 |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
345 if self.config.nodestore then |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
346 local ok, err = save_node_to_store(self, node_obj); |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
347 if not ok then |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
348 node_obj.subscribers[jid] = old_subscription; |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
349 self.subscriptions[normal_jid][jid][node] = old_subscription and true or nil; |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
350 return ok, "internal-server-error"; |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
351 end |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
352 end |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
353 |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
354 self.events.fire_event("subscription-added", { service = self, node = node, jid = jid, normalized_jid = normal_jid, options = options }); |
3619 | 355 return true; |
356 end | |
357 | |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
358 function service:remove_subscription(node, actor, jid) --> ok, err |
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
|
359 -- 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
|
360 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
|
361 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
|
362 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
|
363 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
|
364 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
|
365 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
|
366 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
|
367 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
|
368 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
|
369 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
|
370 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
|
371 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
|
372 -- |
3698
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
373 local node_obj = self.nodes[node]; |
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
374 if not node_obj then |
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
375 return false, "item-not-found"; |
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
376 end |
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
377 if not node_obj.subscribers[jid] then |
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
378 return false, "not-subscribed"; |
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
379 end |
8955
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
380 local old_subscription = node_obj.subscribers[jid]; |
3698
77171fd1dc3c
mod_pubsub, util.pubsub: Support for unsubscribing
Florian Zeitz <florob@babelmonkeys.de>
parents:
3672
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 if subs then |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
385 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
|
386 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
|
387 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
|
388 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
|
389 subs[jid] = nil; |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
390 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
391 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
392 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
|
393 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
|
394 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
395 end |
8955
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
396 |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
397 if self.config.nodestore then |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
398 local ok, err = save_node_to_store(self, node_obj); |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
399 if not ok then |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
400 node_obj.subscribers[jid] = old_subscription; |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
401 self.subscriptions[normal_jid][jid][node] = old_subscription and true or nil; |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
402 return ok, "internal-server-error"; |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
403 end |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
404 end |
ca6a09cf2829
util.pubsub: Store subscription changes
Kim Alvefur <zash@zash.se>
parents:
8954
diff
changeset
|
405 |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
406 self.events.fire_event("subscription-removed", { service = self, node = node, jid = jid, normalized_jid = normal_jid }); |
3619 | 407 return true; |
408 end | |
409 | |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
410 function service:get_subscription(node, actor, jid) --> (true, subscription) or (false, err) |
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 -- 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
|
412 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
|
413 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
|
414 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
|
415 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
|
416 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
|
417 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
|
418 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
|
419 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
|
420 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
|
421 -- |
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
|
422 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
|
423 if not node_obj then |
843ee23cc91a
util.pubsub: Small code tidying for :get_subscription()
Matthew Wild <mwild1@gmail.com>
parents:
3936
diff
changeset
|
424 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
|
425 end |
3937
843ee23cc91a
util.pubsub: Small code tidying for :get_subscription()
Matthew Wild <mwild1@gmail.com>
parents:
3936
diff
changeset
|
426 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
|
427 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
|
428 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
429 function service:create(node, actor, options) --> ok, err |
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
|
430 -- 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
|
431 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
|
432 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
|
433 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
|
434 -- |
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 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
|
436 return false, "conflict"; |
3672
b24db47995ac
mod_pubsub, util.pubsub: Support node creation
Florian Zeitz <florob@babelmonkeys.de>
parents:
3641
diff
changeset
|
437 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5675
diff
changeset
|
438 |
9840
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
439 local config = setmetatable(options or {}, {__index=self.node_defaults}); |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
440 |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
441 if self.config.check_node_config then |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
442 local ok = self.config.check_node_config(node, actor, config); |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
443 if not ok then |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
444 return false, "not-acceptable"; |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
445 end |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
446 end |
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
447 |
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
|
448 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
|
449 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
|
450 subscribers = {}; |
9840
ec353524b739
util.pubsub: Validate node configuration on node creation (fixes #1328)
Kim Alvefur <zash@zash.se>
parents:
9816
diff
changeset
|
451 config = config; |
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
|
452 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
|
453 }; |
8502
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
454 |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
455 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
|
456 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
|
457 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
|
458 self.nodes[node] = nil; |
8956
82f92af4b0f3
util.pubsub: Return error code known by pubsub.lib if persistent creation fails
Kim Alvefur <zash@zash.se>
parents:
8955
diff
changeset
|
459 return ok, "internal-server-error"; |
8502
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
460 end |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
461 end |
6c2c2fc4b8dd
util.pubsub: Support a 'nodestore' for persisting nodes (same API as kv stores)
Matthew Wild <mwild1@gmail.com>
parents:
8501
diff
changeset
|
462 |
8211
5cbbe825d9d1
util.pubsub: Add a node parameter to itemstore().
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7727
diff
changeset
|
463 self.data[node] = self.config.itemstore(self.nodes[node].config, node); |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
464 self.events.fire_event("node-created", { service = self, 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
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 return ok, err; |
6cba2df3817c
util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents:
8694
diff
changeset
|
471 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
|
472 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
|
473 |
8809
6cba2df3817c
util.pubsub: Don't record the superuser as owner on creation
Kim Alvefur <zash@zash.se>
parents:
8694
diff
changeset
|
474 return true; |
3672
b24db47995ac
mod_pubsub, util.pubsub: Support node creation
Florian Zeitz <florob@babelmonkeys.de>
parents:
3641
diff
changeset
|
475 end |
b24db47995ac
mod_pubsub, util.pubsub: Support node creation
Florian Zeitz <florob@babelmonkeys.de>
parents:
3641
diff
changeset
|
476 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
477 function service:delete(node, actor) --> ok, err |
5320
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
478 -- Access checking |
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
479 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
|
480 return false, "forbidden"; |
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
481 end |
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
482 -- |
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
483 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
|
484 if not node_obj then |
e29ece65e3b0
util.pubsub: Check whether node exists, when deleting
Florian Zeitz <florob@babelmonkeys.de>
parents:
5628
diff
changeset
|
485 return false, "item-not-found"; |
e29ece65e3b0
util.pubsub: Check whether node exists, when deleting
Florian Zeitz <florob@babelmonkeys.de>
parents:
5628
diff
changeset
|
486 end |
5320
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
487 self.nodes[node] = nil; |
8312
6fd36e73082b
util.pubsub: Clear data on node deletion
Kim Alvefur <zash@zash.se>
parents:
8297
diff
changeset
|
488 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
|
489 self.data[node]:clear(); |
6fd36e73082b
util.pubsub: Clear data on node deletion
Kim Alvefur <zash@zash.se>
parents:
8297
diff
changeset
|
490 end |
5972
f365d3c8fd2c
util.pubsub: Separate data from node configuration
Kim Alvefur <zash@zash.se>
parents:
5971
diff
changeset
|
491 self.data[node] = nil; |
8952
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
492 |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
493 if self.config.nodestore then |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
494 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
|
495 if not ok then |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
496 self.nodes[node] = nil; |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
497 return ok, err; |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
498 end |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
499 end |
15bb54f96dd1
util.pubsub: Remove node from persistent storage on deletion
Kim Alvefur <zash@zash.se>
parents:
8951
diff
changeset
|
500 |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
501 self.events.fire_event("node-deleted", { service = self, 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
|
502 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
|
503 return true; |
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
504 end |
518d864b2ab8
mod_pubsub, util.pubsub: Add delete action
Kim Alvefur <zash@zash.se>
parents:
5315
diff
changeset
|
505 |
9200
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
506 -- Used to check that the config of a node is as expected (i.e. 'publish-options') |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
507 local function check_preconditions(node_config, required_config) |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
508 if not (node_config and required_config) then |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
509 return false; |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
510 end |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
511 for config_field, value in pairs(required_config) do |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
512 if node_config[config_field] ~= value then |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
513 return false; |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
514 end |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
515 end |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
516 return true; |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
517 end |
249d90ff992e
pubsub.lib, util.pubsub: Move precondition checks to util.pubsub
Matthew Wild <mwild1@gmail.com>
parents:
9195
diff
changeset
|
518 |
9516
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
519 function service:publish(node, actor, id, item, requested_config) --> ok, err |
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
|
520 -- Access checking |
9129
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
521 local may_publish = false; |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
522 |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
523 if self:may(node, actor, "publish") then |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
524 may_publish = true; |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
525 else |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
526 local node_obj = self.nodes[node]; |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
527 local publish_model = node_obj and node_obj.config.publish_model; |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
528 if publish_model == "open" |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
529 or (publish_model == "subscribers" and node_obj.subscribers[actor]) then |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
530 may_publish = true; |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
531 end |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
532 end |
7721794e9e93
util.pubsub: Add support for publish_model config option
Matthew Wild <mwild1@gmail.com>
parents:
9117
diff
changeset
|
533 if not may_publish 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
|
534 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
|
535 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
|
536 -- |
3619 | 537 local node_obj = self.nodes[node]; |
538 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
|
539 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
|
540 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
|
541 end |
9516
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
542 local ok, err = self:create(node, true, requested_config); |
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
|
543 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
|
544 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
|
545 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
|
546 node_obj = self.nodes[node]; |
9516
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
547 elseif requested_config and not requested_config._defaults_only then |
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
548 -- Check that node has the requested config before we publish |
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
549 if not check_preconditions(node_obj.config, requested_config) then |
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
550 return false, "precondition-not-met"; |
038446c50630
util.pubsub: Allow publishing with a config that should be used as defaults only
Matthew Wild <mwild1@gmail.com>
parents:
9236
diff
changeset
|
551 end |
3619 | 552 end |
8694
059183e5571e
util.pubsub: Allow setting a callback for validating items to be published
Kim Alvefur <zash@zash.se>
parents:
8502
diff
changeset
|
553 if not self.config.itemcheck(item) then |
9207
76d593b35958
util.pubsub, pubsub.lib: Improve error on attempt to publish invalid item
Matthew Wild <mwild1@gmail.com>
parents:
9206
diff
changeset
|
554 return nil, "invalid-item"; |
8694
059183e5571e
util.pubsub: Allow setting a callback for validating items to be published
Kim Alvefur <zash@zash.se>
parents:
8502
diff
changeset
|
555 end |
5972
f365d3c8fd2c
util.pubsub: Separate data from node configuration
Kim Alvefur <zash@zash.se>
parents:
5971
diff
changeset
|
556 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
|
557 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
|
558 if not ok then |
56ce32cfd6d9
util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
559 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
|
560 end |
8217
5f4e0d67b82a
util.pubsub: Catch overriden id from storage
Kim Alvefur <zash@zash.se>
parents:
8212
diff
changeset
|
561 if type(ok) == "string" then id = ok; end |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
562 local event_data = { service = self, node = node, actor = actor, id = id, item = item }; |
9218
7e27dc4d100b
util.pubsub: Fire item-published/<node> to allow for easier handling of per-node items
Matthew Wild <mwild1@gmail.com>
parents:
9207
diff
changeset
|
563 self.events.fire_event("item-published/"..node, event_data); |
7e27dc4d100b
util.pubsub: Fire item-published/<node> to allow for easier handling of per-node items
Matthew Wild <mwild1@gmail.com>
parents:
9207
diff
changeset
|
564 self.events.fire_event("item-published", event_data); |
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
|
565 self.config.broadcaster("items", node, node_obj.subscribers, item, actor, node_obj, self); |
3619 | 566 return true; |
567 end | |
568 | |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
569 function service:retract(node, actor, id, retract) --> ok, err |
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
|
570 -- 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
|
571 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
|
572 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
|
573 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
|
574 -- |
3699
150e58d69e60
mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents:
3698
diff
changeset
|
575 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
|
576 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
|
577 return false, "item-not-found"; |
150e58d69e60
mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents:
3698
diff
changeset
|
578 end |
7695
56ce32cfd6d9
util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
579 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
|
580 if not ok then |
56ce32cfd6d9
util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
581 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
|
582 end |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
583 self.events.fire_event("item-retracted", { service = self, node = node, actor = actor, id = id }); |
3699
150e58d69e60
mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents:
3698
diff
changeset
|
584 if retract then |
9179
82fad995a149
util.pubsub: Pass "retract" as the type of such broadcasts
Kim Alvefur <zash@zash.se>
parents:
9172
diff
changeset
|
585 self.config.broadcaster("retract", 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
|
586 end |
150e58d69e60
mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents:
3698
diff
changeset
|
587 return true |
150e58d69e60
mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents:
3698
diff
changeset
|
588 end |
150e58d69e60
mod_pubsub: Support item retraction
Florian Zeitz <florob@babelmonkeys.de>
parents:
3698
diff
changeset
|
589 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
590 function service:purge(node, actor, notify) --> ok, err |
5312
fdcd2ac7c22d
mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents:
5305
diff
changeset
|
591 -- 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
|
592 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
|
593 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
|
594 end |
fdcd2ac7c22d
mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents:
5305
diff
changeset
|
595 -- |
fdcd2ac7c22d
mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents:
5305
diff
changeset
|
596 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
|
597 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
|
598 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
|
599 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
|
600 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
|
601 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
|
602 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
|
603 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
|
604 end |
9230
711fea229e48
util.pubsub: Add 'service' field to all events
Matthew Wild <mwild1@gmail.com>
parents:
9220
diff
changeset
|
605 self.events.fire_event("node-purged", { service = self, 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
|
606 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
|
607 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
|
608 end |
fdcd2ac7c22d
mod_pubsub, util.pubsub: Don't send purge notifications in an <items/> element
Florian Zeitz <florob@babelmonkeys.de>
parents:
5305
diff
changeset
|
609 return true |
5305
391b72fede9f
mod_pubsub, util.pubsub: Implement the purge action
Kim Alvefur <zash@zash.se>
parents:
5181
diff
changeset
|
610 end |
391b72fede9f
mod_pubsub, util.pubsub: Implement the purge action
Kim Alvefur <zash@zash.se>
parents:
5181
diff
changeset
|
611 |
9816
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
612 function service:get_items(node, actor, ids) --> (true, { id, [id] = node }) or (false, err) |
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
|
613 -- 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
|
614 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
|
615 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
|
616 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
|
617 -- |
3641
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
618 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
|
619 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
|
620 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
|
621 end |
9816
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
622 if type(ids) == "string" then -- COMPAT see #1305 |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
623 ids = { ids }; |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
624 end |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
625 local data = {}; |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
626 if ids then |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
627 for _, key in ipairs(ids) do |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
628 local value = self.data[node]:get(key); |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
629 if value then |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
630 data[#data+1] = key; |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
631 data[key] = value; |
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
632 end |
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
|
633 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
|
634 else |
7695
56ce32cfd6d9
util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
635 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
|
636 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
|
637 data[key] = value; |
56ce32cfd6d9
util.pubsub: Switch to use util.cache for item data
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
638 end |
3641
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
639 end |
9816
7f84d7f77a00
util.pubsub: Add support for requesting multiple specific items (needed for #1305)
Kim Alvefur <zash@zash.se>
parents:
9742
diff
changeset
|
640 return true, data; |
3641
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
641 end |
3603aeb325de
mod_pubsub, util.pubsub: Support for fetching items
Florian Zeitz <florob@babelmonkeys.de>
parents:
3626
diff
changeset
|
642 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
643 function service:get_last_item(node, actor) --> (true, id, node) or (false, err) |
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
|
644 -- 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
|
645 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
|
646 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
|
647 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
|
648 -- |
9201
1555ea0d6f61
util.pubsub: get_last_item(): Return error if node does not exist
Matthew Wild <mwild1@gmail.com>
parents:
9200
diff
changeset
|
649 |
9203
c65bfddd3cc5
Backed out changeset 27d800ddc3b0 (see below)
Matthew Wild <mwild1@gmail.com>
parents:
9202
diff
changeset
|
650 -- Check node exists |
c65bfddd3cc5
Backed out changeset 27d800ddc3b0 (see below)
Matthew Wild <mwild1@gmail.com>
parents:
9202
diff
changeset
|
651 if not self.nodes[node] then |
9201
1555ea0d6f61
util.pubsub: get_last_item(): Return error if node does not exist
Matthew Wild <mwild1@gmail.com>
parents:
9200
diff
changeset
|
652 return false, "item-not-found"; |
1555ea0d6f61
util.pubsub: get_last_item(): Return error if node does not exist
Matthew Wild <mwild1@gmail.com>
parents:
9200
diff
changeset
|
653 end |
9204
c5a81acc1fc3
util.pubsub: Fix whitespace [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
9203
diff
changeset
|
654 |
9195
b6ffd4f951b9
util.pubsub: Add comment to clarify return values
Matthew Wild <mwild1@gmail.com>
parents:
9179
diff
changeset
|
655 -- Returns success, id, item |
9206
33ee40dc3e25
Pubsub: Add tests for :get_last_item() and fix for non-persistent nodes
Matthew Wild <mwild1@gmail.com>
parents:
9204
diff
changeset
|
656 return true, self.data[node]:head(); |
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
|
657 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
|
658 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
659 function service:get_nodes(actor) --> (true, map) or (false, err) |
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
|
660 -- Access checking |
3917
263a133bdf5a
util.pubsub: Fix nil global access in get_nodes()
Matthew Wild <mwild1@gmail.com>
parents:
3910
diff
changeset
|
661 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
|
662 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
|
663 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
|
664 -- |
3759
1f7305784e12
util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents:
3699
diff
changeset
|
665 return true, self.nodes; |
1f7305784e12
util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents:
3699
diff
changeset
|
666 end |
1f7305784e12
util.pubsub: Add service:get_nodes()
Matthew Wild <mwild1@gmail.com>
parents:
3699
diff
changeset
|
667 |
9031
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
668 local function flatten_subscriptions(ret, serv, subs, node, node_obj) |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
669 for subscribed_jid, subscribed_nodes in pairs(subs) do |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
670 if node then -- Return only subscriptions to this node |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
671 if subscribed_nodes[node] then |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
672 ret[#ret+1] = { |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
673 node = node; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
674 jid = subscribed_jid; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
675 subscription = node_obj.subscribers[subscribed_jid]; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
676 }; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
677 end |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
678 else -- Return subscriptions to all nodes |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
679 local nodes = serv.nodes; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
680 for subscribed_node in pairs(subscribed_nodes) do |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
681 ret[#ret+1] = { |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
682 node = subscribed_node; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
683 jid = subscribed_jid; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
684 subscription = nodes[subscribed_node].subscribers[subscribed_jid]; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
685 }; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
686 end |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
687 end |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
688 end |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
689 end |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
690 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
691 function service:get_subscriptions(node, actor, jid) --> (true, array) or (false, err) |
3938
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
692 -- Access checking |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
693 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
|
694 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
|
695 cap = "get_subscriptions"; |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
696 else |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
697 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
|
698 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
699 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
|
700 return false, "forbidden"; |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
701 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
702 -- |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
703 local node_obj; |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
704 if node then |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
705 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
|
706 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
|
707 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
|
708 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
709 end |
9031
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
710 local ret = {}; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
711 if jid == nil then |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
712 for _, subs in pairs(self.subscriptions) do |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
713 flatten_subscriptions(ret, self, subs, node, node_obj) |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
714 end |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
715 return true, ret; |
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
716 end |
3938
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
717 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
|
718 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
|
719 -- 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
|
720 -- 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
|
721 if subs then |
9031
d1a4b1b78695
util.pubsub: Support for returning *all* subscriptions
Kim Alvefur <zash@zash.se>
parents:
8956
diff
changeset
|
722 flatten_subscriptions(ret, self, subs, node, node_obj) |
3938
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
723 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
724 return true, ret; |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
725 end |
a3ecaf46bd82
util.pubsub: Add service-wide subscription tracking, and add :get_subscriptions()
Matthew Wild <mwild1@gmail.com>
parents:
3937
diff
changeset
|
726 |
3928
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
727 -- Access models only affect 'none' affiliation caps, service/default access level... |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
728 function service:set_node_capabilities(node, actor, capabilities) --> ok, err |
3928
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
729 -- Access checking |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
730 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
|
731 return false, "forbidden"; |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
732 end |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
733 -- |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
734 local node_obj = self.nodes[node]; |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
735 if not node_obj then |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
736 return false, "item-not-found"; |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
737 end |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
738 node_obj.capabilities = capabilities; |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
739 return true; |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
740 end |
4dfb345e33ec
util.pubsub: Add service:set_node_capabilities()
Matthew Wild <mwild1@gmail.com>
parents:
3917
diff
changeset
|
741 |
9232
65c83bfcf2ee
util.pubsub: Comments describing the return values of methods
Kim Alvefur <zash@zash.se>
parents:
9230
diff
changeset
|
742 function service:set_node_config(node, actor, new_config) --> ok, err |
6437
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
743 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
|
744 return false, "forbidden"; |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
745 end |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
746 |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
747 local node_obj = self.nodes[node]; |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
748 if not node_obj then |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
749 return false, "item-not-found"; |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
750 end |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
751 |
9117
a19fdc6e4f09
util.pubsub: Apply defaults metatable before config check (thanks pep.)
Kim Alvefur <zash@zash.se>
parents:
9107
diff
changeset
|
752 setmetatable(new_config, {__index=self.node_defaults}) |
a19fdc6e4f09
util.pubsub: Apply defaults metatable before config check (thanks pep.)
Kim Alvefur <zash@zash.se>
parents:
9107
diff
changeset
|
753 |
9075
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
754 if self.config.check_node_config then |
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
755 local ok = self.config.check_node_config(node, actor, new_config); |
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
756 if not ok then |
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
757 return false, "not-acceptable"; |
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
758 end |
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
759 end |
46d4322f7eed
util.pubsub: Add support for a config validation function
Matthew Wild <mwild1@gmail.com>
parents:
9031
diff
changeset
|
760 |
8951
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
761 local old_config = node_obj.config; |
9117
a19fdc6e4f09
util.pubsub: Apply defaults metatable before config check (thanks pep.)
Kim Alvefur <zash@zash.se>
parents:
9107
diff
changeset
|
762 node_obj.config = new_config; |
8951
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
763 |
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
764 if self.config.nodestore then |
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
765 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
|
766 if not ok then |
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
767 node_obj.config = old_config; |
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
768 return ok, "internal-server-error"; |
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
769 end |
6437
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
770 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
|
771 |
9138
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
772 if old_config["access_model"] ~= node_obj.config["access_model"] then |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
773 for subscriber in pairs(node_obj.subscribers) do |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
774 if not self:may(node, subscriber, "be_subscribed") then |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
775 local ok, err = self:remove_subscription(node, true, subscriber); |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
776 if not ok then |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
777 node_obj.config = old_config; |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
778 return ok, err; |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
779 end |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
780 end |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
781 end |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
782 end |
db47db788295
util.pubsub: Re-check all subscriptions on access_model change, unsubscribing those no longer allowed
Kim Alvefur <zash@zash.se>
parents:
9129
diff
changeset
|
783 |
8951
9baac001fccb
util.pubsub: Persist nodes on configuration change
Kim Alvefur <zash@zash.se>
parents:
8950
diff
changeset
|
784 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
|
785 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
|
786 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
|
787 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
|
788 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
|
789 |
6437
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
790 return true; |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
791 end |
3f1f11dfdf10
util.pubsub: Add support for node configuration
Kim Alvefur <zash@zash.se>
parents:
6436
diff
changeset
|
792 |
9539
b30455212f89
util.pubsub: Clarify comment about return value
Kim Alvefur <zash@zash.se>
parents:
9516
diff
changeset
|
793 function service:get_node_config(node, actor) --> (true, config) or (false, err) |
9107
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
794 if not self:may(node, actor, "get_configuration") then |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
795 return false, "forbidden"; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
796 end |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
797 |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
798 local node_obj = self.nodes[node]; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
799 if not node_obj then |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
800 return false, "item-not-found"; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
801 end |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
802 |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
803 local config_table = {}; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
804 for k, v in pairs(default_node_config) do |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
805 config_table[k] = v; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
806 end |
9144
b40efef8ec99
util.pubsub: Include node defaults from current service object
Kim Alvefur <zash@zash.se>
parents:
9138
diff
changeset
|
807 for k, v in pairs(self.node_defaults) do |
b40efef8ec99
util.pubsub: Include node defaults from current service object
Kim Alvefur <zash@zash.se>
parents:
9138
diff
changeset
|
808 config_table[k] = v; |
b40efef8ec99
util.pubsub: Include node defaults from current service object
Kim Alvefur <zash@zash.se>
parents:
9138
diff
changeset
|
809 end |
9107
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
810 for k, v in pairs(node_obj.config) do |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
811 config_table[k] = v; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
812 end |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
813 |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
814 return true, config_table; |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
815 end |
6e42ef9c805c
util.pubsub: Add method to retrieve node configuration
Matthew Wild <mwild1@gmail.com>
parents:
9106
diff
changeset
|
816 |
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
|
817 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
|
818 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
|
819 }; |