From 6398dcdf1b716dd7d02cc4660504b0f1adf840e2 Mon Sep 17 00:00:00 2001 From: Nick Leeman Date: Fri, 7 Oct 2022 23:51:20 +0200 Subject: [PATCH] added log viewer --- models/log.py | 3 ++- services/log.py | 13 ++++++++++- views/advisor_menu.py | 18 +++++++++++++++ views/main_menu.py | 46 ++++++++++++++++++++++++++++++++++++-- views/system_admin_menu.py | 18 +++++++++++++++ 5 files changed, 94 insertions(+), 4 deletions(-) diff --git a/models/log.py b/models/log.py index 8b4fdcb..eb5cd15 100644 --- a/models/log.py +++ b/models/log.py @@ -65,4 +65,5 @@ class Log: self.time = row[3] self.description = row[4] self.additional_information = row[5] - self.suspicious = row[6] \ No newline at end of file + self.suspicious = row[6] + return self \ No newline at end of file diff --git a/services/log.py b/services/log.py index 16263b9..9edf999 100644 --- a/services/log.py +++ b/services/log.py @@ -5,10 +5,21 @@ from models.database import Database class LogService: @staticmethod - def createlog(username, description, additional_information, suspicious): + def create_log(username, description, additional_information, suspicious): now = datetime.now() date_string = now.strftime("%d-%m-%Y") time_string = now.strftime("%H:%M:%S") new_log = Log(Database.connection, None, username, date_string, time_string, description, additional_information, suspicious) new_log.save() + + @staticmethod + def get_latest_logs(): + cur = Database.connection.cursor() + cur.execute("SELECT * FROM logs ORDER BY id DESC LIMIT 100;") + rows = cur.fetchall() + logs = [] + for row in rows: + log = Log(Database.connection)._set_row_values(row) + logs.append(log) + return logs \ No newline at end of file diff --git a/views/advisor_menu.py b/views/advisor_menu.py index 6fc5830..e283f82 100644 --- a/views/advisor_menu.py +++ b/views/advisor_menu.py @@ -115,10 +115,28 @@ class AdvisorMenu: user.update() input("Updated Advisor! Press any key to return.") + + @staticmethod + def update_password_advisor(): + user = AdvisorMenu.search_advisor(False) + if user == None: + input("Advisor not found. Press any key to continue.") + return + + form = InputMenu("Update password") + form.add_option("PASSWORD", "Password", "STR", None, 1, 255, Validator.check_password) + form.do_input() + user.password = form.get_value("PASSWORD") + user.update() + + input("Updated Advisor Password! Press any key to return.") @staticmethod def remove_advisor(): user = AdvisorMenu.search_advisor(False) + if user == None: + input("Advisor not found. Press any key to continue.") + return confirm = SelectionMenu("Do you want to delete selected Advisor?") confirm.add_option("Yes", True).add_option("No", False).display() diff --git a/views/main_menu.py b/views/main_menu.py index 2efa6d5..62c3e8b 100644 --- a/views/main_menu.py +++ b/views/main_menu.py @@ -1,12 +1,13 @@ import os from services.state import State from services.utils import Utils +from ui.input_menu import InputMenu, Validator from ui.selection_menu import SelectionMenu from views.advisor_menu import AdvisorMenu from views.backup_menu import BackupMenu from views.member_menu import MemberMenu from views.system_admin_menu import SystemAdminMenu - +from services.log import LogService class MainMenu: @staticmethod def display(): @@ -15,7 +16,7 @@ class MainMenu: main_menu = SelectionMenu(f"Welcome {State.CURRENT_USER.username}!") if State.CURRENT_USER.role == "ADVISOR" or State.CURRENT_USER.role == "SYSTEM_ADMIN": - main_menu.add_option("Update My Password", None) + main_menu.add_option("Update My Password", MainMenu.update_password) main_menu.add_option("Manage Members", MainMenu.manage_members) else: main_menu.add_option("Manage Members", MainMenu.manage_members) @@ -35,6 +36,26 @@ class MainMenu: selected_option() + @staticmethod + def update_password(): + Utils.clear_screen() + + menu = SelectionMenu(f"Do you want to update your own password?") + menu.add_option("Yes", True) + menu.add_option("No", False) + + selected_option = menu.display().input_option() + if selected_option == False: + return + + form = InputMenu("Set new password") + form.add_option("PASSWORD", "Password", "STR", None, 1, 255, Validator.check_password) + form.do_input() + State.CURRENT_USER.password = form.get_value("PASSWORD") + State.CURRENT_USER.update() + + input("Current password updated! Press any key to continue.") + @staticmethod def manage_members(): Utils.clear_screen() @@ -59,6 +80,7 @@ class MainMenu: menu = SelectionMenu(f"Manage Advisors") menu.add_option("Add Advisor", AdvisorMenu.add_advisor) menu.add_option("Edit Advisor", AdvisorMenu.edit_advisor) + menu.add_option("Reset Password Advisor", AdvisorMenu.update_password_advisor) menu.add_option("Remove Advisor", AdvisorMenu.remove_advisor) menu.add_option("Browse Advisor", AdvisorMenu.browse_advisor) menu.add_option("Back to main menu", None) @@ -76,6 +98,7 @@ class MainMenu: menu = SelectionMenu(f"Manage System Admins") menu.add_option("Add System Admin", SystemAdminMenu.add_admin) menu.add_option("Edit System Admin", SystemAdminMenu.edit_admin) + menu.add_option("Reset Password System Admin", SystemAdminMenu.update_password_admin) menu.add_option("Remove System Admin", SystemAdminMenu.remove_admin) menu.add_option("Browse System Admin", SystemAdminMenu.browse_admins) menu.add_option("Back to main menu", None) @@ -100,5 +123,24 @@ class MainMenu: return selected_option() + + @staticmethod + 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("==================================================================") + + input("Press any key to continue.") diff --git a/views/system_admin_menu.py b/views/system_admin_menu.py index bc6d1f9..65fcaf5 100644 --- a/views/system_admin_menu.py +++ b/views/system_admin_menu.py @@ -88,6 +88,9 @@ class SystemAdminMenu: @staticmethod def edit_admin(): user = SystemAdminMenu.search_admins(False) + if user == None: + input("Admin not found. Press any key to continue.") + return edit_form = InputMenu("Edit System Admin (Leave fields empty to not change)") edit_form.add_option("Username", "Username", "STR", user.username, 1, 250, Validator.check_username) @@ -116,6 +119,21 @@ class SystemAdminMenu: user.update() input("Updated System Admin! Press any key to return.") + + @staticmethod + def update_password_admin(): + user = SystemAdminMenu.search_admins(False) + if user == None: + input("Admin not found. Press any key to continue.") + return + + form = InputMenu("Update password") + form.add_option("PASSWORD", "Password", "STR", None, 1, 255, Validator.check_password) + form.do_input() + user.password = form.get_value("PASSWORD") + user.update() + + input("Updated System Admin password! Press any key to return.") @staticmethod def remove_admin():