aboutsummaryrefslogtreecommitdiff
path: root/src/database.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/database.py')
-rw-r--r--src/database.py125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/database.py b/src/database.py
new file mode 100644
index 0000000..e1e2e78
--- /dev/null
+++ b/src/database.py
@@ -0,0 +1,125 @@
+"""
+This module provides a basic interface for connecting to and interacting with a SQLite database.
+It includes functions for creating connections, executing queries, and retrieving results.
+"""
+
+import sqlite3
+import sys
+import os
+
+VAULT_DECRYPTED = 'vault.sqlite'
+VAULT_ENCRYPTED = 'vault.sqlite.aes'
+
+
+def create_table() -> None:
+ """Create the accounts table within the vault database."""
+ db_connection = sqlite3.connect(VAULT_DECRYPTED)
+ cursor = db_connection.cursor()
+ cursor.execute(
+ ''' CREATE TABLE IF NOT EXISTS accounts (uuid text, application text,
+ username text, password text, url text) '''
+ )
+ db_connection.commit()
+ db_connection.close()
+
+
+def check_table() -> bool:
+ """Check if the 'accounts' table exists within the vault database."""
+ 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.lower() == 'y':
+ create_table()
+ check = True
+ else:
+ sys.exit('Program aborted upon user request.')
+ else:
+ check = True
+ db_connection.commit()
+ db_connection.close()
+ return check
+
+
+def add_account(uuid: str, application: str, username: str, password: str,
+ url: str) -> None:
+ """Add a new account within the vault database."""
+ 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()
+
+
+def delete_account(uuid: str) -> None:
+ """Delete an account within the vault database by its unique ID."""
+ 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()
+
+
+def find_account(uuid: str) -> list:
+ """Find an account within the vault database by its unique ID."""
+ 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
+
+
+def find_accounts() -> list:
+ """Return all accounts stored within the vault database."""
+ 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:
+ """Update an account within the vault database by its unique ID."""
+ 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:
+ """Purge the 'accounts' table within the vault database."""
+ 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:
+ """Purge the entire vault database."""
+ os.remove(VAULT_DECRYPTED)