summaryrefslogtreecommitdiff
path: root/database.py
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2023-05-22 15:19:20 -0500
committerChristian Cleberg <hello@cleberg.net>2023-05-22 15:19:20 -0500
commit0bef69a049f4bace9b06cb4beb3b0505dd7b7a44 (patch)
treec7895a2ded7c774fcac1584940e43690fde4ff65 /database.py
downloadyoshi-cli-0bef69a049f4bace9b06cb4beb3b0505dd7b7a44.tar.gz
yoshi-cli-0bef69a049f4bace9b06cb4beb3b0505dd7b7a44.tar.bz2
yoshi-cli-0bef69a049f4bace9b06cb4beb3b0505dd7b7a44.zip
initial commit
Diffstat (limited to 'database.py')
-rw-r--r--database.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/database.py b/database.py
new file mode 100644
index 0000000..88d96b8
--- /dev/null
+++ b/database.py
@@ -0,0 +1,112 @@
+# Import Python modules
+import sqlite3
+import sys
+import os
+
+# Specify the name of the vault database
+vault_decrypted = 'vault.sqlite'
+vault_encrypted = 'vault.sqlite.aes'
+
+
+# Create the accounts table inside the vault database
+def create_table() -> None:
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(
+ ''' CREATE TABLE accounts (uuid text, application text, username text, password text, url text) ''')
+ db_connection.commit()
+ db_connection.close()
+
+
+# Check if the account table exists within the database
+def table_check() -> bool:
+ check = False
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(
+ ''' SELECT count(name) FROM sqlite_master WHERE type='table' AND name='accounts' ''')
+ if cursor.fetchone()[0] != 1:
+ user_choice = input(
+ 'Password vault does not exist. Would you like to create it now? (y/n): ')
+ if user_choice == 'y' or user_choice == 'Y':
+ create_table()
+ check = True
+ else:
+ sys.exit('Program aborted upon user request.')
+ else:
+ check = True
+ db_connection.commit()
+ db_connection.close()
+ return check
+
+
+# Add a new account to the database
+def create_account(uuid: str, application: str, username: str, password: str,
+ url: str) -> None:
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(
+ ''' INSERT INTO accounts VALUES (:uuid,:application,:username,:password,:url) ''',
+ {'uuid': uuid, 'application': application, 'username': username,
+ 'password': password, 'url': url})
+ db_connection.commit()
+ db_connection.close()
+
+
+# Delete an account with a specified UUID
+def delete_account(uuid: str) -> None:
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(
+ ''' DELETE FROM accounts WHERE uuid = :uuid ''', {'uuid': uuid})
+ db_connection.commit()
+ db_connection.close()
+
+
+# Find a specific account by UUID
+def find_account(uuid: str) -> list:
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(
+ ''' SELECT * FROM accounts WHERE uuid = :uuid ''', {'uuid': uuid})
+ account = cursor.fetchall()
+ db_connection.close()
+ return account
+
+
+# Return all accounts found within the database table
+# The `accounts` variable is a list of tuples
+def find_accounts() -> list:
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(''' SELECT * FROM accounts ''')
+ accounts = cursor.fetchall()
+ db_connection.close()
+ return accounts
+
+
+def update_account(field_name: str, new_value: str, uuid: str) -> None:
+ queries = {
+ 'application': 'UPDATE accounts SET application = :new_value WHERE uuid = :uuid',
+ 'username': 'UPDATE accounts SET username = :new_value WHERE uuid = :uuid',
+ 'password': 'UPDATE accounts SET password = :new_value WHERE uuid = :uuid',
+ 'url': 'UPDATE accounts SET url = :new_value WHERE uuid = :uuid'
+ }
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(queries[field_name],
+ {'new_value': new_value, 'uuid': uuid})
+ db_connection.commit()
+ db_connection.close()
+
+
+def purge_table() -> None:
+ db_connection = sqlite3.connect(vault_decrypted)
+ cursor = db_connection.cursor()
+ cursor.execute(''' DROP TABLE accounts ''')
+ db_connection.commit()
+ db_connection.close()
+
+
+def purge_database() -> None:
+ os.remove(vault_decrypted)