import __main__ from secrets import token_urlsafe as _token_urlsafe, token_hex as _token_hex from string import ascii_letters as _ascii_letters from random import choice as _choice from os.path import dirname as _dirname, abspath as _abspath, join as _join, isfile as _isfile, isdir as _isdir from os import makedirs as _makedirs _HERE = _dirname(_abspath(__main__.__file__)) _PASSWORD_DIR = _join(_HERE, 'password') def get_password(server_name: str, username: str, description: str, type: str, length: int=20, temporary: bool=True, ) -> str: if type != 'cleartext': raise Exception('only cleartext is supported') def gen_password(): return _token_urlsafe(length)[:length] return _set_password(server_name, username, description, gen_password, temporary, ) def get_password_alpha_num(server_name, username: str, description: str, length, starts_with_char=False, ): def gen_password(): password = _token_hex() if starts_with_char: password = _choice(_ascii_letters) + password return password[:length] return _set_password(server_name, username, description, gen_password, True, ) def _set_password(server_name: str, username: str, description: str, gen_password, temporary, ) -> str: if not server_name or not username: return dir_name = _join(_PASSWORD_DIR, server_name, description) if not _isdir(dir_name): _makedirs(dir_name) file_name = _join(dir_name, username) if not _isfile(file_name): password = gen_password() with open(file_name, 'w') as fh: fh.write(password) with open(file_name, 'r') as fh: return fh.read().strip() def get_range(stop): return list(range(stop)) def get_number_of_interfaces(zones): if zones is None: return 1 return len(zones) def get_zone_name(zones: list, index: str, ): if zones is not None: return zones[int(index)] def get_domain_name(server_name: str, extra_domainnames: list, suffix: str, ) -> str: index = int(suffix) if index == 0: return server_name return extra_domainnames[index - 1]