def email_prompt(cls): # Email prompt while True: print("Enter B to go back.") email_input = input("Enter your e-mail:\n") if email_input.lower() == 'b': return MenuNode.current_node() if cls.email_is_valid(email_input): if cls.email_in_database(email_input): print( "\nUser associated with this e-mail address already exists!\n" ) print( "Try logging in instead or recovering your password.") decision = input(""" Enter M to return to Main Menu. Enter E to try with a different e-mail. """) if decision.lower() == "m": return MenuNode.default_node() elif decision.lower() == "e": continue else: return email_input else: print("\nPlease enter valid e-mail address!\n") continue
def stop_watch_to_default_node(sec): while sec: minn, secc = divmod(sec, 60) timer = '{:02d}:{:02d}'.format(minn, secc) print(timer, end='\r') time.sleep(1) sec -= 1 return MenuNode.default_node()
def logout(): from structures.user_class import User, Admin if User.logged: if User.logged.is_admin: Admin.logged = None User.logged = None from guestMenu.main_Menu import MainMenu MenuNode.default_node = MainMenu MenuNode.current_node = MainMenu return MenuNode.default_node()
def register_script(cls): print("\nThank you for registering!\n") # time.sleep(1) valid_email = cls.email_prompt() valid_username = cls.username_prompt() os.system('clear') print(f''' \nWelcome {valid_username}!\n ''') valid_salt, valid_key = cls.password_prompt(valid_username) adm = getpass.getpass( "\nPress Enter to continue or type the admin access password to gain admin powers and " "permissions.\n") users = read_data_from_users_database() admins = read_data_from_admins_database() if adm == 'admin': # TODO hash and database export? new_admin = Admin(email=valid_email, username=valid_username, key=valid_key.hex(), salt=valid_salt.hex()) print("\nYou are an admin now.\n") new_admin_dictionary = new_admin.__dict__ admins['admins'].append(new_admin_dictionary) else: new_user = User(email=valid_email, username=valid_username, key=valid_key.hex(), salt=valid_salt.hex()) new_user_dictionary = new_user.__dict__ users['users'].append(new_user_dictionary) write_data_to_users_database(users) write_data_to_admins_database(admins) # TODO sending email to confirm the account print("You can now log in.") print(f"Returning the the main menu in:") cls.stop_watch_to_main_menu(3) print('\n') return MenuNode.default_node() # RegisterScript.register_script()
def login_script(): # Searching for user in database identified_user = None while not identified_user: print('\n\nEnter R to return to main menu.') username_input = input('\nEnter your username or e-mail:\n') if username_input.lower() == 'r': return MenuNode.current_node() users = read_data_from_users_database() admins = read_data_from_admins_database() all_users = [] for adm in admins['admins']: all_users.append(adm) for usr in users['users']: all_users.append(usr) for user in all_users: if username_input == user['username'] or username_input == user[ 'email']: identified_user = User(dictionary=user) # if not dict_: ---> ---> identified_user.dictionary # dict_ = user # print(type(user)) # TODO Animation print("\nUser found!") break if not identified_user: print( "\nThis user does not exist. Try different username or register instead." ) time.sleep(2) continue # Verifying password count = 0 while count < 4: print('\n\nEnter R to return to main menu.') password_to_check = getpass.getpass("\nEnter your password:\n") if password_to_check.lower() == 'r': return MenuNode.current_node() salt = bytes.fromhex(identified_user.salt) new_key = hashlib.pbkdf2_hmac('sha256', password_to_check.encode('utf-8'), salt, 100000) if new_key.hex() == identified_user.key: print("\nPassword correct.\n") if identified_user.is_admin: Admin.logged = identified_user elif not identified_user.is_admin: User.logged = identified_user time.sleep(1) break else: print('\nPassword incorrect. Try again.\n') count += 1 if count > 3: print( "\nToo many tries. Please use 'Forget password' to regain access to your account.\n" ) print("\nResetting password...\n") # password_reset(identified_user) print(f'Returning to {MenuNode.default_node.name} in:') stop_watch_to_default_node(3) else: if identified_user.is_admin: User.logged = identified_user MenuNode.default_node = admin_Menu MenuNode.current_node = admin_Menu else: User.logged = identified_user MenuNode.default_node = MainMenuForUsers MenuNode.current_node = MainMenuForUsers return MenuNode.default_node()