def generate(args): # handles generation of passwords if len(args) >= 1: # If we have more arguments then we are dealing with the db here # request and verify the master password before proceeding master = hash_pass( getpass("Enter master password to generate password: "******"Incorrect master password") return password = None if len(args) >= 2: # A password was specified so use that password = args[1] else: # generate a new password because none was specified password = generate_password() account = args[0] success = add_password(master, account, password) if success: copy_text(password) print("Newly saved password copied to clipboard!") else: print("Cancelled Operation!") else: # Just generate a random password copy_text(generate_password()) print("Newly generated password copied to clipboard!")
def register(): ds = datastore.Client() user_data = request.get_json() query = ds.query(kind='user') query.add_filter("email", '=', user_data["email"]) can_be_registered = len(list(query.fetch())) == 0 response = {"success": can_be_registered} if can_be_registered: extra_keys = [k for k in user_data if k not in __user_fields] for k in extra_keys: del user_data[k] new_user = datastore.Entity(key=ds.key('user')) user_data["dynamic_salt"] = mk_salt() user_data["password"] = hash_pass(user_data["password"], user_data["dynamic_salt"]) user_data["parcels"] = json.dumps([]) new_user.update(user_data) ds.put(new_user) del user_data["dynamic_salt"] del user_data["password"] response["user"] = user_data else: response[ "cause"] = f"User with email {user_data['email']} is already registered" return json.dumps(response)
def delete(args): # handles the removing of password profiles from the database # request and verify the master password before proceeding master = hash_pass( getpass("Enter master password to delete account password: "******"Incorrect master password") return r = True if len(args) == 0: # if no account was specified, remove all confirm = input( "Are you sure you want to delete all password in the database (y/n)? " ) # confirm first incase it was a mistake if confirm.lower() in ["y", "yes"]: delete_profile(master) print("Completely deleted password database") r = False else: r = True else: confirm = input( "Are you sure you want to delete the user password in the database (y/n)? " ) if confirm.lower() in ["y", "yes"]: delete_profile(master, args[0]) print("Completely deleted user password in the database") r = False else: r = True if r: print("Cancelled Operation!")
def create_db(): # Creates our password database initiating it with our master password path = detect_path() # Create and hash the master password while True: master_pass = getpass("Set a master password: "******"Enter master password again: ") if master_pass == master_pass_2: del master_pass_2 break print("The passwords don't match!\n") master_pass = hash_pass(master_pass) # Setup DB conn = sqlite3.connect(path) with conn: c = conn.cursor() cmd = """CREATE TABLE IF NOT EXISTS passwords ( id integer PRIMARY KEY, account text NOT NULL, password text NOT NULL);""" c.execute(cmd) conn.close() encryptDB(path, master_pass)
def account(args): # handles getting of password from database # request and verify the master password before proceeding master = hash_pass( getpass("Enter master password to get account password: "******"Incorrect master password") return account = None if len(args) != 0: # an account was specified to retrieve so use that account = args[0] get_passwords(master, account)
def reset(args): # handles resetting of all passwords in the database # request and verify the master password before proceeding master = hash_pass( getpass("Enter master password to reset account password: "******"Incorrect master password") return # ask for confirmation before proceeding confirm = input( "Are you sure you want to reset all password in the database (y/n)? ") if confirm.lower() in ["y", "yes"]: resetDB(master) print("Completely reset password database") else: print("Cancelled Operation!")
def route_wrapper(*args, **kwargs): response = {} ds = datastore.Client() passed_data = request.get_json() email = passed_data["email"] password = passed_data["password"] query = ds.query(kind='user') query.add_filter("email", '=', email) results = list(query.fetch()) if len(results) < 1: response["success"] = False response["cause"] = "User with given email does not exist" else: user = results[0] if hash_pass(password, user["dynamic_salt"]) == user["password"]: return route_func(ds=ds, user=user, *args, **kwargs) else: response["success"] = False response["cause"] = "Invalid password" return json.dumps(response)