summaryrefslogtreecommitdiffstats
path: root/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
diff options
context:
space:
mode:
Diffstat (limited to 'POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java')
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java191
1 files changed, 138 insertions, 53 deletions
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
index 3b4d03de8..69444c478 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP Policy Engine
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
* Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,6 +23,7 @@ package org.onap.policy.controller;
import com.att.research.xacml.util.XACMLProperties;
import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -34,7 +35,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
-import java.util.TreeMap;
+import java.nio.charset.StandardCharsets;
import javax.annotation.PostConstruct;
import javax.mail.MessagingException;
import javax.script.SimpleBindings;
@@ -43,6 +44,8 @@ import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
import org.onap.policy.admin.PolicyNotificationMail;
import org.onap.policy.admin.RESTfulPAPEngine;
+import org.onap.policy.common.logging.eelf.MessageCodes;
+import org.onap.policy.common.logging.eelf.PolicyLogger;
import org.onap.policy.common.logging.flexlogger.FlexLogger;
import org.onap.policy.common.logging.flexlogger.Logger;
import org.onap.policy.model.PDPGroupContainer;
@@ -57,6 +60,7 @@ import org.onap.policy.rest.jpa.UserInfo;
import org.onap.policy.utils.UserUtils.Pair;
import org.onap.policy.xacml.api.XACMLErrorConstants;
import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
+import org.onap.policy.xacml.util.XACMLPolicyScanner;
import org.onap.portalsdk.core.controller.RestrictedBaseController;
import org.onap.portalsdk.core.domain.UserApp;
import org.onap.portalsdk.core.web.support.JsonMessage;
@@ -67,7 +71,8 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
-
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicySetType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
@Controller
@RequestMapping("/")
@@ -105,6 +110,9 @@ public class PolicyController extends RestrictedBaseController {
private static final String characterEncoding = "UTF-8";
private static final String contentType = "application/json";
private static final String file = "file";
+ private static final String SUPERADMIN = "super-admin";
+ private static final String POLICYGUEST = "Policy Guest";
+ private static final String LOGINID = "loginId";
// Smtp Java Mail Properties
private static String smtpHost = null;
@@ -147,7 +155,6 @@ public class PolicyController extends RestrictedBaseController {
private static boolean jUnit = false;
-
public static boolean isjUnit() {
return jUnit;
}
@@ -296,12 +303,11 @@ public class PolicyController extends RestrictedBaseController {
/**
* Get Functional Definition data.
*
- * @param request HttpServletRequest.
+ * @param request HttpServletRequest.
* @param response HttpServletResponse.
*/
- @RequestMapping(value = {"/get_FunctionDefinitionDataByName"},
- method = {org.springframework.web.bind.annotation.RequestMethod.GET},
- produces = MediaType.APPLICATION_JSON_VALUE)
+ @RequestMapping(value = { "/get_FunctionDefinitionDataByName" }, method = {
+ org.springframework.web.bind.annotation.RequestMethod.GET }, produces = MediaType.APPLICATION_JSON_VALUE)
public void getFunctionDefinitionData(HttpServletRequest request, HttpServletResponse response) {
try {
Map<String, Object> model = new HashMap<>();
@@ -320,7 +326,7 @@ public class PolicyController extends RestrictedBaseController {
/**
* Get PolicyEntity Data from db.
*
- * @param scope scopeName.
+ * @param scope scopeName.
* @param policyName policyName.
* @return policyEntity data.
*/
@@ -338,7 +344,7 @@ public class PolicyController extends RestrictedBaseController {
*/
public List<String> getRolesOfUser(String userId) {
List<String> rolesList = new ArrayList<>();
- List<Object> roles = commonClassDao.getDataById(Roles.class, "loginId", userId);
+ List<Object> roles = commonClassDao.getDataById(Roles.class, LOGINID, userId);
for (Object role : roles) {
rolesList.add(((Roles) role).getRole());
}
@@ -346,18 +352,17 @@ public class PolicyController extends RestrictedBaseController {
}
public List<Object> getRoles(String userId) {
- return commonClassDao.getDataById(Roles.class, "loginId", userId);
+ return commonClassDao.getDataById(Roles.class, LOGINID, userId);
}
/**
* Get List of User Roles.
*
- * @param request HttpServletRequest.
+ * @param request HttpServletRequest.
* @param response HttpServletResponse.
*/
- @RequestMapping(value = {"/get_UserRolesData"},
- method = {org.springframework.web.bind.annotation.RequestMethod.GET},
- produces = MediaType.APPLICATION_JSON_VALUE)
+ @RequestMapping(value = { "/get_UserRolesData" }, method = {
+ org.springframework.web.bind.annotation.RequestMethod.GET }, produces = MediaType.APPLICATION_JSON_VALUE)
public void getUserRolesEntityData(HttpServletRequest request, HttpServletResponse response) {
try {
String userId = UserUtils.getUserSession(request).getOrgUserId();
@@ -378,7 +383,7 @@ public class PolicyController extends RestrictedBaseController {
* @param request Request input.
* @return view model.
*/
- @RequestMapping(value = {"/policy", "/policy/Editor"}, method = RequestMethod.GET)
+ @RequestMapping(value = { "/policy", "/policy/Editor" }, method = RequestMethod.GET)
public ModelAndView view(HttpServletRequest request) {
getUserRoleFromSession(request);
String myRequestUrl = request.getRequestURL().toString();
@@ -386,8 +391,8 @@ public class PolicyController extends RestrictedBaseController {
//
// Set the URL for the RESTful PAP Engine
//
- setPapEngine((PAPPolicyEngine) new RESTfulPAPEngine(myRequestUrl));
- new PDPGroupContainer((PAPPolicyEngine) new RESTfulPAPEngine(myRequestUrl));
+ setPapEngine(new RESTfulPAPEngine(myRequestUrl));
+ new PDPGroupContainer(new RESTfulPAPEngine(myRequestUrl));
} catch (Exception e) {
policyLogger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Exception Occured while loading PAP" + e);
}
@@ -396,9 +401,9 @@ public class PolicyController extends RestrictedBaseController {
}
/**
- * Read the role from session.
+ * Read the role from session for inserting into the database.
*
- * @param request Request input.
+ * @param request Request input for Role.
*/
public void getUserRoleFromSession(HttpServletRequest request) {
// While user landing on Policy page, fetch the userId and Role from
@@ -415,26 +420,50 @@ public class PolicyController extends RestrictedBaseController {
newRoles.add(userApp.getRole().getName());
}
List<Object> userRoles = getRoles(userId);
- String filteredRole = filterRole(newRoles);
- if (userRoles == null || userRoles.isEmpty()) {
- savePolicyRoles(name, filteredRole, userId);
- } else {
- Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles);
- roles = pair.u;
- if (!roles.contains(filteredRole)) {
- String query = "delete from Roles where loginid='" + userId + "'";
- commonClassDao.updateQuery(query);
+ List<String> filteredRoles = filterRole(newRoles);
+ if (!filteredRoles.isEmpty()) {
+ cleanUpRoles(filteredRoles, userId);
+ }
+ for (String filteredRole : filteredRoles) {
+ if (userRoles == null || userRoles.isEmpty()) {
savePolicyRoles(name, filteredRole, userId);
+ } else {
+ userRoles = getRoles(userId);
+ Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles);
+ roles = pair.u;
+ if (!roles.contains(filteredRole)) {
+ savePolicyRoles(name, filteredRole, userId);
+ }
+ }
+ }
+ }
+
+ /**
+ * Build a delete query for cleaning up roles and execute it.
+ *
+ * @param filteredRoles Filtered roles list.
+ * @param userId UserID.
+ */
+ private void cleanUpRoles(List<String> filteredRoles, String userId) {
+ StringBuilder query = new StringBuilder();
+ query.append("delete from Roles where loginid = '" + userId + "'");
+ if (filteredRoles.contains(SUPERADMIN)) {
+ query.append("and not role = '" + SUPERADMIN + "'");
+ } else {
+ for (String filteredRole : filteredRoles) {
+ query.append("and not role = '" + filteredRole + "'");
}
}
+ query.append("and id > 0");
+ commonClassDao.updateQuery(query.toString());
}
/**
* Save the Role to DB.
*
- * @param name User Name.
+ * @param name User Name.
* @param filteredRole Role Name.
- * @param userId User LoginID.
+ * @param userId User LoginID.
*/
private void savePolicyRoles(String name, String filteredRole, String userId) {
UserInfo userInfo = new UserInfo();
@@ -454,25 +483,35 @@ public class PolicyController extends RestrictedBaseController {
* @param newRoles list of roles from request.
* @return
*/
- private String filterRole(List<String> newRoles) {
- Map<Integer, String> roleMap = new TreeMap<>();
- roleMap.put(6, "guest");
+ private List<String> filterRole(List<String> newRoles) {
+ List<String> roles = new ArrayList<>();
+ boolean superCheck = false;
for (String role : newRoles) {
- if ("Policy Super Admin".equalsIgnoreCase(role.trim())
+ if ("Policy Super Guest".equalsIgnoreCase(role.trim())) {
+ superCheck = true;
+ roles.add("super-guest");
+ } else if ("Policy Super Editor".equalsIgnoreCase(role.trim())) {
+ superCheck = true;
+ roles.clear();
+ roles.add("super-editor");
+ } else if ("Policy Super Admin".equalsIgnoreCase(role.trim())
|| "System Administrator".equalsIgnoreCase(role.trim())
|| "Standard User".equalsIgnoreCase(role.trim())) {
- roleMap.put(1, "super-admin");
- } else if ("Policy Super Editor".equalsIgnoreCase(role.trim())) {
- roleMap.put(2, "super-editor");
- } else if ("Policy Super Guest".equalsIgnoreCase(role.trim())) {
- roleMap.put(3, "super-guest");
- } else if ("Policy Admin".equalsIgnoreCase(role.trim())) {
- roleMap.put(4, "admin");
- } else if ("Policy Editor".equalsIgnoreCase(role.trim())) {
- roleMap.put(5, "editor");
+ superCheck = true;
+ roles.clear();
+ roles.add(SUPERADMIN);
+ }
+ if (!roles.contains(SUPERADMIN) || (POLICYGUEST.equalsIgnoreCase(role) && !superCheck)) {
+ if ("Policy Admin".equalsIgnoreCase(role.trim())) {
+ roles.add("admin");
+ } else if ("Policy Editor".equalsIgnoreCase(role.trim())) {
+ roles.add("editor");
+ } else if (POLICYGUEST.equalsIgnoreCase(role.trim())) {
+ roles.add("guest");
+ }
}
}
- return roleMap.entrySet().iterator().next().getValue();
+ return roles;
}
public PAPPolicyEngine getPapEngine() {
@@ -491,12 +530,13 @@ public class PolicyController extends RestrictedBaseController {
*/
public String getUserName(String createdBy) {
String loginId = createdBy;
- List<Object> data = commonClassDao.getDataById(UserInfo.class, "loginId", loginId);
+ List<Object> data = commonClassDao.getDataById(UserInfo.class, LOGINID, loginId);
return data.get(0).toString();
}
/**
* Check if the Policy is Active or not.
+ *
* @param query sql query.
* @return boolean.
*/
@@ -532,19 +572,17 @@ public class PolicyController extends RestrictedBaseController {
return commonClassDao.getDataByQuery(query, params);
}
-
@SuppressWarnings("rawtypes")
public Object getEntityItem(Class className, String columname, String key) {
return commonClassDao.getEntityItem(className, columname, key);
}
-
/**
* Watch Policy Function.
*
- * @param entity PolicyVersion entity.
+ * @param entity PolicyVersion entity.
* @param policyName updated policy name.
- * @param mode type of action rename/delete/import.
+ * @param mode type of action rename/delete/import.
*/
public void watchPolicyFunction(PolicyVersion entity, String policyName, String mode) {
PolicyNotificationMail email = new PolicyNotificationMail();
@@ -569,6 +607,8 @@ public class PolicyController extends RestrictedBaseController {
dbCheckName = dbCheckName.replace(".Config_", ":Config_");
} else if (dbCheckName.contains("Action_")) {
dbCheckName = dbCheckName.replace(".Action_", ":Action_");
+ } else if (dbCheckName.contains("Decision_MS_")) {
+ dbCheckName = dbCheckName.replace(".Decision_MS_", ":Decision_MS_");
} else if (dbCheckName.contains("Decision_")) {
dbCheckName = dbCheckName.replace(".Decision_", ":Decision_");
}
@@ -583,13 +623,14 @@ public class PolicyController extends RestrictedBaseController {
PolicyEntity pEntity = (PolicyEntity) entity;
String removeExtension = pEntity.getPolicyName().replace(".xml", "");
String version = removeExtension.substring(removeExtension.lastIndexOf('.') + 1);
- av.add(version);
+ String userName = getUserId(pEntity, "@ModifiedBy:");
+ av.add(version + " | " + pEntity.getModifiedDate() + " | " + userName);
}
if (policyName.contains("/")) {
policyName = policyName.replace("/", File.separator);
}
- PolicyVersion entity =
- (PolicyVersion) commonClassDao.getEntityItem(PolicyVersion.class, "policyName", policyName);
+ PolicyVersion entity = (PolicyVersion) commonClassDao.getEntityItem(PolicyVersion.class, "policyName",
+ policyName);
JSONObject el = new JSONObject();
el.put("activeVersion", entity.getActiveVersion());
el.put("availableVersions", av);
@@ -597,6 +638,50 @@ public class PolicyController extends RestrictedBaseController {
return el;
}
+ public String getUserId(PolicyEntity data, String value) {
+ String userId = "";
+ String uValue = value;
+ String description = getDescription(data);
+ if (description.contains(uValue)) {
+ userId = description.substring(description.indexOf(uValue) + uValue.length(),
+ description.lastIndexOf(uValue));
+ }
+ UserInfo userInfo = (UserInfo) getEntityItem(UserInfo.class, "userLoginId", userId);
+ if (userInfo == null) {
+ return SUPERADMIN;
+ }
+ return userInfo.getUserName();
+ }
+
+ public String getDescription(PolicyEntity data) {
+ InputStream stream = new ByteArrayInputStream(data.getPolicyData().getBytes(StandardCharsets.UTF_8));
+ Object policy = XACMLPolicyScanner.readPolicy(stream);
+ if (policy instanceof PolicySetType) {
+ return ((PolicySetType) policy).getDescription();
+ } else if (policy instanceof PolicyType) {
+ return ((PolicyType) policy).getDescription();
+ } else {
+ PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Expecting a PolicySet/Policy/Rule object. Got: "
+ + policy.getClass().getCanonicalName());
+ return null;
+ }
+ }
+
+ public String[] getUserInfo(PolicyEntity data, List<PolicyVersion> activePolicies) {
+ String policyName = data.getScope().replace(".", File.separator) + File.separator
+ + data.getPolicyName().substring(0, data.getPolicyName().indexOf('.'));
+ PolicyVersion pVersion = activePolicies.stream().filter(a -> policyName.equals(a.getPolicyName())).findAny()
+ .orElse(null);
+ String[] result = new String[2];
+
+ UserInfo userCreate = (UserInfo) getEntityItem(UserInfo.class, "userLoginId", pVersion.getCreatedBy());
+ UserInfo userModify = (UserInfo) getEntityItem(UserInfo.class, "userLoginId", pVersion.getModifiedBy());
+ result[0] = userCreate != null ? userCreate.getUserName() : "super-admin";
+ result[1] = userModify != null ? userModify.getUserName() : "super-admin";
+
+ return result;
+ }
+
public static String getLogTableLimit() {
return logTableLimit;
}