From c742eb3dcaa8b98a231cdd0a2b9c5c93df69d164 Mon Sep 17 00:00:00 2001 From: Niharika Sharma Date: Fri, 14 Oct 2022 14:01:39 -0400 Subject: Fixed AAI ModelLoader fails to connect to aai-babel Issue-ID: AAI-3533 Signed-off-by: Niharika Sharma Change-Id: I121263b0be39b13109782e0b5db02d3a36650d75 (cherry picked from commit d132185f972de61328bef9d511b875c0eefd9b1c) --- pom.xml | 274 ++++++++++----------- .../aai/modelloader/config/ModelLoaderConfig.java | 14 +- .../aai/modelloader/restclient/AaiRestClient.java | 25 +- .../restclient/HttpsBabelServiceClient.java | 46 ++-- .../restclient/TestBabelServiceClient.java | 15 ++ 5 files changed, 205 insertions(+), 169 deletions(-) diff --git a/pom.xml b/pom.xml index d9946df..226429d 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ ============LICENSE_END========================================================= --> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 @@ -60,7 +60,7 @@ 1.4.1 1.2.3 - 0.28.0 + 0.39.0 1.0.0 ${project.build.directory}/${project.artifactId}-${project.version}-build/ onap @@ -224,10 +224,10 @@ org.springframework.boot spring-boot-starter-web - - org.springframework.boot - spring-boot-starter-tomcat - + + org.springframework.boot + spring-boot-starter-tomcat + @@ -458,143 +458,143 @@ whole section --> - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - - **/gen/** - **/generated-sources/** - **/yang-gen/** - **/pax/** - - - - - - pre-unit-test - - prepare-agent - - - - ${project.build.directory}/code-coverage/jacoco-ut.exec - - surefireArgLine - - - - - post-unit-test - test - - report - - - - ${project.build.directory}/code-coverage/jacoco-ut.exec - - ${project.reporting.outputDirectory}/jacoco-ut - - - - pre-integration-test - pre-integration-test - - prepare-agent - - - - ${project.build.directory}/code-coverage/jacoco-it.exec - - failsafeArgLine - - - - - post-integration-test - post-integration-test - - report - - - - ${project.build.directory}/code-coverage/jacoco-it.exec - - ${project.reporting.outputDirectory}/jacoco-it - - - - default-check - - check - - - ${project.build.directory}/code-coverage/jacoco-ut.exec - - - BUNDLE - - - LINE - COVEREDRATIO - ${jacoco.line.coverage.limit} - - - - - - - + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + + **/gen/** + **/generated-sources/** + **/yang-gen/** + **/pax/** + + + + + + pre-unit-test + + prepare-agent + + + + ${project.build.directory}/code-coverage/jacoco-ut.exec + + surefireArgLine + + + + + post-unit-test + test + + report + + + + ${project.build.directory}/code-coverage/jacoco-ut.exec + + ${project.reporting.outputDirectory}/jacoco-ut + + + + pre-integration-test + pre-integration-test + + prepare-agent + + + + ${project.build.directory}/code-coverage/jacoco-it.exec + + failsafeArgLine + + + + + post-integration-test + post-integration-test + + report + + + + ${project.build.directory}/code-coverage/jacoco-it.exec + + ${project.reporting.outputDirectory}/jacoco-it + + + + default-check + + check + + + ${project.build.directory}/code-coverage/jacoco-ut.exec + + + BUNDLE + + + LINE + COVEREDRATIO + ${jacoco.line.coverage.limit} + + + + + + + - org.apache.maven.plugins - maven-surefire-plugin - 3.0.0-M4 - - - ${surefireArgLine} - - - **/IT*.java - - + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M4 + + + ${surefireArgLine} + + + **/IT*.java + + - org.apache.maven.plugins - maven-failsafe-plugin - 3.0.0-M4 - - - - integration-tests - - integration-test - verify - - - - ${failsafeArgLine} - - - + org.apache.maven.plugins + maven-failsafe-plugin + 3.0.0-M4 + + + + integration-tests + + integration-test + verify + + + + ${failsafeArgLine} + + + - org.sonarsource.scanner.maven - sonar-maven-plugin - ${sonar.scanner.version} + org.sonarsource.scanner.maven + sonar-maven-plugin + ${sonar.scanner.version} diff --git a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java index adc58e5..f8c5d23 100644 --- a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java +++ b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java @@ -86,14 +86,14 @@ public class ModelLoaderConfig implements IConfiguration { protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER"; protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD"; protected static final String PROP_AAI_USE_GIZMO = PREFIX_AAI + "USE_GIZMO"; - + protected static final String PROP_AAI_USE_HTTPS = PREFIX_AAI + "USE_HTTPS"; protected static final String PROP_BABEL_BASE_URL = PREFIX_BABEL + "BASE_URL"; protected static final String PROP_BABEL_KEYSTORE_FILE = PREFIX_BABEL + SUFFIX_KEYSTORE_FILE; protected static final String PROP_BABEL_KEYSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_KEYSTORE_PASS; protected static final String PROP_BABEL_TRUSTSTORE_FILE = PREFIX_BABEL + SUFFIX_TRUSTSTORE_FILE; protected static final String PROP_BABEL_TRUSTSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_TRUSTSTORE_PASS; protected static final String PROP_BABEL_GENERATE_RESOURCE_URL = PREFIX_BABEL + "GENERATE_ARTIFACTS_URL"; - + protected static final String PROP_BABEL_USE_HTTPS = PREFIX_BABEL + "USE_HTTPS"; protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR"; protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator"); @@ -305,6 +305,16 @@ public class ModelLoaderConfig implements IConfiguration { return useGizmo != null && useGizmo.equalsIgnoreCase("true"); } + public boolean useHttpsWithAAI() { + String useHttps = get(PROP_AAI_USE_HTTPS); + return useHttps != null && useHttps.equalsIgnoreCase("true"); + } + + public boolean useHttpsWithBabel() { + String useHttps = get(PROP_BABEL_USE_HTTPS); + return useHttps != null && useHttps.equalsIgnoreCase("true"); + } + /** * @return password for AAI authentication that has been reverse-engineered from its obfuscated form. */ diff --git a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java index a2a4c5b..29c0c70 100644 --- a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java +++ b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java @@ -157,14 +157,23 @@ public class AaiRestClient { private RestClient setupClient() { RestClient restClient = new RestClient(); - // @formatter:off - restClient.validateServerHostname(false) - .validateServerCertChain(false) - .clientCertFile(config.getAaiKeyStorePath()) - .clientCertPassword(config.getAaiKeyStorePassword()) - .connectTimeoutMs(120000) - .readTimeoutMs(120000); - // @formatter:on + //Use certs only if SSL is enabled + if (config.useHttpsWithAAI()) + {// @formatter:off + restClient.validateServerHostname(false) + .validateServerCertChain(false) + .clientCertFile(config.getAaiKeyStorePath()) + .clientCertPassword(config.getAaiKeyStorePassword()) + .connectTimeoutMs(120000) + .readTimeoutMs(120000); + // @formatter:on + } + else { + restClient.validateServerHostname(false) + .validateServerCertChain(false) + .connectTimeoutMs(120000) + .readTimeoutMs(120000); + } if (useBasicAuth()) { restClient.authenticationMode(RestAuthenticationMode.SSL_BASIC); diff --git a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java index 805fe34..289015c 100644 --- a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java +++ b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java @@ -98,34 +98,36 @@ public class HttpsBabelServiceClient implements BabelServiceClient { this.config = config; logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Creating Babel Service client"); + //Initialize SSL Context only if SSL is enabled + if (config.useHttpsWithBabel()) { + SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL); + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM); + KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE); - SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL); - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM); - KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE); + String clientCertPassword = config.getBabelKeyStorePassword(); - String clientCertPassword = config.getBabelKeyStorePassword(); - - char[] pwd = null; - if (clientCertPassword != null) { - pwd = clientCertPassword.toCharArray(); - } + char[] pwd = null; + if (clientCertPassword != null) { + pwd = clientCertPassword.toCharArray(); + } - TrustManager[] trustManagers = getTrustManagers(); + TrustManager[] trustManagers = getTrustManagers(); - String clientCertFileName = config.getBabelKeyStorePath(); - if (clientCertFileName == null) { - ctx.init(null, trustManagers, null); - } else { - InputStream fin = Files.newInputStream(Paths.get(clientCertFileName)); - keyStore.load(fin, pwd); - kmf.init(keyStore, pwd); - ctx.init(kmf.getKeyManagers(), trustManagers, null); - } + String clientCertFileName = config.getBabelKeyStorePath(); + if (clientCertFileName == null) { + ctx.init(null, trustManagers, null); + } else { + InputStream fin = Files.newInputStream(Paths.get(clientCertFileName)); + keyStore.load(fin, pwd); + kmf.init(keyStore, pwd); + ctx.init(kmf.getKeyManagers(), trustManagers, null); + } - logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Initialised context"); + logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Initialised context"); - HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); - HttpsURLConnection.setDefaultHostnameVerifier((host, session) -> true); + HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); + HttpsURLConnection.setDefaultHostnameVerifier((host, session) -> true); + } client = Client.create(new DefaultClientConfig()); diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java index 4f99bfc..8da5f89 100644 --- a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java +++ b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java @@ -93,6 +93,21 @@ public class TestBabelServiceClient { assertThat(result.size(), is(equalTo(3))); } + @Test + public void testRestClientHttp() throws BabelServiceClientException, IOException, URISyntaxException { + Properties configProperties = new Properties(); + configProperties.put("ml.babel.USE_HTTPS", "false"); + configProperties.put("ml.babel.BASE_URL", "http://localhost:8080/"); + configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "generate"); + BabelServiceClient client = + new HttpsBabelServiceClientFactory().create(new ModelLoaderConfig(configProperties, ".")); + List result = + client.postArtifact(readBytesFromFile("compressedArtifacts/service-VscpaasTest-csar.csar"), + "service-Vscpass-Test", "1.0", "Test-Transaction-ID-BabelClient"); + assertThat(result.size(), is(equalTo(3))); + } + + private byte[] readBytesFromFile(String resourceFile) throws IOException, URISyntaxException { return Files.readAllBytes(Paths.get(ClassLoader.getSystemResource(resourceFile).toURI())); } -- cgit 1.2.3-korg