view mod_block_registrations/mod_block_registrations.lua @ 1268:854a3933cfcd

mod_muc_log_http: URL-encode room names. This allows special characters in room names to work. Ideally this escaping shouldn’t be done in the user visible content, but the module’s template system doesn’t currently allow that.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 04 Jan 2014 16:50:57 -0500
parents cabbcc1997d9
children dbaa67babeb4
line wrap: on
line source

local st = require "util.stanza";
local nodeprep = require "util.encodings".stringprep.nodeprep;

local block_users = module:get_option_set("block_registrations_users", { "admin" });
local block_patterns = module:get_option_set("block_registrations_matching", {});
local require_pattern = module:get_option_string("block_registrations_require");

function is_blocked(username)
        -- Check if the username is simply blocked
        if block_users:contains(username) then return true; end

        for pattern in block_patterns do
                if username:match(pattern) then
                        return true;
                end
        end
        -- Not blocked, but check that username matches allowed pattern
        if require_pattern and not username:match(require_pattern) then
                return true;
        end
end

module:hook("stanza/iq/jabber:iq:register:query", function(event)
        local session, stanza = event.origin, event.stanza;

        if stanza.attr.type == "set" then
                local query = stanza.tags[1];
                local username = nodeprep(query:get_child_text("username"));
                if username and is_blocked(username) then
                        session.send(st.error_reply(stanza, "modify", "policy-violation", "Username is blocked"));
                        return true;
                end
        end
end, 10);