# HG changeset patch # User Kim Alvefur # Date 1344260127 -7200 # Node ID 73a447249fe404a4a509fb5a714b7048b0d94c7a # Parent b06f6ff878ee29bf15e2a87f8a9beccb9a57903e mod_mimicking: Prevents registration of confusable usernames (by Florob) (fixes #1347) diff -r b06f6ff878ee -r 73a447249fe4 CHANGES --- a/CHANGES Mon Apr 29 15:53:52 2019 +0200 +++ b/CHANGES Mon Aug 06 15:35:27 2012 +0200 @@ -7,6 +7,7 @@ - CSI improvements - mod\_limits: Exempted JIDs - Archive quotas +- mod\_mimicking 0.11.0 ====== diff -r b06f6ff878ee -r 73a447249fe4 plugins/mod_mimicking.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/mod_mimicking.lua Mon Aug 06 15:35:27 2012 +0200 @@ -0,0 +1,49 @@ +-- Prosody IM +-- Copyright (C) 2012 Florian Zeitz +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- + +local skeleton = require "util.confusable".skeleton; +local datamanager = require "util.datamanager"; +local usage = require "util.prosodyctl".show_usage; +local warn = require "util.prosodyctl".show_warning; +local users = require "usermanager".users; + +module:hook("user-registered", function(user) + datamanager.store(skeleton(user.username), user.host, "skeletons", {username = user.username}); +end); + +module:hook("user-deregistered", function(user) + datamanager.store(skeleton(user.username), user.host, "skeletons", nil); +end); + +module:hook("registration-attempt", function(user) + if datamanager.load(skeleton(user.username), user.host, "skeletons") then + user.allowed = false; + end +end); + +function module.command(arg) + if (arg[1] ~= "bootstrap" or not arg[2]) then + usage("mod_mimicking bootstrap ", "Initialize skeleton database"); + return; + end + + local host = arg[2]; + + local host_session = prosody.hosts[host]; + if not host_session then + return "No such host"; + end + local provider = host_session.users; + if not(provider) or provider.name == "null" then + usermanager.initialize_host(host); + end + storagemanager.initialize_host(host); + + for user in users(host) do + datamanager.store(skeleton(user), host, "skeletons", {username = user}); + end +end