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) )