Fix Policy import/export on gui
[policy/engine.git] / POLICY-SDK-APP / src / main / java / org / onap / policy / admin / PolicyManagerServlet.java
index d4378f4..a23a0e8 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
  * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
  * Modifications Copyright (C) 2019 Bell Canada
  * ================================================================================
@@ -25,7 +25,6 @@ package org.onap.policy.admin;
 import com.att.research.xacml.util.XACMLProperties;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
@@ -49,7 +48,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
-
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonReader;
@@ -61,11 +59,11 @@ import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpStatus;
 import org.elasticsearch.common.Strings;
 import org.json.JSONArray;
@@ -76,8 +74,8 @@ import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.components.HumanPolicyComponent;
 import org.onap.policy.controller.PolicyController;
 import org.onap.policy.controller.PolicyExportAndImportController;
-import org.onap.policy.rest.XACMLRest;
-import org.onap.policy.rest.XACMLRestProperties;
+import org.onap.policy.rest.XacmlRest;
+import org.onap.policy.rest.XacmlRestProperties;
 import org.onap.policy.rest.adapter.PolicyRestAdapter;
 import org.onap.policy.rest.jpa.ActionBodyEntity;
 import org.onap.policy.rest.jpa.ConfigurationDataEntity;
@@ -90,6 +88,7 @@ import org.onap.policy.utils.PolicyUtils;
 import org.onap.policy.utils.UserUtils.Pair;
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 import org.onap.policy.xacml.util.XACMLPolicyScanner;
+import org.onap.portalsdk.core.domain.User;
 import org.onap.portalsdk.core.web.support.UserUtils;
 
 @WebServlet(
@@ -192,9 +191,9 @@ public class PolicyManagerServlet extends HttpServlet {
         //
         // Common initialization
         //
-        XACMLRest.xacmlInit(servletConfig);
+        XacmlRest.xacmlInit(servletConfig);
         // init aes key from prop or env
-        PeCryptoUtils.initAesKey(XACMLProperties.getProperty(XACMLRestProperties.PROP_AES_KEY));
+        PeCryptoUtils.initAesKey(XACMLProperties.getProperty(XacmlRestProperties.PROP_AES_KEY));
         //
         // Initialize ClosedLoop JSON
         //
@@ -202,7 +201,7 @@ public class PolicyManagerServlet extends HttpServlet {
     }
 
     private static void initializeJsonLoad() {
-        Path closedLoopJsonLocation = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_CLOSEDLOOP));
+        Path closedLoopJsonLocation = Paths.get(XACMLProperties.getProperty(XacmlRestProperties.PROP_ADMIN_CLOSEDLOOP));
         String location = closedLoopJsonLocation.toString();
         if (!location.endsWith("json")) {
             LOGGER.warn("JSONConfig file does not end with extension .json");
@@ -227,7 +226,7 @@ public class PolicyManagerServlet extends HttpServlet {
         LOGGER.debug("doPost");
         try {
             // if request contains multipart-form-data
-            if (ServletFileUpload.isMultipartContent(request)) {
+            if (isMultipartContent(request)) {
                 uploadFile(request, response);
             }
             // all other post request has json params in body
@@ -243,6 +242,10 @@ public class PolicyManagerServlet extends HttpServlet {
         }
     }
 
+    protected boolean isMultipartContent(HttpServletRequest request) {
+        return ServletFileUpload.isMultipartContent(request);
+    }
+
     // Set Error Message for Exception
     private void setError(Exception exception, HttpServletResponse response) throws IOException {
         try {
@@ -261,20 +264,24 @@ public class PolicyManagerServlet extends HttpServlet {
     private void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException {
         try {
             Map<String, InputStream> files = new HashMap<>();
-
+            String resp = null;
             List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
             for (FileItem item : items) {
                 if (!item.isFormField()) {
                     // Process form file field (input type="file").
                     files.put(item.getName(), item.getInputStream());
-                    processFormFile(request, item);
+                    resp = processFormFile(request, item, response);
                 }
             }
 
-            JSONObject responseJsonObject;
-            responseJsonObject = this.success();
             response.setContentType(CONTENTTYPE);
             PrintWriter out = response.getWriter();
+            JSONObject responseJsonObject;
+            if (!StringUtils.isBlank(resp)) {
+                responseJsonObject = this.error("Import Issue " + resp);
+            } else {
+                responseJsonObject = this.success();
+            }
             out.print(responseJsonObject);
             out.flush();
         } catch (Exception e) {
@@ -283,23 +290,35 @@ public class PolicyManagerServlet extends HttpServlet {
         }
     }
 
-    private void processFormFile(HttpServletRequest request, FileItem item) {
+    private String processFormFile(HttpServletRequest request, FileItem item, HttpServletResponse response) {
         String newFile;
-        if (item.getName().endsWith(".xls") && item.getSize() <= PolicyController.getFileSizeLimit()) {
+        String outPutResp = null;
+        if (item.getName().endsWith(".xls") && item.getSize() <= getFileSizeLimit()) {
             File file = new File(item.getName());
             try (OutputStream outputStream = new FileOutputStream(file)) {
                 IOUtils.copy(item.getInputStream(), outputStream);
                 newFile = file.toString();
                 PolicyExportAndImportController importController = new PolicyExportAndImportController();
-                importController.importRepositoryFile(newFile, request);
+                return importController.importRepositoryFile(newFile, request);
             } catch (Exception e) {
                 LOGGER.error("Upload error : " + e);
             }
         } else if (!item.getName().endsWith(".xls")) {
-            LOGGER.error("Non .xls filetype uploaded: " + item.getName());
+            outPutResp = "Non .xls filetype uploaded: " + item.getName();
+            LOGGER.error(outPutResp);
         } else { // uploaded file size is greater than allowed
-            LOGGER.error("Upload file size limit exceeded! File size (Bytes) is: " + item.getSize());
+            outPutResp = "Upload file size limit exceeded! File size (Bytes) is: " + item.getSize();
+            LOGGER.error(outPutResp);
         }
+        return outPutResp;
+    }
+
+    protected long copyStream(InputStream inputStream, OutputStream outputStream) throws IOException {
+        return IOUtils.copy(inputStream, outputStream);
+    }
+
+    protected long getFileSizeLimit() {
+        return PolicyController.getFileSizeLimit();
     }
 
     // File Operation Functionality
@@ -322,7 +341,7 @@ public class PolicyManagerServlet extends HttpServlet {
             JSONObject params = jsonObject.getJSONObject("params");
             Mode mode = Mode.valueOf(params.getString("mode"));
 
-            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String userId = getUserSession(request).getOrgUserId();
             LOGGER.info(
                     "********************Logging UserID while doing actions on Editor tab****************************");
             LOGGER.info(
@@ -337,6 +356,10 @@ public class PolicyManagerServlet extends HttpServlet {
         setResponse(response, responseJsonObject);
     }
 
+    protected User getUserSession(HttpServletRequest request) {
+        return UserUtils.getUserSession(request);
+    }
+
     private void setResponse(HttpServletResponse response, JSONObject responseJsonObject) {
         response.setContentType(CONTENTTYPE);
         try (PrintWriter out = response.getWriter()) {
@@ -390,7 +413,6 @@ public class PolicyManagerServlet extends HttpServlet {
     }
 
     private JSONObject searchPolicyList(JSONObject params, HttpServletRequest request) {
-        List<Object> policyData = new ArrayList<>();
         JSONArray policyList = null;
         if (params.has("policyList")) {
             policyList = (JSONArray) params.get("policyList");
@@ -398,7 +420,7 @@ public class PolicyManagerServlet extends HttpServlet {
         PolicyController controller = getPolicyControllerInstance();
         List<JSONObject> resultList = new ArrayList<>();
         try {
-            if (!lookupPolicyData(request, policyData, policyList, controller, resultList)) {
+            if (!lookupPolicyData(request, new ArrayList<>(), policyList, controller, resultList)) {
                 return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
             }
         } catch (Exception e) {
@@ -411,13 +433,11 @@ public class PolicyManagerServlet extends HttpServlet {
 
     private boolean lookupPolicyData(HttpServletRequest request, List<Object> policyData, JSONArray policyList,
             PolicyController controller, List<JSONObject> resultList) {
-        List<String> roles;
-        Set<String> scopes;// Get the Login Id of the User from Request
-        String userId = UserUtils.getUserSession(request).getOrgUserId();
+        String userId = getUserSession(request).getOrgUserId();
         List<Object> userRoles = controller.getRoles(userId);
-        Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles);
-        roles = pair.u;
-        scopes = pair.t;
+        Pair<Set<String>, List<String>> pair = checkRoleAndScope(userRoles);
+        List<String> roles = pair.second;
+        Set<String> scopes = pair.first;
         if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST)) {
             if (scopes.isEmpty()) {
                 return false;
@@ -439,6 +459,10 @@ public class PolicyManagerServlet extends HttpServlet {
         return true;
     }
 
+    protected Pair<Set<String>, List<String>> checkRoleAndScope(List<Object> userRoles) {
+        return org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles);
+    }
+
     private void getPolicyDataForSuperRoles(List<Object> policyData, PolicyController controller,
             List<JSONObject> resultList, List<String> roles, Set<String> scopes) {
         if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)) {
@@ -521,7 +545,7 @@ public class PolicyManagerServlet extends HttpServlet {
         String path = params.getString("path");
         String userId = null;
         try {
-            userId = UserUtils.getUserSession(request).getOrgUserId();
+            userId = getUserSession(request).getOrgUserId();
         } catch (Exception e) {
             LOGGER.error("Exception Occured while reading userid from cookie" + e);
         }
@@ -601,13 +625,12 @@ public class PolicyManagerServlet extends HttpServlet {
         } else if (path.contains(DECISION2)) {
             path = path.replace(DECISION, DECISION1);
         }
-        PolicyController controller = getPolicyControllerInstance();
         String[] split = path.split(":");
         String query = "FROM PolicyEntity where policyName = :split_1 and scope = :split_0";
         SimpleBindings peParams = new SimpleBindings();
         peParams.put(SPLIT_1, split[1]);
         peParams.put(SPLIT_0, split[0]);
-        List<Object> queryData = getDataByQueryFromController(controller, query, peParams);
+        List<Object> queryData = getDataByQueryFromController(getPolicyControllerInstance(), query, peParams);
         if (queryData.isEmpty()) {
             return error("Error Occured while Describing the Policy - query is empty");
         }
@@ -645,14 +668,13 @@ public class PolicyManagerServlet extends HttpServlet {
     }
 
     private JSONObject processPolicyList(JSONObject params, HttpServletRequest request) throws ServletException {
-        PolicyController controller = getPolicyControllerInstance();
         // Get the Login Id of the User from Request
         String testUserID = getTestUserId();
-        String userId = testUserID != null ? testUserID : UserUtils.getUserSession(request).getOrgUserId();
-        List<Object> userRoles = controller.getRoles(userId);
-        Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles);
-        List<String> roles = pair.u;
-        Set<String> scopes = pair.t;
+        String userId = testUserID != null ? testUserID : getUserSession(request).getOrgUserId();
+        List<Object> userRoles = getPolicyControllerInstance().getRoles(userId);
+        Pair<Set<String>, List<String>> pair = checkRoleAndScope(userRoles);
+        List<String> roles = pair.second;
+        Set<String> scopes = pair.first;
         Map<String, String> roleByScope = org.onap.policy.utils.UserUtils.getRoleByScope(userRoles);
 
         List<JSONObject> resultList = new ArrayList<>();
@@ -741,7 +763,6 @@ public class PolicyManagerServlet extends HttpServlet {
     // Get Active Policy List based on Scope Selection from Policy Version table
     private void activePolicyList(String inScopeName, List<JSONObject> resultList, List<String> roles,
             Set<String> scopes, Map<String, String> roleByScope) {
-        final PolicyController controller = getPolicyControllerInstance();
         String scopeName = inScopeName;
         if (scopeName.contains(FORWARD_SLASH)) {
             scopeName = scopeName.replace(FORWARD_SLASH, File.separator);
@@ -754,8 +775,8 @@ public class PolicyManagerServlet extends HttpServlet {
         SimpleBindings params = new SimpleBindings();
         params.put(SCOPE_NAME, scopeName + "%");
 
-        List<Object> activePolicies = getDataByQueryFromController(controller, query, params);
-        List<Object> scopesList = getDataByQueryFromController(controller,
+        List<Object> activePolicies = getDataByQueryFromController(getPolicyControllerInstance(), query, params);
+        List<Object> scopesList = getDataByQueryFromController(getPolicyControllerInstance(),
                 FROM_POLICY_EDITOR_SCOPES_WHERE_SCOPENAME_LIKE_SCOPE_NAME, params);
         for (Object list : scopesList) {
             scopeName = checkScope(resultList, scopeName, (PolicyEditorScopes) list, roleByScope);
@@ -845,8 +866,8 @@ public class PolicyManagerServlet extends HttpServlet {
     }
 
     private String getUserName(String loginId) {
-        PolicyController controller = getPolicyControllerInstance();
-        UserInfo userInfo = (UserInfo) controller.getEntityItem(UserInfo.class, "userLoginId", loginId);
+        UserInfo userInfo = (UserInfo) getPolicyControllerInstance().getEntityItem(UserInfo.class, "userLoginId",
+                loginId);
         if (userInfo == null) {
             return SUPERADMIN;
         }
@@ -867,7 +888,7 @@ public class PolicyManagerServlet extends HttpServlet {
         boolean isActive = false;
         List<String> policyActiveInPdp = new ArrayList<>();
         Set<String> scopeOfPolicyActiveInPdp = new HashSet<>();
-        String userId = UserUtils.getUserSession(request).getOrgUserId();
+        String userId = getUserSession(request).getOrgUserId();
         String oldPath = params.getString("path");
         String newPath = params.getString("newPath");
         oldPath = oldPath.substring(oldPath.indexOf('/') + 1);
@@ -1200,7 +1221,7 @@ public class PolicyManagerServlet extends HttpServlet {
     // Clone the Policy
     private JSONObject copy(JSONObject params, HttpServletRequest request) throws ServletException {
         try {
-            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String userId = getUserSession(request).getOrgUserId();
             String oldPath = params.getString("path");
             String newPath = params.getString("newPath");
             oldPath = oldPath.substring(oldPath.indexOf('/') + 1);
@@ -1292,7 +1313,7 @@ public class PolicyManagerServlet extends HttpServlet {
         PolicyEntity policyEntity = null;
         String policyNamewithoutExtension;
         try {
-            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String userId = getUserSession(request).getOrgUserId();
             String deleteVersion = "";
             String path = params.getString("path");
             LOGGER.debug("delete {}" + path);
@@ -1543,7 +1564,6 @@ public class PolicyManagerServlet extends HttpServlet {
     private JSONObject editFile(JSONObject params) throws ServletException {
         // get content
         try {
-            final PolicyController controller = getPolicyControllerInstance();
             final String mode = params.getString("mode");
             String path = params.getString("path");
             LOGGER.debug("editFile path: {}" + path);
@@ -1560,7 +1580,7 @@ public class PolicyManagerServlet extends HttpServlet {
             SimpleBindings peParams = new SimpleBindings();
             peParams.put(SPLIT_1, split[1]);
             peParams.put(SPLIT_0, split[0]);
-            List<Object> queryData = getDataByQueryFromController(controller, query, peParams);
+            List<Object> queryData = getDataByQueryFromController(getPolicyControllerInstance(), query, peParams);
             PolicyEntity entity = (PolicyEntity) queryData.get(0);
             InputStream stream = new ByteArrayInputStream(entity.getPolicyData().getBytes(StandardCharsets.UTF_8));
 
@@ -1599,7 +1619,6 @@ public class PolicyManagerServlet extends HttpServlet {
 
     // Add Scopes
     private JSONObject addFolder(JSONObject params, HttpServletRequest request) throws ServletException {
-        PolicyController controller = getPolicyControllerInstance();
         try {
             String name = getNameFromParams(params);
             String validateName =
@@ -1614,18 +1633,19 @@ public class PolicyManagerServlet extends HttpServlet {
                     name = name.substring(1);
                 }
                 PolicyEditorScopes entity =
-                        (PolicyEditorScopes) controller.getEntityItem(PolicyEditorScopes.class, SCOPE_NAME, name);
+                        (PolicyEditorScopes) getPolicyControllerInstance().getEntityItem(
+                                PolicyEditorScopes.class, SCOPE_NAME, name);
                 if (entity != null) {
                     return error("Scope Already Exists");
                 }
-                String userId = UserUtils.getUserSession(request).getOrgUserId();
+                String userId = getUserSession(request).getOrgUserId();
                 UserInfo userInfo = new UserInfo();
                 userInfo.setUserLoginId(userId);
                 PolicyEditorScopes newScope = new PolicyEditorScopes();
                 newScope.setScopeName(name);
                 newScope.setUserCreatedBy(userInfo);
                 newScope.setUserModifiedBy(userInfo);
-                controller.saveData(newScope);
+                getPolicyControllerInstance().saveData(newScope);
             }
             return success();
         } catch (Exception e) {