From c7e5d9fbec9418d856be961358e35f603bbbf523 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Wed, 6 Nov 2024 21:52:32 -0600 Subject: configure as pypi hosted app --- process.py | 225 ------------------------------------------------------------- 1 file changed, 225 deletions(-) delete mode 100644 process.py (limited to 'process.py') diff --git a/process.py b/process.py deleted file mode 100644 index 0888a78..0000000 --- a/process.py +++ /dev/null @@ -1,225 +0,0 @@ -""" -Password Vault Manager - -This script provides various functions for managing password vaults. -It allows users to create, list, edit and delete accounts. - -The `Account` class represents an individual account, with attributes for -the application name, username, password, and URL. The database module is used -to interact with the SQLite database file (`vault.sqlite`) that stores the -accounts data. - -Functions: - generate_characters(n): generates a list of random characters - shuffle_characters(characters): shuffles the characters to create a password - generate_passphrase(n, sep): generates an XKCD-style passphrase with n words and separator - list_accounts(): lists all saved accounts in the database - delete_account(uuid): deletes an account by its UUID - purge_accounts(): purges the entire database (irreversible) - create_account(): creates a new account by prompting user for details - edit_account(uuid, edit_parameter): edits an existing account's details - -Usage: - Run this script in your terminal to access these functions. -""" - -from string import ascii_letters, punctuation, digits -import random -import uuid -from prettytable import PrettyTable -from account import Account -import database - - -def generate_characters(n: int) -> list: - """ - Generates a list of n random characters from the set of ASCII letters, - punctuation and digits. - - Args: - n (int): The number of characters to generate - - Returns: - list: A list of n random characters - """ - characters = [] - password_format = ascii_letters + punctuation + digits - for _ in range(n): - characters.append(random.choice(password_format)) - return characters - - -def shuffle_characters(characters: list) -> str: - """ - Shuffles the characters to create a password. - - Args: - characters (list): The list of characters - - Returns: - str: A string representation of the shuffled characters - """ - random.shuffle(characters) - character_string = ''.join(characters) - return character_string - - -def generate_passphrase(n: int, sep: str) -> str: - """ - Generates an XKCD-style passphrase with n words and separator. - - Args: - n (int): The number of words to include - sep (str): The separator symbol - - Returns: - str: A string representation of the passphrase - """ - phrases = [] - lucky_number = random.choice(range(0, n)) - for _ in range(n): - with open('wordlist.txt', 'r', encoding='utf-8') as file: - line = random.choice(file.readlines()) - line = line.replace('\n', '') - if _ == lucky_number: - phrases.append(line.strip().capitalize() + str(_)) - else: - phrases.append(line.strip().capitalize()) - passphrase = sep.join(phrases) - return passphrase - - -def list_accounts() -> None: - """ - Lists all saved accounts in the database. - - Returns: - None - """ - accounts = database.find_accounts() - t = PrettyTable(['UUID', 'Application', 'Username', 'Password', 'URL']) - for account in accounts: - t.add_row([account[0], account[1], account[2], account[3], account[4]]) - print(t) - - -def delete_account(account_uuid: str) -> None: - """ - Deletes an account by its UUID. - - Args: - account_uuid (str): The UUID of the account to delete - - Returns: - None - """ - account_record = database.find_account(account_uuid) - account = Account(account_record[0][0], - account_record[0][1], - account_record[0][2], - account_record[0][3], - account_record[0][4]) - if account.delete_account(): - print('Account successfully deleted.') - - -def purge_accounts() -> None: - """ - Purges the entire database (irreversible). - - Returns: - None - """ - check = input( - '''Are you absolutely sure you want to delete your password vault? - This action is irreversible. (y/n): ''') - if check.lower() == 'y': - database.purge_table() - database.purge_database() - print('The password vault has been purged. You may now exit or create a new one.') - - -def create_account() -> None: - """ - Creates a new account by prompting user for details. - - Returns: - None - """ - application_string = input('Please enter a name for this account: ') - username_string = input('Please enter your username for this account: ') - url_string = input('(Optional) Please enter a URL for this account: ') - - password_type = input( - '''Do you want a random character password (p), an XKCD-style passphrase -(x), or a custom password (c)? (p|x|c): ''' - ) - if password_type not in ['p', 'x', 'c']: - print('Error: Invalid choice. Please choose p, x, or c.') - return - - if password_type == 'x': - password_length = int( - input('Please enter number of words to include (min. 2): ') - ) - if password_length < 3: - print('Error: Your passphrase length must be at least 3 words.') - return - password_separator = input( - 'Please enter your desired separator symbol (_,-, ~, etc.): ' - ) - password_string = generate_passphrase(password_length, password_separator) - elif password_type == 'p': - password_length = int( - input('Please enter your desired password length (min. 8): ') - ) - if password_length < 8: - print('Error: Your password length must be at least 8 characters.') - return - password_string = generate_password(password_length) # pylint: disable=undefined-variable - else: - password_string = input('Please enter your desired password: ') - - account = Account(str(uuid.uuid4()), application_string, - username_string, password_string, url_string) - account.save_account() - print('Account saved to the vault. Use `--list` to see all saved accounts.') - - - -def edit_account(account_uuid: str, edit_parameter: int) -> None: - """ - Allow users to edit any account information except the UUID. - - Args: - account_uuid (str): Unique identifier of the account. - edit_parameter (int): Parameter indicating which field to edit. - Valid values are 1 for application name, 2 for username, - 3 for password, and 4 for URL. - """ - field_name, new_value = '' - if edit_parameter == 1: - field_name = 'application' - new_value = input('Please enter your desired Application name: ') - elif edit_parameter == 2: - field_name = 'username' - new_value = input('Please enter your desired username: ') - elif edit_parameter == 3: - field_name = 'password' - type_check = input( - 'Do you want a new random password or to enter a custom password? ' - '(random/custom): ').lower() - if type_check == 'random': - password_length = int(input('Please enter your desired password length: ')) - if password_length < 8: - print('Error: Your password length must be at least 8 characters.') - else: - password_characters = generate_characters(password_length) - new_value = shuffle_characters(password_characters) - else: - new_value = input('Please enter your desired password: ') - elif edit_parameter == 4: - field_name = 'url' - new_value = input('Please enter your desired URL: ') - database.update_account(field_name, new_value, account_uuid) - print('Account successfully updated.') -- cgit v1.2.3-70-g09d2