Renaming openecomp to onap
[aai/data-router.git] / src / main / java / org / openecomp / datarouter / util / client / NoAuthRestClient.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23 package org.openecomp.datarouter.util.client;
24
25 import java.util.Arrays;
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29
30 import javax.ws.rs.core.MediaType;
31
32 import org.apache.camel.Exchange;
33 import org.apache.camel.component.http.HttpMessage;
34 import org.apache.camel.Message;
35 import org.openecomp.cl.api.Logger;
36 import org.openecomp.cl.eelf.LoggerFactory;
37 import org.openecomp.cl.mdc.MdcContext;
38 import org.openecomp.datarouter.logging.DataRouterMsgs;
39 import org.openecomp.datarouter.util.AaiUiSvcPolicyUtil;
40 import org.openecomp.datarouter.util.NodeUtils;
41 import org.openecomp.datarouter.util.RouterServiceUtil;
42 import org.onap.aai.restclient.client.Headers;
43 import org.onap.aai.restclient.client.OperationResult;
44 import org.onap.aai.restclient.client.RestClient;
45 import org.onap.aai.restclient.enums.RestAuthenticationMode;
46 import org.slf4j.MDC;
47
48 import org.springframework.http.HttpStatus;
49
50 import org.onap.aai.restclient.rest.HttpUtil;
51 import com.fasterxml.jackson.databind.JsonNode;
52
53 public class NoAuthRestClient implements SvcRoutingRestClient {
54
55   private RestClient restClient;
56   
57   private String host;
58   private String port;
59   private String originUrl;
60   private String targetUri;
61   private JsonNode targetPayload;
62   private Logger logger;
63   private Logger auditLogger;
64   
65   public NoAuthRestClient(int connectTimeOut, int readTimeOut) {
66     LoggerFactory loggerFactoryInstance = LoggerFactory.getInstance();
67     logger = loggerFactoryInstance.getLogger(NoAuthRestClient.class.getName());
68     auditLogger = loggerFactoryInstance.getAuditLogger(NoAuthRestClient.class.getName());
69     restClient = new RestClient().authenticationMode(RestAuthenticationMode.HTTP_NOAUTH)
70         .connectTimeoutMs(connectTimeOut).readTimeoutMs(readTimeOut);
71   }
72   
73
74   private OperationResult getResults(String url, JsonNode payload){
75     Map<String, List<String>> headers = new HashMap<>();
76     headers.put(Headers.FROM_APP_ID, Arrays.asList("Synapse"));
77     headers.put(Headers.TRANSACTION_ID, Arrays.asList(MDC.get(MdcContext.MDC_REQUEST_ID)));
78     return this.getRestClient().post(url, payload.asText(), headers, MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE);
79   }
80   
81   public final void handleRequest (String host, String port, Exchange exchange) throws Exception {
82     RouterServiceUtil.setMdcContext(exchange);
83     Message message = exchange.getIn();
84     String body = message.getBody(String.class);
85     OperationResult result = new OperationResult();
86     
87     this.setHost(host);
88     this.setPort(port);
89     
90     this.setOriginUrl(message.getHeader(Exchange.HTTP_URL).toString());
91     if (body != null && body.length() != 0) {
92       JsonNode node = NodeUtils.convertJsonStrToJsonNode(body);
93       this.setTargetPayload(AaiUiSvcPolicyUtil.getOriginPayload(node));
94       this.setTargetUri(AaiUiSvcPolicyUtil.getTargetUri(node));
95     } 
96
97     if ( this.getTargetPayload() == null || this.getTargetUri() == null){
98       logger.error(DataRouterMsgs.INVALID_ORIGIN_PAYLOAD, body);
99       result.setResultCode(HttpStatus.BAD_REQUEST.value());
100       result.setFailureCause("Invalid payload");
101     }
102     
103     String targetUrl = "http://" + host + ":" + port + "/" + this.targetUri;
104     auditLogger.info(DataRouterMsgs.ROUTING_FROM_TO, this.getOriginUrl(), targetUrl);
105     long startTimeInMs = System.currentTimeMillis();
106
107     result = this.getResults(targetUrl, targetPayload);
108
109     long targetMsOpTime = (System.currentTimeMillis() - startTimeInMs);
110     auditLogger.info(DataRouterMsgs.OP_TIME, "Target service at "+ targetUrl, String.valueOf(targetMsOpTime));
111     
112     int rc = result.getResultCode();
113     String resultStr = "";
114     if (HttpUtil.isHttpResponseClassSuccess(rc)) {
115       resultStr = result.getResult();
116     } else {
117       resultStr = result.getFailureCause();
118     }
119     
120     logger.debug(DataRouterMsgs.ROUTING_RESPONSE, targetUrl, result.toString());
121     exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, rc);
122     exchange.getOut().setBody(resultStr);
123   }
124
125
126   /* (non-Javadoc)
127    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#getHost()
128    */
129   @Override
130   public String getHost() {
131     return host;
132   }
133
134   /* (non-Javadoc)
135    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#setHost(java.lang.String)
136    */
137   @Override
138   public void setHost(String host) {
139     this.host = host;
140   }
141
142
143   /* (non-Javadoc)
144    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#getPort()
145    */
146   @Override
147   public String getPort() {
148     return port;
149   }
150
151
152   /* (non-Javadoc)
153    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#setPort(java.lang.String)
154    */
155   @Override
156   public void setPort(String port) {
157     this.port = port;
158   }
159
160
161   /* (non-Javadoc)
162    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#getTargetUri()
163    */
164   @Override
165   public String getTargetUri() {
166     return targetUri;
167   }
168
169
170   /* (non-Javadoc)
171    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#setTargetUri(java.lang.String)
172    */
173   @Override
174   public void setTargetUri(String targetUri) {
175     this.targetUri = targetUri;
176   }
177
178
179   /* (non-Javadoc)
180    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#getTargetPayload()
181    */
182   @Override
183   public JsonNode getTargetPayload() {
184     return targetPayload;
185   }
186
187
188   /* (non-Javadoc)
189    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#setTargetPayload(com.fasterxml.jackson.databind.JsonNode)
190    */
191   @Override
192   public void setTargetPayload(JsonNode targetPayload) {
193     this.targetPayload = targetPayload;
194   }
195
196
197   /* (non-Javadoc)
198    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#getRestClient()
199    */
200   @Override
201   public RestClient getRestClient() {
202     return restClient;
203   }
204   
205   /* (non-Javadoc)
206    * @see org.openecomp.datarouter.util.client.SvcRoutingRestClient#setRestClient()
207    */
208   @Override
209   public void setRestClient(RestClient client) {
210     this.restClient = client;
211   }
212
213
214   public String getOriginUrl() {
215     return originUrl;
216   }
217
218
219   public void setOriginUrl(String originUrl) {
220     this.originUrl = originUrl;
221   }
222  
223
224 }