From c1153901782dec00a637da0bfc7047460e541696 Mon Sep 17 00:00:00 2001 From: Isuru Heendeniya <156098319+Isuruvh@users.noreply.github.com> Date: Thu, 26 Dec 2024 17:22:50 +1100 Subject: [PATCH 1/2] Create mypy1 --- mypy1 | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 mypy1 diff --git a/mypy1 b/mypy1 new file mode 100644 index 000000000000..19420519b909 --- /dev/null +++ b/mypy1 @@ -0,0 +1,76 @@ +import pandas as pd + +class User: + def __init__(self, user_id, username, password, failed_attempts=0, is_locked=False): + self.user_id = user_id + self.username = username + self.password = password + self.failed_attempts = failed_attempts + self.is_locked = is_locked + + def reset_failed_attempts(self): + self.failed_attempts = 0 + print(f"Failed attempts reset for user {self.username}.") + + def increment_failed_attempts(self): + self.failed_attempts += 1 + print(f"Failed attempts for {self.username}: {self.failed_attempts}") + if self.failed_attempts >= 3: + self.lock_account() + + def lock_account(self): + self.is_locked = True + print(f"Account for {self.username} has been locked due to too many failed login attempts.") + +class AuthenticationSystem: + def __init__(self): + self.users = pd.DataFrame(columns=["user_id", "username", "password", "failed_attempts_left", "is_locked"]) + + def register_user(self, user_id, username, password): + new_user = User(user_id, username, password) + self.users = pd.concat([self.users, pd.DataFrame({ + "user_id": [user_id], + "username": [username], + "password": [password], + "failed_attempts_left": [3], + "is_locked": [False] + })], ignore_index=True) # Add new user to DataFrame. + print(f"User {username} registered successfully.") + + # Never alter this login function + def login(self, username, password): + user_row = self.users[self.users['username'].str.lower() == username.lower()] + if user_row.empty: + print(f"User {username} not found.") + return + + user = User(user_row['user_id'].values[0], user_row['username'].values[0], user_row['password'].values[0], + user_row['failed_attempts_left'].values[0], user_row['is_locked'].values[0]) + + if user.is_locked: + print(f"Account for {username} is locked. Please contact support.") + return + + if password == user.password: + user.reset_failed_attempts() + self.update_user(user) + print(f"User {username} logged in successfully.") + else: + user.increment_failed_attempts() + self.update_user(user) + + def update_user(self, user): + self.users.loc[self.users['username'] == user.username, 'failed_attempts_left'] = user.failed_attempts + self.users.loc[self.users['username'] == user.username, 'is_locked'] = user.is_locked + print(f"User {user.username}'s data updated.") + +auth_system = AuthenticationSystem() +auth_system.register_user(1, "neena", "password123") +auth_system.register_user(2, "helios", "mysecurepassword") + +auth_system.login("neena", "password321") +auth_system.login("Neena", "password123") +auth_system.login("neena", "password321") +auth_system.login("neena", "password123") + +auth_system.login("helios", "mysecurepassword") From 3b2546c4560a773a05c24273025174a92a4e9bbd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 26 Dec 2024 06:26:20 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mypy1 | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mypy1 b/mypy1 index 19420519b909..25519bd759ec 100644 --- a/mypy1 +++ b/mypy1 @@ -29,10 +29,10 @@ class AuthenticationSystem: def register_user(self, user_id, username, password): new_user = User(user_id, username, password) self.users = pd.concat([self.users, pd.DataFrame({ - "user_id": [user_id], - "username": [username], - "password": [password], - "failed_attempts_left": [3], + "user_id": [user_id], + "username": [username], + "password": [password], + "failed_attempts_left": [3], "is_locked": [False] })], ignore_index=True) # Add new user to DataFrame. print(f"User {username} registered successfully.") @@ -44,9 +44,9 @@ class AuthenticationSystem: print(f"User {username} not found.") return - user = User(user_row['user_id'].values[0], user_row['username'].values[0], user_row['password'].values[0], + user = User(user_row['user_id'].values[0], user_row['username'].values[0], user_row['password'].values[0], user_row['failed_attempts_left'].values[0], user_row['is_locked'].values[0]) - + if user.is_locked: print(f"Account for {username} is locked. Please contact support.") return @@ -65,12 +65,12 @@ class AuthenticationSystem: print(f"User {user.username}'s data updated.") auth_system = AuthenticationSystem() -auth_system.register_user(1, "neena", "password123") -auth_system.register_user(2, "helios", "mysecurepassword") +auth_system.register_user(1, "neena", "password123") +auth_system.register_user(2, "helios", "mysecurepassword") -auth_system.login("neena", "password321") -auth_system.login("Neena", "password123") -auth_system.login("neena", "password321") -auth_system.login("neena", "password123") +auth_system.login("neena", "password321") +auth_system.login("Neena", "password123") +auth_system.login("neena", "password321") +auth_system.login("neena", "password123") auth_system.login("helios", "mysecurepassword")