mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 05:07:42 +03:00
71 lines
1.6 KiB
Lua
71 lines
1.6 KiB
Lua
-- Prosody IM
|
|
-- Copyright (C) 2008-2010 Matthew Wild
|
|
-- Copyright (C) 2008-2010 Waqas Hussain
|
|
-- Copyright (C) 2014 Daurnimator
|
|
--
|
|
-- This project is MIT/X11 licensed. Please see the
|
|
-- COPYING file in the source package for more information.
|
|
--
|
|
|
|
local _M = {};
|
|
|
|
_M.valid_affiliations = {
|
|
outcast = -1;
|
|
none = 0;
|
|
member = 1;
|
|
admin = 2;
|
|
owner = 3;
|
|
};
|
|
|
|
_M.valid_roles = {
|
|
none = 0;
|
|
visitor = 1;
|
|
participant = 2;
|
|
moderator = 3;
|
|
};
|
|
|
|
local kickable_error_conditions = {
|
|
["gone"] = true;
|
|
["internal-server-error"] = true;
|
|
["item-not-found"] = true;
|
|
["jid-malformed"] = true;
|
|
["recipient-unavailable"] = true;
|
|
["redirect"] = true;
|
|
["remote-server-not-found"] = true;
|
|
["remote-server-timeout"] = true;
|
|
["service-unavailable"] = true;
|
|
["malformed error"] = true;
|
|
};
|
|
function _M.is_kickable_error(stanza)
|
|
local cond = select(2, stanza:get_error()) or "malformed error";
|
|
return kickable_error_conditions[cond];
|
|
end
|
|
|
|
local filtered_namespaces = module:shared("filtered-namespaces");
|
|
filtered_namespaces["http://jabber.org/protocol/muc"] = true;
|
|
filtered_namespaces["http://jabber.org/protocol/muc#user"] = true;
|
|
|
|
local function muc_ns_filter(tag)
|
|
if filtered_namespaces[tag.attr.xmlns] then
|
|
return nil;
|
|
end
|
|
return tag;
|
|
end
|
|
function _M.filter_muc_x(stanza)
|
|
return stanza:maptags(muc_ns_filter);
|
|
end
|
|
|
|
function _M.add_filtered_namespace(xmlns)
|
|
filtered_namespaces[xmlns] = true;
|
|
end
|
|
|
|
function _M.only_with_min_role(role)
|
|
local min_role_value = _M.valid_roles[role];
|
|
return function (nick, occupant) --luacheck: ignore 212/nick
|
|
if _M.valid_roles[occupant.role or "none"] >= min_role_value then
|
|
return true;
|
|
end
|
|
end;
|
|
end
|
|
|
|
return _M;
|