51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
import string
|
|
|
|
from .decrypted_account import DecryptedAccount
|
|
|
|
FORBIDDEN_CHARS = frozenset("`\n\\")
|
|
PUNCTUATION = frozenset(string.punctuation).difference(FORBIDDEN_CHARS)
|
|
|
|
|
|
def _base_check(val: str, /) -> bool:
|
|
"Returns false if finds new lines or backtick (`)"
|
|
return not any(i in FORBIDDEN_CHARS for i in val)
|
|
|
|
|
|
def check_account_name(name: str) -> bool:
|
|
"Returns true if account name is valid"
|
|
return _base_check(name)
|
|
|
|
|
|
def check_login(login: str) -> bool:
|
|
"Returns true if login is valid"
|
|
return _base_check(login)
|
|
|
|
|
|
def check_password(passwd: str) -> bool:
|
|
"Returns true if password is valid"
|
|
return _base_check(passwd)
|
|
|
|
|
|
def check_account(account: DecryptedAccount) -> bool:
|
|
"""Runs checks for account name, login and password"""
|
|
return all(
|
|
(
|
|
check_account_name(account.name),
|
|
check_login(account.login),
|
|
check_password(account.password),
|
|
)
|
|
)
|
|
|
|
|
|
def check_gened_password(passwd: str, /) -> bool:
|
|
"""Retuns true if generated password is valid,
|
|
false otherwise.
|
|
Password is valid if there is at least one lowercase character,
|
|
uppercase character and one punctuation character"""
|
|
return (
|
|
any(c.islower() for c in passwd)
|
|
and any(c.isupper() for c in passwd)
|
|
and any(c.isdigit() for c in passwd)
|
|
and any(c in PUNCTUATION for c in passwd)
|
|
)
|