def _migrate_global_config_field( cm: ClientConfigAdapter, global_config_data: Dict[str, Any], attr: str, cm_attr: Optional[str] = None ): value = global_config_data.pop(attr) cm_attr = cm_attr if cm_attr is not None else attr if value is not None: cm.setattr_no_validation(cm_attr, value)
def _maybe_migrate_encrypted_confs(config_keys: BaseConnectorConfigMap) -> List[str]: cm = ClientConfigAdapter(config_keys) found_one = False files_to_remove = [] missing_fields = [] for el in cm.traverse(): if el.client_field_data is not None: if el.attr == "celo_address" and celo_address is not None: cm.setattr_no_validation(el.attr, celo_address) continue key_path = conf_dir_path / f"{encrypted_conf_prefix}{el.attr}{encrypted_conf_postfix}" if key_path.exists(): with open(key_path, 'r') as f: json_str = f.read() value = binascii.hexlify(json_str.encode()).decode() if not el.client_field_data.is_secure: value = Security.secrets_manager.decrypt_secret_value(el.attr, value) cm.setattr_no_validation(el.attr, value) files_to_remove.append(key_path) found_one = True else: missing_fields.append(el.attr) errors = [] if found_one: if len(missing_fields) != 0: errors = [f"{config_keys.connector} - missing fields: {missing_fields}"] if len(errors) == 0: errors = cm.validate_model() if errors: errors = [f"{config_keys.connector} - {e}" for e in errors] logging.getLogger().error(f"The migration of {config_keys.connector} failed with errors: {errors}") else: Security.update_secure_config(cm) logging.getLogger().info(f"Migrated secure keys for {config_keys.connector}") for f in files_to_remove: f.unlink() return errors