From 1faf201e8608dfa4d7af3460fd3d1fc7ebec398b Mon Sep 17 00:00:00 2001 From: talasila Date: Tue, 7 Feb 2017 11:47:55 -0500 Subject: Initial OpenECOMP Portal SDK commit Change-Id: I66a3491600a4b9ea241128dc29267eed6a78ed76 Signed-off-by: talasila --- .../core/onboarding/rest/RestWebServiceClient.java | 178 +++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 ecomp-sdk/thirdparty/src/main/java/org/openecomp/portalsdk/core/onboarding/rest/RestWebServiceClient.java (limited to 'ecomp-sdk/thirdparty/src/main/java/org/openecomp/portalsdk/core/onboarding/rest/RestWebServiceClient.java') diff --git a/ecomp-sdk/thirdparty/src/main/java/org/openecomp/portalsdk/core/onboarding/rest/RestWebServiceClient.java b/ecomp-sdk/thirdparty/src/main/java/org/openecomp/portalsdk/core/onboarding/rest/RestWebServiceClient.java new file mode 100644 index 00000000..fc5ce872 --- /dev/null +++ b/ecomp-sdk/thirdparty/src/main/java/org/openecomp/portalsdk/core/onboarding/rest/RestWebServiceClient.java @@ -0,0 +1,178 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * 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. + * ================================================================================ + */ +package org.openecomp.portalsdk.core.onboarding.rest; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.UUID; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.openecomp.portalsdk.core.onboarding.crossapi.PortalApiConstants; +import org.openecomp.portalsdk.core.onboarding.crossapi.PortalApiProperties; + +public class RestWebServiceClient { + + private final Log logger = LogFactory.getLog(RestWebServiceClient.class); + + /** + * Singleton instance + */ + private static RestWebServiceClient instance = null; + + /** + * Constructor is private. Clients should obtain an instance via + * getInstance(). + */ + private RestWebServiceClient() { + } + + /** + * Gets the static instance of RestWebServiceClient; creates it if + * necessary. Synchronized to be thread safe. + * + * @return Static instance of RestWebServiceClient. + */ + public static synchronized RestWebServiceClient getInstance() { + if (instance == null) + instance = new RestWebServiceClient(); + return instance; + } + + /** + * Convenience method that fetches the URL for the Portal REST API endpoint + * and the application UEB key, then calls + * {@link #get(String, String, String, String, String, String, String)} to + * access the Portal's REST endpoint. + * + * @param restPath + * Partial path of the endpoint; e.g., "/specialRestService" + * @param userId + * userId for the user originating the request + * @param appName + * Application Name for logging. + * @param requestId + * 128-bit UUID value to uniquely identify the transaction. + * @param appUserName + * REST API user name for Portal to authenticate the request + * @param appPassword + * REST API password (in the clear, not encrypted) for Portal to + * authenticate the request + * @return Content from REST endpoint + * @throws Exception + * on any failure + */ + public String getPortalContent(String restPath, String userId, String appName, String requestId, String appUserName, + String appPassword) throws Exception { + String restURL = PortalApiProperties.getProperty(PortalApiConstants.ECOMP_REST_URL); + if (restURL == null) { + // should never happen + String msg = "getPortalContent: failed to get property " + PortalApiConstants.ECOMP_REST_URL; + logger.error(msg); + throw new Exception(msg); + } + String appUebKey = PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY); + if (appUebKey == null) { + // should never happen + String msg = "getPortalContent: failed to get property " + PortalApiConstants.UEB_APP_KEY; + logger.error(msg); + throw new Exception(msg); + } + final String restEndpointUrl = restURL + restPath; + return get(restEndpointUrl, userId, appName, requestId, appUebKey, appUserName, appPassword); + } + + /** + * Makes a call to a Portal REST API using the specified URL and parameters. + * + * @param url + * Complete URL of the REST endpoint. + * @param loginId + * User that it should be fetching the data + * @param appName + * Application name for logging; if null or empty, defaulted to + * Unknown. + * @param requestId + * 128-bit UUID value to uniquely identify the transaction; if + * null or empty, one is generated. + * @param appUebKey + * Unique key for the application, used by Portal to authenticate + * the request + * @param appUserName + * REST API user name, used by Portal to authenticate the request + * @param appPassword + * REST API password, used by Portal to authenticate the request + * @return Content from REST endpoint + * @throws Exception + * On any failure; e.g., unknown host. + */ + public String get(String url, String loginId, String appName, String requestId, String appUebKey, + String appUserName, String appPassword) throws Exception { + + logger.debug("RestWebServiceClient.get (" + url + ") operation is started."); + if (appName == null || appName.trim().length() == 0) + appName = "Unknown"; + if (requestId == null || requestId.trim().length() == 0) + requestId = UUID.randomUUID().toString(); + + URL obj = new URL(url); + // Create the connection object + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestMethod("GET"); + con.setConnectTimeout(3000); + con.setReadTimeout(8000); + + // add request header + con.setRequestProperty("uebkey", appUebKey); + con.setRequestProperty("username", appUserName); + con.setRequestProperty("password", appPassword); + con.setRequestProperty("LoginId", loginId); + con.setRequestProperty("user-agent", appName); + con.setRequestProperty("X-ECOMP-RequestID", requestId); + + int responseCode = con.getResponseCode(); + logger.debug("get: received response code '" + responseCode + "' while getting the '" + url + "' for user: " + + loginId); + + StringBuffer sb = new StringBuffer(); + BufferedReader in = null; + try { + in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); + String inputLine = null; + while ((inputLine = in.readLine()) != null) + sb.append(inputLine); + } finally { + try { + if (in != null) + in.close(); + } catch (IOException ex) { + logger.error("get: failed to close reader", ex); + } + } + + final String response = sb.toString(); + if (logger.isDebugEnabled()) + logger.debug("get: url " + url + " yielded " + response); + return response; + } +} -- cgit 1.2.3-korg