BYOKRemoteConfig.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.utils.certificate.byok;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.openspcoop2.utils.UtilsException;
import org.slf4j.Logger;
/**
* BYOKRemoteConfig
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class BYOKRemoteConfig implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3572589461109860459L;
private String httpEndpoint;
private String httpMethod;
private Map<String,String> httpHeaders;
private String httpPayloadPath;
private String httpPayloadInLine;
private String httpUsername;
private String httpPassword;
private Integer httpConnectionTimeout;
private Integer httpReadTimeout;
private boolean https = false;
private boolean httpsHostnameVerifier = false;
private boolean httpsServerAuth = false;
private String httpsServerAuthTrustStorePath;
private String httpsServerAuthTrustStoreType;
private String httpsServerAuthTrustStorePassword;
private String httpsServerAuthTrustStoreCrls;
private String httpsServerAuthTrustStoreOcspPolicy;
private boolean httpsClientAuth = false;
private String httpsClientAuthKeyStorePath;
private String httpsClientAuthKeyStoreType;
private String httpsClientAuthKeyStorePassword;
private String httpsClientAuthKeyAlias;
private String httpsClientAuthKeyPassword;
private boolean httpResponseBase64Encoded;
private boolean httpResponseHexEncoded;
private String httpResponseJsonPath;
protected BYOKRemoteConfig(String id, Properties p, Logger log) throws UtilsException {
if(p==null || p.isEmpty()) {
log.error("Properties is null");
throw new UtilsException("Properties '"+BYOKCostanti.PROPERTY_PREFIX+id+".*' undefined");
}
this.httpEndpoint = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_ENDPOINT, true);
this.httpMethod = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_METHOD, true);
initHttpHeader(p);
this.httpPayloadPath = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_PAYLOAD_PATH, false);
this.httpPayloadInLine = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_PAYLOAD_INLINE, false);
this.httpUsername = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_USERNAME, false);
this.httpPassword = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_PASSWORD, false);
this.httpConnectionTimeout = BYOKConfig.getIntegerProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_CONNECTION_TIMEOUT, false);
this.httpReadTimeout = BYOKConfig.getIntegerProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_READ_TIMEOUT, false);
this.https = BYOKConfig.getBooleanProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS, false, false);
this.httpsHostnameVerifier = BYOKConfig.getBooleanProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_VERIFICA_HOSTNAME, false, this.https);
this.httpsServerAuth = BYOKConfig.getBooleanProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_SERVER, false, this.https);
this.httpsServerAuthTrustStorePath = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_SERVER_TRUSTSTORE_PATH, false);
this.httpsServerAuthTrustStoreType = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_SERVER_TRUSTSTORE_TYPE, this.httpsServerAuth);
this.httpsServerAuthTrustStorePassword = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_SERVER_TRUSTSTORE_PASSWORD, false);
this.httpsServerAuthTrustStoreCrls = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_SERVER_CRLS, false);
this.httpsServerAuthTrustStoreOcspPolicy = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_SERVER_OCSP_POLICY, false);
this.httpsClientAuth = BYOKConfig.getBooleanProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_CLIENT, false, false);
this.httpsClientAuthKeyStorePath = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_CLIENT_KEYSTORE_PATH, false);
this.httpsClientAuthKeyStoreType = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_CLIENT_KEYSTORE_TYPE, this.httpsClientAuth);
this.httpsClientAuthKeyStorePassword = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_CLIENT_KEYSTORE_PASSWORD, false);
this.httpsClientAuthKeyAlias = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_CLIENT_KEY_ALIAS, false);
this.httpsClientAuthKeyPassword = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTPS_AUTENTICAZIONE_CLIENT_KEY_PASSWORD, false);
this.httpResponseBase64Encoded = BYOKConfig.getBooleanProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_RESPONSE_BASE64_ENCODED, false, false);
this.httpResponseHexEncoded = BYOKConfig.getBooleanProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_RESPONSE_HEX_ENCODED, false, false);
this.httpResponseJsonPath = BYOKConfig.getProperty(id, p, BYOKCostanti.PROPERTY_SUFFIX_HTTP_RESPONSE_JSON_PATH, false);
}
private void initHttpHeader(Properties p) {
this.httpHeaders = new HashMap<>();
Enumeration<?> enKeys = p.keys();
while (enKeys.hasMoreElements()) {
Object object = enKeys.nextElement();
if(object instanceof String) {
String key = (String) object;
if(key.startsWith(BYOKCostanti.PROPERTY_SUFFIX_HTTP_HEADER) && key.length()>BYOKCostanti.PROPERTY_SUFFIX_HTTP_HEADER.length()) {
String name = key.substring(BYOKCostanti.PROPERTY_SUFFIX_HTTP_HEADER.length());
String value = p.getProperty(key);
this.httpHeaders.put(name, value);
}
}
}
}
public String getHttpEndpoint() {
return this.httpEndpoint;
}
public String getHttpMethod() {
return this.httpMethod;
}
public Map<String, String> getHttpHeaders() {
return this.httpHeaders;
}
public String getHttpPayloadInLine() {
return this.httpPayloadInLine;
}
public String getHttpPayloadPath() {
return this.httpPayloadPath;
}
public String getHttpUsername() {
return this.httpUsername;
}
public String getHttpPassword() {
return this.httpPassword;
}
public Integer getHttpConnectionTimeout() {
return this.httpConnectionTimeout;
}
public Integer getHttpReadTimeout() {
return this.httpReadTimeout;
}
public boolean isHttps() {
return this.https;
}
public boolean isHttpsHostnameVerifier() {
return this.httpsHostnameVerifier;
}
public boolean isHttpsServerAuth() {
return this.httpsServerAuth;
}
public String getHttpsServerAuthTrustStorePath() {
return this.httpsServerAuthTrustStorePath;
}
public String getHttpsServerAuthTrustStoreType() {
return this.httpsServerAuthTrustStoreType;
}
public String getHttpsServerAuthTrustStorePassword() {
return this.httpsServerAuthTrustStorePassword;
}
public String getHttpsServerAuthTrustStoreCrls() {
return this.httpsServerAuthTrustStoreCrls;
}
public String getHttpsServerAuthTrustStoreOcspPolicy() {
return this.httpsServerAuthTrustStoreOcspPolicy;
}
public boolean isHttpsClientAuth() {
return this.httpsClientAuth;
}
public String getHttpsClientAuthKeyStorePath() {
return this.httpsClientAuthKeyStorePath;
}
public String getHttpsClientAuthKeyStoreType() {
return this.httpsClientAuthKeyStoreType;
}
public String getHttpsClientAuthKeyStorePassword() {
return this.httpsClientAuthKeyStorePassword;
}
public String getHttpsClientAuthKeyAlias() {
return this.httpsClientAuthKeyAlias;
}
public String getHttpsClientAuthKeyPassword() {
return this.httpsClientAuthKeyPassword;
}
public boolean isHttpResponseBase64Encoded() {
return this.httpResponseBase64Encoded;
}
public boolean isHttpResponseHexEncoded() {
return this.httpResponseHexEncoded;
}
public String getHttpResponseJsonPath() {
return this.httpResponseJsonPath;
}
}