import __main__ from typing import List 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 from risotto.utils import load_domains, DOMAINS _HERE = _dirname(_abspath(__main__.__file__)) _PASSWORD_DIR = _join(_HERE, 'password') def get_password(server_name: str, username: str, description: str, type: str, hide: bool, length: int=20, temporary: bool=True, ) -> str: if hide: return "XXXXX" def gen_password(): return _token_urlsafe(length)[:length] return _set_password(server_name, username, description, gen_password, temporary, type, ) def get_password_alpha_num(server_name, username: str, description: str, length, hide: bool, starts_with_char=False, ): if hide: return "XXXXX" 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, 'cleartext', ) def _set_password(server_name: str, username: str, description: str, gen_password, temporary, type, ) -> str: if type != 'cleartext': raise Exception('only cleartext is supported') 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: file_content = fh.read().strip() return file_content def get_range(lst): return list(range(max(1, len(lst)))) 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] def get_ip(server_name: str, zones_name: List[str], index: str, ) -> str: load_domains() host_name, domain_name = server_name.split('.', 1) domain = DOMAINS[domain_name] return domain[1][domain[0].index(host_name)]