plugins/mod_pep.lua
changeset 13490 fdd1438d9ef7
parent 13217 50324f66ca2a
equal deleted inserted replaced
13489:3bdbaba15c00 13490: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