blob: e1d9e41a19cbded2926c0f25c17b785497130c73 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.knox.gateway.service.config.remote.config;
import org.apache.knox.gateway.config.GatewayConfig;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* A set of RemoteConfigurationRegistry configurations based on a set of property name-value pairs.
*/
class DefaultRemoteConfigurationRegistries extends RemoteConfigurationRegistries {
private static final String PROPERTY_DELIM = ";";
private static final String PROPERTY_VALUE_DELIM = "=";
private List<RemoteConfigurationRegistry> configuredRegistries = new ArrayList<>();
/**
* Derive the remote registry configurations from the specified GatewayConfig.
*
* @param gc The source GatewayConfig
*/
DefaultRemoteConfigurationRegistries(GatewayConfig gc) {
List<String> configRegistryNames = gc.getRemoteRegistryConfigurationNames();
for (String configRegistryName : configRegistryNames) {
configuredRegistries.add(extractConfigForRegistry(gc, configRegistryName));
}
}
/**
* Extract the configuration for the specified registry configuration name.
*
* @param gc The GatewayConfig from which to extract the registry config.
* @param registryName The name of the registry config.
*
* @return The resulting RemoteConfigurationRegistry object, or null.
*/
private static RemoteConfigurationRegistry extractConfigForRegistry(GatewayConfig gc, String registryName) {
RemoteConfigurationRegistry result = new RemoteConfigurationRegistry();
result.setName(registryName);
Map<String, String> properties = parsePropertyValue(gc.getRemoteRegistryConfiguration(registryName));
result.setRegistryType(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_TYPE));
result.setConnectionString(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_ADDRESS));
result.setNamespace(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_NAMESPACE));
result.setAuthType(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_AUTH_TYPE));
result.setPrincipal(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_PRINCIPAL));
result.setCredentialAlias(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_CREDENTIAL_ALIAS));
result.setKeytab(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_KEYTAB));
result.setUseKeytab(Boolean.valueOf(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_KEYTAB)));
result.setUseTicketCache(Boolean.valueOf(properties.get(GatewayConfig.REMOTE_CONFIG_REGISTRY_USE_TICKET_CACHE)));
result.setBackwardsCompatible(Boolean.valueOf(properties.getOrDefault(GatewayConfig.ZOOKEEPER_REMOTE_CONFIG_REGISTRY_BACKWARDS_COMPATIBLE, "false")));
return result;
}
/**
* Parse the specified registry config properties String.
*
* @param value The property value content from GatewayConfig.
*
* @return A Map of the parsed properties and their respective values.
*/
private static Map<String, String> parsePropertyValue(final String value) {
Map<String, String> result = new HashMap<>();
if (value != null) {
String[] props = value.split(PROPERTY_DELIM);
for (String prop : props) {
String[] split = prop.split(PROPERTY_VALUE_DELIM);
String propName = split[0];
String propValue = (split.length > 1) ? split[1] : null;
result.put(propName, propValue);
}
}
return result;
}
@Override
List<RemoteConfigurationRegistry> getRegistryConfigurations() {
return configuredRegistries;
}
}