INNER CODE UNIT · Python
apply_account
kejilion/sh · site_access_cli.py:64
def apply_account(rootfd, request):
required = {'operation', 'configName', 'configVersion', 'fileVersion', 'serverIndex',
'scope', 'path', 'modifier', 'username'}
optional = {'password', 'previousUsername'}
if not isinstance(request, dict) or not required <= request.keys() or request.keys() - required - optional:
raise ConfigError('invalid request fields')
config_name = request['configName']
if not isinstance(config_name, str) or not re.fullmatch(r'[A-Za-z0-9_.-]{1,253}\.conf', config_name):
raise ConfigError('invalid configuration name')
if request['operation'] not in ('add', 'update', 'delete'):
raise ConfigError('invalid account action')
config_dir = directory_beneath(rootfd, ['conf.d'])
try:
config = read_checked(config_dir, config_name, request['configVersion'], 2 << 20)
try:
ast = parse(config.decode('utf-8'))
except UnicodeDecodeError as exc:
raise ConfigError('site configuration is not UTF-8') from exc