from crypt import crypt as _crypt from string import ascii_letters as _ascii_letters, digits as _digits from secrets import choice as _choice from risotto.utils import multi_function as _multi_function def sha512_crypt(password): salt = ''.join([_choice(_ascii_letters + _digits) for _ in range(8)]) prefix = '$6$' return _crypt(password, prefix + salt) @_multi_function def calc_domains(domains): ret = [] for domain in domains: ret.append(domain) ret.append(domain) ret.append(f'autoconfig.{domain}') return ret @_multi_function def calc_locations(domain, index): i = index//3 if 3 * i == index: # divisible by three return '/autodiscover/autodiscover.xml' elif 3 * i + 1 == index: return '/.well-known/autoconfig/mail/config-v1.1.xml' return '/mail/config-v1.1.xml' @_multi_function def calc_well_known(index, dns, doms): if None in (dns, doms): return None i = index//3 return f'https://{dns}/mail/{doms[i]}/autodiscover/autodiscover.xml'