From 91d04c64771832a0b8815ffbe1f0f9920320d94d Mon Sep 17 00:00:00 2001 From: Pamela Dragosh Date: Tue, 14 Feb 2017 19:41:00 -0500 Subject: Initial OpenECOMP policy/engine commit Change-Id: I7dbff37733b661643dd4d1caefa3d7dccc361b6e Signed-off-by: Pamela Dragosh --- .../policy/controller/PolicyController.java | 418 +++++++++++++++++++++ 1 file changed, 418 insertions(+) create mode 100644 ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyController.java (limited to 'ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyController.java') diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyController.java new file mode 100644 index 000000000..c4b254c8e --- /dev/null +++ b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyController.java @@ -0,0 +1,418 @@ +/*- + * ============LICENSE_START======================================================= + * ECOMP Policy Engine + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.policy.controller; + + +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import javax.annotation.PostConstruct; +import javax.mail.MessagingException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.filefilter.WildcardFileFilter; +import org.json.JSONObject; +import org.openecomp.policy.admin.PolicyNotificationMail; +import org.openecomp.policy.admin.RESTfulPAPEngine; +import org.openecomp.policy.dao.FunctionDefinitionDao; +import org.openecomp.policy.dao.PolicyEditorScopesDao; +import org.openecomp.policy.dao.PolicyVersionDao; +import org.openecomp.policy.dao.RolesDao; +import org.openecomp.policy.dao.WatchPolicyNotificationDao; +import org.openecomp.policy.model.PDPGroupContainer; +import org.openecomp.policy.model.Roles; +import org.openecomp.policy.rest.XACMLRestProperties; +import org.openecomp.policy.rest.XacmlAdminAuthorization; +import org.openecomp.policy.rest.dao.UserInfoDao; +import org.openecomp.policy.rest.jpa.Datatype; +import org.openecomp.policy.rest.jpa.FunctionDefinition; +import org.openecomp.policy.rest.jpa.PolicyEditorScopes; +import org.openecomp.policy.rest.jpa.PolicyVersion; +import org.openecomp.policy.rest.util.Webapps; +import org.openecomp.portalsdk.core.controller.RestrictedBaseController; +import org.openecomp.portalsdk.core.web.support.JsonMessage; +import org.openecomp.portalsdk.core.web.support.UserUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +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 org.openecomp.policy.xacml.api.XACMLErrorConstants; +import org.openecomp.policy.xacml.api.pap.PAPPolicyEngine; + +import com.att.research.xacml.api.pap.PAPEngine; +import com.att.research.xacml.util.XACMLProperties; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; + + +@Controller +@RequestMapping("/") +public class PolicyController extends RestrictedBaseController { + private static final Logger LOGGER = FlexLogger.getLogger(PolicyController.class); + private static UserInfoDao userInfoDao; + private static PolicyVersionDao policyVersionDao; + private static RolesDao rolesDao; + private static PolicyEditorScopesDao policyEditorScopesDao; + private static WatchPolicyNotificationDao watchPolicyNotificationDao; + // Our authorization object + // + XacmlAdminAuthorization authorizer = new XacmlAdminAuthorization(); + // + // The PAP Engine + // + private static PAPPolicyEngine papEngine; + private Path repositoryPath = null; + private static Path workspacePath; + private static Path gitPath; + public static String logTableLimit; + public static String systemAlertTableLimit; + public static String CONFIG_HOME = PolicyController.getConfigHome(); + public static String ACTION_HOME = PolicyController.getActionHome(); + protected static Map dropDownMap = new HashMap(); + public static Map getDropDownMap() { + return dropDownMap; + } + + public static void setDropDownMap(Map dropDownMap) { + PolicyController.dropDownMap = dropDownMap; + } + + public static String getDomain() { + return XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_DOMAIN, "urn"); + } + + private static final Object mapAccess = new Object(); + private static Map> mapDatatype2Function = null; + private static Map mapID2Function = null; + + private static FunctionDefinitionDao functionDefinitionDao; + + //Smtp Java Mail Properties + public static String smtpHost = null; + public static String smtpPort = null; + public static String smtpUsername = null; + public static String smtpPassword = null; + public static String smtpApplicationName = null; + public static String smtpEmailExtension = null; + //log db Properties + public static String logdbDriver = null; + public static String logdbUrl = null; + public static String logdbUserName = null; + public static String logdbPassword = null; + public static String logdbDialect = null; + + + @Autowired + private PolicyController(UserInfoDao userinfoDao, PolicyVersionDao policyVersionDao, FunctionDefinitionDao functionDefinitionDao, + RolesDao rolesDao, PolicyEditorScopesDao policyEditorScopesDao, WatchPolicyNotificationDao watchPolicyNotificationDao){ + PolicyController.userInfoDao = userinfoDao; + PolicyController.policyVersionDao = policyVersionDao; + PolicyController.functionDefinitionDao = functionDefinitionDao; + PolicyController.rolesDao = rolesDao; + PolicyController.policyEditorScopesDao = policyEditorScopesDao; + PolicyController.watchPolicyNotificationDao = watchPolicyNotificationDao; + } + + public PolicyController() { + } + + @PostConstruct + public void init(){ + Properties prop = new Properties(); + InputStream input = null; + try { + input = new FileInputStream("xacml.admin.properties"); + // load a properties file + prop.load(input); + // get the property values + smtpHost = prop.getProperty("ecomp.smtp.host"); + smtpPort = prop.getProperty("ecomp.smtp.port"); + smtpUsername = prop.getProperty("ecomp.smtp.userName"); + smtpPassword = prop.getProperty("ecomp.smtp.password"); + smtpApplicationName = prop.getProperty("ecomp.application.name"); + smtpEmailExtension = prop.getProperty("ecomp.smtp.emailExtension"); + //Log Database Properties + logdbDriver = prop.getProperty("xacml.log.db.driver"); + logdbUrl = prop.getProperty("xacml.log.db.url"); + logdbUserName = prop.getProperty("xacml.log.db.user"); + logdbPassword = prop.getProperty("xacml.log.db.password"); + logdbDialect = prop.getProperty("ecomp.dialect"); + //Get the Property Values for Dashboard tab Limit + try{ + logTableLimit = prop.getProperty("xacml.ecomp.dashboard.logTableLimit"); + systemAlertTableLimit = prop.getProperty("xacml.ecomp.dashboard.systemAlertTableLimit"); + }catch(Exception e){ + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Dashboard tab Property fields are missing" +e); + logTableLimit = "5000"; + systemAlertTableLimit = "2000"; + } + repositoryPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_REPOSITORY)); + PolicyController.workspacePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_ADMIN_WORKSPACE), getDefaultWorkspace()); + setGitPath(Paths.get(workspacePath.toString(), repositoryPath.getFileName().toString())); + System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, "xacml.admin.properties"); + } catch (IOException ex) { + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured while reading the Smtp properties from xacml.admin.properties file" +ex); + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured while Closing the xacml.admin.properties file" +e); + } + } + } + + //Initialize the FunctionDefinition table at Server Start up + Map> functionMap = getFunctionDatatypeMap(); + for (Datatype id : functionMap.keySet()) { + List functionDefinations = (List) functionMap.get(id); + for (FunctionDefinition functionDef : functionDefinations) { + dropDownMap.put(functionDef.getShortname(),functionDef.getXacmlid()); + } + } + + } + + public static Map> getFunctionDatatypeMap() { + synchronized(mapAccess) { + if (mapDatatype2Function == null) { + buildFunctionMaps(); + } + } + return mapDatatype2Function; + } + + public static Map getFunctionIDMap() { + synchronized(mapAccess) { + if (mapID2Function == null) { + buildFunctionMaps(); + } + } + return mapID2Function; + } + + private static void buildFunctionMaps() { + mapDatatype2Function = new HashMap>(); + mapID2Function = new HashMap(); + List functiondefinitions = functionDefinitionDao.getFunctionDefinition(); + for (int i = 0; i < functiondefinitions.size(); i ++) { + FunctionDefinition value = functiondefinitions.get(i); + mapID2Function.put(value.getXacmlid(), value); + if (mapDatatype2Function.containsKey(value.getDatatypeBean()) == false) { + mapDatatype2Function.put(value.getDatatypeBean(), new ArrayList()); + } + mapDatatype2Function.get(value.getDatatypeBean()).add(value); + } + } + + public static Map getUserRoles(String userId) { + Map scopes = new HashMap(); + List roles = rolesDao.getUserRoles(userId); + if (roles != null && roles.size() > 0) { + for (Roles role : roles) { + scopes.put(role.getScope(), role); + } + } + return scopes; + } + + public static List getRolesOfUser(String userId) { + List rolesList = new ArrayList(); + List roles = rolesDao.getUserRoles(userId); + for (Roles role: roles) { + rolesList.add(role.getRole()); + } + return rolesList; + } + + public static List getRoles(String userId) { + return rolesDao.getUserRoles(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{ + String userId = UserUtils.getUserIdFromCookie(request); + Map model = new HashMap(); + ObjectMapper mapper = new ObjectMapper(); + model.put("userRolesDatas", mapper.writeValueAsString(getRolesOfUser(userId))); + JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); + JSONObject j = new JSONObject(msg); + response.getWriter().write(j.toString()); + } + catch (Exception e){ + e.printStackTrace(); + } + } + + //Policy tabs Model and View + @RequestMapping(value= {"/policy", "/policy/*" }, method = RequestMethod.GET) + public ModelAndView view(HttpServletRequest 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)); + } catch (Exception e) { + LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception Occured while loading PAP"+e); + } + Map model = new HashMap(); + return new ModelAndView("policy_Editor","model", model); + } + + public static String getDefaultWorkspace() { + return "admin"; + } + + public static PAPPolicyEngine getPapEngine() { + return papEngine; + } + + public void setPapEngine(PAPPolicyEngine papEngine) { + PolicyController.papEngine = papEngine; + } + + //Config and Action Directory's + public static String getConfigHome() { + return Webapps.getConfigHome(); + } + + public static String getActionHome() { + return Webapps.getActionHome(); + } + + public static Path getGitPath() { + return gitPath; + } + + public static void setGitPath(Path gitPath) { + PolicyController.gitPath = gitPath; + } + + public static String getUserName(String createdBy) { + String loginId = createdBy; + return userInfoDao.getUserName(loginId); + } + + public static boolean getActivePolicy(String query) { + if(policyVersionDao.getActiveVersionPolicy(query).size() > 0){ + return true; + }else{ + return false; + } + + } + + //Get the Active Version of Policy List from Policy Version table + public static List getListOfActivePolicies(String query){ + return policyVersionDao.getActiveVersionPolicy(query); + } + + public static void updatePolicyVersion(String query) { + policyVersionDao.updateQuery(query); + } + + public static void SaveToPolicyVersion(PolicyVersion policyversion) { + policyVersionDao.Save(policyversion); + } + + public static PolicyVersion getPolicyEntityFromPolicyVersion(String query){ + PolicyVersion policyVersionEntity = policyVersionDao.getPolicyVersionEntityByName(query).get(0); + return policyVersionEntity; + } + + public static void SavePolicyScope(PolicyEditorScopes policyScope){ + policyEditorScopesDao.Save(policyScope); + } + + public static List getListOfPolicyEditorScopes(String query){ + return policyEditorScopesDao.getListOfPolicyScopes(query); + } + + public static void updatePolicyScopeEditorWithQuery(String policyScopeQuery) { + policyEditorScopesDao.updateQuery(policyScopeQuery); + + } + + public static void updatePolicyScopeEditor(PolicyEditorScopes policyScopeQuery) { + policyEditorScopesDao.update(policyScopeQuery); + + } + + public void WatchPolicyFunction(PolicyVersion entity, String policyName, String mode){ + PolicyNotificationMail email = new PolicyNotificationMail(); + try { + email.sendMail(entity, policyName, mode, watchPolicyNotificationDao); + } catch (MessagingException e) { + LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Excepton Occured while Renaming/Deleting a Policy or Scope" + e); + } + } + + //Switch Version + public JSONObject SwitchVersionPolicyContent(File policyFile) { + Path parent = Paths.get(policyFile.toString().substring(0, policyFile.toString().lastIndexOf(File.separator))); + String policyName = policyFile.toString().substring(policyFile.toString().indexOf("repository") +11); + String removeExtension = policyName.replace(".xml", ""); + String activeVersion = removeExtension.substring(removeExtension.lastIndexOf(".")+1); + String dbPolicyName = removeExtension.substring(0, removeExtension.lastIndexOf(".")); + String filterPolicyName = dbPolicyName.substring(dbPolicyName.lastIndexOf(File.separator)+1); + FileFilter fileFilter = new WildcardFileFilter(filterPolicyName + "." + "*" + ".xml"); + File[] files = ((File) parent.toFile()).listFiles(fileFilter); + List av = new ArrayList(); + for(File file : files){ + String fileName = file.toString().substring(file.toString().indexOf("repository") +11); + String removeXMLExtension = fileName.replace(".xml", ""); + String availableVersion = removeXMLExtension.substring(removeXMLExtension.lastIndexOf(".")+1); + av.add(availableVersion); + } + PolicyVersion entity = (PolicyVersion) policyVersionDao.getPolicyVersionEntityByName(dbPolicyName).get(0); + String highestVersion = Integer.toString(entity.getHigherVersion()); + JSONObject el = new JSONObject(); + el.put("activeVersion", activeVersion); + el.put("availableVersions", av); + el.put("highestVersion", highestVersion); + return el; + } + + public static Path getUserWorkspace() { + return PolicyController.workspacePath; + } + +} + -- cgit 1.2.3-korg