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

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…