Renaming openecomp to onap
[aai/data-router.git] / src / main / java / org / onap / aai / datarouter / util / client / NoAuthRestClient.java
diff --git a/src/main/java/org/onap/aai/datarouter/util/client/NoAuthRestClient.java b/src/main/java/org/onap/aai/datarouter/util/client/NoAuthRestClient.java
new file mode 100644 (file)
index 0000000..91bd7d7
--- /dev/null
@@ -0,0 +1,222 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017 Amdocs
+ * ================================================================================
+ * 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.datarouter.util.client;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.cl.mdc.MdcContext;
+import org.onap.aai.datarouter.logging.DataRouterMsgs;
+import org.onap.aai.datarouter.util.AaiUiSvcPolicyUtil;
+import org.onap.aai.datarouter.util.NodeUtils;
+import org.onap.aai.datarouter.util.RouterServiceUtil;
+import org.onap.aai.restclient.client.Headers;
+import org.onap.aai.restclient.client.OperationResult;
+import org.onap.aai.restclient.client.RestClient;
+import org.onap.aai.restclient.enums.RestAuthenticationMode;
+import org.onap.aai.restclient.rest.HttpUtil;
+import org.slf4j.MDC;
+import org.springframework.http.HttpStatus;
+
+import javax.ws.rs.core.MediaType;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class NoAuthRestClient implements SvcRoutingRestClient {
+
+    private RestClient restClient;
+
+    private String host;
+    private String port;
+    private String originUrl;
+    private String targetUri;
+    private JsonNode targetPayload;
+    private Logger logger;
+    private Logger auditLogger;
+
+    public NoAuthRestClient(int connectTimeOut, int readTimeOut) {
+        LoggerFactory loggerFactoryInstance = LoggerFactory.getInstance();
+        logger = loggerFactoryInstance.getLogger(NoAuthRestClient.class.getName());
+        auditLogger = loggerFactoryInstance.getAuditLogger(NoAuthRestClient.class.getName());
+        restClient = new RestClient().authenticationMode(RestAuthenticationMode.HTTP_NOAUTH)
+                .connectTimeoutMs(connectTimeOut).readTimeoutMs(readTimeOut);
+    }
+
+
+    private OperationResult getResults(String url, JsonNode payload) {
+        Map<String, List<String>> headers = new HashMap<>();
+        headers.put(Headers.FROM_APP_ID, Arrays.asList("Synapse"));
+        headers.put(Headers.TRANSACTION_ID, Arrays.asList(MDC.get(MdcContext.MDC_REQUEST_ID)));
+        return this.getRestClient().post(url, payload.asText(),
+                                         headers, MediaType.APPLICATION_JSON_TYPE,
+                                         MediaType.APPLICATION_JSON_TYPE);
+    }
+
+    public final void handleRequest(String host, String port, Exchange exchange) throws Exception {
+        RouterServiceUtil.setMdcContext(exchange);
+        Message message = exchange.getIn();
+        String body = message.getBody(String.class);
+        OperationResult result = new OperationResult();
+
+        this.setHost(host);
+        this.setPort(port);
+
+        this.setOriginUrl(message.getHeader(Exchange.HTTP_URL).toString());
+        if (body != null && body.length() != 0) {
+            JsonNode node = NodeUtils.convertJsonStrToJsonNode(body);
+            this.setTargetPayload(AaiUiSvcPolicyUtil.getOriginPayload(node));
+            this.setTargetUri(AaiUiSvcPolicyUtil.getTargetUri(node));
+        }
+
+        if (this.getTargetPayload() == null || this.getTargetUri() == null) {
+            logger.error(DataRouterMsgs.INVALID_ORIGIN_PAYLOAD, body);
+            result.setResultCode(HttpStatus.BAD_REQUEST.value());
+            result.setFailureCause("Invalid payload");
+        }
+
+        String targetUrl = "http://" + host + ":" + port + "/" + this.targetUri;
+        auditLogger.info(DataRouterMsgs.ROUTING_FROM_TO, this.getOriginUrl(), targetUrl);
+        long startTimeInMs = System.currentTimeMillis();
+
+        result = this.getResults(targetUrl, targetPayload);
+
+        long targetMsOpTime = System.currentTimeMillis() - startTimeInMs;
+        auditLogger.info(DataRouterMsgs.OP_TIME, "Target service at " + targetUrl, String.valueOf(targetMsOpTime));
+
+        int rc = result.getResultCode();
+        String resultStr;
+        if (HttpUtil.isHttpResponseClassSuccess(rc)) {
+            resultStr = result.getResult();
+        } else {
+            resultStr = result.getFailureCause();
+        }
+
+        logger.debug(DataRouterMsgs.ROUTING_RESPONSE, targetUrl, result.toString());
+        exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, rc);
+        exchange.getOut().setBody(resultStr);
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#getHost()
+     */
+    @Override
+    public String getHost() {
+        return host;
+    }
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#setHost(java.lang.String)
+     */
+    @Override
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#getPort()
+     */
+    @Override
+    public String getPort() {
+        return port;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#setPort(java.lang.String)
+     */
+    @Override
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#getTargetUri()
+     */
+    @Override
+    public String getTargetUri() {
+        return targetUri;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#setTargetUri(java.lang.String)
+     */
+    @Override
+    public void setTargetUri(String targetUri) {
+        this.targetUri = targetUri;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#getTargetPayload()
+     */
+    @Override
+    public JsonNode getTargetPayload() {
+        return targetPayload;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client
+     * .SvcRoutingRestClient#setTargetPayload(com.fasterxml.jackson.databind.JsonNode)
+     */
+    @Override
+    public void setTargetPayload(JsonNode targetPayload) {
+        this.targetPayload = targetPayload;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#getRestClient()
+     */
+    @Override
+    public RestClient getRestClient() {
+        return restClient;
+    }
+
+    /* (non-Javadoc)
+     * @see org.onap.aai.datarouter.util.client.SvcRoutingRestClient#setRestClient()
+     */
+    @Override
+    public void setRestClient(RestClient client) {
+        this.restClient = client;
+    }
+
+
+    public String getOriginUrl() {
+        return originUrl;
+    }
+
+
+    public void setOriginUrl(String originUrl) {
+        this.originUrl = originUrl;
+    }
+
+}