diff --git a/services/auth.py b/services/auth.py index 8b24309..3bbd60a 100644 --- a/services/auth.py +++ b/services/auth.py @@ -1,13 +1,28 @@ from models.database import Database from models.user import User +from services.log import LogService class Auth: + failed_attempts = 0 + + @staticmethod def check_auth(username, password): if username == "superadmin" and password == "Admin321!": su_user = User(None, -1, "superadmin", "", "", "", "", "", "", "", "", "SUPER_ADMIN") + LogService.create_log(username, "Logged in", "", False) + Auth.failed_attempts = 0 return su_user user = User(Database.connection, None, username) if user.load_by_username() and user.password == password: + LogService.create_log(username, "Logged in", "", False) + Auth.failed_attempts = 0 return user + + if Auth.failed_attempts >= 3: + LogService.create_log(username, "Multiple unsuccessful logins", "", True) + else: + LogService.create_log(username, "Unsuccessful login", f"Attempts: {Auth.failed_attempts}", False) + + Auth.failed_attempts += 1 return None \ No newline at end of file diff --git a/services/state.py b/services/state.py index 3b470d4..70be75b 100644 --- a/services/state.py +++ b/services/state.py @@ -1,4 +1,3 @@ -from ast import Import from models.user import User class State: diff --git a/views/advisor_menu.py b/views/advisor_menu.py index e283f82..f5f2587 100644 --- a/views/advisor_menu.py +++ b/views/advisor_menu.py @@ -1,6 +1,8 @@ from models.database import Database from models.user import User +from services.state import State +from services.log import LogService from services.search import Search from ui.input_menu import InputMenu, Validator from ui.selection_menu import SelectionMenu @@ -83,6 +85,7 @@ class AdvisorMenu: ) new_user.save() + LogService.create_log(State.CURRENT_USER.username, "Created advisor", f"Advisor: {new_user.username}", True) input("Added new Advisor! Press any key to return.") @staticmethod @@ -114,6 +117,7 @@ class AdvisorMenu: user.phone = edit_form.get_value("PHONE") user.update() + LogService.create_log(State.CURRENT_USER.username, "Updated advisor", f"Advisor: {user.username}", True) input("Updated Advisor! Press any key to return.") @staticmethod @@ -129,6 +133,7 @@ class AdvisorMenu: user.password = form.get_value("PASSWORD") user.update() + LogService.create_log(State.CURRENT_USER.username, "Updated password of advisor", f"Advisor: {user.username}", True) input("Updated Advisor Password! Press any key to return.") @staticmethod @@ -144,6 +149,7 @@ class AdvisorMenu: if option == True: user.delete() + LogService.create_log(State.CURRENT_USER.username, "Deleted advisor", f"Advisor: {user.username}", True) input("Deleted Advisor! Press any key to return.") @staticmethod diff --git a/views/main_menu.py b/views/main_menu.py index 62c3e8b..97384cb 100644 --- a/views/main_menu.py +++ b/views/main_menu.py @@ -23,11 +23,12 @@ class MainMenu: if State.CURRENT_USER.role == "SYSTEM_ADMIN" or State.CURRENT_USER.role == "SUPER_ADMIN": main_menu.add_option("Manage Advisors", MainMenu.manage_advisors) + main_menu.add_option("View logs", MainMenu.check_logs) if State.CURRENT_USER.role == "SUPER_ADMIN": main_menu.add_option("Manage Admins", MainMenu.manage_admins) main_menu.add_option("Manage Backups", MainMenu.manage_backups) - + main_menu.add_option("Exit...", None) selected_option = main_menu.display().input_option() @@ -128,19 +129,14 @@ class MainMenu: def check_logs(): Utils.clear_screen() - menu = SelectionMenu(f"Do you want to view the latest logs?") - menu.add_option("Yes", True) - menu.add_option("No", False) - - selected_option = menu.display().input_option() - if selected_option == False: - return - logs = LogService.get_latest_logs() - print("==================================================================") - print("| id | Date | Time | Description Activity | Addition Information | Suspicious |") for log in logs: - print(f"{log.id} | {log.date} | {log.time} | {log.description} | {log.additional_information} | {log.suspicious}") - print("==================================================================") + print(f"/--[ {log.id} ]---------") + print(f"| Username: {log.username}") + print(f"| Description: {log.description}") + print(f"| Additional Information: {log.additional_information}") + print(f"| Suspicious: {log.suspicious}") + print(f"| Date: {log.date} {log.time}") + print(f"\-------------\n") input("Press any key to continue.") diff --git a/views/member_menu.py b/views/member_menu.py index 4579a49..bb5cb93 100644 --- a/views/member_menu.py +++ b/views/member_menu.py @@ -1,6 +1,8 @@ from models.database import Database from models.user import User +from services.state import State +from services.log import LogService from services.search import Search from ui.input_menu import InputMenu, Validator from ui.selection_menu import SelectionMenu @@ -82,6 +84,7 @@ class MemberMenu: ) new_user.save() + LogService.create_log(State.CURRENT_USER.username, "Added member", f"Member: {new_user.firstname} {new_user.lastname}", False) input("Added new Member! Press any key to return.") @staticmethod @@ -112,6 +115,7 @@ class MemberMenu: user.phone = edit_form.get_value("PHONE") user.update() + LogService.create_log(State.CURRENT_USER.username, "Updated member", f"Member: {user.firstname} {user.lastname}", False) input("Updated Member! Press any key to return.") @staticmethod @@ -124,6 +128,7 @@ class MemberMenu: if option == True: user.delete() + LogService.create_log(State.CURRENT_USER.username, "Removed member", f"Member: {user.firstname} {user.lastname}", False) input("Deleted Member! Press any key to return.") @staticmethod diff --git a/views/system_admin_menu.py b/views/system_admin_menu.py index 65fcaf5..9f2f4b0 100644 --- a/views/system_admin_menu.py +++ b/views/system_admin_menu.py @@ -1,6 +1,8 @@ from models.database import Database from models.user import User +from services.state import State +from services.log import LogService from services.search import Search from ui.input_menu import InputMenu, Validator from ui.selection_menu import SelectionMenu @@ -83,6 +85,7 @@ class SystemAdminMenu: ) new_user.save() + LogService.create_log(State.CURRENT_USER.username, "Added system admin", f"System Admin: {new_user.username}", False) input("Added new system admin! Press any key to return.") @staticmethod @@ -118,6 +121,7 @@ class SystemAdminMenu: user.phone = edit_form.get_value("PHONE") user.update() + LogService.create_log(State.CURRENT_USER.username, "Updated system admin", f"System Admin: {user.username}", False) input("Updated System Admin! Press any key to return.") @staticmethod @@ -133,6 +137,7 @@ class SystemAdminMenu: user.password = form.get_value("PASSWORD") user.update() + LogService.create_log(State.CURRENT_USER.username, "Updated password system admin", f"System Admin: {user.username}", False) input("Updated System Admin password! Press any key to return.") @staticmethod @@ -145,6 +150,7 @@ class SystemAdminMenu: if option == True: user.delete() + LogService.create_log(State.CURRENT_USER.username, "Removed system admin", f"System Admin: {user.username}", False) input("Deleted advisor! Press any key to return.") @staticmethod