Null check for ClientResponse in PolicyUril.java
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / utils / EcompPortalUtils.java
index d471d90..2d4d214 100644 (file)
@@ -1,26 +1,42 @@
 /*-
- * ================================================================================
- * ECOMP Portal
- * ================================================================================
- * 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.
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the “License”);
+ * you may not use this software except in compliance with the License.
  * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
+ *             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.
- * ================================================================================
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.openecomp.portalapp.portal.utils;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.text.SimpleDateFormat;
@@ -29,6 +45,7 @@ import java.util.Date;
 import java.util.List;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.DatatypeConverter;
 
 import org.hibernate.Session;
 import org.hibernate.Transaction;
@@ -36,8 +53,11 @@ import org.openecomp.portalapp.portal.domain.EPUser;
 import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
 import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
 import org.openecomp.portalsdk.core.util.SystemProperties;
 import org.slf4j.MDC;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -46,10 +66,15 @@ public class EcompPortalUtils {
 
        private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EcompPortalUtils.class);
 
+       // TODO: GLOBAL_LOGIN_URL is the same as in SessionTimeoutInterceptor.
+       // It should be defined in SystemProperties.
+       private static final String GLOBAL_LOGIN_URL = "global-login-url";
+
        /**
         * @param orgUserId
-        * @return true if orgUserId is not empty and contains only alphanumeric,
-        *         false otherwise
+        *            User ID to validate
+        * @return true if orgUserId is not empty and contains only alphanumeric, false
+        *         otherwise
         */
        public static boolean legitimateUserId(String orgUserId) {
                return orgUserId.matches("^[a-zA-Z0-9]+$");
@@ -60,7 +85,9 @@ public class EcompPortalUtils {
         * expression
         * 
         * @param source
+        *            String to split
         * @param regex
+        *            tokens
         * @return List of tokens split from the source
         */
        public static List<String> parsingByRegularExpression(String source, String regex) {
@@ -80,7 +107,9 @@ public class EcompPortalUtils {
         * Builds a JSON object with error code and message information.
         * 
         * @param errorCode
+        *            error code
         * @param errorMessage
+        *            message
         * @return JSON object as a String
         */
        public static String jsonErrorMessageResponse(int errorCode, String errorMessage) {
@@ -91,6 +120,7 @@ public class EcompPortalUtils {
         * Builds a JSON object with the specified message
         * 
         * @param message
+        *            Message to embed
         * @return JSON object as a String
         */
        public static String jsonMessageResponse(String message) {
@@ -98,8 +128,8 @@ public class EcompPortalUtils {
        }
 
        /**
-        * Serializes the specified object as JSON and writes the result to the
-        * debug log. If serialization fails, logs a message to the error logger.
+        * Serializes the specified object as JSON and writes the result to the debug
+        * log. If serialization fails, logs a message to the error logger.
         * 
         * @param logger
         *            Logger for the class where the object was built; the logger
@@ -126,8 +156,8 @@ public class EcompPortalUtils {
        }
 
        /**
-        * Serializes the specified object as JSON and writes the result to the
-        * debug log. If serialization fails, logs a message to the error logger.
+        * Serializes the specified object as JSON and writes the result to the debug
+        * log. If serialization fails, logs a message to the error logger.
         * 
         * @param source
         *            First portion of the log message
@@ -165,18 +195,16 @@ public class EcompPortalUtils {
                }
        }
 
-       // TODO: GLOBAL_LOGIN_URL is the same as in SessionTimeoutInterceptor.
-       // It should be defined in SystemProperties.
-       private static final String GLOBAL_LOGIN_URL = "global-login-url";
-
        /**
-        * Set response status to Unauthorized if user == null and to Forbidden in
-        * all (!) other cases. Logging is not performed if invocator == null
+        * Set response status to Unauthorized if user == null and to Forbidden in all
+        * (!) other cases. Logging is not performed if invocator == null
         * 
         * @param user
+        *            User object
         * @param response
+        *            HttpServletResponse
         * @param invocator
-        *            may be null
+        *            may be null
         */
        public static void setBadPermissions(EPUser user, HttpServletResponse response, String invocator) {
                if (user == null) {
@@ -202,8 +230,7 @@ public class EcompPortalUtils {
                                responseCodeInt = Integer.valueOf(responseCode);
                        }
                } catch (Exception e) {
-                       logger.error(EELFLoggerDelegate.errorLogger,
-                                       "Exception occurred in getResponseCode(). Details: " + EcompPortalUtils.getStackTrace(e));
+                       logger.error(EELFLoggerDelegate.errorLogger, "getExternalAppResponseCode failed", e);
                }
                return responseCodeInt;
        }
@@ -214,8 +241,7 @@ public class EcompPortalUtils {
                        String responseCodeString = String.valueOf(responseCode);
                        MDC.put(EPCommonSystemProperties.EXTERNAL_API_RESPONSE_CODE, responseCodeString);
                } catch (Exception e) {
-                       logger.error(EELFLoggerDelegate.errorLogger,
-                                       "Exception occurred in setResponseCode(). Details: " + EcompPortalUtils.getStackTrace(e));
+                       logger.error(EELFLoggerDelegate.errorLogger, "setExternalAppResponseCode failed", e);
                }
        }
 
@@ -227,8 +253,7 @@ public class EcompPortalUtils {
                                httpStatusString = httpStatusString.toLowerCase();
                        }
                } catch (Exception e) {
-                       logger.error(EELFLoggerDelegate.errorLogger,
-                                       "Exception occurred in getHTTPStatusString(). Details: " + EcompPortalUtils.getStackTrace(e));
+                       logger.error(EELFLoggerDelegate.errorLogger, "getHTTPStatusString failed", e);
                }
                return httpStatusString;
        }
@@ -238,7 +263,6 @@ public class EcompPortalUtils {
                // "Internal Ecomp Error: 500 internal_server_error" or
                // "External App Error: 404 not_found"
                // TODO: create our own Ecomp error codes, starting with 1000 and up.
-               String responseString = "";
                String internalExternalString = internal ? "Ecomp Error: " : "App Error: ";
                String httpStatusString = "unknown_error";
                try {
@@ -246,10 +270,9 @@ public class EcompPortalUtils {
                                httpStatusString = getHTTPStatusString(responseCode);
                        }
                } catch (Exception e) {
-                       logger.error(EELFLoggerDelegate.errorLogger,
-                                       "Exception occurred in getFEErrorString(). Details: " + EcompPortalUtils.getStackTrace(e));
+                       logger.error(EELFLoggerDelegate.errorLogger, "getFEErrorString failed", e);
                }
-               responseString = internalExternalString + responseCode + " " + httpStatusString;
+               String responseString = internalExternalString + responseCode + " " + httpStatusString;
                return responseString;
        }
 
@@ -270,17 +293,6 @@ public class EcompPortalUtils {
                return productionBuild;
        }
 
-       private static final Object stackTraceLock = new Object();
-
-       public static String getStackTrace(Throwable t) {
-               synchronized (stackTraceLock) {
-                       StringWriter sw = new StringWriter();
-                       PrintWriter pw = new PrintWriter(sw);
-                       t.printStackTrace(pw);
-                       return sw.toString();
-               }
-       }
-
        public static String getMyIpAdddress() {
                InetAddress ip;
                String localIp;
@@ -289,7 +301,7 @@ public class EcompPortalUtils {
                        localIp = ip.getHostAddress();
                } catch (UnknownHostException e) {
                        localIp = "unknown";
-                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+                       logger.error(EELFLoggerDelegate.errorLogger, "getMyIpAdddress failed ", e);
                }
                return localIp;
        }
@@ -302,23 +314,36 @@ public class EcompPortalUtils {
                        hostName = ip.getHostName();
                } catch (UnknownHostException e) {
                        hostName = "unknown";
-                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+                       logger.error(EELFLoggerDelegate.errorLogger, "getMyHostName failed", e);
                }
                return hostName;
        }
 
-       /* return a default property if the expected one is not available */
+       /**
+        * Returns a default property if the expected one is not available
+        * 
+        * @param property
+        *            Key
+        * @param defaultValue
+        *            default Value
+        * @return Default value if property is not defined or yields the empty string;
+        *         else the property value.
+        */
        public static String getPropertyOrDefault(String property, String defaultValue) {
-               return ((null == SystemProperties.getProperty(property) || SystemProperties.getProperty(property).equals(""))
-                               ? defaultValue : SystemProperties.getProperty(property));
+               if (!SystemProperties.containsProperty(property))
+                       return defaultValue;
+               String value = SystemProperties.getProperty(property);
+               if (value == null || "".equals(value))
+                       return defaultValue;
+               return value;
        }
 
        /**
         * Calculates the time duration of a function call for logging purpose. It
         * stores the result by using "MDC.put(SystemProperties.MDC_TIMER,
         * timeDifference);" It is important to call
-        * "MDC.remove(SystemProperties.MDC_TIMER);" after this method call to clean
-        * up the record in MDC
+        * "MDC.remove(SystemProperties.MDC_TIMER);" after this method call to clean up
+        * the record in MDC
         *
         * @param beginDateTime
         *            the given begin time for the call
@@ -336,38 +361,76 @@ public class EcompPortalUtils {
                                String timeDifference = String.format("%d", endDate.getTime() - beginDate.getTime());
                                MDC.put(SystemProperties.MDC_TIMER, timeDifference);
                        } catch (Exception e) {
-                               logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+                               logger.error(EELFLoggerDelegate.errorLogger, "calculateDateTimeDifferenceForLog failed", e);
                        }
                }
        }
-       
-       public static String widgetMsProtocol(){
-               final String protocol;
-               try{
-                       protocol = SystemProperties.getProperty(EPCommonSystemProperties.WIDGET_MS_PROTOCOL);
-                       return (protocol == null || protocol.trim().equals("")) ? "https" : protocol ;
-               }
-               catch(IllegalStateException ese){
-                       //looks like SystemProperties.getProperty throws IllegalStateException if it cannot find a property you are looking for
-                       //In order to not break the code if a non-required property is missing from system.properties, returning https as default
-                       //when this exception is caught.
-                       return "https";
-               }               
+
+       /**
+        * Answers the protocol to use.
+        * 
+        * @return Protocol name from property file; defaults to https.
+        */
+       public static String widgetMsProtocol() {
+               return getPropertyOrDefault(EPCommonSystemProperties.WIDGET_MS_PROTOCOL, "https");
+       }
+
+       /**
+        * Answers the host to use.
+        * 
+        * @return Host name from property file; defaults to localhost.
+        */
+       public static String localOrDockerHost() {
+               return getPropertyOrDefault(EPCommonSystemProperties.WIDGET_MS_HOSTNAME, "localhost");
        }
-       
-       public static String localOrDockerHost(){
-               final String effectiveHost;
-               try{
-                       effectiveHost = SystemProperties.getProperty(EPCommonSystemProperties.WIDGET_MS_HOSTNAME);
-                       return (effectiveHost == null || effectiveHost.trim().equals("")) ? "localhost" : effectiveHost ;
+
+       /**
+        * It returns headers where username and password of external central auth is
+        * encoded to base64
+        * 
+        * @return header which contains external central auth username and password
+        *         base64 encoded
+        * @throws Exception
+        *             if unable to decrypt the password
+        */
+       public static HttpHeaders base64encodeKeyForAAFBasicAuth() throws Exception {
+               String userName = "";
+               String decryptedPass = "";
+               if (EPCommonSystemProperties.containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_USER_NAME)
+                               && EPCommonSystemProperties.containsProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_PASSWORD)) {
+                       decryptedPass = SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_PASSWORD);
+                       userName = SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_AUTH_USER_NAME);
                }
-               catch(IllegalStateException ese){
-                       //looks like SystemProperties.getProperty throws IllegalStateException if it cannot find a property you are looking for
-                       //In order to not break the code if a non-required property is missing from system.properties, returning https as default
-                       //when this exception is caught.
-                       return "localhost";
-               }               
+               String decPass = decrypted(decryptedPass);
+               String usernamePass = userName + ":" + decPass;
+               String encToBase64 = String.valueOf((DatatypeConverter.printBase64Binary(usernamePass.getBytes())));
+               HttpHeaders headers = new HttpHeaders();
+               headers.add("Authorization", "Basic " + encToBase64);
+               headers.setContentType(MediaType.APPLICATION_JSON);
+               return headers;
        }
 
+       private static String decrypted(String encrypted) throws Exception {
+               String result = "";
+               if (encrypted != null && encrypted.length() > 0) {
+                       try {
+                               result = CipherUtil.decrypt(encrypted, SystemProperties.getProperty(SystemProperties.Decryption_Key));
+                       } catch (Exception e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed", e);
+                               throw e;
+                       }
+               }
+               return result;
+       }
 
+       public static String truncateString(String originString, int size){
+               if(originString.length()>=size){
+                       StringBuilder stringBuilder = new StringBuilder();
+                       stringBuilder.append(originString);
+                       stringBuilder.setLength(size);
+                       stringBuilder.append("...");
+                       return stringBuilder.toString();
+               }
+               return originString;
+       }
 }