aboutsummaryrefslogtreecommitdiffstats
path: root/certServiceClient/src/main
diff options
context:
space:
mode:
authorTomasz Wrobel <tomasz.wrobel@nokia.com>2020-02-20 16:45:12 +0100
committerTomasz Wrobel <tomasz.wrobel@nokia.com>2020-02-28 11:41:26 +0100
commite78bfe13bb52196ad84e68f4d4aa476aad1b6c52 (patch)
treed913c9049a18f6cca8446319bd43b4455319d122 /certServiceClient/src/main
parent9e692d47d60d47c3668ba3281fdca61921a92fcf (diff)
Add HttpClient
Issue-ID: AAF-996 Signed-off-by: Tomasz Wrobel <tomasz.wrobel@nokia.com> Change-Id: I3ebb0ea88ef1a72c16064fd9a1931943b57410d8
Diffstat (limited to 'certServiceClient/src/main')
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java15
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java4
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java1
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/Base64Coder.java29
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/CloseableHttpClientProvider.java40
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/HttpClient.java109
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/CertServiceApiResponseException.java42
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/HttpClientException.java37
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/CertServiceResponse.java44
-rw-r--r--certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/ErrorCertServiceResponse.java40
10 files changed, 358 insertions, 3 deletions
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java
index 3e8f73eb..59d0c032 100644
--- a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java
@@ -28,12 +28,16 @@ import org.onap.aaf.certservice.client.configuration.factory.ClientConfiguration
import org.onap.aaf.certservice.client.configuration.factory.CsrConfigurationFactory;
import org.onap.aaf.certservice.client.configuration.model.ClientConfiguration;
import org.onap.aaf.certservice.client.configuration.model.CsrConfiguration;
+import org.onap.aaf.certservice.client.httpclient.CloseableHttpClientProvider;
+import org.onap.aaf.certservice.client.httpclient.HttpClient;
+import org.onap.aaf.certservice.client.httpclient.model.CertServiceResponse;
import java.security.KeyPair;
import static org.onap.aaf.certservice.client.api.ExitCode.SUCCESS_EXIT_CODE;
import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.KEY_SIZE;
import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.RSA_ENCRYPTION_ALGORITHM;
+import static org.onap.aaf.certservice.client.common.Base64Coder.encode;
public class CertServiceClient {
private AppExitHandler appExitHandler;
@@ -49,7 +53,16 @@ public class CertServiceClient {
CsrConfiguration csrConfiguration = new CsrConfigurationFactory(new EnvsForCsr()).create();
KeyPair keyPair = keyPairFactory.create();
CsrFactory csrFactory = new CsrFactory(csrConfiguration);
- String csr = csrFactory.createEncodedCsr(keyPair);
+
+ CloseableHttpClientProvider provider = new CloseableHttpClientProvider(clientConfiguration.getRequestTimeout());
+ HttpClient httpClient = new HttpClient(provider, clientConfiguration.getUrlToCertService());
+
+ CertServiceResponse certServiceData =
+ httpClient.retrieveCertServiceData(
+ clientConfiguration.getCaName(),
+ csrFactory.createEncodedCsr(keyPair),
+ encode(keyPair.getPrivate().toString()));
+
} catch (ExitableException e) {
appExitHandler.exit(e.applicationExitCode());
}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java
index 45f2c400..b72a0e2d 100644
--- a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java
@@ -23,7 +23,9 @@ public enum ExitCode {
CLIENT_CONFIGURATION_EXCEPTION(1),
CSR_CONFIGURATION_EXCEPTION(2),
KEY_PAIR_GENERATION_EXCEPTION(3),
- CSR_GENERATION_EXCEPTION(4);
+ CSR_GENERATION_EXCEPTION(4),
+ CERT_SERVICE_API_CONNECTION_EXCEPTION(5),
+ HTTP_CLIENT_EXCEPTION(6);
private final int value;
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java
index 51981a48..f9166c96 100644
--- a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java
@@ -26,6 +26,5 @@ public abstract class ExitableException extends Exception {
public ExitableException(String message) {
super(message);
}
-
public abstract int applicationExitCode();
}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/Base64Coder.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/Base64Coder.java
new file mode 100644
index 00000000..c066187d
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/Base64Coder.java
@@ -0,0 +1,29 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.common;
+
+import org.bouncycastle.util.encoders.Base64;
+
+public class Base64Coder {
+ public static String encode(String string){
+ return new String(Base64.encode(string.getBytes()));
+ }
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/CloseableHttpClientProvider.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/CloseableHttpClientProvider.java
new file mode 100644
index 00000000..ff29a14d
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/CloseableHttpClientProvider.java
@@ -0,0 +1,40 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.httpclient;
+
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+
+public class CloseableHttpClientProvider {
+
+ private final int timeout;
+
+ public CloseableHttpClientProvider(int timeout) {
+ this.timeout = timeout;
+ }
+
+ public CloseableHttpClient getClient() {
+ RequestConfig config =
+ RequestConfig.custom().setConnectionRequestTimeout(timeout).build();
+ return HttpClientBuilder.create().setDefaultRequestConfig(config).build();
+ }
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/HttpClient.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/HttpClient.java
new file mode 100644
index 00000000..603d5848
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/HttpClient.java
@@ -0,0 +1,109 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.httpclient;
+
+import com.google.gson.Gson;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.onap.aaf.certservice.client.httpclient.exception.CertServiceApiResponseException;
+import org.onap.aaf.certservice.client.httpclient.exception.HttpClientException;
+import org.onap.aaf.certservice.client.httpclient.model.CertServiceResponse;
+import org.onap.aaf.certservice.client.httpclient.model.ErrorCertServiceResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public class HttpClient {
+
+ private static final String CSR_HEADER_NAME = "CSR";
+ private static final String PK_HEADER_NAME = "PK";
+ private static final String CHARSET_UTF_8 = "UTF-8";
+
+ private final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class);
+
+ private final Gson gson = new Gson();
+ private final CloseableHttpClientProvider httpClientProvider;
+ private final String certServiceAddress;
+
+ public HttpClient(CloseableHttpClientProvider httpClientProvider, String certServiceAddress) {
+ this.httpClientProvider = httpClientProvider;
+ this.certServiceAddress = certServiceAddress;
+ }
+
+ public CertServiceResponse retrieveCertServiceData(String caName, String csr, String encodedPk)
+ throws CertServiceApiResponseException, HttpClientException {
+
+ try (CloseableHttpClient httpClient = httpClientProvider.getClient()) {
+ HttpResponse httpResponse = httpClient.execute(createHttpPayload(caName, csr, encodedPk));
+ return extractCertServiceResponse(httpResponse);
+
+ } catch (IOException e) {
+ LOGGER.error(String.format("Failed on communication between client and API for URL: '%s' . Exception message: '%s'",
+ certServiceAddress + caName, e.getMessage()));
+ throw new HttpClientException(e);
+ }
+ }
+
+ private int getStatusCode(HttpResponse httpResponse) {
+ return httpResponse.getStatusLine().getStatusCode();
+ }
+
+ private CertServiceResponse extractCertServiceResponse(HttpResponse httpResponse)
+ throws CertServiceApiResponseException, IOException {
+ int httpResponseCode = getStatusCode(httpResponse);
+ if (HttpStatus.SC_OK != httpResponseCode) {
+ LOGGER.error(String.format("Error on API response. Response Code: %d", httpResponseCode));
+ throw generateApiResponseException(httpResponse);
+ }
+ String jsonResponse = getStringResponse(httpResponse.getEntity());
+ return gson.fromJson(jsonResponse, CertServiceResponse.class);
+ }
+
+ private String getStringResponse(HttpEntity httpEntity) throws IOException {
+ return EntityUtils.toString(httpEntity, CHARSET_UTF_8);
+ }
+
+ private HttpGet createHttpPayload(String caName, String csr, String pk) {
+ String url = certServiceAddress + caName;
+ HttpGet httpGet = new HttpGet(url);
+ httpGet.addHeader(CSR_HEADER_NAME, csr);
+ httpGet.addHeader(PK_HEADER_NAME, pk);
+ return httpGet;
+ }
+
+
+ private CertServiceApiResponseException generateApiResponseException(HttpResponse httpResponse) throws IOException {
+ String stringResponse = getStringResponse(httpResponse.getEntity());
+ ErrorCertServiceResponse errorCertServiceResponse =
+ gson.fromJson(stringResponse, ErrorCertServiceResponse.class);
+
+ String messageFromApi = errorCertServiceResponse.getMessage();
+ String path = errorCertServiceResponse.getPath();
+ int httpResponseCode = getStatusCode(httpResponse);
+
+ return new CertServiceApiResponseException(certServiceAddress + path, httpResponseCode, messageFromApi);
+ }
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/CertServiceApiResponseException.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/CertServiceApiResponseException.java
new file mode 100644
index 00000000..40470af3
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/CertServiceApiResponseException.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.httpclient.exception;
+
+import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitableException;
+
+public class CertServiceApiResponseException extends ExitableException {
+ private final ExitCode EXIT_CODE = ExitCode.CERT_SERVICE_API_CONNECTION_EXCEPTION;
+
+ public CertServiceApiResponseException(String url, int responseCode, String messageFromAPI) {
+
+ super(String.format("Request failed for URL '%s'. Response code: %d . Message from API: %s",
+ url,
+ responseCode,
+ messageFromAPI));
+ }
+
+ @Override
+ public int applicationExitCode() {
+ return EXIT_CODE.getValue();
+ }
+
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/HttpClientException.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/HttpClientException.java
new file mode 100644
index 00000000..d6fb1461
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/HttpClientException.java
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.httpclient.exception;
+
+import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitableException;
+
+public class HttpClientException extends ExitableException {
+ private final ExitCode EXIT_CODE = ExitCode.HTTP_CLIENT_EXCEPTION;
+
+ public HttpClientException(Throwable e) {
+ super(e);
+ }
+
+ @Override
+ public int applicationExitCode() {
+ return EXIT_CODE.getValue();
+ }
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/CertServiceResponse.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/CertServiceResponse.java
new file mode 100644
index 00000000..4ca17999
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/CertServiceResponse.java
@@ -0,0 +1,44 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.httpclient.model;
+
+import java.util.Collections;
+import java.util.List;
+
+public class CertServiceResponse {
+
+ private final List<String> certificateChain;
+ private final List<String> trustedCertificates;
+
+ public CertServiceResponse(List<String> certificateChain, List<String> trustedCertificates) {
+ this.certificateChain = certificateChain;
+ this.trustedCertificates = trustedCertificates;
+ }
+
+ public List<String> getCertificateChain() {
+ return Collections.unmodifiableList(certificateChain);
+ }
+
+ public List<String> getTrustedCertificates() {
+ return Collections.unmodifiableList(trustedCertificates);
+ }
+
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/ErrorCertServiceResponse.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/ErrorCertServiceResponse.java
new file mode 100644
index 00000000..6fe99ce5
--- /dev/null
+++ b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/ErrorCertServiceResponse.java
@@ -0,0 +1,40 @@
+/*
+ * ============LICENSE_START=======================================================
+ * aaf-certservice-client
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.client.httpclient.model;
+
+public class ErrorCertServiceResponse {
+
+ private final String message;
+ private final String path;
+
+ public ErrorCertServiceResponse(String message, String path) {
+ this.message = message;
+ this.path = path;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public String getPath() {
+ return path;
+ }
+}