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))