From ef3c8c8a2698163d7b63e7afe081978c188fa407 Mon Sep 17 00:00:00 2001 From: Aochi Date: Fri, 29 Mar 2024 23:46:43 +0100 Subject: [PATCH 1/3] fix: cache passwords by bcrypt: md5 instead of userid: md5 --- helpers/user_helper.py | 11 +++++------ objects/glob.py | 2 +- pubSubHandlers/changePassword.py | 22 ---------------------- 3 files changed, 6 insertions(+), 29 deletions(-) delete mode 100644 pubSubHandlers/changePassword.py diff --git a/helpers/user_helper.py b/helpers/user_helper.py index 903b638..8cf689e 100644 --- a/helpers/user_helper.py +++ b/helpers/user_helper.py @@ -30,20 +30,19 @@ def verify_password(user_id: int, password: str) -> bool: """ # Check if we already cached them, for speed benefit. - passw = glob.cached_passwords.get(user_id) - if passw: - return password == passw - - # Nope. Sad. Bcrypt time. passw_db = glob.db.fetch( "SELECT password_md5 FROM users WHERE id = %s LIMIT 1", (user_id,), )["password_md5"] + if passw_db in glob.cached_passwords: + return glob.cached_passwords[passw_db] == password + res = bcrypt.checkpw(password.encode(), passw_db.encode()) # Cache it for later if res: - glob.cached_passwords[user_id] = password + glob.cached_passwords[passw_db] = password + return res diff --git a/objects/glob.py b/objects/glob.py index dadbd58..4f9226c 100644 --- a/objects/glob.py +++ b/objects/glob.py @@ -32,7 +32,7 @@ tokens = TokenList() channels = ChannelList() matches = MatchList() -cached_passwords: dict = {} +cached_passwords: dict[str, str] = {} chatFilters = None pool: ThreadPool busyThreads = 0 diff --git a/pubSubHandlers/changePassword.py b/pubSubHandlers/changePassword.py deleted file mode 100644 index 60c626a..0000000 --- a/pubSubHandlers/changePassword.py +++ /dev/null @@ -1,22 +0,0 @@ -# This handles removing cached passwords from cache when the user has their pass -# changed. -from __future__ import annotations - -from common.redis import generalPubSubHandler -from logger import log -from objects import glob - - -class handler(generalPubSubHandler.generalPubSubHandler): - def __init__(self): - super().__init__() - self.structure = { - "user_id": 0, - } - - def handle(self, data): - data = super().parseData(data) - if data is None: - return - glob.cached_passwords.pop(data["user_id"], None) - log.info(f"Updated password for user ID: {data['user_id']}") From 5d68c45e40381d5b0c9b82607316fa349e9f9f5e Mon Sep 17 00:00:00 2001 From: Aochi Date: Fri, 29 Mar 2024 23:46:56 +0100 Subject: [PATCH 2/3] z --- helpers/user_helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/user_helper.py b/helpers/user_helper.py index 8cf689e..69d1537 100644 --- a/helpers/user_helper.py +++ b/helpers/user_helper.py @@ -29,12 +29,12 @@ def verify_password(user_id: int, password: str) -> bool: password (str): The user's password hashed with MD5. """ - # Check if we already cached them, for speed benefit. passw_db = glob.db.fetch( "SELECT password_md5 FROM users WHERE id = %s LIMIT 1", (user_id,), )["password_md5"] + # Check if we already cached them, for speed benefit. if passw_db in glob.cached_passwords: return glob.cached_passwords[passw_db] == password From b34ad8e97e9abe59a467271e262f2ea9edea811f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 29 Mar 2024 23:48:01 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- helpers/user_helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/user_helper.py b/helpers/user_helper.py index 69d1537..d2ed29c 100644 --- a/helpers/user_helper.py +++ b/helpers/user_helper.py @@ -42,7 +42,7 @@ def verify_password(user_id: int, password: str) -> bool: # Cache it for later if res: glob.cached_passwords[passw_db] = password - + return res