From f40149432ae09280e7221713b381505714e030be Mon Sep 17 00:00:00 2001 From: Blake DeMarcy Date: Thu, 13 Apr 2017 15:45:37 -0500 Subject: [PATCH] passwords via getpass; move input loops from log_in to global scope --- clients/urwid/main.py | 63 ++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/clients/urwid/main.py b/clients/urwid/main.py index 22dbe3d..455254a 100644 --- a/clients/urwid/main.py +++ b/clients/urwid/main.py @@ -24,6 +24,7 @@ from network import BBJ, URLError from string import punctuation from datetime import datetime from time import time, sleep +from getpass import getpass from subprocess import run from random import choice from sys import argv @@ -808,13 +809,8 @@ class App(object): def change_username(self, *_): self.loop.stop() run("clear", shell=True) - def __loop(prompt, positive): - new_name = sane_value("user_name", prompt, positive) - if network.user_is_registered(new_name): - return __loop("%s is already registered" % new_name, False) - return new_name try: - name = __loop("Choose a new username", True) + name = nameloop("Choose a new username", True) network.user_update(user_name=name) motherfucking_rainbows("~~hello there %s~~" % name) sleep(0.8) @@ -829,18 +825,8 @@ class App(object): def change_password(self, *_): self.loop.stop() run("clear", shell=True) - def __loop(prompt, positive): - first = paren_prompt(prompt, positive) - if first == "": - confprompt = "Confirm empty password" - else: - confprompt = "Confirm it" - second = paren_prompt(confprompt) - if second != first: - return __loop("Those didnt match. Try again", False) - return first try: - password = __loop("Choose a new password. Can be empty", True) + password = password_loop("Choose a new password. Can be empty", True) network.user_update(auth_hash=network._hash(password)) motherfucking_rainbows("SET NEW PASSWORD") sleep(0.8) @@ -1456,7 +1442,7 @@ def motherfucking_rainbows(string, inputmode=False, end="\n"): return print(end, end="") -def paren_prompt(text, positive=True, choices=[]): +def paren_prompt(text, positive=True, choices=[], function=input): """ input(), but riced the fuck out. Changes color depending on the value of positive (blue/green for good stuff, red/yellow @@ -1481,7 +1467,7 @@ def paren_prompt(text, positive=True, choices=[]): formatted_choices = "" try: - response = input("{0}({1}{2}{0}){3}> \033[0m".format( + response = function("{0}({1}{2}{0}){3}> \033[0m".format( *mood, text, formatted_choices)) if not choices: return response @@ -1490,7 +1476,7 @@ def paren_prompt(text, positive=True, choices=[]): char = response.lower()[0] if char in [c[0] for c in choices]: return char - return paren_prompt("Invalid choice", False, choices) + return paren_prompt("Invalid choice", False, choices, function) except EOFError: print("") @@ -1507,6 +1493,25 @@ def sane_value(key, prompt, positive=True, return_empty=False): return response +def password_loop(prompt, positive=True): + response1 = paren_prompt(prompt, positive, function=getpass) + if response1 == "": + confprompt = "Confirm empty password" + else: + confprompt = "Confirm it" + response2 = paren_prompt(confprompt, function=getpass) + if response1 != response2: + return password_loop("Those didnt match. Try again", False) + return response1 + + +def nameloop(prompt, positive): + name = sane_value("user_name", prompt, positive) + if network.user_is_registered(name): + return nameloop("%s is already registered" % name, False) + return name + + def log_in(): """ Handles login or registration using an oldschool input() @@ -1527,7 +1532,7 @@ def log_in(): except ConnectionRefusedError: def login_loop(prompt, positive): try: - password = paren_prompt(prompt, positive) + password = paren_prompt(prompt, positive, function=getpass) network.set_credentials(name, password) except ConnectionRefusedError: login_loop("// R E J E C T E D //.", False) @@ -1543,27 +1548,11 @@ def log_in(): ) if response == "c": - def nameloop(prompt, positive): - name = sane_value("user_name", prompt, positive) - if network.user_is_registered(name): - return nameloop("%s is already registered" % name, False) - return name name = nameloop("Pick a new name", True) elif response == "n": raise InterruptedError - def password_loop(prompt, positive=True): - response1 = paren_prompt(prompt, positive) - if response1 == "": - confprompt = "Confirm empty password" - else: - confprompt = "Confirm it" - response2 = paren_prompt(confprompt) - if response1 != response2: - return password_loop("Those didnt match. Try again", False) - return response1 - password = password_loop("Enter a password. It can be empty if you want") network.user_register(name, password) motherfucking_rainbows("~~welcome to the party, %s!~~" % network.user_name)