fix: make rate_limiter respect multitenancy (#24634)

* fix: make rate_limiter respect multitenancy

* fix: lower rate limit window for password reset

* refactor: Use redis_wrapper
This commit is contained in:
Ankush Menat 2024-01-31 14:46:27 +05:30 committed by GitHub
parent 53d6d156ec
commit a25e68a763
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 3 additions and 4 deletions

View file

@ -238,7 +238,6 @@ frappe.qb.from_(todo).select(todo.name).where(todo.name == "{todo.name}").run()
script.execute_method()
def test_server_script_rate_limiting(self):
# why not
script1 = frappe.get_doc(
doctype="Server Script",
name="rate_limited_server_script",

View file

@ -1018,7 +1018,7 @@ def sign_up(email: str, full_name: str, redirect_to: str) -> tuple[int, str]:
@frappe.whitelist(allow_guest=True)
@rate_limit(limit=get_password_reset_limit, seconds=24 * 60 * 60)
@rate_limit(limit=get_password_reset_limit, seconds=60 * 60)
def reset_password(user: str) -> str:
if user == "Administrator":
return "not allowed"

View file

@ -138,7 +138,7 @@ def rate_limit(
if not identity:
frappe.throw(_("Either key or IP flag is required."))
cache_key = f"rl:{frappe.form_dict.cmd}:{identity}"
cache_key = frappe.cache.make_key(f"rl:{frappe.form_dict.cmd}:{identity}")
value = frappe.cache.get(cache_key)
if not value:

View file

@ -215,4 +215,4 @@ def get_encryption_key():
def get_password_reset_limit():
return frappe.db.get_single_value("System Settings", "password_reset_limit") or 0
return frappe.get_system_settings("password_reset_limit") or 3