* ============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.
+ * Modifications Copyright (C) 2019 Bell Canada
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
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;
import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
-
+import java.util.Set;
import javax.annotation.PostConstruct;
-import javax.mail.MessagingException;
import javax.script.SimpleBindings;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicySetType;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
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;
import org.onap.policy.rest.jpa.PolicyEntity;
import org.onap.policy.rest.jpa.PolicyVersion;
import org.onap.policy.rest.jpa.UserInfo;
+import org.onap.policy.utils.PeCryptoUtils;
+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;
import org.onap.portalsdk.core.web.support.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
-import com.att.research.xacml.util.XACMLProperties;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-
@Controller
@RequestMapping("/")
public class PolicyController extends RestrictedBaseController {
- private static final Logger policyLogger = FlexLogger.getLogger(PolicyController.class);
+ private static final Logger policyLogger = FlexLogger.getLogger(PolicyController.class);
private static CommonClassDao commonClassDao;
//
private static String logTableLimit;
private static String systemAlertTableLimit;
protected static Map<String, String> dropDownMap = new HashMap<>();
+
public static Map<String, String> getDropDownMap() {
return dropDownMap;
}
private static Map<Datatype, List<FunctionDefinition>> mapDatatype2Function = null;
private static Map<String, FunctionDefinition> mapID2Function = null;
- //Constant variables used across Policy-sdk
+ // Constant variables used across Policy-sdk
private static final String policyData = "policyData";
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
+ // Smtp Java Mail Properties
private static String smtpHost = null;
private static String smtpPort = null;
private static String smtpUsername = null;
private static String smtpPassword = null;
private static String smtpApplicationName = null;
private static String smtpEmailExtension = null;
- //log db Properties
+ // log db Properties
private static String logdbDriver = null;
private static String logdbUrl = null;
private static String logdbUserName = null;
private static String logdbPassword = null;
private static String logdbDialect = null;
- //Xacml db properties
+ // Xacml db properties
private static String xacmldbUrl = null;
private static String xacmldbUserName = null;
private static String xacmldbPassword = null;
- //AutoPush feature.
+ // AutoPush feature.
private static String autoPushAvailable;
private static String autoPushDSClosedLoop;
private static String autoPushDSFirewall;
private static String autoPushDSMicroservice;
private static String autoPushPDPGroup;
- //papURL
+ // papURL
private static String papUrl;
- //MicroService Model Properties
+ // MicroService Model Properties
private static String msOnapName;
private static String msPolicyName;
- //WebApp directories
+ // WebApp directories
private static String configHome;
private static String actionHome;
- //File upload size
+ // File upload size
private static long fileSizeLimit;
private static boolean jUnit = false;
-
public static boolean isjUnit() {
return jUnit;
}
}
@Autowired
- private PolicyController(CommonClassDao commonClassDao){
+ private PolicyController(CommonClassDao commonClassDao) {
PolicyController.commonClassDao = commonClassDao;
}
// Empty constructor
}
+ /**
+ * init method to load the properties.
+ */
@PostConstruct
- public void init(){
+ public void init() {
Properties prop = new Properties();
try {
String fileName;
- if(jUnit){
- fileName = new File(".").getCanonicalPath() + File.separator + "src"+ File.separator + "test" + File.separator + "resources" + File.separator + "JSONConfig.json";
+ if (jUnit) {
+ fileName = new File(".").getCanonicalPath() + File.separator + "src"
+ + File.separator + "test" + File.separator + "resources" + File.separator
+ + "JSONConfig.json";
} else {
fileName = "xacml.admin.properties";
}
- try(InputStream input = new FileInputStream(fileName)) {
+ try (InputStream input = new FileInputStream(fileName)) {
// load a properties file
prop.load(input);
}
- //file upload size limit property
+ // file upload size limit property
setFileSizeLimit(prop.getProperty("file.size.limit"));
- //pap url
+ // pap url
setPapUrl(prop.getProperty("xacml.rest.pap.url"));
// get the property values
setSmtpHost(prop.getProperty("onap.smtp.host"));
setSmtpPassword(prop.getProperty("onap.smtp.password"));
setSmtpApplicationName(prop.getProperty("onap.application.name"));
setSmtpEmailExtension(prop.getProperty("onap.smtp.emailExtension"));
- //Log Database Properties
+ // Log Database Properties
setLogdbDriver(prop.getProperty("xacml.log.db.driver"));
setLogdbUrl(prop.getProperty("xacml.log.db.url"));
setLogdbUserName(prop.getProperty("xacml.log.db.user"));
- setLogdbPassword(prop.getProperty("xacml.log.db.password"));
+ setLogdbPassword(PeCryptoUtils.decrypt(prop.getProperty("xacml.log.db.password")));
setLogdbDialect(prop.getProperty("onap.dialect"));
- //Xacml Database Properties
+ // Xacml Database Properties
setXacmldbUrl(prop.getProperty("javax.persistence.jdbc.url"));
setXacmldbUserName(prop.getProperty("javax.persistence.jdbc.user"));
- setXacmldbPassword(prop.getProperty("javax.persistence.jdbc.password"));
- //AutoPuh
+ setXacmldbPassword(PeCryptoUtils.decrypt(prop.getProperty("javax.persistence.jdbc.password")));
+ // AutoPuh
setAutoPushAvailable(prop.getProperty("xacml.automatic.push"));
setAutoPushDSClosedLoop(prop.getProperty("xacml.autopush.closedloop"));
setAutoPushDSFirewall(prop.getProperty("xacml.autopush.firewall"));
setAutoPushDSMicroservice(prop.getProperty("xacml.autopush.microservice"));
setAutoPushPDPGroup(prop.getProperty("xacml.autopush.pdpGroup"));
- //Micro Service Properties
+ // Micro Service Properties
setMsOnapName(prop.getProperty("xacml.policy.msOnapName"));
- if(getMsOnapName() == null){
+ if (getMsOnapName() == null) {
setMsOnapName(prop.getProperty("xacml.policy.msEcompName"));
}
policyLogger.info("getMsOnapName => " + getMsOnapName());
setMsPolicyName(prop.getProperty("xacml.policy.msPolicyName"));
policyLogger.info("setMsPolicyName => " + getMsPolicyName());
- //WebApp directories
+ // WebApp directories
setConfigHome(prop.getProperty("xacml.rest.config.webapps") + "Config");
setActionHome(prop.getProperty("xacml.rest.config.webapps") + "Action");
- //Get the Property Values for Dashboard tab Limit
- try{
+ // Get the Property Values for Dashboard tab Limit
+ try {
setLogTableLimit(prop.getProperty("xacml.onap.dashboard.logTableLimit"));
- setSystemAlertTableLimit(prop.getProperty("xacml.onap.dashboard.systemAlertTableLimit"));
- }catch(Exception e){
- policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Dashboard tab Property fields are missing" +e);
+ setSystemAlertTableLimit(
+ prop.getProperty("xacml.onap.dashboard.systemAlertTableLimit"));
+ } catch (Exception e) {
+ policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+ + "Dashboard tab Property fields are missing" + e);
setLogTableLimit("5000");
setSystemAlertTableLimit("2000");
}
System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, "xacml.admin.properties");
} catch (IOException ex) {
- policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured while reading the Smtp properties from xacml.admin.properties file" +ex);
+ policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+ + "Exception Occured while reading the Smtp properties from xacml.admin.properties file"
+ + ex);
}
- //Initialize the FunctionDefinition table at Server Start up
+ // Initialize the FunctionDefinition table at Server Start up
Map<Datatype, List<FunctionDefinition>> functionMap = getFunctionDatatypeMap();
- for ( Entry<Datatype, List<FunctionDefinition>> entry : functionMap.entrySet()) {
+ for (Entry<Datatype, List<FunctionDefinition>> entry : functionMap.entrySet()) {
List<FunctionDefinition> functionDefinations = entry.getValue();
for (FunctionDefinition functionDef : functionDefinations) {
- dropDownMap.put(functionDef.getShortname(),functionDef.getXacmlid());
+ dropDownMap.put(functionDef.getShortname(), functionDef.getXacmlid());
}
}
}
- public static Map<Datatype, List<FunctionDefinition>> getFunctionDatatypeMap() {
- synchronized(mapAccess) {
+ /**
+ * Get FunctionData Type from DB.
+ *
+ * @return list of FunctionData.
+ */
+ public static Map<Datatype, List<FunctionDefinition>> getFunctionDatatypeMap() {
+ synchronized (mapAccess) {
if (mapDatatype2Function == null) {
buildFunctionMaps();
}
return mapDatatype2Function;
}
- public static Map<String, FunctionDefinition> getFunctionIDMap() {
- synchronized(mapAccess) {
+ /**
+ * Get Function ID.
+ *
+ * @return Function ID.
+ */
+ public static Map<String, FunctionDefinition> getFunctionIdMap() {
+ synchronized (mapAccess) {
if (mapID2Function == null) {
buildFunctionMaps();
}
return mapID2Function;
}
- private static void buildFunctionMaps() {
+ private static void buildFunctionMaps() {
mapDatatype2Function = new HashMap<>();
- mapID2Function = new HashMap<>();
+ mapID2Function = new HashMap<>();
List<Object> functiondefinitions = commonClassDao.getData(FunctionDefinition.class);
- for (int i = 0; i < functiondefinitions.size(); i ++) {
+ for (int i = 0; i < functiondefinitions.size(); i++) {
FunctionDefinition value = (FunctionDefinition) functiondefinitions.get(i);
mapID2Function.put(value.getXacmlid(), value);
if (!mapDatatype2Function.containsKey(value.getDatatypeBean())) {
- mapDatatype2Function.put(value.getDatatypeBean(), new ArrayList<FunctionDefinition>());
+ mapDatatype2Function.put(value.getDatatypeBean(),
+ new ArrayList<FunctionDefinition>());
}
mapDatatype2Function.get(value.getDatatypeBean()).add(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{
+ /**
+ * Get Functional Definition data.
+ *
+ * @param request HttpServletRequest.
+ * @param response HttpServletResponse.
+ */
+ @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<>();
ObjectMapper mapper = new ObjectMapper();
- model.put("functionDefinitionDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(FunctionDefinition.class, "shortname")));
+ model.put("functionDefinitionDatas", mapper.writeValueAsString(
+ commonClassDao.getDataByColumn(FunctionDefinition.class, "shortname")));
JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
JSONObject j = new JSONObject(msg);
response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE +"Error while retriving the Function Definition data"+e);
+ } catch (Exception e) {
+ policyLogger.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+ + "Error while retriving the Function Definition data" + e);
}
}
- public PolicyEntity getPolicyEntityData(String scope, String policyName){
+ /**
+ * Get PolicyEntity Data from db.
+ *
+ * @param scope scopeName.
+ * @param policyName policyName.
+ * @return policyEntity data.
+ */
+ public PolicyEntity getPolicyEntityData(String scope, String policyName) {
String key = scope + ":" + policyName;
List<Object> data = commonClassDao.getDataById(PolicyEntity.class, "scope:policyName", key);
return (PolicyEntity) data.get(0);
}
- public static Map<String, Roles> getUserRoles(String userId) {
- Map<String, Roles> scopes = new HashMap<>();
- List<Object> roles = commonClassDao.getDataById(Roles.class, "loginId", userId);
- if (roles != null && !roles.isEmpty()) {
- for (Object role : roles) {
- scopes.put(((Roles) role).getScope(), (Roles) role);
- }
- }
- return scopes;
- }
-
+ /**
+ * Get Policy User Roles from db.
+ *
+ * @param userId LoginID.
+ * @return list of Roles.
+ */
public List<String> getRolesOfUser(String userId) {
List<String> rolesList = new ArrayList<>();
- List<Object> roles = commonClassDao.getDataById(Roles.class, "loginId", userId);
- for (Object role: roles) {
+ List<Object> roles = commonClassDao.getDataById(Roles.class, LOGINID, userId);
+ for (Object role : roles) {
rolesList.add(((Roles) role).getRole());
}
return rolesList;
}
public List<Object> getRoles(String userId) {
- return commonClassDao.getDataById(Roles.class, "loginId", userId);
- }
-
- //Get List of User Roles
- @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{
+ return commonClassDao.getDataById(Roles.class, LOGINID, userId);
+ }
+
+ /**
+ * Get List of User Roles.
+ *
+ * @param request HttpServletRequest.
+ * @param response HttpServletResponse.
+ */
+ @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();
Map<String, Object> model = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();
JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
JSONObject j = new JSONObject(msg);
response.getWriter().write(j.toString());
- }
- catch (Exception e){
- policyLogger.error("Exception Occured"+e);
+ } catch (Exception e) {
+ policyLogger.error("Exception Occured" + e);
}
}
- //Policy tabs Model and View
- @RequestMapping(value= {"/policy", "/policy/Editor" } , method = RequestMethod.GET)
- public ModelAndView view(HttpServletRequest request){
- String myRequestURL = request.getRequestURL().toString();
+ /**
+ * Policy tabs Model and View.
+ *
+ * @param request Request input.
+ * @return view model.
+ */
+ @RequestMapping(value = {"/policy", "/policy/Editor"}, method = RequestMethod.GET)
+ public ModelAndView view(HttpServletRequest request) {
+ getUserRoleFromSession(request);
+ String myRequestUrl = request.getRequestURL().toString();
try {
//
// 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);
+ policyLogger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR
+ + "Exception Occured while loading PAP" + e);
}
Map<String, Object> model = new HashMap<>();
- return new ModelAndView("policy_Editor","model", model);
+ return new ModelAndView("policy_Editor", "model", model);
+ }
+
+ /**
+ * Read the role from session for inserting into the database.
+ *
+ * @param request Request input for Role.
+ */
+ public void getUserRoleFromSession(HttpServletRequest request) {
+ // While user landing on Policy page, fetch the userId and Role from
+ // session.
+ // And, Query the Roles table and if user not exists or else modified
+ // update the Roles table.
+ List<String> roles;
+ List<String> newRoles = new ArrayList<>();
+ String userId = UserUtils.getUserSession(request).getOrgUserId();
+ String name = UserUtils.getUserSession(request).getFullName();
+ @SuppressWarnings("unchecked")
+ Set<UserApp> userApps = UserUtils.getUserSession(request).getUserApps();
+ for (UserApp userApp : userApps) {
+ newRoles.add(userApp.getRole().getName());
+ }
+ List<Object> userRoles = getRoles(userId);
+ 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 filteredRole Role Name.
+ * @param userId User LoginID.
+ */
+ private void savePolicyRoles(String name, String filteredRole, String userId) {
+ UserInfo userInfo = new UserInfo();
+ userInfo.setUserLoginId(userId);
+ userInfo.setUserName(name);
+ commonClassDao.save(userInfo);
+ Roles role = new Roles();
+ role.setName(name);
+ role.setRole(filteredRole);
+ role.setLoginId(userId);
+ commonClassDao.save(role);
+ }
+
+ /**
+ * Filter the list of roles hierarchy wise.
+ *
+ * @param newRoles list of roles from request.
+ * @return
+ */
+ private List<String> filterRole(List<String> newRoles) {
+ List<String> roles = new ArrayList<>();
+ boolean superCheck = false;
+ for (String role : newRoles) {
+ 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())) {
+ 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 roles;
}
public PAPPolicyEngine getPapEngine() {
PolicyController.papEngine = papEngine;
}
+ /**
+ * Get UserName based on LoginID.
+ *
+ * @param createdBy loginID.
+ * @return name.
+ */
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.
+ */
public static boolean getActivePolicy(String query) {
- if(!commonClassDao.getDataByQuery(query, new SimpleBindings()).isEmpty()){
- return true;
- }else{
- return false;
- }
+ return !commonClassDao.getDataByQuery(query, new SimpleBindings()).isEmpty();
}
public void executeQuery(String query) {
commonClassDao.delete(entity);
}
- public List<Object> getData(@SuppressWarnings("rawtypes") Class className){
+ public List<Object> getData(@SuppressWarnings("rawtypes") Class className) {
return commonClassDao.getData(className);
}
- public PolicyVersion getPolicyEntityFromPolicyVersion(String query){
- return (PolicyVersion) commonClassDao.getEntityItem(PolicyVersion.class, "policyName", query);
+ public PolicyVersion getPolicyEntityFromPolicyVersion(String query) {
+ return (PolicyVersion) commonClassDao.getEntityItem(PolicyVersion.class, "policyName",
+ query);
}
- public List<Object> getDataByQuery(String query, SimpleBindings params){
+ public List<Object> getDataByQuery(String query, SimpleBindings params) {
return commonClassDao.getDataByQuery(query, params);
}
-
@SuppressWarnings("rawtypes")
- public Object getEntityItem(Class className, String columname, String key){
+ public Object getEntityItem(Class className, String columname, String key) {
return commonClassDao.getEntityItem(className, columname, key);
}
-
- public void watchPolicyFunction(PolicyVersion entity, String policyName, String mode){
+ /**
+ * Watch Policy Function.
+ *
+ * @param entity PolicyVersion entity.
+ * @param policyName updated policy name.
+ * @param mode type of action rename/delete/import.
+ */
+ public void watchPolicyFunction(PolicyVersion entity, String policyName, String mode) {
PolicyNotificationMail email = new PolicyNotificationMail();
- try {
- email.sendMail(entity, policyName, mode, commonClassDao);
- } catch (MessagingException e) {
- policyLogger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Excepton Occured while Renaming/Deleting a Policy or Scope" + e);
- }
+ email.sendMail(entity, policyName, mode, commonClassDao);
}
- //Switch Version
- public JSONObject switchVersionPolicyContent(String policyName) {
+ /**
+ * Switch Version Policy Content.
+ *
+ * @param pName which is used to find associated versions.
+ * @return list of available versions based on policy name.
+ */
+ public JSONObject switchVersionPolicyContent(String pName) {
+ String policyName = pName;
String dbCheckName = policyName.replace("/", ".");
- if(dbCheckName.contains("Config_")){
+ if (dbCheckName.contains("Config_")) {
dbCheckName = dbCheckName.replace(".Config_", ":Config_");
- }else if(dbCheckName.contains("Action_")){
+ } else if (dbCheckName.contains("Action_")) {
dbCheckName = dbCheckName.replace(".Action_", ":Action_");
- }else if(dbCheckName.contains("Decision_")){
+ } else if (dbCheckName.contains("Decision_MS_")) {
+ dbCheckName = dbCheckName.replace(".Decision_MS_", ":Decision_MS_");
+ } else if (dbCheckName.contains("Decision_")) {
dbCheckName = dbCheckName.replace(".Decision_", ":Decision_");
}
- String[] splitDBCheckName = dbCheckName.split(":");
- String query = "FROM PolicyEntity where policyName like :splitDBCheckName1 and scope = :splitDBCheckName0";
+ String[] splitDbCheckName = dbCheckName.split(":");
+ String query =
+ "FROM PolicyEntity where policyName like :splitDBCheckName1 and scope = :splitDBCheckName0";
SimpleBindings params = new SimpleBindings();
- params.put("splitDBCheckName1", splitDBCheckName[1] + "%");
- params.put("splitDBCheckName0", splitDBCheckName[0]);
+ params.put("splitDBCheckName1", splitDbCheckName[1] + "%");
+ params.put("splitDBCheckName0", splitDbCheckName[0]);
List<Object> policyEntity = commonClassDao.getDataByQuery(query, params);
List<String> av = new ArrayList<>();
- for(Object entity : policyEntity){
+ for (Object entity : policyEntity) {
PolicyEntity pEntity = (PolicyEntity) entity;
String removeExtension = pEntity.getPolicyName().replace(".xml", "");
- String version = removeExtension.substring(removeExtension.lastIndexOf('.')+1);
- av.add(version);
+ String version = removeExtension.substring(removeExtension.lastIndexOf('.') + 1);
+ String userName = getUserId(pEntity, "@ModifiedBy:");
+ av.add(version + " | " + pEntity.getModifiedDate() + " | " + userName);
}
- if(policyName.contains("/")){
+ 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);
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 polVersion = activePolicies.stream()
+ .filter(a -> policyName.equals(a.getPolicyName())).findAny().orElse(null);
+ String[] result = new String[2];
+ UserInfo userCreate = null;
+ UserInfo userModify = null;
+ if (polVersion != null) {
+ userCreate = (UserInfo) getEntityItem(UserInfo.class, "userLoginId",
+ polVersion.getCreatedBy());
+ userModify = (UserInfo) getEntityItem(UserInfo.class, "userLoginId",
+ polVersion.getModifiedBy());
+ }
+
+ result[0] = userCreate != null ? userCreate.getUserName() : SUPERADMIN;
+ result[1] = userModify != null ? userModify.getUserName() : SUPERADMIN;
+
+ return result;
+ }
+
public static String getLogTableLimit() {
return logTableLimit;
}
return mapDatatype2Function;
}
- public static void setMapDatatype2Function(Map<Datatype, List<FunctionDefinition>> mapDatatype2Function) {
+ public static void setMapDatatype2Function(
+ Map<Datatype, List<FunctionDefinition>> mapDatatype2Function) {
PolicyController.mapDatatype2Function = mapDatatype2Function;
}
return file;
}
+ /**
+ * Set File Size limit.
+ *
+ * @param uploadSize value.
+ */
public static void setFileSizeLimit(String uploadSize) {
- //Default size limit is 30MB
+ // Default size limit is 30MB
if (uploadSize == null || uploadSize.isEmpty()) {
fileSizeLimit = 30000000;
- }
- else {
+ } else {
fileSizeLimit = Long.parseLong(uploadSize);
}
}
public static long getFileSizeLimit() {
return fileSizeLimit;
}
+
+ /**
+ * Function to convert date.
+ *
+ * @param dateTTL input date value.
+ * @return
+ */
public String convertDate(String dateTTL) {
String formateDate = null;
- if(dateTTL.contains("-")){
+ if (dateTTL.contains("-")) {
formateDate = dateTTL.replace("-", "/");
}
return formateDate;