3 local jid_split = require "prosody.util.jid".split; |
3 local jid_split = require "prosody.util.jid".split; |
4 local jid_join = require "prosody.util.jid".join; |
4 local jid_join = require "prosody.util.jid".join; |
5 local set_new = require "prosody.util.set".new; |
5 local set_new = require "prosody.util.set".new; |
6 local st = require "prosody.util.stanza"; |
6 local st = require "prosody.util.stanza"; |
7 local calculate_hash = require "prosody.util.caps".calculate_hash; |
7 local calculate_hash = require "prosody.util.caps".calculate_hash; |
8 local is_contact_subscribed = require "prosody.core.rostermanager".is_contact_subscribed; |
8 local rostermanager = require "prosody.core.rostermanager"; |
9 local cache = require "prosody.util.cache"; |
9 local cache = require "prosody.util.cache"; |
10 local set = require "prosody.util.set"; |
10 local set = require "prosody.util.set"; |
11 local new_id = require "prosody.util.id".medium; |
11 local new_id = require "prosody.util.id".medium; |
12 local storagemanager = require "prosody.core.storagemanager"; |
12 local storagemanager = require "prosody.core.storagemanager"; |
13 local usermanager = require "prosody.core.usermanager"; |
13 local usermanager = require "prosody.core.usermanager"; |
14 |
14 |
15 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
15 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
16 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; |
16 local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event"; |
17 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; |
17 local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner"; |
|
18 |
|
19 local is_contact_subscribed = rostermanager.is_contact_subscribed; |
18 |
20 |
19 local lib_pubsub = module:require "pubsub"; |
21 local lib_pubsub = module:require "pubsub"; |
20 |
22 |
21 local empty_set = set_new(); |
23 local empty_set = set_new(); |
22 |
24 |
82 function check_node_config(node, actor, new_config) -- luacheck: ignore 212/node 212/actor |
84 function check_node_config(node, actor, new_config) -- luacheck: ignore 212/node 212/actor |
83 if (tonumber_max_items(new_config["max_items"]) or 1) > max_max_items then |
85 if (tonumber_max_items(new_config["max_items"]) or 1) > max_max_items then |
84 return false; |
86 return false; |
85 end |
87 end |
86 if new_config["access_model"] ~= "presence" |
88 if new_config["access_model"] ~= "presence" |
|
89 and new_config["access_model"] ~= "roster" |
87 and new_config["access_model"] ~= "whitelist" |
90 and new_config["access_model"] ~= "whitelist" |
88 and new_config["access_model"] ~= "open" then |
91 and new_config["access_model"] ~= "open" then |
89 return false; |
92 return false; |
90 end |
93 end |
91 return true; |
94 return true; |
251 |
254 |
252 access_models = { |
255 access_models = { |
253 presence = function (jid) |
256 presence = function (jid) |
254 if subscription_presence(username, jid) then |
257 if subscription_presence(username, jid) then |
255 return "member"; |
258 return "member"; |
|
259 end |
|
260 return "outcast"; |
|
261 end; |
|
262 roster = function (jid, node) |
|
263 jid = jid_bare(jid); |
|
264 local allowed_groups = set_new(node.config.roster_groups_allowed); |
|
265 local roster = rostermanager.load_roster(username, host); |
|
266 if not roster[jid] then |
|
267 return "outcast"; |
|
268 end |
|
269 for group in pairs(roster[jid].groups) do |
|
270 if allowed_groups:contains(group) then |
|
271 return "member"; |
|
272 end |
256 end |
273 end |
257 return "outcast"; |
274 return "outcast"; |
258 end; |
275 end; |
259 }; |
276 }; |
260 |
277 |