diff --git a/.gitignore b/.gitignore index 813a2bc..9980f7e 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,6 @@ Icon Network Trash Folder Temporary Items .apdisk +.idea +pg.db +test.txt \ No newline at end of file diff --git a/app/data/__init__.py b/app/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/data/sqlite.py b/app/data/sqlite.py new file mode 100644 index 0000000..1fd146a --- /dev/null +++ b/app/data/sqlite.py @@ -0,0 +1,14 @@ +import sqlite3 + + +class DB: + def __init__(self, db_str="pg.db") -> None: + self.connection = sqlite3.connect(db_str) + self.cursor = self.connection.cursor() + self.execute("CREATE TABLE IF NOT EXISTS passwords (password text)") + + def commit(self) -> None: + self.connection.commit() + + def execute(self, query: str, *args) -> None: + self.cursor.execute(query, *args) diff --git a/app/main.py b/app/main.py index bcdf220..8b392bb 100644 --- a/app/main.py +++ b/app/main.py @@ -3,8 +3,10 @@ from typing import Optional import typer +import app.data.sqlite as sqlite import app.usecases.pass_gen as pass_gen import app.usecases.utils as utils +from app.repositories.sqlite import PasswordRepository app = typer.Typer() @@ -44,8 +46,9 @@ def main( symbols=symbols, numbers=numbers, ) - - password = pass_gen.generate_password(options) + db = sqlite.DB() + sqlite_repo = PasswordRepository(db) + password = pass_gen.generate_password(sqlite_repo, options) typer.echo(typer.style(f"🔐 {password}", fg=typer.colors.GREEN, bold=True)) diff --git a/app/repositories/__init__.py b/app/repositories/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/repositories/sqlite.py b/app/repositories/sqlite.py new file mode 100644 index 0000000..3c72753 --- /dev/null +++ b/app/repositories/sqlite.py @@ -0,0 +1,13 @@ +from typing import Any + + +class PasswordRepository: + def __init__(self, db: Any) -> None: + self.db = db + + def save(self, password: str) -> None: + try: + self.db.execute(f"INSERT INTO passwords VALUES (:password)", {"password": password}) + self.db.commit() + except Exception as e: + print(e) diff --git a/app/usecases/pass_gen.py b/app/usecases/pass_gen.py index 2d4c4cb..a1b2797 100644 --- a/app/usecases/pass_gen.py +++ b/app/usecases/pass_gen.py @@ -4,6 +4,8 @@ from typing import Protocol from pydantic import BaseModel +from app.repositories.sqlite import PasswordRepository + class PassGenOptions(BaseModel): seed: int @@ -12,10 +14,12 @@ class PassGenOptions(BaseModel): numbers: bool = True -def generate_password(options: PassGenOptions) -> str: +def generate_password(repo: PasswordRepository, options: PassGenOptions) -> str: characters = _build_characters(symbols=options.symbols, numbers=options.numbers) random_generator = _new_random_generator(options.seed) - return "".join(random_generator.sample(characters, options.length)) + password = "".join(random_generator.sample(characters, options.length)) + repo.save(password) + return password class RandomSampler(Protocol): diff --git a/test.txt b/test.txt index 10d99eb..a43db37 100644 --- a/test.txt +++ b/test.txt @@ -1 +1 @@ -2yW4AcqG \ No newline at end of file +_B'-*/U|devSqHh@ \ No newline at end of file