コード例 #1
0
    def save_request_in_reqs_box(self):

        # TODO saving sent request to user's 'sent requests box'
        # users = read_data_from_users_database()
        # for u in users['users']:
        #     if u['username'] == usr.username:
        #         u['sent_request_box'].append(request)
        #         break

        print("\nSending your request to administrators...\n")
        admins = read_data_from_admins_database()

        self.request_id = admins['admins_inf']['request_id']
        admins['admins_inf']['request_id'] += 1
        print(f"Request ID: {self.request_id}.")

        admins['admins_inf']['requests_box'].append(self.__dict__)
        # Notifications
        admins['admins_inf']['notifications'].append(
            f"You have a new request from {self.username}.")
        time.sleep(1)
        write_data_to_admins_database(admins)

        print(
            "\nYour request is now being evaluated.\nIf not denied in 120 seconds, all requests are accepted "
            "automatically.")
        return
コード例 #2
0
    def printing_menu_view(self):
        # If any user is logged in, we are displaying their username on the top of each menu view.
        users = json_data_funcs.read_data_from_users_database()
        admins = json_data_funcs.read_data_from_admins_database()
        from structures.user_class import User, Admin
        current_usr = None

        if User.logged:
            current_usr = User.logged
            if User.logged.is_admin:
                current_usr = Admin.logged

        all_users = []
        for a in admins['admins']:
            all_users.append(a)
        for u in users['users']:
            all_users.append(u)

        if current_usr:

            if len(all_users) > 0:
                for user in all_users:
                    name = user['username']
                    if current_usr.username == name:
                        current_usr = user
                        break

            if current_usr['is_admin']:
                print(f"\n\n{25 * '-'}")
                print(f"You have {len(admins['admins_inf']['requests_box'])} new requests!")
                print(f"{25 * '-'}")
                print(f"\n\n\nAdmin: {current_usr['username']}\n")
            else:
                if len(current_usr['notifications']) > 0:
                    print(f"You have {len(current_usr['notifications'])} notifications:")
                    for notif in current_usr['notifications']:
                        print(f"\n\n{notif}")
                    current_usr['notifications'] = []
                else:
                    print("\nNo news.\n")
                print(f"\n\n\nUser: {current_usr['username']}\n")
            print(f"{MenuNode.current_node.name}")

            # Current node's name
        else:
            print(f'\n\t{MenuNode.current_node.name}\n{25 * "-"}')

        print(f"{25 * '-'}")
        for key in self.content.keys():
            print(self.content[key])
        print(f"{25 * '-'}")
        json_data_funcs.write_data_to_users_database(users)
        json_data_funcs.write_data_to_admins_database(admins)
        return
コード例 #3
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()
コード例 #4
0
    def checking_pending_requests(cls):

        admins = read_data_from_admins_database()
        rq_box = admins['admins_inf']['requests_box']
        if len(rq_box) > 0:
            print("Checking requests...")
            for i, req in enumerate(rq_box):
                created = req["datetime_details"].replace("T", " ")
                then = datetime.strptime(
                    created,
                    '%Y-%m-%d %H:%M:%S.%f')  # '2021-03-25T19:41:54.083887'
                now = datetime.now()
                diff = now - then
                waiting_time = timedelta(seconds=200)
                if diff >= waiting_time:
                    print("\nApproving...\n")
                    req['approved'] = True
                    print(".")
                    time.sleep(0.25)
                    users = read_data_from_users_database()
                    for user in users['users']:
                        try:
                            if req['username'] == user['username']:
                                if req["approved"]:
                                    user["wallet"] += req["amount"]
                                    user["notifications"].append(
                                        f"Your request for {req['amount']} points has been accepted."
                                    )
                                    print("\nExecuting...\n")
                                del admins['admins_inf']['requests_box'][i]
                                del admins['admins_inf']['notifications'][i]
                                write_data_to_users_database(users)
                                write_data_to_admins_database(admins)
                                break
                        except IndexError:
                            print(
                                "The request has been handled automatically.")
                            time.sleep(2)
                            break
                continue
