mirror of
https://github.com/rjNemo/pass-gen
synced 2026-06-06 02:26:42 +00:00
feat: save password to sqlite
This commit is contained in:
parent
30583a981f
commit
4216801998
8 changed files with 42 additions and 5 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -90,3 +90,6 @@ Icon
|
|||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
.idea
|
||||
pg.db
|
||||
test.txt
|
||||
0
app/data/__init__.py
Normal file
0
app/data/__init__.py
Normal file
14
app/data/sqlite.py
Normal file
14
app/data/sqlite.py
Normal file
|
|
@ -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)
|
||||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
0
app/repositories/__init__.py
Normal file
0
app/repositories/__init__.py
Normal file
13
app/repositories/sqlite.py
Normal file
13
app/repositories/sqlite.py
Normal file
|
|
@ -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)
|
||||
|
|
@ -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):
|
||||
|
|
|
|||
2
test.txt
2
test.txt
|
|
@ -1 +1 @@
|
|||
2yW4AcqG
|
||||
_B'-*/U|devSqHh@
|
||||
Loading…
Reference in a new issue