Software /
code /
prosody
Comparison
plugins/mod_pep.lua @ 13486:fdd1438d9ef7
mod_pep: Implement 'roster' (group) access_model
Allows e.g. restricting your vcard4 to only family or similar.
Notes: This does not include roster groups in the configuration form,
so the client will have to get them from the actual roster.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 03 Dec 2023 23:19:27 +0100 |
parent | 13213:50324f66ca2a |
child | 13586:c8a387912a33 |
comparison
equal
deleted
inserted
replaced
13485:3bdbaba15c00 | 13486:fdd1438d9ef7 |
---|---|
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 |