コード例 #5
0
    def browsing_single_request(cls, index):
        admins = read_data_from_admins_database()
        r_box = admins['admins_inf']['requests_box']
        req = r_box[int(index)]
        while True:

            os.system('clear')
            print(f"\n{req['username']}"
                  f"\nAmount: {req['amount']}"
                  f"\nApproved: {str(req['approved'])}"
                  f"\nSubmitted: {req['ddate']}"
                  f" {req['ttime']}\n\n")
            inp = input("Enter A to accept or D to decline.\n"
                        "Enter E to execute the request.\n"
                        "Enter R to go back.\n")

            opts = ['a', 'd', 'r', 'e']

            if inp not in opts:
                print("Choose valid option.")
                time.sleep(2)
                continue
            else:
                if inp == "a":
                    req['approved'] = True
                    write_data_to_admins_database(admins)
                    continue
                if inp == "d":
                    req['approved'] = False
                    write_data_to_admins_database(admins)
                    continue
                if inp == "r":
                    return
                if inp == "e":
                    users = read_data_from_users_database()
                    for user in users['users']:
                        if user['username'] == req['username']:
                            if req["approved"]:
                                user["wallet"] += req["amount"]
                                user["notifications"].append(
                                    f"Your request for {req['amount']} points has been accepted."
                                )
                                print("\nRequest executed.\n")
                            else:
                                print("The request is not approved.")
                                print("Deleting the request.")
                                time.sleep(3)
                                user["notifications"].append(
                                    f"Your request for {req['amount']} points has been rejected."
                                )
                            admins = read_data_from_admins_database()
                            del admins['admins_inf']['requests_box'][index]
                            del admins['admins_inf']['notifications'][index]
                            write_data_to_users_database(users)
                            write_data_to_admins_database(admins)
                return
コード例 #6
0
    def __init__(self, email=None, username=None, key=None, salt=None, dictionary=None, wallet=None, is_admin=False):
        users = read_data_from_users_database()
        admins = read_data_from_admins_database()

        if dictionary is None:
            if User.logged:
                self.user_id = admins['admins_inf']['user_id']
                admins['admins_inf']['user_id'] += 1
            else:
                self.guest_id = admins['admins_inf']['guest_id']
                admins['admins_inf']['guest_id'] += 1

            write_data_to_admins_database(admins)

        self.notifications = []

        for us in users['users']:
            if us['username'] == username:
                self.notifications = us['notifications']

        # Register and login details
        self.username = username
        self.key = key
        self.salt = salt
        self.email = email
        if not wallet:
            self.wallet = 0
        # self.games_history = {f'{g.name}': [] for g in Game.games_list}  # [users_top_score, datetime, game_id]
        self.is_admin = is_admin
        self.sent_request_box = []

        self.my_best = {}
        if dictionary:
            self.dictionary = dictionary
            for k in self.dictionary.keys():
                setattr(self, k, self.dictionary[k])
コード例 #7
0
    def get_input_all_reqs_or_get_single_req(cls):
        while True:

            admins = read_data_from_admins_database()
            r_box = admins['admins_inf']['requests_box']
            os.system('clear')
            if len(r_box) > 0:
                RefRequest.print_all_requests()
                inp = input(
                    "\nEnter the positional number to browse a single request.\n\n"
                    "Enter A to mark all requests as accepted.\n"
                    "Enter D to mark all requests as declined.\n"
                    "Enter E to execute all requests.\n"
                    "Enter R to go back.\n")

                try:
                    inp = int(inp)
                    if inp not in range(1, len(r_box) + 1):
                        print("Choose valid option.")
                        time.sleep(2)
                        continue
                    else:
                        index = inp - 1
                        return index

                except ValueError:
                    opts = ["a", "d", "r", "e"]
                    inp = inp.lower()
                    if inp not in opts:
                        print("Choose valid option.")
                        time.sleep(2)
                        continue
                    else:
                        if inp == "a":
                            for req in r_box:
                                req['approved'] = True
                                write_data_to_admins_database(admins)
                                continue
                        if inp == "d":
                            for req in r_box:
                                req['approved'] = False
                                write_data_to_admins_database(admins)
                                continue
                        if inp == "r":
                            return FuncNode.current_node()
                        if inp == "e":
                            users = read_data_from_users_database()
                            for r in r_box:
                                for user in users['users']:
                                    if user['username'] == r['username']:
                                        if r["approved"]:
                                            user["wallet"] += r["amount"]
                                            user["notifications"].append(
                                                f"Your request for {r['amount']} points has been accepted."
                                            )
                                            print("\nRequest executed.\n")
                                        else:
                                            print(
                                                "The request is not approved.")
                                            print("Deleting the request.")
                                            time.sleep(3)
                                            user["notifications"].append(
                                                f"Your request for {r['amount']} points has been rejected."
                                            )
                                        admins = read_data_from_admins_database(
                                        )
                                        del admins['admins_inf'][
                                            'requests_box'][:]
                                        del admins['admins_inf'][
                                            'notifications'][:]
                                        write_data_to_users_database(users)
                                        write_data_to_admins_database(admins)
            else:
                # print("There are no new requests.")
                time.sleep(2)
                return