From 5009cf8ae45c7b1a4d0cadd0f63fbab8b09ddc58 Mon Sep 17 00:00:00 2001 From: Glueck Martin Date: Fri, 24 May 2024 13:56:17 +0200 Subject: [PATCH] redis support added --- User.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 User.py diff --git a/User.py b/User.py new file mode 100644 index 0000000..f9b440d --- /dev/null +++ b/User.py @@ -0,0 +1,75 @@ +from hashlib import sha256 +from App_State import App_State +import yaml + +class User (App_State) : + + key = "b9281aea-4a9e-4721-b932-5b5ffbc66cfe" + + def __init__ (self, file_name) : + self.file_name = file_name + try : + with open (file_name) as file : + self.users = yaml.safe_load (file) + except Exception as e : + self.L.error (e, exc_info = True) + self.users = {} + # end def __init__ + + def check_password (self, user_name, password, login = False) : + pwd = f"{self.key}:{password}" + password = sha256 (pwd.encode ("utf-8")).hexdigest () + try : + user = self.users [user_name] + if (user ["password"] == password) and user ["active"] : + if login : + App_State.User = user_name + return True + return False + except Exception as e : + self.L.error (e, show_exc = True) + return False + # end def check_password + + def change_password (self, user, password) : + pwd = f"{self.key}:{password}" + password = sha256 (pwd.encode ("utf-8")).hexdigest () + if user not in self.users : + self.users [user] = {"active" : False} + self.users [user] ["password"] = password + self.save () + # end def change_password + + def change_active (self, user, active) : + if user in self.users : + self.users [user] ["active"] = active + self.save () + # end def change_active + + def save (self) : + with open (self.file_name, "w") as file : + yaml.safe_dump (self.users, file) + self.L.info ("User information saved") + # end def save + +# end class User + +if __name__ == "__main__" : + import argparse + parser = User.Add_Logging_Attributes () + parser.add_argument ("file_name", type = str) + parser.add_argument ("user", type = str) + parser.add_argument ("-p", "--password", type = str) + parser.add_argument ("-c", "--change", action = "store_true") + parser.add_argument ("-a", "--active", type = int) + parser.add_argument ("-v", "--verify", action = "store_true") + cmd = parser.parse_args () + User.Setup_Logging (cmd) + u = User (cmd.file_name) + if cmd.change : + u.change_password (cmd.user, cmd.password) + if cmd.active != None : + u.change_active (cmd.user, bool (cmd.active)) + if cmd.verify : + print (u.check_password (cmd.user, cmd.password)) +