diff options
author | Kim Alvefur <zash@zash.se> | 2015-12-23 08:58:34 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2015-12-23 08:58:34 +0100 |
commit | da2a7cf041fb3ffbedb413e7475434e207e88571 (patch) | |
tree | 38ec4e0cde88f69a4bcaf27f056bbf8658a8ca3c | |
parent | 5fdea68a39ba2d12af0ad79ba7c0f85d0c1ec698 (diff) | |
download | prosody-da2a7cf041fb3ffbedb413e7475434e207e88571.tar.gz prosody-da2a7cf041fb3ffbedb413e7475434e207e88571.zip |
mod_register: Use util.cache to limit the number of per-ip throttles kept
-rw-r--r-- | plugins/mod_register.lua | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/plugins/mod_register.lua b/plugins/mod_register.lua index 5e73dbf7..ee196722 100644 --- a/plugins/mod_register.lua +++ b/plugins/mod_register.lua @@ -16,6 +16,7 @@ local usermanager_delete_user = require "core.usermanager".delete_user; local nodeprep = require "util.encodings".stringprep.nodeprep; local jid_bare = require "util.jid".bare; local create_throttle = require "util.throttle".create; +local new_cache = require "util.cache".new; local compat = module:get_option_boolean("registration_compat", true); local allow_registration = module:get_option_boolean("allow_registration", false); @@ -171,7 +172,6 @@ local function parse_response(query) end end -local recent_ips = {}; local min_seconds_between_registrations = module:get_option_number("min_seconds_between_registrations"); local whitelist_only = module:get_option_boolean("whitelist_registration_only"); local whitelisted_ips = module:get_option_set("registration_whitelist", { "127.0.0.1" })._items; @@ -179,14 +179,17 @@ local blacklisted_ips = module:get_option_set("registration_blacklist", {})._ite local throttle_max = module:get_option_number("registration_throttle_max", min_seconds_between_registrations and 1); local throttle_period = module:get_option_number("registration_throttle_period", min_seconds_between_registrations); +local throttle_cache_size = module:get_option_number("registration_throttle_cache_size", 100); + +local throttle_cache = new_cache(throttle_cache_size); local function check_throttle(ip) if not throttle_max then return true end - local throttle = recent_ips[ip]; + local throttle = throttle_cache:get(ip); if not throttle then throttle = create_throttle(throttle_max, throttle_period); - recent_ips[ip] = throttle; end + throttle_cache:set(ip, throttle); return throttle:poll(1); end |