mirror of
https://github.com/rjNemo/pass-gen
synced 2026-06-06 02:26:42 +00:00
refactor: create usecases
This commit is contained in:
parent
5a54f14d1f
commit
30583a981f
6 changed files with 60 additions and 84 deletions
94
Pipfile.lock
generated
94
Pipfile.lock
generated
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "23e051ec53ebc361abbf021b0f9d11da381c0ac7632e2feb7885804bb5d88e46"
|
||||
"sha256": "b1bba35cf3809622ba68e5c6d3e45856f177c2de92180eba2caf325ff287149c"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
|
|
@ -111,61 +111,39 @@
|
|||
},
|
||||
"coverage": {
|
||||
"hashes": [
|
||||
"sha256:00368e6328ebff76197fff5f4d5704b44098f89d8d99a67a349ad6674ec0b157",
|
||||
"sha256:0389690e0a1c94e9a246dc3130355d70805e51ca509db1bf07fbde27efb33aa4",
|
||||
"sha256:065d2181f44392893d37d0a4f9ff60b485d705f733356d0a2fb292a58c6f2e0f",
|
||||
"sha256:082febdba717c769da92d5e19e14a659ebef6daab19b67fced304b7b8d2475e2",
|
||||
"sha256:0a35ae0d590effb7cc96e7d6935ae2ab8a51526a111fbe0f12d1671aa9fdc377",
|
||||
"sha256:142493f0400a0bd5acf03c52971229e937323c3e24c372800ae1c44a503e0921",
|
||||
"sha256:186f53367a08e8d24cc534c7cbfa43a82d1618a48dec2e0c56e80577ec1888fe",
|
||||
"sha256:2163a00bcd613e95e118c01ea2811f705fbbacf1904d657b24d306879e2303d3",
|
||||
"sha256:24ecf342b1e23de259d81b3adc83578935babeb54f6950c9bd9534b12443a49c",
|
||||
"sha256:2c24d3e09f433817ddd0cb2e8f82f8b42cd09a8ac558462fedf99be479ed4851",
|
||||
"sha256:2d741575de4a13869c9d4a685235bacc897c94afd3703e2ad4fdc362f37e87da",
|
||||
"sha256:305ca73c09dd84054a3a8f53d5b70e0325b5b303245d0b96ed505698dc7e8ea7",
|
||||
"sha256:4bf1d0a390de707f8bfd49efdcdac9366ce77ed64cb35b344f58b1ec62517317",
|
||||
"sha256:50d90d6b753debb7568621125aad4e5fb418e7bdcb0dba3fa6f4ee82994b35d4",
|
||||
"sha256:5a2079bca21fa959608223b90cf2f95ce686a6497fb12bfaaa7bb24c3e298199",
|
||||
"sha256:60c6d433f0357db7ed2a2a698fb75b8ce919ce547d6d6bc79c576e090f509768",
|
||||
"sha256:66cfae29bccea703f02d8997f60d71e236c5a321588f5aa5a318bd88ca23dc0a",
|
||||
"sha256:6d6fc990962559de1f3685eb3e365ca60f2e3257bfd145bf675c566b8ebb1944",
|
||||
"sha256:703b126f3ad20c463b545e199c4da460695630da5fdfd949de6a6269b45eabab",
|
||||
"sha256:730cee22c41852b90948343cdfd183db1e96a9de69fd4dabec3532c582afea68",
|
||||
"sha256:7e4a16bde8a3b7424b2955130f5a6c29e741e7138fe05c5d9d72efc356076a80",
|
||||
"sha256:801e8277958bc2e6cc1f2443a20a2a97f79583aa64524b130e1c0de44c287ca9",
|
||||
"sha256:80baa69a78d5696c60b72dee44ac3d5ccf75ee82e84d018938ddf642d036a6a8",
|
||||
"sha256:80c00ce9cef80afbf18d16cb3052f5601ba8d087501d829169eecb33c153346a",
|
||||
"sha256:89db5a374d793344087732207ee15869549486b2148e3e2e6effe22146351fcd",
|
||||
"sha256:917b98cc5725ea2e0b88c74d34182589a9be07092cb35b861ea9e74189174f71",
|
||||
"sha256:9398f8fd89f6f260e94e57559df1885b8200b18312824b617a8789e0f5e7dc74",
|
||||
"sha256:95b6f212bb0c7379f1f2f6e47c722fbdc7355d8b7488a68649e83dfa29522704",
|
||||
"sha256:9f23313f3e494475581d46de3b8b6bdcf618ee1df412490e779a9aa0a6c72162",
|
||||
"sha256:9f6f26e5b129bb0218aab30d368d6ead750517a457986f8854b1df4b4c318098",
|
||||
"sha256:a502693c83a2c6558bc45b4c2dc01a00c9b99cb3cf846913438933a44af174fc",
|
||||
"sha256:aa4999130a8e892fa9051edc18bf4daa0a2839d3f3de2dcfcbf0ae4619ee3b5e",
|
||||
"sha256:b10be0b80784c1beb8061e5ce938d8511a182125de5fc695a60f0561b984d361",
|
||||
"sha256:b1f7b23a606aaf2464eb81c23b5b20623e2ba44b4aaca6ea9bfe00e84a1a5264",
|
||||
"sha256:b78c8d232d97dbc8ad3a3d94cc15fccabe9a331685d76d2e5cb5284acc4a5feb",
|
||||
"sha256:b88fa862817035ad7921f2641c27a85dab12cc685ad3ef29c0caaf5b3d10a868",
|
||||
"sha256:b93fb9137070899b5f10d6487724f4427b5945983a785e1e2f1102c5e175c516",
|
||||
"sha256:b9639e16c1bc4eb8a78b3b30df4146bb78df5d52ba1b7454b634abd89aede6cc",
|
||||
"sha256:baa3b6be365c97f80d92a397cb8963dcd9bc22d101b39784e77a9cad093812f8",
|
||||
"sha256:c06c5758bae454a49dc3e7917804b46c31bb4a72cedfc8e7b4f17a318b3de9d6",
|
||||
"sha256:c544153709e93ea7e9edcefee72f5afcf484a9cb526067065f9419419f4a3694",
|
||||
"sha256:c6c74260ba130f7c20a340e8f9e544b0941621641f53edcf69e4602e12c9f29e",
|
||||
"sha256:d040615ff5c02ffd97ba9f0f73b9db34c09b8142fbfdd363b2a79fa6a554242c",
|
||||
"sha256:d85774b1ac09ec1d958e63baa436cc4c90e2e910294847ba51dcc3ca3ca04a63",
|
||||
"sha256:e508bb216eee8350e77b436f9f99c4f2d8335ecb51483f5ffd8bf5e84aaa56d1",
|
||||
"sha256:ea1cb38b1a52392ebb4e93eaf4a44b3cfdec35cca3f78a9a599f27b7f27031e2",
|
||||
"sha256:ec310e0029d530d1043f638b7a326b349884421572626bc2909408da7b0d03e5",
|
||||
"sha256:ed04b79f53fa975660f1a598120c504a0f4529170eeaf0d823fcc1f06f4d2e0f",
|
||||
"sha256:f4909ee1ddabed351f0fa55063a7dbe498001e2245a9602d9fb0fd74afecdca9",
|
||||
"sha256:f49ae9e19737493911e7f8e551310f719f463e442ea1ec92fe0804c62066a7e8",
|
||||
"sha256:f4c93e6102087dda4931fcd50fa4ad44e8e43e09419290c5f05cc2c690961ebf",
|
||||
"sha256:fa1b639d85af4794cb20d7cfd4c5ae38e94a418b17a2318a1992b470fb68260d"
|
||||
"sha256:16db4173575901db8f3e6cc05e50fe19c7849b0256f6dc2e0979485184053417",
|
||||
"sha256:18183948d5480e2ae30ad67edddf748149c778592b7e4ee649c058d5de2dcbb1",
|
||||
"sha256:22888d3ce1b6fa1125f0be1602d8c634e00e7ec3a87bdb594ad87bde0b00b2b6",
|
||||
"sha256:23c1611471cbfa2ac0e283862a76a333c13e5e7c4d499feb9919a5f52884610e",
|
||||
"sha256:2dcc6d62b69a82759e5dddd788e09dd329124e493e62d92cfd01c0b918d7e511",
|
||||
"sha256:40e30139113b141c238620b700aa5bd5c1b3a7b29ae47398936ff1c9166109d9",
|
||||
"sha256:4528368196a90f11b70fb5668c13d92e88ba795eb4d37aab5855fd0479db417b",
|
||||
"sha256:4cbdc51fc8c00ec6e53b30221d5757034aecf9839761bf97eaec0db7f0ff4955",
|
||||
"sha256:6a585ba4087cc1fb5bfe34d1ecaaee183b854427992be2b42f1722ba8289fa82",
|
||||
"sha256:79c136327e90ee46a2b3094263df94da5212890d6145678741eb805d79714971",
|
||||
"sha256:7beec4df7542cf681356ef243fee3bf948775fc0d125bdcad3508e834229e07d",
|
||||
"sha256:8394626a07e0a1b3695a16a4548d32e7259e00817d4bab1ef8172a1bd82a724e",
|
||||
"sha256:84a1000f622d1df8824cd1ac629aa8392679c5c4de3f0de9e6889373f99ff3a0",
|
||||
"sha256:91cd79f0f2996a4de737de89fdcbcd379a5bfd7b15129378ad1e5fc234e58d33",
|
||||
"sha256:951e8d7bc98bceb61fc4fb426966fae854160301c0f8cd0945c62f2504f68615",
|
||||
"sha256:95d2293d6a60da8952c675050231c02c9f4f1c1b9cf916315173e921d137d683",
|
||||
"sha256:9981294b131023e63061ba88f4498fe27b9b15d908079d1866ee66a63d6e793f",
|
||||
"sha256:a8826f6ecf079cb648534790ba59218a64e12a59bf2cd9ff00199abb39864a79",
|
||||
"sha256:c1630e847ae0a2a366f18ddc3e017b69f80d729e95830579c61b5f9e9b94b91e",
|
||||
"sha256:c6f46d5bbec8fe1ff25215356e819528a90d84b2801703514746b665742f1cd2",
|
||||
"sha256:c8099c7033fb1ca73ac2246c3e52f45dd6a9c3826c59b3b5ad94e5be4e08d99b",
|
||||
"sha256:ceb872b89c6461d4365be5f8fbf14f867be6b5217760980de7e014e54648f8ef",
|
||||
"sha256:d6fbe69d52628b3e8a144265fd134f5da07cf287a00cf529730ae10380d315b2",
|
||||
"sha256:da7de6e4162c69cc03cc56b7d051ae11147ac30872ff57df4ba4cac6d70ce5d9",
|
||||
"sha256:ddb2287f66500ac57b24cce60341074b148977b74cd20eca755f95262928086f",
|
||||
"sha256:e6a4260f0abf90c023b4f838905f645695b31666b76837152e2befad3d1ef5d6",
|
||||
"sha256:e97b387f2744762b9984639b59abd7abb46ea6ae2ea24cb7c07893612328559b",
|
||||
"sha256:ea784c96ca3b94912176d7adc9c4bb7d1988f36a0223a9ac128f4c834775202c",
|
||||
"sha256:f0b250a03891255feb3ae69ac29d05cf9a62f5869bb8bac0e7f4968e7274efac",
|
||||
"sha256:fdaa96733c9cf85491ad406fd78aa16025a1ea468951545b3da7ee133c150c7a"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||
"version": "==5.6b1"
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==6.0b1"
|
||||
},
|
||||
"flake8": {
|
||||
"hashes": [
|
||||
|
|
@ -251,10 +229,10 @@
|
|||
},
|
||||
"pathspec": {
|
||||
"hashes": [
|
||||
"sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd",
|
||||
"sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"
|
||||
"sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a",
|
||||
"sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"
|
||||
],
|
||||
"version": "==0.8.1"
|
||||
"version": "==0.9.0"
|
||||
},
|
||||
"pbr": {
|
||||
"hashes": [
|
||||
|
|
|
|||
21
app/main.py
21
app/main.py
|
|
@ -1,10 +1,10 @@
|
|||
import random as r
|
||||
import subprocess
|
||||
from typing import Optional
|
||||
|
||||
import typer
|
||||
|
||||
from .pass_gen import PassGenOptions, generate_password
|
||||
import app.usecases.pass_gen as pass_gen
|
||||
import app.usecases.utils as utils
|
||||
|
||||
app = typer.Typer()
|
||||
|
||||
|
|
@ -38,29 +38,20 @@ def main(
|
|||
random: bool = True,
|
||||
) -> None:
|
||||
seed = r.randint(0, 100) if random else 0
|
||||
options = PassGenOptions(
|
||||
options = pass_gen.PassGenOptions(
|
||||
seed=seed,
|
||||
length=length,
|
||||
symbols=symbols,
|
||||
numbers=numbers,
|
||||
)
|
||||
|
||||
password = generate_password(options)
|
||||
password = pass_gen.generate_password(options)
|
||||
|
||||
typer.echo(typer.style(f"🔐 {password}", fg=typer.colors.GREEN, bold=True))
|
||||
|
||||
if file is not None:
|
||||
save_to_file(file, password)
|
||||
utils.save_to_file(file, password)
|
||||
return typer.echo(f"The password has been saved to: {file} 🗄")
|
||||
|
||||
return copy_to_clipboard(password)
|
||||
|
||||
|
||||
def copy_to_clipboard(password: str) -> None:
|
||||
subprocess.run("pbcopy", universal_newlines=True, input=password)
|
||||
utils.copy_to_clipboard(password)
|
||||
return typer.echo("The password has been copied to your clipboard 😉\nPaste it using cmd + v")
|
||||
|
||||
|
||||
def save_to_file(file: str, password: str) -> None:
|
||||
with open(file, "w") as f:
|
||||
f.write(password)
|
||||
|
|
|
|||
0
app/usecases/__init__.py
Normal file
0
app/usecases/__init__.py
Normal file
|
|
@ -14,9 +14,7 @@ class PassGenOptions(BaseModel):
|
|||
|
||||
def generate_password(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))
|
||||
|
||||
|
||||
|
|
@ -30,11 +28,10 @@ def _new_random_generator(seed: int) -> RandomSampler:
|
|||
|
||||
|
||||
def _build_characters(symbols: bool, numbers: bool) -> str:
|
||||
characters = string.ascii_letters
|
||||
|
||||
if symbols:
|
||||
characters += string.punctuation
|
||||
if numbers:
|
||||
characters += string.digits
|
||||
|
||||
return characters
|
||||
return "".join(
|
||||
[
|
||||
string.ascii_letters,
|
||||
string.punctuation if symbols else "",
|
||||
string.digits if numbers else "",
|
||||
]
|
||||
)
|
||||
10
app/usecases/utils.py
Normal file
10
app/usecases/utils.py
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import subprocess
|
||||
|
||||
|
||||
def copy_to_clipboard(password: str) -> None:
|
||||
subprocess.run("pbcopy", universal_newlines=True, input=password)
|
||||
|
||||
|
||||
def save_to_file(file: str, password: str) -> None:
|
||||
with open(file, "w") as f:
|
||||
f.write(password)
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import pytest
|
||||
from app.pass_gen import PassGenOptions, generate_password
|
||||
from app.usecases.pass_gen import PassGenOptions, generate_password
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
|
|
|||
Loading…
Reference in a new issue