import yaml from random import SystemRandom def generate_secret_key(): cryptogen = SystemRandom() return str(cryptogen.getrandbits(256)) def import_yaml(config_obj, config_file): with open(config_file) as f: c = yaml.safe_load(f) if not c: logger.debug('Empty YAML config file') return if isinstance(c, str): raise Exception('Invalid YAML config file: ' + str(c)) for key in c.iterkeys(): if key.isupper(): config_obj[key] = c[key] def export_yaml(config_obj, config_file): with open(config_file, 'w') as f: f.write(yaml.safe_dump(config_obj, encoding='utf-8', allow_unicode=True)) def set_config_value(config_file, config_key, value): """ Loads the configuration from the given YAML config file, sets the given key to the given value, and then writes it back out to the given YAML config file. """ config_obj = {} import_yaml(config_obj, config_file) config_obj[config_key] = value export_yaml(config_obj, config_file) def add_enterprise_config_defaults(config_obj, current_secret_key, hostname): """ Adds/Sets the config defaults for enterprise registry config. """ # These have to be false. config_obj['TESTING'] = False config_obj['USE_CDN'] = False # Default features that are on. config_obj['FEATURE_USER_LOG_ACCESS'] = config_obj.get('FEATURE_USER_LOG_ACCESS', True) config_obj['FEATURE_USER_CREATION'] = config_obj.get('FEATURE_USER_CREATION', True) # Default features that are off. config_obj['FEATURE_MAILING'] = config_obj.get('FEATURE_MAILING', False) config_obj['FEATURE_BUILD_SUPPORT'] = config_obj.get('FEATURE_BUILD_SUPPORT', False) # Default auth type. if not 'AUTHENTICATION_TYPE' in config_obj: config_obj['AUTHENTICATION_TYPE'] = 'Database' # Default secret key. if not 'SECRET_KEY' in config_obj: config_obj['SECRET_KEY'] = current_secret_key # Default storage configuration. if not 'DISTRIBUTED_STORAGE_CONFIG' in config_obj: config_obj['DISTRIBUTED_STORAGE_PREFERENCE'] = ['local'] config_obj['DISTRIBUTED_STORAGE_CONFIG'] = { 'local': ['LocalStorage', {'storage_path': '/datastorage/registry'}] } config_obj['USERFILES_LOCATION'] = 'local' config_obj['USERFILES_PATH'] = 'userfiles/' if not 'SERVER_HOSTNAME' in config_obj: config_obj['SERVER_HOSTNAME'] = hostname # Misc configuration. config_obj['PREFERRED_URL_SCHEME'] = config_obj.get('PREFERRED_URL_SCHEME', 'http') config_obj['ENTERPRISE_LOGO_URL'] = config_obj.get('ENTERPRISE_LOGO_URL', '/static/img/quay-logo.png')