예제 #1
0
    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
예제 #2
0
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()
예제 #3
0
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()
예제 #4
0
    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()
예제 #5
0
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()