order-processing/User.py

76 lines
2.6 KiB
Python

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