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