# HG changeset patch # User Matthew Wild # Date 1623756917 -3600 # Node ID e7b126161e7b3a1865c2c762b87077ec42586ed4 # Parent 0105df2138ff410508ddcee00f021237a033ab1e mod_muc_restrict_nick: New module to restrict MUC occupant nicknames diff -r 0105df2138ff -r e7b126161e7b mod_muc_restrict_nick/README.markdown --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_muc_restrict_nick/README.markdown Tue Jun 15 12:35:17 2021 +0100 @@ -0,0 +1,23 @@ +--- +labels: +- 'Stage-Alpha' +summary: 'Require MUC occupant nicknames to match a specific pattern' +--- + +Introduction +============ + +This checks the nickname of a joining user against a configurable +[Lua pattern](https://www.lua.org/manual/5.2/manual.html#6.4.1), and prevents +them from joining if it does not match. + +Configuration +============= + +There is a single configuration option, `muc_restrict_nick_pattern` and the +default is `"^%w+$"` - i.e. allow only alphanumeric characters in nicknames. + +Compatibility +============= + +Requires Prosody 0.11 or higher. diff -r 0105df2138ff -r e7b126161e7b mod_muc_restrict_nick/mod_muc_restrict_nick.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_muc_restrict_nick/mod_muc_restrict_nick.lua Tue Jun 15 12:35:17 2021 +0100 @@ -0,0 +1,13 @@ +local jid = require "util.jid"; +local st = require "util.stanza"; + +local nick_pattern = module:get_option_string("muc_restrict_nick_pattern", "^%w+$"); + +module:hook("muc-occupant-pre-join", function (event) + local nick = jid.resource(event.occupant.nick); + if not nick:match(nick_pattern) then + local reply = st.error_reply(event.stanza, "modify", "policy-violation", "Unacceptable nickname, please try another"); + module:send(reply); + return true; + end +end);