diff options
Diffstat (limited to 'ecomp-sdk-app/src/main/java/org/openecomp/policy/controller')
18 files changed, 0 insertions, 9084 deletions
diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/ActionPolicyController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/ActionPolicyController.java deleted file mode 100644 index 0688846b4..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/ActionPolicyController.java +++ /dev/null @@ -1,535 +0,0 @@ -/*- - * ============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.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBElement; - -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.FunctionDefinitionDao; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.dao.ActionPolicyDictDao; -import org.openecomp.policy.rest.jpa.ActionPolicyDict; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -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.servlet.ModelAndView; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionsType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -@Controller -@RequestMapping({"/"}) -public class ActionPolicyController extends RestrictedBaseController{ - private static final Logger logger = FlexLogger.getLogger(ActionPolicyController.class); - - private static FunctionDefinitionDao functionDefinitionDao; - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static ActionPolicyDictDao actionPolciyDictDao; - private static PolicyVersionDao policyVersionDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private ActionPolicyController(RuleAlgorithmsDao ruleAlgorithmsDao, ActionPolicyDictDao actionPolciyDictDao, - PolicyVersionDao policyVersionDao, FunctionDefinitionDao functionDefinitionDao, WatchPolicyNotificationDao policyNotificationDao){ - ActionPolicyController.ruleAlgorithmsDao =ruleAlgorithmsDao; - ActionPolicyController.actionPolciyDictDao =actionPolciyDictDao; - ActionPolicyController.policyVersionDao =policyVersionDao; - ActionPolicyController.functionDefinitionDao = functionDefinitionDao; - ActionPolicyController.policyNotificationDao = policyNotificationDao; - } - - public ActionPolicyController(){} - - private String ruleID = ""; - private ArrayList<Object> attributeList; - protected LinkedList<Integer> ruleAlgoirthmTracker; - public static final String PERFORMER_ATTRIBUTEID = "performer"; - protected Map<String, String> performer = new HashMap<String, String>(); - private ArrayList<Object> ruleAlgorithmList; - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - - @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<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - model.put("functionDefinitionDatas", mapper.writeValueAsString(functionDefinitionDao.getFunctionDefinitionByName())); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - logger.equals(XACMLErrorConstants.ERROR_DATA_ISSUE +"Error while retriving the Function Definition data"+e); - } - } - - @RequestMapping(value={"/policyController/save_Actionpolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveActionPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Action_" + policyData.getPolicyName(); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - Map<String, String> successMap = new HashMap<String, String>(); - Map<String, String> attributeMap = new HashMap<String, String>(); - - List<String> dynamicRuleAlgorithmLabels = new LinkedList<String>(); - List<String> dynamicRuleAlgorithmCombo = new LinkedList<String>(); - List<String> dynamicRuleAlgorithmField1 = new LinkedList<String>(); - List<String> dynamicRuleAlgorithmField2 = new LinkedList<String>(); - - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("option").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("number").toString(); - attributeMap.put(key, value); - } - } - } - - if(policyData.getRuleAlgorithmschoices().size() > 0){ - for(Object attribute : policyData.getRuleAlgorithmschoices()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String label = ((LinkedHashMap<?, ?>) attribute).get("id").toString(); - String key = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField1").toString(); - String rule = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmCombo").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField2").toString(); - dynamicRuleAlgorithmLabels.add(label); - dynamicRuleAlgorithmField1.add(key); - dynamicRuleAlgorithmCombo.add(rule); - dynamicRuleAlgorithmField2.add(value); - } - } - } - - String actionDictValue = policyData.getActionAttributeValue(); - ActionPolicyDict jsonData = ((ActionPolicyDict) actionPolciyDictDao.getActionEntityDatabyId(actionDictValue)); - String actionBodyString = jsonData.getBody(); - String actionDictHeader = jsonData.getHeader(); - String actionDictType = jsonData.getType(); - String actionDictUrl = jsonData.getUrl(); - String actionDictMethod = jsonData.getMethod(); - policyData.setActionDictHeader(actionDictHeader); - policyData.setActionDictType(actionDictType); - policyData.setActionDictUrl(actionDictUrl); - policyData.setActionDictMethod(actionDictMethod); - policyData.setActionAttribute(actionDictValue); - policyData.setDynamicRuleAlgorithmLabels(dynamicRuleAlgorithmLabels); - policyData.setDynamicRuleAlgorithmCombo(dynamicRuleAlgorithmCombo); - policyData.setDynamicRuleAlgorithmField1(dynamicRuleAlgorithmField1); - policyData.setDynamicRuleAlgorithmField2(dynamicRuleAlgorithmField2); - if (actionBodyString != null) { - policyData.setActionBody(actionBodyString); - } - policyData.setDynamicFieldConfigAttributes(attributeMap); - - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - public void PrePopulateActionPolicyData(PolicyAdapter policyAdapter) { - attributeList = new ArrayList<Object>(); - ruleAlgorithmList = new ArrayList<Object>(); - performer.put("PDP", "PDPAction"); - performer.put("PEP", "PEPAction"); - - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("_") + 1, policyAdapter.getPolicyName().lastIndexOf(".")); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy for Action. - TargetType target = policy.getTarget(); - if (target != null) { - // under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AntOfType we have AllOfType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOfType we have Mathch. - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - AttributeDesignatorType designator = match.getAttributeDesignator(); - String attributeId = designator.getAttributeId(); - // Component attributes are saved under Target here we are fetching them back. - // One row is default so we are not adding dynamic componet at index 0. - Map<String, String> attribute = new HashMap<String, String>(); - attribute.put("option", attributeId); - attribute.put("number", value); - attributeList.add(attribute); - } - } - policyAdapter.setAttributes(attributeList); - } - } - } - } - - List<Object> ruleList = policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition(); - // Under rule we have Condition and obligation. - for (Object o : ruleList) { - if (o instanceof RuleType) { - // get the condition data under the rule for rule Algorithms. - ruleID = ((RuleType) o).getRuleId(); - ConditionType condition = ((RuleType) o).getCondition(); - ObligationExpressionsType obligations = ((RuleType) o).getObligationExpressions(); - if (condition != null) { - int index = 0; - ApplyType actionApply = (ApplyType) condition.getExpression().getValue(); - ruleAlgoirthmTracker = new LinkedList<Integer>(); - // Populating Rule Algorithms starting from compound. - prePopulateCompoundRuleAlgorithm(index, actionApply); - } - policyAdapter.setRuleAlgorithmschoices(ruleAlgorithmList); - // get the Obligation data under the rule for Form elements. - if (obligations != null) { - // Under the obligationExpressions we have obligationExpression. - List<ObligationExpressionType> obligationList = obligations.getObligationExpression(); - if (obligationList != null) { - Iterator<ObligationExpressionType> iterObligation = obligationList.iterator(); - while (iterObligation.hasNext()) { - ObligationExpressionType obligation = iterObligation.next(); - policyAdapter.setActionAttributeValue(obligation.getObligationId()); - // Under the obligationExpression we have attributeAssignmentExpression. - List<AttributeAssignmentExpressionType> attributeAssignmentExpressionList = obligation.getAttributeAssignmentExpression(); - if (attributeAssignmentExpressionList != null) { - Iterator<AttributeAssignmentExpressionType> iterAttributeAssignmentExpression = attributeAssignmentExpressionList.iterator(); - while (iterAttributeAssignmentExpression.hasNext()) { - AttributeAssignmentExpressionType attributeAssignmentExpression = iterAttributeAssignmentExpression.next(); - String attributeID = attributeAssignmentExpression.getAttributeId(); - AttributeValueType attributeValue = (AttributeValueType) attributeAssignmentExpression.getExpression().getValue(); - if (attributeID.equals(PERFORMER_ATTRIBUTEID)) { - for (String key : performer.keySet()) { - String keyValue = performer.get(key); - if (keyValue.equals(attributeValue.getContent().get(0))) { - policyAdapter.setActionPerformer(key); - } - } - } - } - } - } - } - } - } - } - } - } - } - - private int prePopulateCompoundRuleAlgorithm(int index, ApplyType actionApply) { - boolean isCompoundRule = true; - List<JAXBElement<?>> jaxbActionTypes = actionApply.getExpression(); - for (JAXBElement<?> jaxbElement : jaxbActionTypes) { - // If There is Attribute Value under Action Type that means we came to the final child - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating rule algoirthm: " + index); - } - // Check to see if Attribute Value exists, if yes then it is not a compound rule - if (jaxbElement.getValue() instanceof AttributeValueType) { - prePopulateRuleAlgorithms(index, actionApply, jaxbActionTypes); - ruleAlgoirthmTracker.addLast(index); - isCompoundRule = false; - index++; - } - } - if (isCompoundRule) { - // As it's compound rule, Get the Apply types - for (JAXBElement<?> jaxbElement : jaxbActionTypes) { - ApplyType innerActionApply = (ApplyType) jaxbElement.getValue(); - index = prePopulateCompoundRuleAlgorithm(index, innerActionApply); - } - // Populate combo box - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating Compound rule algorithm: " + index); - } - Map<String, String> rule = new HashMap<String, String>(); - for (String key : PolicyController.getDropDownMap().keySet()) { - String keyValue = PolicyController.getDropDownMap().get(key); - if (keyValue.equals(actionApply.getFunctionId())) { - rule.put("dynamicRuleAlgorithmCombo", key); - } - } - rule.put("id", "A" + (index +1)); - // Populate Key and values for Compound Rule - rule.put("dynamicRuleAlgorithmField1", "A" + (ruleAlgoirthmTracker.getLast() + 1 )); - ruleAlgoirthmTracker.removeLast(); - rule.put("dynamicRuleAlgorithmField2", "A" + (ruleAlgoirthmTracker.getLast() + 1)); - ruleAlgoirthmTracker.removeLast(); - ruleAlgoirthmTracker.addLast(index); - ruleAlgorithmList.add(rule); - index++; - } - return index; - } - - private void prePopulateRuleAlgorithms(int index, ApplyType actionApply, List<JAXBElement<?>> jaxbActionTypes) { - Map<String, String> ruleMap = new HashMap<String, String>(); - ruleMap.put("id", "A" + (index +1)); - // Populate combo box - Map<String, String> dropDownMap = PolicyController.getDropDownMap(); - for (String key : dropDownMap.keySet()) { - String keyValue = dropDownMap.get(key); - if (keyValue.equals(actionApply.getFunctionId())) { - ruleMap.put("dynamicRuleAlgorithmCombo", key); - } - } - // Populate the key and value fields - // Rule Attribute added as key - if ((jaxbActionTypes.get(0).getValue()) instanceof ApplyType) { - // Get from Attribute Designator - ApplyType innerActionApply = (ApplyType) jaxbActionTypes.get(0).getValue(); - List<JAXBElement<?>> jaxbInnerActionTypes = innerActionApply.getExpression(); - AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerActionTypes.get(0).getValue(); - ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId()); - - // Get from Attribute Value - AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbActionTypes.get(1).getValue(); - String attributeValue = (String) actionConditionAttributeValue.getContent().get(0); - ruleMap.put("dynamicRuleAlgorithmField2", attributeValue); - } - // Rule Attribute added as value - else if (((jaxbActionTypes.get(0).getValue()) instanceof AttributeValueType)) { - AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbActionTypes.get(0).getValue(); - String attributeValue = (String) actionConditionAttributeValue.getContent().get(0); - ruleMap.put("dynamicRuleAlgorithmField2", attributeValue); - - ApplyType innerActionApply = (ApplyType) jaxbActionTypes.get(1).getValue(); - List<JAXBElement<?>> jaxbInnerActionTypes = innerActionApply.getExpression(); - AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerActionTypes.get(0).getValue(); - ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId()); - } - ruleAlgorithmList.add(ruleMap); - } - -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/AdminTabController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/AdminTabController.java deleted file mode 100644 index 67c2d3080..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/AdminTabController.java +++ /dev/null @@ -1,100 +0,0 @@ -/*- - * ============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.PrintWriter; -import java.util.HashMap; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.dao.GlobalRoleSettingsDao; -import org.openecomp.policy.rest.jpa.GlobalRoleSettings; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.JsonMessage; -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.servlet.ModelAndView; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -@Controller -@RequestMapping({"/"}) -public class AdminTabController extends RestrictedBaseController{ - - @Autowired - GlobalRoleSettingsDao globalRoleSettingsDao; - - - - @RequestMapping(value={"/get_LockDownData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getAdminTabEntityData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - model.put("lockdowndata", mapper.writeValueAsString(globalRoleSettingsDao.getGlobalRoleSettings())); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/adminTabController/save_LockDownValue.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveAdminTabLockdownValue(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - GlobalRoleSettings globalRole = mapper.readValue(root.get("lockdowndata").toString(), GlobalRoleSettings.class); - globalRole.setRole("super-admin"); - globalRoleSettingsDao.update(globalRole); - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(this.globalRoleSettingsDao.getGlobalRoleSettings()); - JSONObject j = new JSONObject("{descriptiveScopeDictionaryDatas: " + responseString + "}"); - - out.write(j.toString()); - - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/AutoPushController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/AutoPushController.java deleted file mode 100644 index 699d8ed00..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/AutoPushController.java +++ /dev/null @@ -1,433 +0,0 @@ -/*- - * ============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.IOException; -import java.io.PrintWriter; -import java.net.URI; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Set; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.io.FilenameUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.openecomp.policy.adapter.AutoPushTabAdapter; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.model.PDPGroupContainer; -import org.openecomp.policy.model.PDPPolicyContainer; -import org.openecomp.policy.model.Roles; -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.servlet.ModelAndView; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; - -import com.att.research.xacml.api.pap.PAPException; -//import com.att.research.xacml.api.pap.PDPGroup; -import com.att.research.xacml.api.pap.PDPPolicy; -import org.openecomp.policy.xacml.std.pap.StdPDPGroup; -import org.openecomp.policy.xacml.std.pap.StdPDPPolicy; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -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 AutoPushController extends RestrictedBaseController{ - - private static final Logger logger = FlexLogger.getLogger(AutoPushController.class); - - private PDPGroupContainer container; - protected List<EcompPDPGroup> groups = Collections.synchronizedList(new ArrayList<EcompPDPGroup>()); - - private static PDPPolicyContainer policyContainer; - Set<PDPPolicy> selectedPolicies; - - @Autowired - PolicyVersionDao policyVersionDao; - - public synchronized void refreshGroups() { - synchronized(this.groups) { - this.groups.clear(); - try { - this.groups.addAll(PolicyController.getPapEngine().getEcompPDPGroups()); - } catch (PAPException e) { - String message = "Unable to retrieve Groups from server: " + e; - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + message); - } - - } - } - - @RequestMapping(value={"/get_AutoPushPoliciesContainerData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPolicyGroupContainerData(HttpServletRequest request, HttpServletResponse response){ - try{ - Path gitPath = PolicyController.getGitPath().toAbsolutePath(); - PrintWriter out = response.getWriter(); - JSONObject j = new JSONObject("{data: " + readFileRepository(gitPath,0,0,request).toString() + "}"); - out.write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @SuppressWarnings("rawtypes") - public JSONArray readFileRepository(Path path, int id, int parentid, HttpServletRequest request){ - Set<String> scopes = null; - List<String> roles = null; - String userId = null; - try { - userId = UserUtils.getUserIdFromCookie(request); - } catch (Exception e) { - logger.error("Exception Occured while reading userid from cookie" +e); - } - JSONArray fileJSONArray = new JSONArray(); - File root = new File(path.toString()); - if(parentid==0 ){ - parentid = 1; - } - List<Roles> userRoles = PolicyController.getRoles(userId); - roles = new ArrayList<String>(); - scopes = new HashSet<String>(); - for(Roles userRole: userRoles){ - roles.add(userRole.getRole()); - scopes.add(userRole.getScope()); - } - - for ( File file : root.listFiles()){ - if (!(file.toString().contains(".git") || file.equals(".DS_Store"))) { - if(file.isDirectory()){ - JSONObject el = new JSONObject(); - String fileName = file.getName().toString(); - el.put("categoryId", id+1); - el.put("name", fileName); - el.put("dateModified", lastModified(file)); - el.put("filePath", file.getPath()); - el.put("parentCategoryId", parentid); - el.put("files",readFileRepository(file.toPath(),id+1, id+1, request)); - if (roles.contains("super-admin") || roles.contains("super-editor") || roles.contains("super-guest") ) { - fileJSONArray.put(el); - }else{ - String filePath = file.getPath().toString(); - int startIndex = filePath.indexOf("repository") + 11; - filePath = filePath.substring(startIndex, filePath.length()); - if (scopes.contains(filePath)) { - fileJSONArray.put(el); - } - } - }else{ - JSONObject el = new JSONObject(); - String policyName = ""; - String version = ""; - String fileName = file.getName().toString(); - if(fileName.endsWith(".xml")){ - fileName = fileName.substring(0, fileName.lastIndexOf('.')); - fileName = fileName.substring(0, fileName.lastIndexOf('.')); - //Query the database - String parent = file.toString().substring(file.toString().indexOf("repository")+ 11); - parent = FilenameUtils.removeExtension(parent); - version = parent.substring(parent.indexOf(".")+1); - policyName = parent.substring(0, parent.lastIndexOf(".")); - if(policyName.contains("\\")){ - String scope = policyName.substring(0, policyName.lastIndexOf("\\")); - policyName = scope + "\\" + policyName.substring(policyName.lastIndexOf("\\")); - } - } - el.put("categoryId", id+1); - el.put("name", fileName); - el.put("parentCategoryId", parentid); - el.put("dateModified", lastModified(file)); - el.put("version", version); - el.put("filePath", file.getPath()); - el.put("files",new ArrayList()); - String query = "from PolicyVersion where POLICY_NAME ='" +policyName+"' and ACTIVE_VERSION ='"+version+"'"; - Boolean active = PolicyController.getActivePolicy(query); - if(active){ - if (roles.contains("super-admin") || roles.contains("super-editor") || roles.contains("super-guest") ) { - fileJSONArray.put(el); - }else{ - String filePath = file.getPath().toString(); - int startIndex = filePath.indexOf("repository") + 11; - filePath = filePath.substring(startIndex, filePath.length()); - filePath = filePath.substring(0, filePath.lastIndexOf(File.separator)); - if (scopes.contains(filePath)) { - fileJSONArray.put(el); - } - } - } - } - } - } - return fileJSONArray; - } - - public Date lastModified(File file) { - return new Date(file.lastModified()); - } - - public String getVersion(File file) { - try { - return XACMLPolicyScanner.getVersion(Paths.get(file.getAbsolutePath())); - } catch (IOException e) { - return ""; - } - } - - public String getDomain(File file) { - String filePath = file.getAbsolutePath(); - int startIndex = filePath.indexOf("repository") + 11; - return filePath.substring(startIndex, filePath.length()); - } - - - @RequestMapping(value={"/auto_Push/PushPolicyToPDP.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView PushPolicyToPDPGroup(HttpServletRequest request, HttpServletResponse response) throws Exception { - try { - ArrayList<Object> selectedPDPS = new ArrayList<Object>(); - ArrayList<File> selectedPoliciesInUI = new ArrayList<File>(); - this.groups.addAll(PolicyController.getPapEngine().getEcompPDPGroups()); - ObjectMapper mapper = new ObjectMapper(); - this.container = new PDPGroupContainer(PolicyController.getPapEngine()); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - AutoPushTabAdapter adapter = (AutoPushTabAdapter) mapper.readValue(root.get("pushTabData").toString(), AutoPushTabAdapter.class); - for (Object pdpGroupId : adapter.getPdpDatas()) { - LinkedHashMap<?, ?> selectedPDP = (LinkedHashMap<?, ?>)pdpGroupId; - for(EcompPDPGroup pdpGroup : this.groups){ - if(pdpGroup.getId().equals(selectedPDP.get("id"))){ - selectedPDPS.add(pdpGroup); - } - } - } - - for (Object policyId : adapter.getPolicyDatas()) { - LinkedHashMap<?, ?> selected = (LinkedHashMap<?, ?>)policyId; - Path file = Paths.get(selected.get("filePath").toString()); - selectedPoliciesInUI.add(file.toFile()); - } - - for (Object pdpDestinationGroupId : selectedPDPS) { - Set<PDPPolicy> currentPoliciesInGroup = new HashSet<PDPPolicy>(); - Set<PDPPolicy> selectedPolicies = new HashSet<PDPPolicy>(); - for (File policyId : selectedPoliciesInUI) { - logger.debug("Handlepolicies..." + pdpDestinationGroupId + policyId); - // - // Get the current selection - File selectedItem = policyId; - // - assert (selectedItem != null); - if (selectedItem.isDirectory()) { - //AdminNotification.warn("Select only the Policy"); - return null; - } - // create the id of the target file - // Our standard for file naming is: - // <domain>.<filename>.<version>.xml - // since the file name usually has a ".xml", we need to strip - // that - // before adding the other parts - String name = selectedItem.getName(); - if(name.endsWith(".xml")){ - name = name.substring(0, name.length() - 4); - name = name.substring(0, name.lastIndexOf(".")); - } - String id = name; - if (id.endsWith(".xml")) { - id = id.substring(0, id.length() - 4); - id = id.substring(0, id.lastIndexOf(".")); - } - // add on the version string - String version = getVersion(selectedItem); - id += "." + version; - // put the .xml on the end - id += ".xml"; - // track on the domain in front. Do this one level at a time - // until we - // reach one of the roots - String domain = getDomain(selectedItem); - String mainDomain = domain.substring(0, domain.lastIndexOf(File.separator) ); - logger.info("print the main domain value"+mainDomain); - String path = mainDomain.replace('\\', '.'); - if(path.contains("/")){ - path = mainDomain.replace('/', '.'); - logger.info("print the path:" +path); - } - id = path + "." + id; - // Default policy to be Root policy; user can change to deferred - // later - URI selectedURI = selectedItem.toURI(); - StdPDPPolicy selectedPolicy = null; - try { - // - // Create the policy - selectedPolicy = new StdPDPPolicy(id, true, name, selectedURI); - } catch (IOException e) { - logger.error("Unable to create policy '" + id + "': "+ e.getMessage()); - //AdminNotification.warn("Unable to create policy '" + id + "': " + e.getMessage()); - } - StdPDPGroup selectedGroup = (StdPDPGroup) pdpDestinationGroupId; - if (selectedPolicy != null) { - // Add Current policies from container - for (EcompPDPGroup group : container.getGroups()) { - if (group.getId().equals(selectedGroup.getId())) { - currentPoliciesInGroup.addAll(group.getPolicies()); - } - } - // copy policy to PAP - try { - PolicyController.getPapEngine().copyPolicy(selectedPolicy, (StdPDPGroup) pdpDestinationGroupId); - } catch (PAPException e) { - e.printStackTrace(); - return null; - } - selectedPolicies.add(selectedPolicy); - } - } - StdPDPGroup pdpGroup = (StdPDPGroup) pdpDestinationGroupId; - StdPDPGroup updatedGroupObject = new StdPDPGroup(pdpGroup.getId(), pdpGroup.isDefaultGroup(), pdpGroup.getName(), pdpGroup.getDescription(), pdpGroup.getDirectory()); - updatedGroupObject.setEcompPdps(pdpGroup.getEcompPdps()); - updatedGroupObject.setPipConfigs(pdpGroup.getPipConfigs()); - updatedGroupObject.setStatus(pdpGroup.getStatus()); - - // replace the original set of Policies with the set from the - // container (possibly modified by the user) - // do not allow multiple copies of same policy - Iterator<PDPPolicy> policyIterator = currentPoliciesInGroup.iterator(); - logger.debug("policyIterator....." + selectedPolicies); - while (policyIterator.hasNext()) { - PDPPolicy existingPolicy = policyIterator.next(); - for (PDPPolicy selPolicy : selectedPolicies) { - if (selPolicy.getName().equals(existingPolicy.getName())) { - if (selPolicy.getVersion().equals(existingPolicy.getVersion())) { - if (selPolicy.getId().equals(existingPolicy.getId())) { - policyIterator.remove(); - logger.debug("Removing policy: " + selPolicy); - break; - } - } else { - policyIterator.remove(); - logger.debug("Removing Old Policy version: "+ selPolicy); - break; - } - } - } - } - - currentPoliciesInGroup.addAll(selectedPolicies); - updatedGroupObject.setPolicies(currentPoliciesInGroup); - this.container.updateGroup(updatedGroupObject); - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - out.write(j.toString()); - return null; - } - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - @RequestMapping(value={"/auto_Push/remove_GroupPolicies.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView removePDPGroup(HttpServletRequest request, HttpServletResponse response) throws Exception { - try { - this.container = new PDPGroupContainer(PolicyController.getPapEngine()); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - StdPDPGroup group = (StdPDPGroup)mapper.readValue(root.get("activePdpGroup").toString(), StdPDPGroup.class); - JsonNode removePolicyData = root.get("data"); - policyContainer = new PDPPolicyContainer(group); - if(removePolicyData.size() > 0){ - for(int i = 0 ; i < removePolicyData.size(); i++){ - String data = removePolicyData.get(i).toString(); - AutoPushController.policyContainer.removeItem(data); - } - Set<PDPPolicy> changedPolicies = new HashSet<PDPPolicy>(); - changedPolicies.addAll((Collection<PDPPolicy>) AutoPushController.policyContainer.getItemIds()); - StdPDPGroup updatedGroupObject = new StdPDPGroup(group.getId(), group.isDefaultGroup(), group.getName(), group.getDescription(),null); - updatedGroupObject.setPolicies(changedPolicies); - updatedGroupObject.setEcompPdps(group.getEcompPdps()); - updatedGroupObject.setPipConfigs(group.getPipConfigs()); - updatedGroupObject.setStatus(group.getStatus()); - this.container.updateGroup(updatedGroupObject); - } - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - - out.write(j.toString()); - - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - -}
\ No newline at end of file diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateBRMSParamController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateBRMSParamController.java deleted file mode 100644 index 7a2b24e84..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateBRMSParamController.java +++ /dev/null @@ -1,723 +0,0 @@ -/*- - * ============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.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBElement; - -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.dao.BRMSParamTemplateDao; -import org.openecomp.policy.rest.jpa.BRMSParamTemplate; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -@Controller -@RequestMapping("/") -public class CreateBRMSParamController extends RestrictedBaseController { - private static final Logger logger = FlexLogger.getLogger(CreateBRMSParamController.class); - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static BRMSParamTemplateDao bRMSParamTemplateDao; - private static PolicyVersionDao policyVersionDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private CreateBRMSParamController(RuleAlgorithmsDao ruleAlgorithmsDao, BRMSParamTemplateDao bRMSParamTemplateDao, PolicyVersionDao policyVersionDao, - WatchPolicyNotificationDao policyNotificationDao){ - CreateBRMSParamController.policyVersionDao = policyVersionDao; - CreateBRMSParamController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreateBRMSParamController.bRMSParamTemplateDao = bRMSParamTemplateDao; - CreateBRMSParamController.policyNotificationDao = policyNotificationDao; - } - - public CreateBRMSParamController(){} - protected PolicyAdapter policyAdapter = null; - private ArrayList<Object> attributeList; - private String ruleID = ""; - - private HashMap<String, String> dynamicLayoutMap; - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - @RequestMapping(value={"/policyController/getBRMSTemplateData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView getBRMSParamPolicyRuleData(HttpServletRequest request, HttpServletResponse response) throws Exception{ - dynamicLayoutMap = new HashMap<String, String>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - String rule = findRule(root.get("policyData").toString().replaceAll("^\"|\"$", "")); - generateUI(rule); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(dynamicLayoutMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - - protected String findRule(String ruleTemplate) { - for (BRMSParamTemplate bRMSParamTemplate: bRMSParamTemplateDao.getBRMSParamTemplateData()){ - if(bRMSParamTemplate.getRuleName().equals(ruleTemplate)){ - return bRMSParamTemplate.getRule(); - } - } - return null; - } - - protected void generateUI(String rule) { - if(rule!=null){ - try { - String params = ""; - Boolean flag = false; - Boolean comment = false; - String lines[] = rule.split("\n"); - for(String line : lines){ - if (line.isEmpty() || line.startsWith("//")) { - continue; - } - if (line.startsWith("/*")) { - comment = true; - continue; - } - if (line.contains("//")) { - line = line.split("\\/\\/")[0]; - } - if (line.contains("/*")) { - comment = true; - if (line.contains("*/")) { - try { - comment = false; - line = line.split("\\/\\*")[0] - + line.split("\\*\\/")[1].replace("*/", ""); - } catch (Exception e) { - line = line.split("\\/\\*")[0]; - } - } else { - line = line.split("\\/\\*")[0]; - } - } - if (line.contains("*/")) { - comment = false; - try { - line = line.split("\\*\\/")[1].replace("*/", ""); - } catch (Exception e) { - line = ""; - } - } - if (comment) { - continue; - } - if (flag) { - params = params + line; - } - if (line.contains("declare Params")) { - params = params + line; - flag = true; - } - if (line.contains("end") && flag) { - break; - } - } - params = params.replace("declare Params", "").replace("end", "") - .replaceAll("\\s+", ""); - String[] components = params.split(":"); - String caption = ""; - for (int i = 0; i < components.length; i++) { - String type = ""; - if (i == 0) { - caption = components[i]; - } - if(caption.equals("")){ - break; - } - String nextComponent = ""; - try { - nextComponent = components[i + 1]; - } catch (Exception e) { - nextComponent = components[i]; - } - if (nextComponent.startsWith("String")) { - type = "String"; - createField(caption, type); - caption = nextComponent.replace("String", ""); - } else if (nextComponent.startsWith("int")) { - type = "int"; - createField(caption, type); - caption = nextComponent.replace("int", ""); - } - } - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e); - } - } - } - - private String convertDate(String dateTTL) { - String formateDate = null; - String[] date = dateTTL.split("T"); - String[] parts = date[0].split("-"); - - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - return formateDate; - } - - private void createField(String caption, String type) { - dynamicLayoutMap.put(caption, type); - } - - @RequestMapping(value={"/policyController/save_BRMSParamPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveBRMSParamPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL); - policyData.setTtlDate(newDate); - } - - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_BRMS_Param_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - Map<String, String> successMap = new HashMap<String, String>(); - Map<String, String> attributeMap = new HashMap<String, String>(); - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("key").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("value").toString(); - attributeMap.put(key, value); - } - } - } - - policyData.setEcompName("DROOLS"); - policyData.setConfigName("BRMS_PARAM_RULE"); - policyData.setDynamicFieldConfigAttributes(attributeMap); - //convert drl rule and UI parameters into a map - Map<String, String> drlRuleAndUIParams = new HashMap<String, String>(); - // If there is any dynamic field create the matches here - String key="templateName"; - String value=(String) policyData.getRuleName(); - drlRuleAndUIParams.put(key, value); - System.out.println(policyData.getRuleData()); - if(policyData.getRuleData().size() > 0){ - for(Object keyValue: policyData.getRuleData().keySet()){ - drlRuleAndUIParams.put(keyValue.toString(), policyData.getRuleData().get(keyValue).toString()); - } - } - policyData.setBRMSParamBody(drlRuleAndUIParams); - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - public void PrePopulateBRMSParamPolicyData(PolicyAdapter policyAdapter) { - attributeList = new ArrayList<Object>(); - dynamicLayoutMap = new HashMap<String, String>(); - if (policyAdapter.getPolicyData() instanceof PolicyType) { - PolicyType policy = (PolicyType) policyAdapter.getPolicyData(); - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - // policy name value is the policy name without any prefix and - // Extensions. - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("BRMS_Param_") +11, policyAdapter.getPolicyName().lastIndexOf(".")); - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating form data for BRMS RAW Policy selected:" + policyAdapter.getPolicyName()); - } - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Set Attributes. - AdviceExpressionsType expressionTypes = ((RuleType)policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().get(0)).getAdviceExpressions(); - for( AdviceExpressionType adviceExpression: expressionTypes.getAdviceExpression()){ - for(AttributeAssignmentExpressionType attributeAssignment: adviceExpression.getAttributeAssignmentExpression()){ - if(attributeAssignment.getAttributeId().startsWith("key:")){ - Map<String, String> attribute = new HashMap<String, String>(); - String key = attributeAssignment.getAttributeId().replace("key:", ""); - attribute.put("key", key); - JAXBElement<AttributeValueType> attributevalue = (JAXBElement<AttributeValueType>) attributeAssignment.getExpression(); - String value = (String) attributevalue.getValue().getContent().get(0); - attribute.put("value", value); - attributeList.add(attribute); - } - } - policyAdapter.setAttributes(attributeList); - } - String ruleConfigName = policyAdapter.getDirPath().replace(File.separator, ".")+ "." + policyAdapter.getOldPolicyFileName() + ".txt"; - policyAdapter.setConfigBodyPath(ruleConfigName); - paramUIGenerate(policyAdapter); - // Get the target data under policy. - policyAdapter.setDynamicLayoutMap(dynamicLayoutMap); - if(policyAdapter.getDynamicLayoutMap().size() > 0){ - LinkedHashMap<String,String> drlRule = new LinkedHashMap<String, String>(); - for(Object keyValue: policyAdapter.getDynamicLayoutMap().keySet()){ - drlRule.put(keyValue.toString(), policyAdapter.getDynamicLayoutMap().get(keyValue).toString()); - } - policyAdapter.setRuleData(drlRule); - } - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - int index = 0; - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - - if (index == 3){ - policyAdapter.setRiskType(value); - } - - if (index == 4){ - policyAdapter.setRiskLevel(value); - } - - if (index == 5){ - policyAdapter.setGuard(value); - } - if (index == 6 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - - index++; - } - } - } - } - } - } - } - } - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - // This method generates the UI from rule configuration - private void paramUIGenerate(PolicyAdapter policyAdapter) { - String fileLocation = null; - String fileName = policyAdapter.getConfigBodyPath(); - if (fileName != null) { - fileLocation = PolicyController.getConfigHome(); - } - if (logger.isDebugEnabled()) { - logger.debug("Attempting to read file from the location: " + fileLocation); - } - if (fileLocation == null) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Error with the FileName: " + fileName); - return; - } - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - for (File file : listOfFiles) { - if (file.isFile() && file.getName().contains(fileName) - && file.toString().endsWith(".txt")) { - // Reading the file - try { - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - while (line != null) { - sb.append(line); - sb.append("\n"); - line = br.readLine(); - } - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+ e.getMessage()); - } - String params = ""; - Boolean flag = false; - Boolean comment = false; - for (String line : Files.readAllLines(Paths.get(file.toString()))) { - if (line.isEmpty() || line.startsWith("//")) { - continue; - } - if(line.contains("<$%BRMSParamTemplate=")){ - String value = line.substring(line.indexOf("<$%"),line.indexOf("%$>")); - value = value.replace("<$%BRMSParamTemplate=", ""); - policyAdapter.setRuleName(value); - } - if (line.startsWith("/*")) { - comment = true; - continue; - } - if (line.contains("//")) { - if(!(line.contains("http://") || line.contains("https://"))){ - line = line.split("\\/\\/")[0]; - } - } - if (line.contains("/*")) { - comment = true; - if (line.contains("*/")) { - try { - comment = false; - line = line.split("\\/\\*")[0] - + line.split("\\*\\/")[1].replace( - "*/", ""); - } catch (Exception e) { - line = line.split("\\/\\*")[0]; - } - } else { - line = line.split("\\/\\*")[0]; - } - } - if (line.contains("*/")) { - comment = false; - try { - line = line.split("\\*\\/")[1] - .replace("*/", ""); - } catch (Exception e) { - line = ""; - } - } - if (comment) { - continue; - } - if (flag) { - params = params + line; - } - if (line.contains("rule \"Params\"")) { - params = params + line; - flag = true; - } - if (line.contains("end") && flag) { - break; - } - } - params = params.replaceAll("\\s+", "").replace("rule\"Params\"salience1000whenthenParamsparams=newParams();","") - .replace("insert(params);end", "") - .replace("params.set", ""); - String[] components = params.split(";"); - if(components!= null && components.length > 0){ - for (int i = 0; i < components.length; i++) { - String value = null; - String caption = components[i].substring(0, - components[i].indexOf("(")); - caption = caption.substring(0, 1).toLowerCase() + caption.substring(1); - if (components[i].contains("(\"")) { - value = components[i] - .substring(components[i].indexOf("(\""), - components[i].indexOf("\")")) - .replace("(\"", "").replace("\")", ""); - } else { - value = components[i] - .substring(components[i].indexOf("("), - components[i].indexOf(")")) - .replace("(", "").replace(")", ""); - } - dynamicLayoutMap.put(caption, value); - - } - } - } catch (FileNotFoundException e) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage()); - } catch (IOException e1) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+ e1.getMessage()); - } - } - } - } - - // set View Rule - @RequestMapping(value={"/policyController/ViewBRMSParamPolicyRule.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView setViewRule(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - - String body = ""; - - body = "/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " + - "<$%BRMSParamTemplate=" + policyData.getRuleName() + "%$> \n */ \n"; - body = body + findRule((String) policyData.getRuleName()) + "\n"; - String generatedRule = "rule \"Params\" \n\tsalience 1000 \n\twhen\n\tthen\n\t\tParams params = new Params();"; - - if(policyData.getRuleData().size() > 0){ - for(Object keyValue: policyData.getRuleData().keySet()){ - String key = keyValue.toString().substring(0, 1).toUpperCase() + keyValue.toString().substring(1); - if (keyValue.equals("String")) { - generatedRule = generatedRule + "\n\t\tparams.set" - + key + "(\"" - + policyData.getRuleData().get(keyValue).toString() + "\");"; - } else { - generatedRule = generatedRule + "\n\t\tparams.set" - + key + "(" - + policyData.getRuleData().get(keyValue).toString() + ");"; - } - } - } - generatedRule = generatedRule - + "\n\t\tinsert(params);\nend"; - logger.info("New rule generated with :" + generatedRule); - body = body + generatedRule; - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(body); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - return null; - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateBRMSRawController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateBRMSRawController.java deleted file mode 100644 index 6dcd8400b..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateBRMSRawController.java +++ /dev/null @@ -1,440 +0,0 @@ -/*- - * ============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.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBElement; - -//import org.apache.commons.logging.Log; -//import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -@Controller -@RequestMapping("/") -public class CreateBRMSRawController extends RestrictedBaseController { - - private static final Logger logger = FlexLogger.getLogger(CreateBRMSRawController.class); - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static PolicyVersionDao policyVersionDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private CreateBRMSRawController(RuleAlgorithmsDao ruleAlgorithmsDao, PolicyVersionDao policyVersionDao, WatchPolicyNotificationDao policyNotificationDao){ - CreateBRMSRawController.policyVersionDao = policyVersionDao; - CreateBRMSRawController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreateBRMSRawController.policyNotificationDao = policyNotificationDao; - } - - public CreateBRMSRawController(){} - protected PolicyAdapter policyAdapter = null; - private ArrayList<Object> attributeList; - private String ruleID = ""; - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - - - @RequestMapping(value={"/policyController/save_BRMSRawPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveBRMSRawPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL); - policyData.setTtlDate(newDate); - } - - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_BRMS_Raw_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - Map<String, String> successMap = new HashMap<String, String>(); - Map<String, String> attributeMap = new HashMap<String, String>(); - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("key").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("value").toString(); - attributeMap.put(key, value); - } - } - } - - - policyData.setEcompName("DROOLS"); - policyData.setConfigName("BRMS_RAW_RULE"); - policyData.setDynamicFieldConfigAttributes(attributeMap); - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - private String convertDate(String dateTTL) { - String formateDate = null; - String[] date = dateTTL.split("T"); - String[] parts = date[0].split("-"); - - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - return formateDate; - } - - public void PrePopulateBRMSRawPolicyData(PolicyAdapter policyAdapter) { - attributeList = new ArrayList<Object>(); - if (policyAdapter.getPolicyData() instanceof PolicyType) { - PolicyType policy = (PolicyType) policyAdapter.getPolicyData(); - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - // policy name value is the policy name without any prefix and - // Extensions. - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("BRMS_Raw_") +9, policyAdapter.getPolicyName().lastIndexOf(".")); - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating form data for BRMS RAW Policy selected:" + policyAdapter.getPolicyName()); - } - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Set Attributes. - AdviceExpressionsType expressionTypes = ((RuleType)policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().get(0)).getAdviceExpressions(); - for( AdviceExpressionType adviceExpression: expressionTypes.getAdviceExpression()){ - for(AttributeAssignmentExpressionType attributeAssignment: adviceExpression.getAttributeAssignmentExpression()){ - if(attributeAssignment.getAttributeId().startsWith("key:")){ - Map<String, String> attribute = new HashMap<String, String>(); - String key = attributeAssignment.getAttributeId().replace("key:", ""); - attribute.put("key", key); - JAXBElement<AttributeValueType> attributevalue = (JAXBElement<AttributeValueType>) attributeAssignment.getExpression(); - String value = (String) attributevalue.getValue().getContent().get(0); - attribute.put("value", value); - attributeList.add(attribute); - } - } - policyAdapter.setAttributes(attributeList); - } - String ruleConfigName = policyAdapter.getDirPath().replace(File.separator, ".")+ "." + policyAdapter.getOldPolicyFileName() + "."; - policyAdapter.setConfigBodyPath(ruleConfigName); - // Get the target data under policy. - policyAdapter.setConfigBodyData(readFile(policyAdapter)); - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - int index = 0; - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - - if (index == 3){ - policyAdapter.setRiskType(value); - } - - if (index == 4){ - policyAdapter.setRiskLevel(value); - } - - if (index == 5){ - policyAdapter.setGuard(value); - } - if (index == 6 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - - index++; - } - } - } - } - } - } - } - } - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - - // Here we are reading the configurations file - protected String readFile(PolicyAdapter policyAdapter) { - String fileLocation = null; - String fileName = policyAdapter.getConfigBodyPath(); - if (fileName != null ) { - fileLocation = PolicyController.getConfigHome(); - } - if (fileLocation == null) { - return fileLocation; - } - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - for (File file : listOfFiles) { - if (file.isFile() && file.getName().contains(fileName) && file.toString().endsWith(".txt")) { - // Reading the file - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - while (line != null) { - sb.append(line); - sb.append("\n"); - line = br.readLine(); - } - return sb.toString(); - } catch (FileNotFoundException e) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage()); - } catch (IOException e1) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e1.getMessage()); - } - } - } - return null; - } - -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateClosedLoopFaultController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateClosedLoopFaultController.java deleted file mode 100644 index b41f7e0ef..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateClosedLoopFaultController.java +++ /dev/null @@ -1,889 +0,0 @@ -/*- - * ============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.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.json.Json; -import javax.json.JsonReader; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.adapter.ClosedLoopFaultBody; -import org.openecomp.policy.adapter.ClosedLoopFaultTriggerUISignatures; -import org.openecomp.policy.adapter.ClosedLoopSignatures; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.dao.VarbindDictionaryDao; -import org.openecomp.policy.rest.jpa.EcompName; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.policy.rest.jpa.VarbindDictionary; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -@Controller -@RequestMapping("/") -public class CreateClosedLoopFaultController extends RestrictedBaseController{ - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static PolicyVersionDao policyVersionDao; - private static VarbindDictionaryDao varbindDictionaryDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private CreateClosedLoopFaultController(RuleAlgorithmsDao ruleAlgorithmsDao, PolicyVersionDao policyVersionDao, VarbindDictionaryDao varbindDictionaryDao, - WatchPolicyNotificationDao policyNotificationDao){ - CreateClosedLoopFaultController.policyVersionDao = policyVersionDao; - CreateClosedLoopFaultController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreateClosedLoopFaultController.varbindDictionaryDao = varbindDictionaryDao; - CreateClosedLoopFaultController.policyNotificationDao = policyNotificationDao; - } - - public CreateClosedLoopFaultController(){} - protected PolicyAdapter policyAdapter = null; - private String ruleID = ""; - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - @RequestMapping(value={"/policyController/save_Faultpolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveFaultPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - TrapDatas trapDatas = mapper.readValue(root.get("trapData").toString(), TrapDatas.class); - TrapDatas faultDatas = mapper.readValue(root.get("faultData").toString(), TrapDatas.class); - ClosedLoopGridJSONData policyJsonData = mapper.readValue(root.get("policyData").get("policy").toString(), ClosedLoopGridJSONData.class); - ClosedLoopFaultBody jsonBody = mapper.readValue(root.get("policyData").get("policy").get("jsonBodyData").toString(), ClosedLoopFaultBody.class); - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL); - policyData.setTtlDate(newDate); - } - - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - ArrayList<Object> trapSignatureDatas = new ArrayList<Object>(); - if(trapDatas.getTrap1() != null){ - trapSignatureDatas.add(trapDatas); - } - ArrayList<Object> faultSignatureDatas = new ArrayList<Object>(); - if(faultDatas.getTrap1() != null){ - faultSignatureDatas.add(faultDatas); - } - - String resultBody = ""; - if(!policyJsonData.getConnecttriggerSignatures().isEmpty()){ - resultBody = resultBody + "("; - for(int i = policyJsonData.getConnecttriggerSignatures().size()-1; i>=0 ; i--){ - String connectBody = connectTriggerSignature(i, policyJsonData.getConnecttriggerSignatures(), trapSignatureDatas.get(0)); - resultBody = resultBody + connectBody; - } - resultBody = resultBody + ")"; - }else{ - if(!trapSignatureDatas.isEmpty()){ - resultBody = callTrap("nill", trapSignatureDatas.get(0)); - } - } - ClosedLoopSignatures triggerSignatures = new ClosedLoopSignatures(); - triggerSignatures.setSignatures(resultBody); - if(policyData.getClearTimeOut() != null){ - triggerSignatures.setTimeWindow(Integer.parseInt(policyData.getClearTimeOut())); - triggerSignatures.setTrapMaxAge(Integer.parseInt(policyData.getTrapMaxAge())); - ClosedLoopFaultTriggerUISignatures uiTriggerSignatures = new ClosedLoopFaultTriggerUISignatures(); - if(!trapSignatureDatas.isEmpty()){ - uiTriggerSignatures.setSignatures(getUITriggerSignature("Trap", trapSignatureDatas.get(0))); - if(!policyJsonData.getConnecttriggerSignatures().isEmpty()){ - uiTriggerSignatures.setConnectSignatures(getUIConnectTraps(policyJsonData.getConnecttriggerSignatures())); - } - } - jsonBody.setTriggerSignaturesUsedForUI(uiTriggerSignatures); - jsonBody.setTriggerTimeWindowUsedForUI(Integer.parseInt(policyData.getClearTimeOut())); - jsonBody.setTrapMaxAgeUsedForUI(Integer.parseInt(policyData.getTrapMaxAge())); - } - - jsonBody.setTriggerSignatures(triggerSignatures); - String faultBody = ""; - if(!policyJsonData.getConnectVerificationSignatures().isEmpty()){ - faultBody = faultBody + "("; - for(int i = policyJsonData.getConnectVerificationSignatures().size()-1; i>=0 ; i--){ - String connectBody = connectTriggerSignature(i, policyJsonData.getConnectVerificationSignatures(), faultSignatureDatas.get(0)); - faultBody = faultBody + connectBody; - } - faultBody = faultBody + ")"; - }else{ - if(!faultSignatureDatas.isEmpty()){ - faultBody = callTrap("nill", faultSignatureDatas.get(0)); - } - } - ClosedLoopSignatures faultSignatures = new ClosedLoopSignatures(); - faultSignatures.setSignatures(faultBody); - if(policyData.getVerificationclearTimeOut() != null){ - faultSignatures.setTimeWindow(Integer.parseInt(policyData.getVerificationclearTimeOut())); - ClosedLoopFaultTriggerUISignatures uifaultSignatures = new ClosedLoopFaultTriggerUISignatures(); - if(!faultSignatureDatas.isEmpty()){ - uifaultSignatures.setSignatures(getUITriggerSignature("Fault", faultSignatureDatas.get(0))); - if(!policyJsonData.getConnectVerificationSignatures().isEmpty()){ - uifaultSignatures.setConnectSignatures(getUIConnectTraps(policyJsonData.getConnectVerificationSignatures())); - } - } - - jsonBody.setVerificationSignaturesUsedForUI(uifaultSignatures); - jsonBody.setVerfificationTimeWindowUsedForUI(Integer.parseInt(policyData.getVerificationclearTimeOut())); - } - jsonBody.setVerificationSignatures(faultSignatures); - ObjectWriter om = new ObjectMapper().writer(); - String json = om.writeValueAsString(jsonBody); - policyData.setJsonBody(json); - - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_Fault_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - Map<String, String> successMap = new HashMap<String, String>(); - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> versionlist = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (versionlist.size() > 0) { - for(int i = 0; i < versionlist.size(); i++) { - PolicyVersion entityItem = versionlist.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - //connect traps data set to JSON Body as String - @SuppressWarnings("rawtypes") - private String getUIConnectTraps(ArrayList<Object> connectTrapSignatures) { - String resultBody = ""; - String connectMainBody = ""; - for(int j = 0; j < connectTrapSignatures.size(); j++){ - Map<String, String> connectTraps = (Map<String, String>)connectTrapSignatures.get(j); - String connectBody = ""; - Object object = connectTraps; - if(object instanceof LinkedHashMap<?, ?>){ - String notBox = ""; - if(((LinkedHashMap) object).keySet().contains("notBox")){ - notBox = ((LinkedHashMap) object).get("notBox").toString(); - } - String connectTrap1 = ((LinkedHashMap) object).get("connectTrap1").toString(); - String trapCount1 = ((LinkedHashMap) object).get("trapCount1").toString(); - String operatorBox = ((LinkedHashMap) object).get("operatorBox").toString(); - String connectTrap2 = ((LinkedHashMap) object).get("connectTrap2").toString(); - String trapCount2 = ((LinkedHashMap) object).get("trapCount2").toString(); - connectBody = notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!" + connectTrap2 + "@!" + trapCount2 + "#!?!"; - } - resultBody = resultBody + connectBody; - } - connectMainBody = connectMainBody + resultBody; - return connectMainBody; - } - - - - // get Trigger signature from JSON body - private String getUITriggerSignature(String trap, Object object2) { - String triggerBody = ""; - TrapDatas trapDatas = (TrapDatas) object2; - ArrayList<Object> attributeList = new ArrayList<>(); - // Read the Trap - if(trap.startsWith("Trap")){ - if(trapDatas.getTrap1()!= null){ - attributeList.add(trapDatas.getTrap1()); - } - if(trapDatas.getTrap2()!= null){ - attributeList.add(trapDatas.getTrap2()); - } - if(trapDatas.getTrap3()!= null){ - attributeList.add(trapDatas.getTrap3()); - } - if(trapDatas.getTrap4()!= null){ - attributeList.add(trapDatas.getTrap4()); - } - if(trapDatas.getTrap5()!= null){ - attributeList.add(trapDatas.getTrap5()); - } - if(trapDatas.getTrap6()!= null){ - attributeList.add(trapDatas.getTrap6()); - } - }else{ - if(trap.equals("Fault")){ - if(trapDatas.getTrap1()!= null){ - attributeList.add(trapDatas.getTrap1()); - } - if(trapDatas.getTrap2()!= null){ - attributeList.add(trapDatas.getTrap2()); - } - if(trapDatas.getTrap3()!= null){ - attributeList.add(trapDatas.getTrap3()); - } - if(trapDatas.getTrap4()!= null){ - attributeList.add(trapDatas.getTrap4()); - } - if(trapDatas.getTrap5()!= null){ - attributeList.add(trapDatas.getTrap5()); - } - if(trapDatas.getTrap6()!= null){ - attributeList.add(trapDatas.getTrap6()); - } - } - } - - for(int j = 0; j < attributeList.size(); j++){ - String signatureBody = ""; - ArrayList<Object> connectTraps = (ArrayList<Object>) attributeList.get(j); - for(int i =0 ; i < connectTraps.size(); i++){ - String connectBody = ""; - Object object = connectTraps.get(i); - if(object instanceof LinkedHashMap<?, ?>){ - String notBox = ""; - if(((LinkedHashMap) object).keySet().contains("notBox")){ - notBox = ((LinkedHashMap) object).get("notBox").toString(); - } - String trigger1 = ((LinkedHashMap) object).get("trigger1").toString(); - String operatorBox = ((LinkedHashMap) object).get("operatorBox").toString(); - String trigger2 = ((LinkedHashMap) object).get("trigger2").toString(); - connectBody = notBox + "@!" + trigger1 + "@!" + operatorBox + "@!" + trigger2 + "#!"; - } - signatureBody = signatureBody + connectBody; - } - triggerBody = triggerBody + signatureBody + "?!"; - } - - return triggerBody; - } - - private String convertDate(String dateTTL) { - String formateDate = null; - String[] date = dateTTL.split("T"); - String[] parts = date[0].split("-"); - - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - return formateDate; - } - - private String callTrap(String trap, Object object) { - String signatureBody = ""; - TrapDatas trapDatas = (TrapDatas) object; - ArrayList<Object> attributeList = new ArrayList<>(); - // Read the Trap - if(!trap.equals("nill")){ - try{ - if(trap.startsWith("Trap")){ - if(trap.equals("Trap1")){ - attributeList = trapDatas.getTrap1(); - }else if(trap.equals("Trap2")){ - attributeList = trapDatas.getTrap2(); - }else if(trap.equals("Trap3")){ - attributeList = trapDatas.getTrap3(); - }else if(trap.equals("Trap4")){ - attributeList = trapDatas.getTrap4(); - }else if(trap.equals("Trap5")){ - attributeList = trapDatas.getTrap5(); - }else if(trap.equals("Trap6")){ - attributeList = trapDatas.getTrap6(); - } - }else{ - if(trap.equals("Fault")){ - if(trap.equals("Fault1")){ - attributeList = trapDatas.getTrap1(); - }else if(trap.equals("Fault2")){ - attributeList = trapDatas.getTrap2(); - }else if(trap.equals("Fault3")){ - attributeList = trapDatas.getTrap3(); - }else if(trap.equals("Fault4")){ - attributeList = trapDatas.getTrap4(); - }else if(trap.equals("Fault5")){ - attributeList = trapDatas.getTrap5(); - }else if(trap.equals("Fault6")){ - attributeList = trapDatas.getTrap6(); - } - } - } - } catch(Exception e){ - return "(" + trap + ")"; - } - }else{ - if(trapDatas.getTrap1()!=null){ - attributeList = trapDatas.getTrap1(); - }else{ - return ""; - } - } - signatureBody = signatureBody + "(" + readAttributes(attributeList, attributeList.size()-1) + ")"; - return signatureBody; - } - - private String readAttributes(ArrayList<Object> object, int index) { - String attributes = ""; - Map<String, String> trapSignatures = (Map<String, String>) object.get(index); - // Read the Elements. - Object notBox = ""; - if(trapSignatures.keySet().contains("notBox")){ - notBox = trapSignatures.get("notBox"); - } - if(notBox!=null){ - attributes = attributes + notBox.toString(); - } - Object trapName1 = trapSignatures.get("trigger1"); - if(trapName1!=null){ - String attrib = trapName1.toString(); - if(attrib.startsWith("A")){ - try{ - int iy = Integer.parseInt(attrib.substring(1))-1; - attributes = attributes + "(" + readAttributes(object, iy) + ")"; - }catch(NumberFormatException e){ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8")+ ")"; - } catch (UnsupportedEncodingException e1) { - //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e1); - } - } - }else{ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8")+ ")"; - } catch (UnsupportedEncodingException e) { - //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e); - } - } - }else{ - return ""; - } - Object comboBox = trapSignatures.get("operatorBox"); - if(comboBox!=null){ - attributes = attributes + comboBox.toString(); - }else{ - return attributes; - } - Object trapName2 = trapSignatures.get("trigger2"); - if(trapName2!=null){ - String attrib = trapName2.toString(); - if(attrib.startsWith("A")){ - try{ - int iy = Integer.parseInt(attrib.substring(1))-1; - attributes = attributes + "(" + readAttributes(object, iy) + ")"; - }catch(NumberFormatException e){ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8") + ")"; - } catch (UnsupportedEncodingException e1) { - //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e1); - } - } - }else{ - try { - attrib = getVarbindOID(attrib); - attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8") + ")"; - } catch (UnsupportedEncodingException e) { - //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e); - } - } - } - return attributes; - } - - private String getVarbindOID(String attrib) { - VarbindDictionary varbindId = varbindDictionaryDao.getVarbindEntityByName(attrib).get(0); - return varbindId.getVarbindOID(); - } - - private String connectTriggerSignature(int index, ArrayList<Object> triggerSignatures, Object object) { - String resultBody = ""; - Map<String, String> connectTraps = (Map<String, String>) triggerSignatures.get(index); - try{ - String notBox = ""; - if(connectTraps.keySet().contains("notBox")){ - notBox = connectTraps.get("notBox"); - } - resultBody = resultBody + "(" + notBox; - }catch(NullPointerException e){ - resultBody = resultBody + "("; - } - String connectTrap1 = connectTraps.get("connectTrap1"); - if(connectTrap1.startsWith("Trap") || connectTrap1.startsWith("Fault")){ - String trapBody = callTrap(connectTrap1, object); - if(trapBody!=null){ - resultBody = resultBody + trapBody; - } - }else if(connectTrap1.startsWith("C")){ - for(int i=0; i<= triggerSignatures.size(); i++){ - Map<String,String> triggerSignature = (Map<String, String>) triggerSignatures.get(i); - if(triggerSignature.get("id").equals(connectTrap1)){ - resultBody = resultBody + "("; - String connectBody = connectTriggerSignature(i, triggerSignatures, object); - resultBody = resultBody + connectBody + ")"; - }else{ - i++; - } - } - } - try{ - String trapCount1 = connectTraps.get("trapCount1"); - resultBody = resultBody + ", Time = " + trapCount1 + ")"; - }catch(NullPointerException e){ - } - try{ - String operatorBox = connectTraps.get("operatorBox"); - resultBody = resultBody + operatorBox +"("; - }catch (NullPointerException e){ - } - try{ - String connectTrap2 = connectTraps.get("connectTrap2"); - if(connectTrap2.startsWith("Trap") || connectTrap2.startsWith("Fault")){ - String trapBody = callTrap(connectTrap2, object); - if(trapBody!=null){ - resultBody = resultBody + trapBody; - } - }else if(connectTrap2.startsWith("C")){ - for(int i=0; i<= triggerSignatures.size(); i++){ - Map<String,String> triggerSignature = (Map<String, String>) triggerSignatures.get(i); - if(triggerSignature.get("id").equals(connectTrap2)){ - resultBody = resultBody + "("; - String connectBody = connectTriggerSignature(i, triggerSignatures, object); - resultBody = resultBody + connectBody + ")"; - }else{ - i++; - } - } - } - }catch(NullPointerException e){ - } - try{ - String trapCount2 = connectTraps.get("trapCount2"); - resultBody = resultBody + ", Time = " + trapCount2 + ")"; - }catch(NullPointerException e){ - } - return resultBody; - } - - public void PrePopulateClosedLoopFaultPolicyData(PolicyAdapter policyAdapter) { - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("Fault_") +6 , policyAdapter.getPolicyName().lastIndexOf(".")); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - int index = 0; - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - - // First match in the target is EcompName, so set that value. - if (index == 1) { - policyAdapter.setEcompName(value); - EcompName ecompName = new EcompName(); - ecompName.setEcompName(value); - policyAdapter.setEcompNameField(ecompName); - } - if (index == 2){ - policyAdapter.setRiskType(value); - } - - if (index == 3){ - policyAdapter.setRiskLevel(value); - } - - if (index == 4){ - policyAdapter.setGuard(value); - } - if (index == 5 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - index++; - } - } - } - } - } - } - } - String jsonBodyName = policyAdapter.getDirPath().replace(File.separator, ".")+ "." + policyAdapter.getOldPolicyFileName() + "."; - policyAdapter.setConfigBodyPath(jsonBodyName); - readClosedLoopJSONFile(policyAdapter); - } - - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - - private String readClosedLoopJSONFile(PolicyAdapter policyAdapter) { - String fileLocation = null; - String fileName = policyAdapter.getConfigBodyPath(); - if (fileName != null ) { - fileLocation = PolicyController.getConfigHome(); - } - if (fileLocation == null) { - return fileLocation; - } - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - for (File file : listOfFiles) { - if (file.isFile() && file.getName().contains(fileName)) { - FileInputStream inputStream = null; - String location = file.toString(); - try { - inputStream = new FileInputStream(location); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - if (location.endsWith("json")) { - JsonReader jsonReader = null; - jsonReader = Json.createReader(inputStream); - ObjectMapper mapper = new ObjectMapper(); - try { - ClosedLoopFaultBody closedLoopBody = mapper.readValue(jsonReader.read().toString(), ClosedLoopFaultBody.class); - if(closedLoopBody.getClosedLoopPolicyStatus().equalsIgnoreCase("ACTIVE")){ - closedLoopBody.setClosedLoopPolicyStatus("Active"); - }else{ - closedLoopBody.setClosedLoopPolicyStatus("InActive"); - } - policyAdapter.setJsonBodyData(closedLoopBody); - if(closedLoopBody.getTrapMaxAgeUsedForUI() != null){ - policyAdapter.setTrapMaxAge(closedLoopBody.getTrapMaxAgeUsedForUI().toString()); - } - if(closedLoopBody.getTriggerTimeWindowUsedForUI() != null){ - policyAdapter.setClearTimeOut(closedLoopBody.getTriggerTimeWindowUsedForUI().toString()); - } - if(closedLoopBody.getVerfificationTimeWindowUsedForUI() != null){ - policyAdapter.setVerificationclearTimeOut(closedLoopBody.getVerfificationTimeWindowUsedForUI().toString()); - } - - } catch (Exception e) { - e.printStackTrace(); - } - jsonReader.close(); - } - } - } - return null; - } - -} - -class ClosedLoopGridJSONData{ - - private String clearTimeOut; - private String trapMaxAge; - private String verificationclearTimeOut; - private ArrayList<Object> connecttriggerSignatures; - private ArrayList<Object> connectVerificationSignatures; - - public String getClearTimeOut() { - return clearTimeOut; - } - public void setClearTimeOut(String clearTimeOut) { - this.clearTimeOut = clearTimeOut; - } - public String getTrapMaxAge() { - return trapMaxAge; - } - public void setTrapMaxAge(String trapMaxAge) { - this.trapMaxAge = trapMaxAge; - } - public String getVerificationclearTimeOut() { - return verificationclearTimeOut; - } - public void setVerificationclearTimeOut(String verificationclearTimeOut) { - this.verificationclearTimeOut = verificationclearTimeOut; - } - - - public ArrayList<Object> getConnecttriggerSignatures() { - return connecttriggerSignatures; - } - public void setConnecttriggerSignatures(ArrayList<Object> connecttriggerSignatures) { - this.connecttriggerSignatures = connecttriggerSignatures; - } - public ArrayList<Object> getConnectVerificationSignatures() { - return connectVerificationSignatures; - } - public void setConnectVerificationSignatures(ArrayList<Object> connectVerificationSignatures) { - this.connectVerificationSignatures = connectVerificationSignatures; - } -} - -class TrapDatas{ - private ArrayList<Object> trap1; - private ArrayList<Object> trap2; - private ArrayList<Object> trap3; - private ArrayList<Object> trap4; - private ArrayList<Object> trap5; - private ArrayList<Object> trap6; - public ArrayList<Object> getTrap1() { - return trap1; - } - public void setTrap1(ArrayList<Object> trap1) { - this.trap1 = trap1; - } - public ArrayList<Object> getTrap2() { - return trap2; - } - public void setTrap2(ArrayList<Object> trap2) { - this.trap2 = trap2; - } - public ArrayList<Object> getTrap3() { - return trap3; - } - public void setTrap3(ArrayList<Object> trap3) { - this.trap3 = trap3; - } - public ArrayList<Object> getTrap4() { - return trap4; - } - public void setTrap4(ArrayList<Object> trap4) { - this.trap4 = trap4; - } - public ArrayList<Object> getTrap5() { - return trap5; - } - public void setTrap5(ArrayList<Object> trap5) { - this.trap5 = trap5; - } - public ArrayList<Object> getTrap6() { - return trap6; - } - public void setTrap6(ArrayList<Object> trap6) { - this.trap6 = trap6; - } -}
\ No newline at end of file diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateClosedLoopPMController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateClosedLoopPMController.java deleted file mode 100644 index f5e0557f8..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateClosedLoopPMController.java +++ /dev/null @@ -1,422 +0,0 @@ -/*- - * ============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.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.json.Json; -import javax.json.JsonReader; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.adapter.ClosedLoopPMBody; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -@Controller -@RequestMapping("/") -public class CreateClosedLoopPMController extends RestrictedBaseController{ - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static PolicyVersionDao policyVersionDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private CreateClosedLoopPMController(RuleAlgorithmsDao ruleAlgorithmsDao, PolicyVersionDao policyVersionDao, WatchPolicyNotificationDao policyNotificationDao){ - CreateClosedLoopPMController.policyVersionDao = policyVersionDao; - CreateClosedLoopPMController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreateClosedLoopPMController.policyNotificationDao = policyNotificationDao; - } - - public CreateClosedLoopPMController(){} - - protected PolicyAdapter policyAdapter = null; - private String ruleID = ""; - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - @RequestMapping(value={"/policyController/save_PMPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView savePMPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL); - policyData.setTtlDate(newDate); - } - - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_PM_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - - - if(policyData.getServiceTypePolicyName() != null){ - policyData.setServiceType(policyData.getServiceTypePolicyName().get("serviceTypePolicyName").toString()); - } - - ObjectMapper jsonMapper = new ObjectMapper(); - String jsonBody = jsonMapper.writeValueAsString(policyData.getJsonBodyData()); - jsonBody = jsonBody.replaceFirst("\\{", "\\{\"serviceTypePolicyName\": \"serviceTypeFieldValue\","); - jsonBody = jsonBody.replace("serviceTypeFieldValue", policyData.getServiceType()); - policyData.setJsonBody(jsonBody); - - Map<String, String> successMap = new HashMap<String, String>(); - - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - private String convertDate(String dateTTL) { - String formateDate = null; - String[] date = dateTTL.split("T"); - String[] parts = date[0].split("-"); - - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - return formateDate; - } - - public void PrePopulateClosedLoopPMPolicyData(PolicyAdapter policyAdapter) { - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("PM_") +3 , policyAdapter.getPolicyName().lastIndexOf(".")); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - int index = 0; - Iterator<MatchType> iterMatch = matchList.iterator(); - while (matchList.size()>1 && iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - - // First match in the target is EcompName, so set that value. - if (index == 0) { - policyAdapter.setEcompName(value); - } - - if (index == 1){ - policyAdapter.setRiskType(value); - } - - if (index == 2){ - policyAdapter.setRiskLevel(value); - } - - if (index == 3){ - policyAdapter.setGuard(value); - } - - if (index == 4 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - if (index == 5){ - LinkedHashMap<String, String> serviceTypePolicyName1 = new LinkedHashMap<>(); - String key = "serviceTypePolicyName"; - serviceTypePolicyName1.put(key, value); - policyAdapter.setServiceTypePolicyName(serviceTypePolicyName1); - } - index++; - } - } - } - } - } - } - } - String jsonBodyName = policyAdapter.getDirPath().replace(File.separator, ".")+"."+ policyAdapter.getOldPolicyFileName() + "."; - policyAdapter.setConfigBodyPath(jsonBodyName); - readClosedLoopJSONFile(policyAdapter); - } - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - - protected String readClosedLoopJSONFile(PolicyAdapter policyAdapter) { - String fileLocation = null; - String fileName = policyAdapter.getConfigBodyPath(); - if (fileName != null ) { - fileLocation = PolicyController.getConfigHome(); - } - if (fileLocation == null) { - return fileLocation; - } - - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - for (File file : listOfFiles) { - if (file.isFile() && file.getName().contains(fileName)) { - FileInputStream inputStream = null; - String location = file.toString(); - try { - inputStream = new FileInputStream(location); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - if (location.endsWith("json")) { - JsonReader jsonReader = null; - jsonReader = Json.createReader(inputStream); - ObjectMapper mapper = new ObjectMapper(); - try { - ClosedLoopPMBody closedLoopBody = mapper.readValue(jsonReader.read().toString(), ClosedLoopPMBody.class); - policyAdapter.setJsonBodyData(closedLoopBody); - } catch (IOException e) { - e.printStackTrace(); - /*logger.error("JSON Body Mapping Error");*/ - } - jsonReader.close(); - } - } - } - return null; - } - -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateDcaeMicroServiceController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateDcaeMicroServiceController.java deleted file mode 100644 index c4d4cfd50..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateDcaeMicroServiceController.java +++ /dev/null @@ -1,987 +0,0 @@ -/*- - * ============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.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.Map.Entry; -import java.util.Properties; -import java.util.TreeMap; - -import javax.json.Json; -import javax.json.JsonReader; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang.StringUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RemoteCatalogValuesDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.XACMLRestProperties; -import org.openecomp.policy.rest.dao.GroupPolicyScopeListDao; -import org.openecomp.policy.rest.dao.MicroServiceModelsDao; -import org.openecomp.policy.rest.jpa.GroupPolicyScopeList; -import org.openecomp.policy.rest.jpa.MicroServiceModels; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RemoteCatalogValues; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.policy.utils.ConfigurableRESTUtils; -import org.openecomp.policy.utils.ConfigurableRESTUtils.RESQUEST_METHOD; -import org.openecomp.policy.utils.ConfigurableRESTUtils.REST_RESPONSE_FORMAT; -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.servlet.ModelAndView; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.att.research.xacml.util.XACMLProperties; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.base.Joiner; -import com.google.common.base.Splitter; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -@Controller -@RequestMapping("/") -public class CreateDcaeMicroServiceController extends RestrictedBaseController { - private static final Logger logger = FlexLogger.getLogger(CreateDcaeMicroServiceController.class); - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static RemoteCatalogValuesDao remoteCatalogValuesDao; - private static MicroServiceModelsDao microServiceModelsDao; - private static PolicyVersionDao policyVersionDao; - private static GroupPolicyScopeListDao groupPolicyScopeListDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private CreateDcaeMicroServiceController(RuleAlgorithmsDao ruleAlgorithmsDao, RemoteCatalogValuesDao remoteCatalogValuesDao, - MicroServiceModelsDao microServiceModelsDao, PolicyVersionDao policyVersionDao, GroupPolicyScopeListDao groupPolicyScopeListDao, - WatchPolicyNotificationDao policyNotificationDao){ - CreateDcaeMicroServiceController.groupPolicyScopeListDao = groupPolicyScopeListDao; - CreateDcaeMicroServiceController.policyVersionDao = policyVersionDao; - CreateDcaeMicroServiceController.microServiceModelsDao = microServiceModelsDao; - CreateDcaeMicroServiceController.remoteCatalogValuesDao = remoteCatalogValuesDao; - CreateDcaeMicroServiceController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreateDcaeMicroServiceController.policyNotificationDao = policyNotificationDao; - } - - public CreateDcaeMicroServiceController(){} - - protected PolicyAdapter policyAdapter = null; - private String ruleID = ""; - private int priorityCount; - private Map<String, String> attributesListRefMap = new HashMap<String, String>(); - private Map<String, LinkedList<String>> arrayTextList = new HashMap<String, LinkedList<String>>(); - - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - - @RequestMapping(value={"/policyController/getDCAEMSTemplateData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView getBRMSParamPolicyRuleData(HttpServletRequest request, HttpServletResponse response) throws Exception{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - - String value = root.get("policyData").toString().replaceAll("^\"|\"$", ""); - String servicename = value.toString().split("-v")[0]; - String version = null; - if (value.toString().contains("-v")){ - version = value.toString().split("-v")[1]; - } - MicroServiceModels returnModel = getAttributeObject(servicename, version); - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - List<Object> list = new ArrayList<>(); - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(returnModel); - JSONObject j = new JSONObject("{dcaeModelData: " + responseString +"}"); - list.add(j); - out.write(list.toString()); - return null; - } - - private MicroServiceModels getAttributeObject(String name, String version) { - MicroServiceModels workingModel = new MicroServiceModels(); - List<MicroServiceModels> microServiceModelsData = microServiceModelsDao.getMicroServiceModelsData(); - for (int i = 0; i < microServiceModelsData.size(); i++) { - workingModel = microServiceModelsData.get(i); - if (version!=null && workingModel.getVersion()!=null){ - if (workingModel.getModelName().equals(name) && workingModel.getVersion().equals(version)){ - break; - } - }else{ - if (workingModel.getModelName().equals(name) && workingModel.getVersion() == null){ - break; - } - } - } - return workingModel; - } - - @RequestMapping(value={"/get_DCAEPriorityValues"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getDCAEPriorityValuesData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - List<String> priorityList = new ArrayList<String>(); - priorityCount = 10; - for (int i = 1; i < priorityCount; i++) { - priorityList.add(String.valueOf(i)); - } - model.put("priorityDatas", mapper.writeValueAsString(priorityList)); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - - @RequestMapping(value={"/policyController/save_DCAEMSPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveDCAEMSPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - String jsonContent = null; - try{ - jsonContent = decodeContent(root.get("policyJSON")).toString(); - }catch(Exception e){ - logger.error("Error while decoding microservice content"); - } - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - if(policyData.isEditPolicy){ - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(dirName + root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL); - policyData.setTtlDate(newDate); - } - - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_MS_" + policyData.getPolicyName(); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - policyData.setEcompName(policyData.getEcompName()); - //get the jsonBody - String jsonBody = null; - try { - jsonBody = constructJson(policyData, jsonContent); - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - policyData.setJsonBody(jsonBody); - Map<String, String> successMap = new HashMap<String, String>(); - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - - System.out.println(root); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - private JSONObject decodeContent(JsonNode jsonNode){ - Iterator<JsonNode> jsonElements = jsonNode.elements(); - Iterator<String> jsonKeys = jsonNode.fieldNames(); - Map<String,String> element = new TreeMap<String,String>(); - while(jsonElements.hasNext() && jsonKeys.hasNext()){ - element.put(jsonKeys.next(), jsonElements.next().toString()); - } - JSONObject jsonResult = new JSONObject(); - JSONArray jsonArray = null; - String oldValue = null; - String nodeKey = null; - String arryKey = null; - Boolean isArray = false; - JsonNodeFactory nodeFactory = JsonNodeFactory.instance; - ObjectNode node = nodeFactory.objectNode(); - String prevKey = null; - String presKey = null; - for(String key: element.keySet()){ - if(key.contains(".")){ - presKey = key.substring(0,key.indexOf(".")); - }else if(key.contains("@")){ - presKey = key.substring(0,key.indexOf("@")); - }else{ - presKey = key; - } - // first check if we are different from old. - System.out.println(key+"\n"); - if(jsonArray!=null && jsonArray.length()>0 && key.contains("@") && !key.contains(".") && oldValue!=null){ - if(!oldValue.equals(key.substring(0,key.indexOf("@")))){ - jsonResult.put(oldValue, jsonArray); - jsonArray = new JSONArray(); - } - }else if(jsonArray!=null && jsonArray.length()>0 && !presKey.equals(prevKey) && oldValue!=null){ - jsonResult.put(oldValue, jsonArray); - isArray = false; - jsonArray = new JSONArray(); - } - /*if(node.size()!=0 && key.contains("@")){ - - }else{ - if(node.size()!=0){ - - } - }*/ - prevKey = presKey; - // - if(key.contains(".")){ - if(nodeKey==null){ - nodeKey = key.substring(0,key.indexOf(".")); - } - if(nodeKey.equals(key.substring(0,key.indexOf(".")))){ - node.put(key.substring(key.indexOf(".")+1), element.get(key)); - }else{ - if(node.size()!=0){ - if(nodeKey.contains("@")){ - if(arryKey==null){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - } - if(nodeKey.endsWith("@0")){ - isArray = true; - jsonArray = new JSONArray(); - } - if(arryKey.equals(nodeKey.substring(0,nodeKey.indexOf("@")))){ - jsonArray.put(decodeContent(node)); - } - if(key.contains("@") && !arryKey.equals(key.substring(0,nodeKey.indexOf("@")))){ - jsonResult.put(arryKey, jsonArray); - jsonArray = new JSONArray(); - }else if(!key.contains("@")){ - jsonResult.put(arryKey, jsonArray); - jsonArray = new JSONArray(); - } - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - }else{ - isArray = false; - jsonResult.put(nodeKey, decodeContent(node)); - } - node = nodeFactory.objectNode(); - } - nodeKey = key.substring(0,key.indexOf(".")); - if(nodeKey.contains("@")){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - } - node.put(key.substring(key.indexOf(".")+1), element.get(key)); - } - }else if(node.size()!=0){ - if(nodeKey.contains("@")){ - if(arryKey==null){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - } - if(nodeKey.endsWith("@0")){ - isArray = true; - jsonArray = new JSONArray(); - } - if(arryKey.equals(nodeKey.substring(0,nodeKey.indexOf("@")))){ - jsonArray.put(decodeContent(node)); - } - jsonResult.put(arryKey, jsonArray); - jsonArray = new JSONArray(); - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - }else{ - isArray = false; - jsonResult.put(nodeKey, decodeContent(node)); - } - node = nodeFactory.objectNode(); - if(key.contains("@")){ - isArray = true; - if(key.endsWith("@0")|| jsonArray==null){ - jsonArray = new JSONArray(); - } - }else if(!key.contains("@")){ - isArray = false; - } - if(isArray){ - if(oldValue==null){ - oldValue = key.substring(0,key.indexOf("@")); - } - if(oldValue!=prevKey){ - oldValue = key.substring(0,key.indexOf("@")); - } - if(oldValue.equals(key.substring(0,key.indexOf("@")))){ - jsonArray.put(element.get(key)); - }else{ - jsonResult.put(oldValue, jsonArray); - jsonArray = new JSONArray(); - } - oldValue = key.substring(0,key.indexOf("@")); - }else{ - jsonResult.put(key, element.get(key)); - } - }else{ - if(key.contains("@")){ - isArray = true; - if(key.endsWith("@0")|| jsonArray==null){ - jsonArray = new JSONArray(); - } - }else if(!key.contains("@")){ - isArray = false; - } - if(isArray){ - if(oldValue==null){ - oldValue = key.substring(0,key.indexOf("@")); - } - if(oldValue!=prevKey){ - oldValue = key.substring(0,key.indexOf("@")); - } - if(oldValue.equals(key.substring(0,key.indexOf("@")))){ - jsonArray.put(element.get(key)); - }else{ - jsonResult.put(oldValue, jsonArray); - jsonArray = new JSONArray(); - } - oldValue = key.substring(0,key.indexOf("@")); - }else{ - jsonResult.put(key, element.get(key)); - } - } - } - if(node.size()>0){ - if(nodeKey.contains("@")){ - if(jsonArray==null){ - jsonArray = new JSONArray(); - } - if(arryKey==null){ - arryKey = nodeKey.substring(0,nodeKey.indexOf("@")); - } - jsonArray.put(decodeContent(node)); - jsonResult.put(arryKey, jsonArray); - isArray = false;; - }else{ - jsonResult.put(nodeKey, decodeContent(node)); - } - } - if(isArray && jsonArray.length() > 0){ - jsonResult.put(oldValue, jsonArray); - } - return jsonResult; - } - - public void PrePopulateDCAEMSPolicyData(PolicyAdapter policyAdapter) { - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("MS_") +3 , policyAdapter.getPolicyName().lastIndexOf(".")); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - String jsonBodyName = policyAdapter.getDirPath().replace(File.separator, ".")+ "." + policyAdapter.getOldPolicyFileName() + "."; - policyAdapter.setConfigBodyPath(jsonBodyName); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - int index = 0; - Iterator<MatchType> iterMatch = matchList.iterator(); - while (matchList.size()>1 && iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - - // First match in the target is EcompName, so set that value. - if (index == 0) { - policyAdapter.setEcompName(value); - } - if (index == 1){ - policyAdapter.setConfigName(value); - } - if (index == 2){ - if(value != null){ - readFile(policyAdapter); - } - } - if (index == 3){ - policyAdapter.setUuid(value); - } - if (index == 4){ - policyAdapter.setLocation(value); - } - if (index == 5){ - policyAdapter.setRiskType(value); - } - - if (index == 6){ - policyAdapter.setRiskLevel(value); - } - - if (index == 7){ - policyAdapter.setGuard(value); - } - if (index == 8 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - index++; - } - } - } - } - } - } - } - } - - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - - @SuppressWarnings("unchecked") - private String readFile(PolicyAdapter policyAdapter) { - String fileLocation = null; - String policyScopeName = null; - String fileName = policyAdapter.getConfigBodyPath(); - if (fileName != null ) { - fileLocation = PolicyController.getConfigHome(); - } - if (fileLocation == null) { - return fileLocation; - } - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - for (File file : listOfFiles) { - if (file.isFile() && file.getName().contains(fileName)) { - FileInputStream inputStream = null; - String location = file.toString(); - try { - inputStream = new FileInputStream(location); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - if (location.endsWith("json")) { - JsonReader jsonReader = null; - jsonReader = Json.createReader(inputStream); - ObjectMapper mapper = new ObjectMapper(); - try { - DCAEMicroServiceObject msBody = (DCAEMicroServiceObject) mapper.readValue(jsonReader.read().toString(), DCAEMicroServiceObject.class); - policyScopeName = getPolicyScope(msBody.getPolicyScope()); - policyAdapter.setPolicyScope(policyScopeName); - - policyAdapter.setPriority(msBody.getPriority()); - - if (msBody.getVersion()!= null){ - policyAdapter.setServiceType(msBody.getService() + "-v" + msBody.getVersion()); - }else{ - policyAdapter.setServiceType(msBody.getService()); - } - if(msBody.getContent() != null){ - LinkedHashMap<String, Object> data = new LinkedHashMap<String, Object>(); - LinkedHashMap<String, ?> map = (LinkedHashMap<String, ?>) msBody.getContent(); - readRecursivlyJSONContent(map, data); - policyAdapter.setRuleData(data); - } - - } catch (Exception e) { - e.printStackTrace(); - } - jsonReader.close(); - } - } - } - return fileName; - - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - private void readRecursivlyJSONContent(LinkedHashMap<String, ?> map, LinkedHashMap<String, Object> data){ - for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) { - Object key = iterator.next(); - Object value = map.get(key); - if(value instanceof LinkedHashMap<?, ?>){ - readRecursivlyJSONContent((LinkedHashMap<String, ?>) value, data); - }else if(value instanceof ArrayList){ - ArrayList<?> jsonArrayVal = (ArrayList<?>)value; - for(int i = 0; i < jsonArrayVal.size(); i++){ - Object arrayvalue = jsonArrayVal.get(i); - if(arrayvalue instanceof LinkedHashMap<?, ?>){ - LinkedHashMap<String, Object> newData = new LinkedHashMap<String, Object>(); - readRecursivlyJSONContent((LinkedHashMap<String, ?>) arrayvalue, newData); - for(String objKey: newData.keySet()){ - data.put(key+"@"+i+"." +objKey, newData.get(objKey)); - } - }else if(arrayvalue instanceof ArrayList){ - ArrayList<?> jsonArrayVal1 = (ArrayList<?>)value; - for(int j = 0; j < jsonArrayVal1.size(); j++){ - Object arrayvalue1 = jsonArrayVal1.get(i); - data.put(key+"@"+j, arrayvalue1.toString()); - } - }else{ - data.put(key+"@"+i, arrayvalue.toString()); - } - } - }else{ - data.put(key.toString(), value.toString()); - } - } - } - - private String getPolicyScope(String value) { - GroupPolicyScopeList pScope = new GroupPolicyScopeList(); - List<GroupPolicyScopeList> groupList= groupPolicyScopeListDao.getGroupPolicyScopeListData(); - if(groupList.size() > 0){ - for(int i = 0 ; i < groupList.size() ; i ++){ - pScope = groupList.get(i); - if (pScope.getGroupList().equals(value)){ - break; - } - } - } - return pScope.getGroupName(); - } - - private GroupPolicyScopeList getPolicyObject(String policyScope) { - GroupPolicyScopeList pScope = new GroupPolicyScopeList(); - List<GroupPolicyScopeList> groupList = groupPolicyScopeListDao.getGroupPolicyScopeListData(); - if(groupList.size() > 0){ - for(int i = 0 ; i < groupList.size() ; i ++){ - pScope = groupList.get(i); - if (pScope.getGroupName().equals(policyScope)){ - break; - } - } - } - return pScope; - } - - private String constructJson(PolicyAdapter policyAdapter, String jsonContent) { - ObjectWriter om = new ObjectMapper().writer(); - String json=""; - DCAEMicroServiceObject microServiceObject = new DCAEMicroServiceObject(); - - microServiceObject.setTemplateVersion(XACMLProperties.getProperty(XACMLRestProperties.TemplateVersion_MS)); - if(policyAdapter.getServiceType() !=null){ - microServiceObject.setService(policyAdapter.getServiceType().toString().split("-v")[0]); - if (policyAdapter.getServiceType().toString().contains("-v")){ - microServiceObject.setVersion(policyAdapter.getServiceType().toString().split("-v")[1]); - } - } - if(policyAdapter.getUuid()!=null){ - microServiceObject.setUuid(policyAdapter.getUuid()); - } - - if(policyAdapter.getLocation()!=null){ - microServiceObject.setLocation(policyAdapter.getLocation()); - } - if(policyAdapter.getPolicyName()!=null){ - microServiceObject.setPolicyName(policyAdapter.getPolicyName()); - } - - if(policyAdapter.getConfigName()!=null){ - microServiceObject.setConfigName(policyAdapter.getConfigName()); - } - if(policyAdapter.getPolicyDescription()!=null){ - microServiceObject.setDescription(policyAdapter.getPolicyDescription()); - } - if (policyAdapter.getPriority()!=null){ - microServiceObject.setPriority(policyAdapter.getPriority()); - }else { - microServiceObject.setPriority("9999"); - } - microServiceObject.setContent(jsonContent); - GroupPolicyScopeList policyScopeValue = getPolicyObject(policyAdapter.getPolicyScope()); - microServiceObject.setPolicyScope(policyScopeValue.getGroupList()); - try { - json = om.writeValueAsString(microServiceObject); - } catch (JsonProcessingException e) { - logger.error("Error writing out the object"); - } - System.out.println(json); - String cleanJson = cleanUPJson(json); - return cleanJson; - } - - private String cleanUPJson(String json) { - String cleanJason = StringUtils.replaceEach(json, new String[]{"\\\\", "\\\\\\", "\\\\\\\\"}, new String[]{"\\", "\\", "\\"}); - cleanJason = StringUtils.replaceEach(json, new String[]{"\\\\\\"}, new String[]{"\\"}); - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\\\\", "[[", "]]"}, new String[]{"\\", "[", "]"}); - - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\\\\\"", "\\\"", "\"[{", "}]\""}, new String[]{"\"", "\"", "[{", "}]"}); - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\"[{", "}]\""}, new String[]{"[{", "}]"}); - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\"[", "]\""}, new String[]{"[", "]"}); - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\"{", "}\""}, new String[]{"{", "}"}); - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\"\"\"", "\"\""}, new String[]{"\"", "\""}); - cleanJason = StringUtils.replaceEach(cleanJason, new String[]{"\\\""}, new String[]{""}); - return cleanJason; - } - - //Convert the map values and set into JSON body - public Map<String, String> convertMap(Map<String, String> attributesMap, Map<String, String> attributesRefMap) { - Map<String, String> attribute = new HashMap<String, String>(); - String temp = null; - String key; - String value; - for (Entry<String, String> entry : attributesMap.entrySet()) { - key = entry.getKey(); - value = entry.getValue(); - attribute.put(key, value); - } - for (Entry<String, String> entryRef : attributesRefMap.entrySet()) { - key = entryRef.getKey(); - value = entryRef.getValue().toString(); - attribute.put(key, value); - } - for (Entry<String, String> entryList : attributesListRefMap.entrySet()) { - key = entryList.getKey(); - value = entryList.getValue().toString(); - attribute.put(key, value); - } - for (Entry<String, LinkedList<String>> arrayList : arrayTextList.entrySet()){ - key = arrayList.getKey(); - temp = null; - for (Object textList : arrayList.getValue()){ - if (temp == null){ - temp = "[" + textList; - }else{ - temp = temp + "," + textList; - } - } - attribute.put(key, temp+ "]"); - } - - return attribute; - } - - private String convertDate(String dateTTL) { - String formateDate = null; - String[] date = dateTTL.split("T"); - String[] parts = date[0].split("-"); - - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - return formateDate; - } -} - -class DCAEMicroServiceObject { - - public String service; - public String location; - public String uuid; - public String policyName; - public String description; - public String configName; - public String templateVersion; - public String version; - public String priority; - public String policyScope; - - public String getPolicyScope() { - return policyScope; - } - public void setPolicyScope(String policyScope) { - this.policyScope = policyScope; - } - - public String getPriority() { - return priority; - } - public void setPriority(String priority) { - this.priority = priority; - } - public String getVersion() { - return version; - } - public void setVersion(String version) { - this.version = version; - } - private Object content; - - - public String getPolicyName() { - return policyName; - } - public void setPolicyName(String policyName) { - this.policyName = policyName; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - public String getConfigName() { - return configName; - } - public void setConfigName(String configName) { - this.configName = configName; - } - public Object getContent() { - return content; - } - public void setContent(Object content) { - this.content = content; - } - - public String getService() { - return service; - } - public void setService(String service) { - this.service = service; - } - public String getLocation() { - return location; - } - public void setLocation(String location) { - this.location = location; - } - - public String getUuid() { - return uuid; - } - public void setUuid(String uuid) { - this.uuid = uuid; - } - public String getTemplateVersion() { - return templateVersion; - } - public void setTemplateVersion(String templateVersion) { - this.templateVersion = templateVersion; - } - -}
\ No newline at end of file diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateFirewallController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateFirewallController.java deleted file mode 100644 index 6d7c0c752..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreateFirewallController.java +++ /dev/null @@ -1,1292 +0,0 @@ -/*- - * ============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.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.hibernate.SQLQuery; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.Transaction; -import org.json.JSONObject; -import org.openecomp.policy.adapter.AddressGroupJson; -import org.openecomp.policy.adapter.AddressJson; -import org.openecomp.policy.adapter.AddressMembers; -import org.openecomp.policy.adapter.DeployNowJson; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.adapter.PrefixIPList; -import org.openecomp.policy.adapter.ServiceGroupJson; -import org.openecomp.policy.adapter.ServiceListJson; -import org.openecomp.policy.adapter.ServiceMembers; -import org.openecomp.policy.adapter.ServicesJson; -import org.openecomp.policy.adapter.Term; -import org.openecomp.policy.adapter.TermCollector; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.dao.AddressGroupDao; -import org.openecomp.policy.rest.dao.FirewallDictionaryListDao; -import org.openecomp.policy.rest.dao.PrefixListDao; -import org.openecomp.policy.rest.dao.SecurityZoneDao; -import org.openecomp.policy.rest.dao.ServiceGroupDao; -import org.openecomp.policy.rest.dao.ServiceListDao; -import org.openecomp.policy.rest.dao.TermListDao; -import org.openecomp.policy.rest.jpa.AddressGroup; -import org.openecomp.policy.rest.jpa.FirewallDictionaryList; -import org.openecomp.policy.rest.jpa.GroupServiceList; -import org.openecomp.policy.rest.jpa.PREFIXLIST; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.policy.rest.jpa.SecurityZone; -import org.openecomp.policy.rest.jpa.ServiceList; -import org.openecomp.policy.rest.jpa.TermList; -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.servlet.ModelAndView; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -@Controller -@RequestMapping("/") -public class CreateFirewallController extends RestrictedBaseController { - private static Logger logger = FlexLogger.getLogger(CreateFirewallController.class); - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static PolicyVersionDao policyVersionDao; - private static PrefixListDao prefixListDao; - private static ServiceListDao serviceListDao; - private static TermListDao termListDao; - private static ServiceGroupDao serviceGroupDao; - private static AddressGroupDao addressGroupDao; - private static SecurityZoneDao securityZoneDao; - private static SessionFactory sessionFactory; - private static FirewallDictionaryListDao fwDictionaryListDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - List<String> expandablePrefixIPList = new ArrayList<String>(); - List<String> expandableServicesList= new ArrayList<String>(); - - private String parentSecurityZone; - - - public String getParentSecurityZone() { - return parentSecurityZone; - } - - public void setParentSecurityZone(String parentSecurityZone) { - this.parentSecurityZone = parentSecurityZone; - } - - - - @Autowired - private CreateFirewallController(RuleAlgorithmsDao ruleAlgorithmsDao, PolicyVersionDao policyVersionDao, PrefixListDao prefixListDao, - ServiceListDao serviceListDao, TermListDao termListDao, ServiceGroupDao serviceGroupDao, AddressGroupDao addressGroupDao, SecurityZoneDao securityZoneDao, SessionFactory sessionFactory - ,FirewallDictionaryListDao fwDictionaryListDao, WatchPolicyNotificationDao policyNotificationDao){ - CreateFirewallController.addressGroupDao = addressGroupDao; - CreateFirewallController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreateFirewallController.policyVersionDao = policyVersionDao; - CreateFirewallController.prefixListDao = prefixListDao; - CreateFirewallController.serviceListDao = serviceListDao; - CreateFirewallController.termListDao = termListDao; - CreateFirewallController.serviceGroupDao = serviceGroupDao; - CreateFirewallController.securityZoneDao = securityZoneDao; - CreateFirewallController.sessionFactory = sessionFactory; - CreateFirewallController.fwDictionaryListDao = fwDictionaryListDao; - CreateFirewallController.policyNotificationDao = policyNotificationDao; - } - - public CreateFirewallController(){} - protected PolicyAdapter policyAdapter = null; - private List<String> termCollectorList; - private List<FirewallDictionaryList> parentDictionaryList; - private String ruleID = ""; - private String jsonBody; - private ArrayList<Object> attributeList; - private ArrayList<Object> fwAttributeList; - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - @RequestMapping(value={"/get_FWParentListDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getFWParentListEntityDataByName(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - String query= "select distinct parent from fwparent"; - model.put("fwParentListDictionaryDatas", mapper.writeValueAsString(queryToDatabase(query))); - - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @SuppressWarnings("unchecked") - private List<String> queryToDatabase(String query) { - Session session = sessionFactory.openSession(); - Transaction tx = session.beginTransaction(); - List<String> data = null; - try { - SQLQuery sqlquery=session.createSQLQuery(query); - //Query hbquery = session.createQuery(query); - data = sqlquery.list(); - tx.commit(); - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error While Qurying Parent Child Table"+e); - }finally{ - try{ - session.close(); - }catch(Exception e1){ - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error While Closing Connection/Statement"+e1); - } - } - return data; - - } - - @SuppressWarnings("unchecked") - private void updateToDatabase(String updateQuery) { - Session session = sessionFactory.openSession(); - Transaction tx = session.beginTransaction(); - List<String> data = null; - try { - SQLQuery sqlquery=session.createSQLQuery(updateQuery); - sqlquery.executeUpdate(); - tx.commit(); - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error While Updating FWChildParent Table"+e); - }finally{ - try{ - session.close(); - }catch(Exception e1){ - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error While Closing Connection/Statement"+e1); - } - } - - } - - - @RequestMapping(value={"/policyController/save_FirewallPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveFirewallPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - termCollectorList = new ArrayList<String>(); - parentDictionaryList= new ArrayList<FirewallDictionaryList>(); - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - this.policyAdapter = policyData; - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL); - policyData.setTtlDate(newDate); - } - - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_FW_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - if(policyData.getFwPolicyType().equalsIgnoreCase("Parent Policy")){ - String comboNames=""; - int i=0; - for(Object fwattribute : policyData.getFwattributes()){ - if(fwattribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) fwattribute).get("option").toString(); - if(i>0){ - comboNames = comboNames+","+ key; - } - else{ - comboNames = key; - } - i++; - } - } - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"+"@comboList:"+comboNames); - } - else{ - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - } - - //policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - Map<String, String> successMap = new HashMap<String, String>(); - - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("option").toString(); - termCollectorList.add(key); - } - } - } - if(policyData.getFwattributes()!=null){ - if(policyData.getFwattributes().size() > 0){ - for(Object fwattribute : policyData.getFwattributes()){ - if(fwattribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) fwattribute).get("option").toString(); - FirewallDictionaryList fwDictValue = fwDictionaryListDao.getFWDictionaryDataById(key); - parentDictionaryList.add(fwDictValue); - if(fwDictValue.getAddressList().contains(",")) { - for(String individualAddressObject:fwDictValue.getAddressList().split(",") ){ - expandablePrefixIPList.add(individualAddressObject); - } - } - else{ - expandablePrefixIPList.add(fwDictValue.getAddressList()); - } - - if(fwDictValue.getServiceList().contains(",")) { - for(String individualAddressObject:fwDictValue.getServiceList().split(",") ){ - expandableServicesList.add(individualAddressObject); - } - } - else{ - expandableServicesList.add(fwDictValue.getServiceList()); - } - } - } - } - } - - jsonBody = constructJson(); - if (jsonBody != null || jsonBody.equalsIgnoreCase("")) { - policyAdapter.setJsonBody(jsonBody); - - } else { - policyAdapter.setJsonBody("{}"); - } - policyData.setJsonBody(jsonBody); - - - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - removeExtension=removeExtension.replace(File.separator, "."); - //PC Feature - if(policyAdapter.getFwPolicyType().equalsIgnoreCase("Parent Policy")){ - //Reads the SecurityZone from the Parent UI and then gets the value from the DB - //Stores the Parent Policy Name and securityZone value to the fwparent table. - String parentSecurityZoneValue= getParentSecurityZone(); - String parentQuery= "INSERT INTO FWPARENT(PARENT,SECURITYZONE) VALUES ('"; - parentQuery=parentQuery+removeExtension+"','"+ parentSecurityZoneValue +"')"; - updateToDatabase(parentQuery); - } - else{ - String updateQuery = ""; - if(policyAdapter.isEditPolicy()){ - updateQuery= "UPDATE FWCHILDTOPARENT SET PARENT='"+policyAdapter.getParentForChild()+"' WHERE CHILD='"+removeExtension+"'"; - } - else{ - updateQuery= "INSERT INTO FWCHILDTOPARENT(CHILD,PARENT) VALUES ('"; - updateQuery =updateQuery+removeExtension+"','"+ policyAdapter.getParentForChild() +"')"; - } - updateToDatabase(updateQuery); - } - } - } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - private String convertDate(String dateTTL) { - String formateDate = null; - String[] date = dateTTL.split("T"); - String[] parts = date[0].split("-"); - - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - return formateDate; - } - - private String constructJson() { - int ruleCount=1; - //Maps to assosciate the values read from the TermList dictionary - Map<Integer, String> srcIP_map =null; - Map<Integer, String> destIP_map=null; - Map<Integer, String> srcPort_map =null; - Map<Integer, String> destPort_map =null; - Map<Integer, String> action_map=null; - Map<Integer, String> fromZone_map=null; - Map<Integer, String> toZone_map=null; - - String ruleDesc=null; - String ruleFromZone=null; - String ruleToZone=null; - String ruleSrcPrefixList=null; - String ruleDestPrefixList=null; - String ruleSrcPort=null; - String ruleDestPort=null; - String ruleAction=null; - - String json = null; - - - List<String> expandableList = new ArrayList<String>(); - TermList jpaTermList; - SecurityZone jpaSecurityZone; - List<Term> termList = new ArrayList<Term>(); - - ServiceListJson targetSl=null; - try{ - - for (int tl = 0 ; tl< termCollectorList.size(); tl++) { - expandableList.add(termCollectorList.get(tl)); - Term targetTerm = new Term(); - //targetSl= new ServiceListJson(); - targetTerm.setRuleName(termCollectorList.get(tl)); - List<TermList> termListData = termListDao.getTermListData(); - for (int j =0; j < termListData.size(); j++) { - jpaTermList = termListData.get(j); - if (jpaTermList.getTermName().equals(termCollectorList.get(tl))){ - ruleDesc=jpaTermList.getTermDescription(); - if ((ruleDesc!=null)&& (!ruleDesc.isEmpty())){ - targetTerm.setDescription(ruleDesc); - } - ruleFromZone=jpaTermList.getFromZone(); - - if ((ruleFromZone != null) && (!ruleFromZone.isEmpty())){ - fromZone_map = new HashMap<Integer, String>(); - fromZone_map.put(tl, ruleFromZone); - } - ruleToZone=jpaTermList.getToZone(); - - if ((ruleToZone != null) && (!ruleToZone.isEmpty())){ - toZone_map = new HashMap<Integer, String>(); - toZone_map.put(tl, ruleToZone); - } - ruleSrcPrefixList=jpaTermList.getSrcIPList(); - - if ((ruleSrcPrefixList != null) && (!ruleSrcPrefixList.isEmpty())){ - srcIP_map = new HashMap<Integer, String>(); - srcIP_map.put(tl, ruleSrcPrefixList); - } - - ruleDestPrefixList= jpaTermList.getDestIPList(); - if ((ruleDestPrefixList != null) && (!ruleDestPrefixList.isEmpty())){ - destIP_map = new HashMap<Integer, String>(); - destIP_map.put(tl, ruleDestPrefixList); - } - - ruleSrcPort=jpaTermList.getSrcPortList(); - - if (ruleSrcPort != null && (!ruleSrcPort.isEmpty())){ - srcPort_map = new HashMap<Integer, String>(); - srcPort_map.put(tl, ruleSrcPort); - } - - ruleDestPort= jpaTermList.getDestPortList(); - - if (ruleDestPort!= null && (!jpaTermList.getDestPortList().isEmpty())){ - destPort_map = new HashMap<Integer, String>(); - destPort_map.put(tl, ruleDestPort); - } - - ruleAction=jpaTermList.getAction(); - - if (( ruleAction!= null) && (!ruleAction.isEmpty())){ - action_map = new HashMap<Integer, String>(); - action_map.put(tl, ruleAction); - } - } - } - targetTerm.setEnabled(true); - targetTerm.setLog(true); - targetTerm.setNegateSource(false); - targetTerm.setNegateDestination(false); - - if(action_map!=null){ - targetTerm.setAction(action_map.get(tl)); - } - - //FromZone arrays - if(fromZone_map!=null){ - List<String> fromZone= new ArrayList<String>(); - for(String fromZoneStr:fromZone_map.get(tl).split(",") ){ - fromZone.add(fromZoneStr); - } - targetTerm.setFromZones(fromZone); - } - - //ToZone arrays - if(toZone_map!=null){ - List<String> toZone= new ArrayList<String>(); - for(String toZoneStr:toZone_map.get(tl).split(",") ){ - toZone.add(toZoneStr); - } - targetTerm.setToZones(toZone); - } - - //Destination Services. - if(destPort_map!=null){ - Set<ServicesJson> destServicesJsonList= new HashSet<ServicesJson>(); - for(String destServices:destPort_map.get(tl).split(",") ){ - ServicesJson destServicesJson= new ServicesJson(); - destServicesJson.setType("REFERENCE"); - if(destServices.equals("ANY")){ - destServicesJson.setName("any"); - destServicesJsonList.add(destServicesJson); - break; - }else{ - if(destServices.startsWith("Group_")){ - destServicesJson.setName(destServices.substring(6,destServices.length())); - } else{ - destServicesJson.setName(destServices); - } - destServicesJsonList.add(destServicesJson); - } - } - targetTerm.setDestServices(destServicesJsonList); - } - //ExpandableServicesList - if((srcPort_map!=null) && (destPort_map!=null)){ - String servicesCollateString = (srcPort_map.get(tl) + "," + destPort_map.get(tl)); - expandableServicesList.add(servicesCollateString); - }else if (srcPort_map!=null){ - expandableServicesList.add(srcPort_map.get(tl)); - }else if (destPort_map!=null){ - expandableServicesList.add(destPort_map.get(tl)); - } - - if(srcIP_map!=null){ - //Source List - List<AddressJson> sourceListArrayJson= new ArrayList<AddressJson>(); - for(String srcList:srcIP_map.get(tl).split(",") ){ - AddressJson srcListJson= new AddressJson(); - if(srcList.equals("ANY")){ - srcListJson.setType("any"); - sourceListArrayJson.add(srcListJson); - break; - }else{ - srcListJson.setType("REFERENCE"); - if(srcList.startsWith("Group_")){ - srcListJson.setValue(srcList.substring(6,srcList.length())); - }else{ - srcListJson.setValue(srcList); - } - sourceListArrayJson.add(srcListJson); - } - } - targetTerm.setSourceList(sourceListArrayJson); - } - if(destIP_map!=null){ - //Destination List - List<AddressJson> destListArrayJson= new ArrayList<AddressJson>(); - for(String destList:destIP_map.get(tl).split(",")){ - AddressJson destListJson= new AddressJson(); - if(destList.equals("ANY")){ - destListJson.setType("any"); - destListArrayJson.add(destListJson); - break; - }else{ - destListJson.setType("REFERENCE"); - if(destList.startsWith("Group_")){ - destListJson.setValue(destList.substring(6,destList.length())); - }else{ - destListJson.setValue(destList); - } - destListArrayJson.add(destListJson); - } - } - targetTerm.setDestinationList(destListArrayJson); - } - //ExpandablePrefixIPList - if ((srcIP_map!=null) && (destIP_map!=null)) - { - String collateString = (srcIP_map.get(tl) + "," + destIP_map - .get(tl)); - expandablePrefixIPList.add(collateString); - } - else if(srcIP_map!=null){ - expandablePrefixIPList.add(srcIP_map.get(tl)); - } - else if(destIP_map!=null){ - expandablePrefixIPList.add(destIP_map.get(tl)); - } - termList.add(targetTerm); - targetTerm.setPosition("" + (ruleCount++)); - } - TermCollector tc = new TermCollector(); - List<SecurityZone> securityZoneData = securityZoneDao.getSecurityZoneData(); - for (int j =0 ; j< securityZoneData.size() ; j++){ - jpaSecurityZone = securityZoneData.get(j); - if (jpaSecurityZone.getZoneName().equals(policyAdapter.getSecurityZone())){ - tc.setSecurityZoneId(jpaSecurityZone.getZoneValue()); - setParentSecurityZone(jpaSecurityZone.getZoneValue());//For storing the securityZone IDs to the DB - break; - } - } - - tc.setServiceTypeId("/v0/firewall/pan"); - tc.setConfigName(policyAdapter.getConfigName()); - - if(policyAdapter.getFwPolicyType().equalsIgnoreCase("Child Policy")){ - String securityZoneQuery="SELECT SECURITYZONE FROM FWPARENT WHERE PARENT='"; - securityZoneQuery=securityZoneQuery+policyAdapter.getParentForChild()+"'"; - List<String> securityZoneValue= queryToDatabase(securityZoneQuery); - tc.setPrimaryParentZoneId(securityZoneValue.get(0)); - } - //Astra is rejecting the packet when it sees a new JSON field, so removing it for now. - //tc.setTemplateVersion(XACMLProperties.getProperty(XACMLRestProperties.TemplateVersion_FW)); - - DeployNowJson deployNow= new DeployNowJson(); - deployNow.setDeployNow(false); - - tc.setDeploymentOption(deployNow); - - Set<ServiceListJson> servListArray = new HashSet<ServiceListJson>(); - Set<ServiceGroupJson> servGroupArray= new HashSet<ServiceGroupJson>(); - Set<AddressGroupJson> addrGroupArray= new HashSet<AddressGroupJson>(); - - ServiceGroupJson targetSg= null; - AddressGroupJson addressSg=null; - ServiceListJson targetAny= null; - ServiceListJson targetAnyTcp=null; - ServiceListJson targetAnyUdp=null; - - for(String serviceList:expandableServicesList){ - for(String t: serviceList.split(",")){ - if((!t.startsWith("Group_"))){ - if(!t.equals("ANY")){ - ServiceList sl = new ServiceList(); - targetSl= new ServiceListJson(); - sl= mappingServiceList(t); - targetSl.setName(sl.getServiceName()); - targetSl.setDescription(sl.getServiceDescription()); - targetSl.setTransportProtocol(sl.getServiceTransProtocol()); - targetSl.setType(sl.getServiceType()); - targetSl.setPorts(sl.getServicePorts()); - servListArray.add(targetSl); - }else{ - //Any for destinationServices. - //Add names any, any-tcp, any-udp to the serviceGroup object. - targetAny= new ServiceListJson(); - targetAny.setName("any"); - targetAny.setType("SERVICE"); - targetAny.setTransportProtocol("any"); - targetAny.setPorts("any"); - - servListArray.add(targetAny); - - targetAnyTcp= new ServiceListJson(); - targetAnyTcp.setName("any-tcp"); - targetAnyTcp.setType("SERVICE"); - targetAnyTcp.setTransportProtocol("tcp"); - targetAnyTcp.setPorts("any"); - - servListArray.add(targetAnyTcp); - - targetAnyUdp= new ServiceListJson(); - targetAnyUdp.setName("any-udp"); - targetAnyUdp.setType("SERVICE"); - targetAnyUdp.setTransportProtocol("udp"); - targetAnyUdp.setPorts("any"); - - servListArray.add(targetAnyUdp); - } - }else{//This is a group - GroupServiceList sg= new GroupServiceList(); - targetSg= new ServiceGroupJson(); - sg= mappingServiceGroup(t); - - String name=sg.getGroupName(); - //Removing the "Group_" prepending string before packing the JSON - targetSg.setName(name.substring(6,name.length())); - List<ServiceMembers> servMembersList= new ArrayList<ServiceMembers>(); - - for(String groupString: sg.getServiceList().split(",")){ - ServiceMembers serviceMembers= new ServiceMembers(); - serviceMembers.setType("REFERENCE"); - serviceMembers.setName(groupString); - servMembersList.add(serviceMembers); - //Expand the group Name - ServiceList expandGroupSl = new ServiceList(); - targetSl= new ServiceListJson(); - expandGroupSl= mappingServiceList(groupString); - - targetSl.setName(expandGroupSl.getServiceName()); - targetSl.setDescription(expandGroupSl.getServiceDescription()); - targetSl.setTransportProtocol(expandGroupSl.getServiceTransProtocol()); - targetSl.setType(expandGroupSl.getServiceType()); - targetSl.setPorts(expandGroupSl.getServicePorts()); - servListArray.add(targetSl); - } - - targetSg.setMembers(servMembersList); - servGroupArray.add(targetSg); - - } - } - } - - Set<PrefixIPList> prefixIPList = new HashSet<PrefixIPList>(); - for(String prefixList:expandablePrefixIPList){ - for(String prefixIP: prefixList.split(",")){ - if((!prefixIP.startsWith("Group_"))){ - if(!prefixIP.equals("ANY")){ - List<AddressMembers> addMembersList= new ArrayList<AddressMembers>(); - List<String> valueDesc= new ArrayList<String>(); - PrefixIPList targetAddressList = new PrefixIPList(); - AddressMembers addressMembers= new AddressMembers(); - targetAddressList.setName(prefixIP); - - valueDesc = mapping(prefixIP); - targetAddressList.setDescription(valueDesc.get(1)); - - addressMembers.setType("SUBNET"); - addressMembers.setValue(valueDesc.get(0)); - - addMembersList.add(addressMembers); - - targetAddressList.setMembers(addMembersList); - prefixIPList.add(targetAddressList); - } - } - else{//This is a group - AddressGroup ag= new AddressGroup(); - addressSg= new AddressGroupJson(); - ag= mappingAddressGroup(prefixIP); - - String name=ag.getGroupName(); - //Removing the "Group_" prepending string before packing the JSON - addressSg.setName(name.substring(6,name.length())); - - List<AddressMembers> addrMembersList= new ArrayList<AddressMembers>(); - for(String groupString: ag.getPrefixList().split(",")){ - List<String> valueDesc= new ArrayList<String>(); - AddressMembers addressMembers= new AddressMembers(); - valueDesc= mapping (groupString); - if(valueDesc.size() > 0){ - addressMembers.setValue(valueDesc.get(0)); - } - addressMembers.setType("SUBNET"); - addrMembersList.add(addressMembers); - //Expand the group Name - } - addressSg.setMembers(addrMembersList); - addrGroupArray.add(addressSg); - } - - - } - } - - Set<Object> serviceGroup= new HashSet<Object>(); - - for(Object obj1:servGroupArray){ - serviceGroup.add(obj1); - } - - for(Object obj:servListArray){ - serviceGroup.add(obj); - } - - Set<Object> addressGroup= new HashSet<Object>(); - - for(Object addObj:prefixIPList){ - addressGroup.add(addObj); - } - - for(Object addObj1:addrGroupArray){ - addressGroup.add(addObj1); - } - - tc.setServiceGroups(serviceGroup); - tc.setAddressGroups(addressGroup); - tc.setFirewallRuleList(termList); - - - ObjectWriter om = new ObjectMapper().writer(); - try { - json = om.writeValueAsString(tc); - } catch (JsonGenerationException e) { - e.printStackTrace(); - } catch (JsonMappingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - }catch (Exception e) { - e.printStackTrace(); - } - - return json; - } - - private List<String> mapping(String expandableList) { - String value = new String(); - String desc = new String(); - List <String> valueDesc= new ArrayList<String>(); - List<PREFIXLIST> prefixListData = prefixListDao.getPREFIXLISTData(); - for (int i = 0; i< prefixListData.size(); i++) { - PREFIXLIST prefixList = prefixListData.get(i); - if (prefixList.getPrefixListName().equals(expandableList)) { - value = prefixList.getPrefixListValue(); - valueDesc.add(value); - desc= prefixList.getDescription(); - valueDesc.add(desc); - break; - } - } - return valueDesc; - } - - private ServiceList mappingServiceList(String expandableList) { - ServiceList serviceList=null; - List<ServiceList> serviceListData = serviceListDao.getServiceListData(); - for (int i = 0; i< serviceListData.size(); i++) { - serviceList = serviceListData.get(i); - if (serviceList.getServiceName().equals(expandableList)) { - break; - } - } - return serviceList; - } - - private GroupServiceList mappingServiceGroup(String expandableList) { - - GroupServiceList serviceGroup=null; - List<GroupServiceList> serviceGroupData = serviceGroupDao.getGroupServiceListData(); - for (int i = 0; i< serviceGroupData.size(); i++) { - serviceGroup = serviceGroupData.get(i); - if (serviceGroup.getGroupName().equals(expandableList)) { - break; - } - } - return serviceGroup; - } - - private AddressGroup mappingAddressGroup(String expandableList) { - - AddressGroup addressGroup=null; - List<AddressGroup> addressGroupData = addressGroupDao.getAddressGroupData(); - for (int i = 0; i< addressGroupData.size(); i++) { - addressGroup = addressGroupData.get(i); - if (addressGroup.getGroupName().equals(expandableList)) { - break; - } - } - return addressGroup; - } - - public void PrePopulateFWPolicyData(PolicyAdapter policyAdapter) { - attributeList = new ArrayList<Object>(); - fwAttributeList = new ArrayList<Object>(); - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - // policy name value is the policy name without any prefix and Extensions. - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("FW_") +3, policyAdapter.getPolicyName().lastIndexOf(".")); - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating form data for Config Policy selected:"+ policyAdapter.getPolicyName()); - } - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - - ObjectMapper mapper = new ObjectMapper(); - - TermCollector tc1=null; - BufferedReader br=null; - try { - //Json conversion. - String data=null; - SecurityZone jpaSecurityZone; - File file = new File(PolicyController.getConfigHome()+ File.separator+ policyAdapter.getDirPath().replace(File.separator, ".")+"."+ policyAdapter.getOldPolicyFileName() +".json"); - // Get data from this file using a file reader. - FileReader fr = new FileReader(file); - // To store the contents read via File Reader - br = new BufferedReader(fr); - // Read br and store a line in 'data', print data - data = br.readLine(); - tc1 = (TermCollector)mapper.readValue(data, TermCollector.class); - List<SecurityZone> securityZoneData = securityZoneDao.getSecurityZoneData(); - for (int i = 0; i < securityZoneData.size() ; i++) { - jpaSecurityZone = securityZoneData.get(i); - if (jpaSecurityZone.getZoneValue().equals(tc1.getSecurityZoneId())){ - policyAdapter.setSecurityZone(jpaSecurityZone.getZoneName()); - break; - } - } - if(tc1.getPrimaryParentZoneId()!=null)//Child policy - { - policyAdapter.setFwPolicyType("Child Policy"); - - String pathName=policyAdapter.getParentPath().toString(); - String scope= pathName.substring(pathName.lastIndexOf(File.separator)+1); - String fullPathName=scope+".Config_FW_"+policyNameValue; - - String query= "select parent from FWChildToParent where child='"; - query=query+fullPathName+"'"; - - List<String> parentName=queryToDatabase(query); - policyAdapter.setParentForChild(parentName.get(0)); - - } - else{//Parent Policy - policyAdapter.setFwPolicyType("Parent Policy"); - //Retrieving the Dictionary combo list. - String desc = policy.getDescription(); - String descripComboList = desc.substring(desc.indexOf("@comboList:")+11,desc.length()) ; - Map<String, String> parentMap = new HashMap<String, String>(); - for(String value : descripComboList.split(",")){ - parentMap.put("option", value); - fwAttributeList.add(parentMap); - } - policyAdapter.setFwattributes(fwAttributeList); - } - } - catch(Exception e) { - logger.error("Exception Caused while Retriving the JSON body data" +e); - } - finally { - try { - if (br != null)br.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - - for (Term t : tc1.getFirewallRuleList()) { - Map<String, String> termMap = new HashMap<String, String>(); - termMap.put("option", t.getRuleName()); - attributeList.add(termMap); - } - policyAdapter.setAttributes(attributeList); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - int index = 0; - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attribute value and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - if (index == 1) { - policyAdapter.setConfigName(value); - } - if (index == 2){ - policyAdapter.setRiskType(value); - } - - if (index == 3){ - policyAdapter.setRiskLevel(value); - } - - if (index == 4){ - policyAdapter.setGuard(value); - } - if (index == 5 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - index++; - } - } - } - } - } - } - } - } - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - - @RequestMapping(value={"/policyController/ViewFWPolicyRule.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView setFWViewRule(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - termCollectorList = new ArrayList<String>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").toString(), PolicyAdapter.class); - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("option").toString(); - termCollectorList.add(key); - } - } - } - TermList jpaTermList; - String ruleSrcList=null; - String ruleDestList=null; - String ruleSrcPort=null; - String ruleDestPort=null; - String ruleAction=null; - List <String> valueDesc= new ArrayList<String>(); - StringBuffer displayString = new StringBuffer(); - for (String id : termCollectorList) { - jpaTermList = termListDao.getTermListValueByName(id); - if (jpaTermList != null){ - ruleSrcList= ((TermList) jpaTermList).getSrcIPList(); - if ((ruleSrcList!= null) && (!ruleSrcList.isEmpty()) && !ruleSrcList.equals("null")){ - displayString.append("Source IP List: " + ((TermList) jpaTermList).getSrcIPList()); - displayString.append(" ; \t\n"); - for(String srcList:ruleSrcList.split(",")){ - if(srcList.startsWith("Group_")){ - AddressGroup ag= new AddressGroup(); - ag= mappingAddressGroup(srcList); - displayString.append("\n\t"+"Group has :"+ag.getPrefixList()+"\n"); - for(String groupItems:ag.getPrefixList().split(",")){ - valueDesc=mapping(groupItems); - displayString.append("\n\t"+"Name: "+groupItems); - if(!valueDesc.isEmpty()){ - displayString.append("\n\t"+"Description: "+valueDesc.get(1)); - displayString.append("\n\t"+"Value: "+valueDesc.get(0)); - } - displayString.append("\n"); - } - }else{ - if(!srcList.equals("ANY")){ - valueDesc=mapping(srcList); - displayString.append("\n\t"+"Name: "+srcList); - displayString.append("\n\t"+"Description: "+valueDesc.get(1)); - displayString.append("\n\t"+"Value: "+valueDesc.get(0)); - displayString.append("\n"); - } - } - } - displayString.append("\n"); - } - ruleDestList= ((TermList) jpaTermList).getDestIPList(); - if ( ruleDestList!= null && (!ruleDestList.isEmpty())&& !ruleDestList.equals("null")){ - displayString.append("Destination IP List: " + ((TermList) jpaTermList).getDestIPList()); - displayString.append(" ; \t\n"); - for(String destList:ruleDestList.split(",")){ - if(destList.startsWith("Group_")){ - AddressGroup ag= new AddressGroup(); - ag= mappingAddressGroup(destList); - displayString.append("\n\t"+"Group has :"+ag.getPrefixList()+"\n"); - for(String groupItems:ag.getPrefixList().split(",")){ - valueDesc=mapping(groupItems); - displayString.append("\n\t"+"Name: "+groupItems); - displayString.append("\n\t"+"Description: "+valueDesc.get(1)); - displayString.append("\n\t"+"Value: "+valueDesc.get(0)); - displayString.append("\n\t"); - } - }else{ - if(!destList.equals("ANY")){ - valueDesc=mapping(destList); - displayString.append("\n\t"+"Name: "+destList); - displayString.append("\n\t"+"Description: "+valueDesc.get(1)); - displayString.append("\n\t"+"Value: "+valueDesc.get(0)); - displayString.append("\n\t"); - } - } - } - displayString.append("\n"); - } - - ruleSrcPort=((TermList) jpaTermList).getSrcPortList(); - if ( ruleSrcPort!= null && (!ruleSrcPort.isEmpty())&& !ruleSrcPort.equals("null")) { - displayString.append("\n"+"Source Port List:" - + ruleSrcPort); - displayString.append(" ; \t\n"); - } - - ruleDestPort= ((TermList) jpaTermList).getDestPortList(); - if (ruleDestPort != null && (!ruleDestPort.isEmpty())&& !ruleDestPort.equals("null")) { - displayString.append("\n"+"Destination Port List:" - + ruleDestPort); - displayString.append(" ; \t\n"); - for(String destServices:ruleDestPort.split(",")){ - if(destServices.startsWith("Group_")){ - GroupServiceList sg= new GroupServiceList(); - sg= mappingServiceGroup(destServices); - displayString.append("\n\t"+"Service Group has :"+sg.getServiceList()+"\n"); - for(String groupItems:sg.getServiceList().split(",")){ - ServiceList sl= new ServiceList(); - sl= mappingServiceList(groupItems); - displayString.append("\n\t"+"Name: "+ - sl.getServiceName()); - displayString.append("\n\t"+"Description: "+ - sl.getServiceDescription()); - displayString.append("\n\t"+"Transport-Protocol: "+ - sl.getServiceTransProtocol()); - displayString.append("\n\t"+"Ports: "+ - sl.getServicePorts()); - displayString.append("\n"); - } - } - else{ - if(!destServices.equals("ANY")){ - ServiceList sl= new ServiceList(); - sl= mappingServiceList(destServices); - displayString.append("\n\t"+"Name: "+ - sl.getServiceName()); - displayString.append("\n\t"+"Description: "+ - sl.getServiceDescription()); - displayString.append("\n\t"+"Transport-Protocol: "+ - sl.getServiceTransProtocol()); - displayString.append("\n\t"+"Ports: "+ - sl.getServicePorts()); - displayString.append("\n"); - } - } - } - displayString.append("\n"); - } - - ruleAction=(jpaTermList).getAction(); - if ( ruleAction!= null && (!ruleAction.isEmpty())) { - displayString.append("\n"+"Action List:" - + ruleAction); - displayString.append(" ; \t\n"); - } - } - } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(displayString); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } catch (Exception e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - return null; - } - - -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreatePolicyController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreatePolicyController.java deleted file mode 100644 index f5c0a576c..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/CreatePolicyController.java +++ /dev/null @@ -1,484 +0,0 @@ -/*- - * ============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.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -//import org.apache.commons.logging.Log; -//import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -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.servlet.ModelAndView; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -@Controller -@RequestMapping("/") -public class CreatePolicyController extends RestrictedBaseController{ - private static Logger logger = FlexLogger.getLogger(CreatePolicyController.class); - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static PolicyVersionDao policyVersionDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private CreatePolicyController(RuleAlgorithmsDao ruleAlgorithmsDao, PolicyVersionDao policyVersionDao, WatchPolicyNotificationDao policyNotificationDao){ - CreatePolicyController.policyVersionDao = policyVersionDao; - CreatePolicyController.ruleAlgorithmsDao = ruleAlgorithmsDao; - CreatePolicyController.policyNotificationDao = policyNotificationDao; - } - - public CreatePolicyController(){} - - protected PolicyAdapter policyAdapter = null; - private String ruleID = ""; - private ArrayList<Object> attributeList; - boolean isValidForm = false; - private int riskLevelCount; - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - @RequestMapping(value={"/get_RiskLevelValues"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getRiskLevelValuesData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - List<String> riskLevelList = new ArrayList<String>(); - riskLevelCount = 5; - for (int i = 1; i <= riskLevelCount; i++) { - riskLevelList.add(String.valueOf(i)); - } - model.put("riskLevelDatas", mapper.writeValueAsString(riskLevelList)); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/get_GuardlValues"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getGuardValuesData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - List<String> guardList = new ArrayList<String>(); - guardList.add("True"); - guardList.add("False"); - model.put("guardDatas", mapper.writeValueAsString(guardList)); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - - @RequestMapping(value={"/policyController/save_policy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView savePolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - - if (policyData.getTtlDate()==null){ - policyData.setTtlDate("NA"); - }else{ - String dateTTL = policyData.getTtlDate(); - String newDate = convertDate(dateTTL, false); - policyData.setTtlDate(newDate); - } - - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Config_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionlist = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionlist.size() > 0) { - for(int i = 0; i < policyVersionlist.size(); i++) { - PolicyVersion entityItem = policyVersionlist.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - - Map<String, String> successMap = new HashMap<String, String>(); - Map<String, String> attributeMap = new HashMap<String, String>(); - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("option").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("number").toString(); - attributeMap.put(key, value); - } - } - } - policyData.setDynamicFieldConfigAttributes(attributeMap); - - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> versionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (versionList.size() > 0) { - for(int i = 0; i < versionList.size(); i++) { - PolicyVersion entityItem = versionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - private String convertDate(String dateTTL, boolean portalType) { - String formateDate = null; - String[] date; - String[] parts; - - if (portalType){ - parts = dateTTL.split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0] + "T05:00:00.000Z"; - } else { - date = dateTTL.split("T"); - parts = date[0].split("-"); - formateDate = parts[2] + "-" + parts[1] + "-" + parts[0]; - } - return formateDate; - } - - public void PrePopulateBaseConfigPolicyData(PolicyAdapter policyAdapter) { - attributeList = new ArrayList<Object>(); - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - policyAdapter.setConfigBodyData(readBaseConfigJSONFile(policyAdapter)); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("_") + 1 , policyAdapter.getPolicyName().lastIndexOf(".")); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy. - TargetType target = policy.getTarget(); - if (target != null) { - // Under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AnyOFType we have AllOFType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - int index = 0; - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOFType we have Match - List<MatchType> matchList = allOf.getMatch(); - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - AttributeDesignatorType designator = match.getAttributeDesignator(); - String attributeId = designator.getAttributeId(); - // First match in the target is EcompName, so set that value. - if (index == 1) { - policyAdapter.setEcompName(value); - } - if (index == 2){ - policyAdapter.setRiskType(value); - } - - if (index == 3){ - policyAdapter.setRiskLevel(value); - } - - if (index == 4){ - policyAdapter.setGuard(value); - } - if (index == 5 && !value.contains("NA")){ - String newDate = convertDate(value, true); - policyAdapter.setTtlDate(newDate); - } - if (index == 6){ - policyAdapter.setConfigName(value); - } - // After Ecomp and Config it is optional to have attributes, so - // check weather dynamic values or there or not. - if (index >= 7) { - Map<String, String> attribute = new HashMap<String, String>(); - attribute.put("option", attributeId); - attribute.put("number", value); - attributeList.add(attribute); - } - index++; - } - } - } - } - } - } - - policyAdapter.setAttributes(attributeList); - } - List<Object> ruleList = policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition(); - for (Object o : ruleList) { - if (o instanceof RuleType) { - // get the condition data under the rule for rule Algorithms. - policyAdapter.setRuleID(((RuleType) o).getRuleId()); - } - } - } - } - - private String readBaseConfigJSONFile(PolicyAdapter policyAdapter) { - String fileName = policyAdapter.getPolicyName(); - String fileLocation = null; - if (fileName != null && fileName.contains("Config")) { - fileLocation = PolicyController.getConfigHome(); - } - if (logger.isDebugEnabled()) { - logger.debug("Attempting to read file from the location: " + fileLocation); - } - - if (fileLocation == null) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error with the FileName: " + fileName); - return fileLocation; - } - - - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - String extension = null; - for (File file : listOfFiles) { - if (file.isFile() && file.getName().contains(fileName)) { - // For config form we have set the ConfigType Based on the extention. - if (fileName.contains("Config")) { - extension = file.getName().substring(file.getName().lastIndexOf('.') + 1); - // Based on file type set Combobox config value - if (extension.equals("txt")) { - policyAdapter.setConfigType("OTHER"); - } else { - policyAdapter.setConfigType(extension.toUpperCase()); - } - } - // Reading the file - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - while (line != null) { - sb.append(line); - sb.append("\n"); - line = br.readLine(); - } - return sb.toString(); - } catch (FileNotFoundException e) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage()); - } catch (IOException e1) { - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e1.getMessage()); - } - } - } - return null; - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/DashboardController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/DashboardController.java deleted file mode 100644 index 301c824f0..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/DashboardController.java +++ /dev/null @@ -1,430 +0,0 @@ -/*- - * ============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.IOException; -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.management.AttributeNotFoundException; -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -//import org.apache.commons.logging.Log; -//import org.apache.commons.logging.LogFactory; -import org.json.JSONObject; -import org.openecomp.policy.dao.SystemLogDbDao; -import org.openecomp.policy.model.PDPGroupContainer; -import org.openecomp.policy.rest.XACMLRestProperties; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.JsonMessage; -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.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.api.pap.EcompPDP; -import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; - -import com.att.research.xacml.api.pap.PAPException; -import com.att.research.xacml.api.pap.PDP; -import com.att.research.xacml.api.pap.PDPGroup; -import com.att.research.xacml.api.pap.PDPPolicy; -import com.att.research.xacml.util.XACMLProperties; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; - -@Controller -@RequestMapping({"/"}) -public class DashboardController extends RestrictedBaseController{ - private static final Logger logger = FlexLogger.getLogger(DashboardController.class); - @Autowired - SystemLogDbDao systemDAO; - - private int pdpCount; - private PDPGroupContainer pdpConatiner; - private ArrayList<Object> pdpStatusData; - private ArrayList<Object> papStatusData; - private ArrayList<Object> policyActivityData; - - - - @RequestMapping(value={"/get_DashboardLoggingData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - model.put("availableLoggingDatas", mapper.writeValueAsString(systemDAO.getLoggingData())); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/get_DashboardSystemAlertData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getSystemAlertData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - model.put("systemAlertsTableDatas", mapper.writeValueAsString(systemDAO.getSystemAlertData())); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/get_DashboardPAPStatusData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPAPStatusData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - addPAPToTable(); - model.put("papTableDatas", mapper.writeValueAsString(papStatusData)); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/get_DashboardPDPStatusData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPDPStatusData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - this.pdpConatiner = new PDPGroupContainer(PolicyController.getPapEngine()); - addPDPToTable(); - model.put("pdpTableDatas", mapper.writeValueAsString(pdpStatusData)); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/get_DashboardPolicyActivityData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPolicyActivityData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - this.pdpConatiner = new PDPGroupContainer(PolicyController.getPapEngine()); - addPolicyToTable(); - model.put("policyActivityTableDatas", mapper.writeValueAsString(policyActivityData)); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - /* - * Add the PAP information to the PAP Table - */ - public void addPAPToTable(){ - papStatusData = new ArrayList<Object>(); - File folder = new File(PolicyController.getGitPath().toAbsolutePath().toString()); - String papStatus = null; - try { - Set<EcompPDPGroup> groups = PolicyController.getPapEngine().getEcompPDPGroups(); - if (groups == null) { - papStatus = "UNKNOWN"; - throw new PAPException("PAP not running"); - }else { - papStatus = "IS_OK"; - } - } catch (PAPException | NullPointerException e1) { - papStatus = "CANNOT_CONNECT"; - logger.error("Error getting PAP status, PAP not responding to requests"); - } - String papURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); - JSONObject object = new JSONObject(); - object.put("system", papURL); - object.put("status", papStatus); - object.put("noOfPolicy", countFilesInDirectory(folder)); - object.put("noOfConnectedTrap", pdpCount); - papStatusData.add(0, object); - } - - private int countFilesInDirectory(File directory) { - int count = 0; - for (File file : directory.listFiles()) { - if (file.isFile() && file.getName().endsWith(".xml")) { - count++; - } - if (file.isDirectory()) { - count += countFilesInDirectory(file); - } - } - return count; - } - /** - * Add PDP Information to the PDP Table - * - */ - public void addPDPToTable(){ - pdpCount = 0; - pdpStatusData = new ArrayList<Object>(); - long naCount; - long denyCount = 0; - long permitCount = 0; - for (PDPGroup group : this.pdpConatiner.getGroups()){ - for (PDP pdp : group.getPdps()){ - naCount = -1; - if (pdp.getStatus().getStatus().toString() == "UP_TO_DATE" && ((EcompPDP) pdp).getJmxPort() != 0){ - String pdpIpAddress = parseIPSystem(pdp.getId()); - int port = ((EcompPDP) pdp).getJmxPort(); - if (port != 0) - logger.debug("Getting JMX Response Counts from " + pdpIpAddress + " at JMX port " + port); - naCount = getRequestCounts(pdpIpAddress, port, "pdpEvaluationNA"); - permitCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationPermit"); - denyCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationDeny"); - } - if (naCount == -1){ - JSONObject object = new JSONObject(); - object.put("id", pdp.getId()); - object.put("name", pdp.getName()); - object.put("groupname", group.getName()); - object.put("status", pdp.getStatus().getStatus().toString()); - object.put("description", pdp.getDescription()); - object.put("permitCount", "NA"); - object.put("denyCount", "NA"); - object.put("naCount", "NA"); - pdpStatusData.add(object); - }else{ - JSONObject object = new JSONObject(); - object.put("id", pdp.getId()); - object.put("name", pdp.getName()); - object.put("groupname", group.getName()); - object.put("status", pdp.getStatus().getStatus().toString()); - object.put("description", pdp.getDescription()); - object.put("permitCount", permitCount); - object.put("denyCount", denyCount); - object.put("naCount", naCount); - pdpStatusData.add(object); - } - pdpCount++; - } - } - } - - private static String parseIPSystem(String line) { - Pattern pattern = Pattern.compile("://(.+?):"); - Matcher ip = pattern.matcher(line); - if (ip.find()) - { - return ip.group(1); - } - return null; - } - - /* - * Contact JMX Connector Sever and return the value of the given jmxAttribute - */ - @SuppressWarnings("rawtypes") - private long getRequestCounts(String host, int port, String jmxAttribute) { - - logger.debug("Create an RMI connector client and connect it to the JMX connector server"); - HashMap map = new HashMap(); - map = null; - JMXConnector jmxConnection; - try { - jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map); - jmxConnection.connect(); - Object o = jmxConnection.getMBeanServerConnection().getAttribute(new ObjectName("PdpRest:type=PdpRestMonitor"), jmxAttribute); - jmxConnection.close(); - logger.debug("pdpEvaluationNA value retreived: " + o); - return (long) o; - } catch (MalformedURLException e) { - logger.error("MalformedURLException for JMX connection"); - } catch (IOException e) { - logger.error("Error in reteriving" + jmxAttribute + " from JMX connection"); - } catch (AttributeNotFoundException e) { - logger.error("AttributeNotFoundException " + jmxAttribute + " for JMX connection"); - } catch (InstanceNotFoundException e) { - logger.error("InstanceNotFoundException " + host + " for JMX connection"); - } catch (MalformedObjectNameException e) { - logger.error("MalformedObjectNameException for JMX connection"); - } catch (MBeanException e) { - logger.error("MBeanException for JMX connection"); - e.printStackTrace(); - } catch (ReflectionException e) { - logger.error("ReflectionException for JMX connection"); - } - - return -1; - } - - private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException{ - return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi"); - } - - - /* - * Add the information to the Policy Table - */ - private void addPolicyToTable() { - policyActivityData = new ArrayList<Object>(); - int i = 1; - String policyID = null; - int policyFireCount = 0; - Map<String, String> policyMap = new HashMap<>(); - Object policyList = null; - //get list of policy - - for (PDPGroup group : this.pdpConatiner.getGroups()){ - for (PDPPolicy policy : group.getPolicies()){ - try{ - policyMap.put(policy.getPolicyId().replace(" ", ""), policy.getId()); - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID+policy.getName() +e); - } - } - - for (PDP pdp : group.getPdps()){ - // Add rows to the Policy Table - policyList = null; - if (pdp.getStatus().getStatus().toString() == "UP_TO_DATE" && ((EcompPDP) pdp).getJmxPort() != 0){ - String pdpIpAddress = parseIPSystem(pdp.getId()); - policyList = getPolicy(pdpIpAddress, ((EcompPDP) pdp).getJmxPort(), "policyCount"); - } - if (policyList != null && policyList.toString().length() > 3){ - String[] splitPolicy = policyList.toString().split(","); - for (String policyKeyValue : splitPolicy){ - policyID = urnPolicyID(policyKeyValue); - policyFireCount = countPolicyID(policyKeyValue); - if (policyID != null ){ - if (policyMap.containsKey(policyID)){ - JSONObject object = new JSONObject(); - object.put("policyId", policyMap.get(policyID)); - object.put("fireCount", policyFireCount); - object.put("system", pdp.getId()); - policyActivityData.add(i, object); - i++; - } - } - } - }else { - if (policyList != null){ - JSONObject object = new JSONObject(); - object.put("policyId", "Unable to retrieve policy information"); - object.put("fireCount", "NA"); - object.put("system", pdp.getId()); - policyActivityData.add(i, object); - i++; - }else{ - JSONObject object = new JSONObject(); - object.put("policyId", "Unable to access PDP JMX Server"); - object.put("fireCount", "NA"); - object.put("system", pdp.getId()); - policyActivityData.add(i, object); - i++; - } - } - - } - } - } - - /* - * Contact JMX Connector Sever and return the list of {policy id , count} - */ - @SuppressWarnings("rawtypes") - private Object getPolicy(String host, int port, String jmxAttribute){ - logger.debug("Create an RMI connector client and connect it to the JMX connector server for Policy: " + host); - HashMap map = new HashMap(); - map = null; - JMXConnector jmxConnection; - try { - jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map); - jmxConnection.connect(); - Object o = jmxConnection.getMBeanServerConnection().getAttribute(new ObjectName("PdpRest:type=PdpRestMonitor"), "policyMap"); - jmxConnection.close(); - logger.debug("policyMap value retreived: " + o); - return o; - } catch (MalformedURLException e) { - logger.error("MalformedURLException for JMX connection"); - } catch (IOException e) { - logger.error("AttributeNotFoundException for policyMap" ); - } catch (AttributeNotFoundException e) { - logger.error("AttributeNotFoundException for JMX connection"); - } catch (InstanceNotFoundException e) { - logger.error("InstanceNotFoundException " + host + " for JMX connection"); - } catch (MalformedObjectNameException e) { - logger.error("MalformedObjectNameException for JMX connection"); - } catch (MBeanException e) { - logger.error("MBeanException for JMX connection"); - e.printStackTrace(); - } catch (ReflectionException e) { - logger.error("ReflectionException for JMX connection"); - } - - return null; - - } - - private static String urnPolicyID(String line){ - String[] splitLine = line.toString().split("="); - String removeSpaces = splitLine[0].replaceAll("\\s+", ""); - return removeSpaces.replace("{", ""); - } - - private static Integer countPolicyID(String line){ - String[] splitLine = line.toString().split("="); - String sCount = splitLine[1].replace("}", ""); - int intCount = Integer.parseInt(sCount); - return intCount; - } - -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/DecisionPolicyController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/DecisionPolicyController.java deleted file mode 100644 index 20cde7f43..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/DecisionPolicyController.java +++ /dev/null @@ -1,507 +0,0 @@ -/*- - * ============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.IOException; -import java.io.PrintWriter; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBElement; - -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.PolicyNotificationMail; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.dao.RuleAlgorithmsDao; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.elk.client.PolicyElasticSearchController; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.rest.jpa.RuleAlgorithms; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -import com.att.research.xacml.api.XACML3; -import org.openecomp.policy.xacml.util.XACMLPolicyScanner; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Joiner; - -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.EffectType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableDefinitionType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableReferenceType; - -@Controller -@RequestMapping("/") -public class DecisionPolicyController extends RestrictedBaseController { - private static final Logger logger = FlexLogger.getLogger(DecisionPolicyController.class); - - private static RuleAlgorithmsDao ruleAlgorithmsDao; - private static PolicyVersionDao policyVersionDao; - private static WatchPolicyNotificationDao policyNotificationDao; - - @Autowired - private DecisionPolicyController(RuleAlgorithmsDao ruleAlgorithmsDao, PolicyVersionDao policyVersionDao, WatchPolicyNotificationDao policyNotificationDao){ - DecisionPolicyController.policyVersionDao = policyVersionDao; - DecisionPolicyController.ruleAlgorithmsDao = ruleAlgorithmsDao; - DecisionPolicyController.policyNotificationDao = policyNotificationDao; - } - - public DecisionPolicyController(){} - - protected PolicyAdapter policyAdapter = null; - private static String ruleID = ""; - private ArrayList<Object> attributeList; - private ArrayList<Object> decisionList; - private ArrayList<Object> ruleAlgorithmList; - protected LinkedList<Integer> ruleAlgoirthmTracker; - public static final String FUNCTION_NOT = "urn:oasis:names:tc:xacml:1.0:function:not"; - - public String newPolicyID() { - return Joiner.on(':').skipNulls().join((PolicyController.getDomain().startsWith("urn") ? null: "urn"), - PolicyController.getDomain().replaceAll("[/\\\\.]", ":"), "xacml", "policy", "id", UUID.randomUUID()); - } - - @RequestMapping(value={"/policyController/save_DecisionPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView saveDecisionPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - String userId = UserUtils.getUserIdFromCookie(request); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyAdapter.class); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; - } - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); - }else{ - policyData.setDomainDir(root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - int version = 0; - int highestVersion = 0; - int descriptionVersion = 0; - //get the highest version of policy from policy version table. - //getting the sub scope domain where the policy is created or updated - String dbCheckPolicyName = policyData.getDomainDir() + File.separator + "Decision_" + policyData.getPolicyName(); - List<PolicyVersion> policyVersionList = policyVersionDao.getPolicyVersionEntityByName(dbCheckPolicyName); - if (policyVersionList.size() > 0) { - for(int i = 0; i < policyVersionList.size(); i++) { - PolicyVersion entityItem = policyVersionList.get(i); - if(entityItem.getPolicyName().equals(dbCheckPolicyName)){ - highestVersion = entityItem.getHigherVersion(); - } - } - } - if(highestVersion != 0){ - version = highestVersion; - descriptionVersion = highestVersion +1; - }else{ - version = 1; - descriptionVersion = 1; - } - - //set policy adapter values for Building JSON object containing policy data - String createdBy = ""; - String modifiedBy = userId; - if(descriptionVersion == 1){ - createdBy = userId; - }else{ - String policyName = PolicyController.getGitPath().toAbsolutePath().toString() + File.separator + policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - File policyPath = new File(policyName); - try { - createdBy = XACMLPolicyScanner.getCreatedBy(policyPath.toPath()); - } catch (IOException e) { - createdBy = "guest"; - } - } - - policyData.setPolicyDescription(policyData.getPolicyDescription()+ "@CreatedBy:" +createdBy + "@CreatedBy:" + "@ModifiedBy:" +modifiedBy + "@ModifiedBy:"); - Map<String, String> successMap = new HashMap<String, String>(); - Map<String, String> attributeMap = new HashMap<String, String>(); - Map<String, String> settingsMap = new HashMap<String, String>(); - - List<String> dynamicRuleAlgorithmLabels = new LinkedList<String>(); - List<String> dynamicRuleAlgorithmCombo = new LinkedList<String>(); - List<String> dynamicRuleAlgorithmField1 = new LinkedList<String>(); - List<String> dynamicRuleAlgorithmField2 = new LinkedList<String>(); - List<Object> dynamicVariableList = new LinkedList<Object>(); - List<String> dataTypeList = new LinkedList<String>(); - - //set the Rule Combining Algorithm Id to be sent to PAP-REST via JSON - List<RuleAlgorithms> ruleAlgorithmsList = ruleAlgorithmsDao.getRuleAlgorithms(); - for (int i = 0; i < ruleAlgorithmsList.size(); i++) { - RuleAlgorithms a = ruleAlgorithmsList.get(i); - if (a.getXacmlId().equals(XACML3.ID_RULE_PERMIT_OVERRIDES.stringValue())) { - policyData.setRuleCombiningAlgId(a.getXacmlId()); - break; - } - } - - if(policyData.getAttributes().size() > 0){ - for(Object attribute : policyData.getAttributes()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) attribute).get("option").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("number").toString(); - attributeMap.put(key, value); - } - } - } - - if(policyData.getSettings().size() > 0){ - for(Object settingsData : policyData.getSettings()){ - if(settingsData instanceof LinkedHashMap<?, ?>){ - String key = ((LinkedHashMap<?, ?>) settingsData).get("option").toString(); - String value = ((LinkedHashMap<?, ?>) settingsData).get("number").toString(); - settingsMap.put(key, value); - } - } - } - - if(policyData.getRuleAlgorithmschoices().size() > 0){ - for(Object attribute : policyData.getRuleAlgorithmschoices()){ - if(attribute instanceof LinkedHashMap<?, ?>){ - String label = ((LinkedHashMap<?, ?>) attribute).get("id").toString(); - String key = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField1").toString(); - String rule = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmCombo").toString(); - String value = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField2").toString(); - dynamicRuleAlgorithmLabels.add(label); - dynamicRuleAlgorithmField1.add(key); - dynamicRuleAlgorithmCombo.add(rule); - dynamicRuleAlgorithmField2.add(value); - } - } - } - - policyData.setDynamicRuleAlgorithmLabels(dynamicRuleAlgorithmLabels); - policyData.setDynamicRuleAlgorithmCombo(dynamicRuleAlgorithmCombo); - policyData.setDynamicRuleAlgorithmField1(dynamicRuleAlgorithmField1); - policyData.setDynamicRuleAlgorithmField2(dynamicRuleAlgorithmField2); - policyData.setDynamicVariableList(dynamicVariableList); - policyData.setDynamicSettingsMap(settingsMap); - policyData.setDynamicFieldConfigAttributes(attributeMap); - policyData.setDataTypeList(dataTypeList); - if (policyData.isEditPolicy()){ - //increment the version and set in policyAdapter - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - policyData.setPolicyID(this.newPolicyID()); - policyData.setRuleID(ruleID); - successMap = engine.updatePolicyRequest(policyData); - } else { - //send it for policy creation - policyData.setVersion(String.valueOf(version)); - policyData.setHighestVersion(version); - successMap = engine.createPolicyRequest(policyData); - - } - - if (successMap.containsKey("success")) { - // Add it into our tree - Path finalPolicyPath = null; - finalPolicyPath = Paths.get(successMap.get("success")); - PolicyElasticSearchController controller = new PolicyElasticSearchController(); - controller.updateElk(finalPolicyPath.toString()); - File file = finalPolicyPath.toFile(); - if(file != null){ - String policyName = file.toString(); - String removePath = policyName.substring(policyName.indexOf("repository")+11); - String removeXml = removePath.replace(".xml", ""); - String removeExtension = removeXml.substring(0, removeXml.indexOf(".")); - List<PolicyVersion> vesionList = policyVersionDao.getPolicyVersionEntityByName(removeExtension); - if (vesionList.size() > 0) { - for(int i = 0; i < vesionList.size(); i++) { - PolicyVersion entityItem = vesionList.get(i); - if(entityItem.getPolicyName().equals(removeExtension)){ - version = entityItem.getHigherVersion() +1; - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setModifiedBy(userId); - policyVersionDao.update(entityItem); - if(policyData.isEditPolicy){ - PolicyNotificationMail email = new PolicyNotificationMail(); - String mode = "EditPolicy"; - String policyNameForEmail = policyData.getDomainDir() + File.separator + policyData.getOldPolicyFileName() + ".xml"; - email.sendMail(entityItem, policyNameForEmail, mode, policyNotificationDao); - } - } - } - }else{ - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setActiveVersion(version); - entityItem.setHigherVersion(version); - entityItem.setPolicyName(removeExtension); - entityItem.setCreatedBy(userId); - entityItem.setModifiedBy(userId); - policyVersionDao.Save(entityItem); - } - } - } - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - public void PrePopulateDecisionPolicyData(PolicyAdapter policyAdapter) { - attributeList = new ArrayList<Object>(); - decisionList = new ArrayList<Object>(); - ruleAlgorithmList = new ArrayList<Object>(); - if (policyAdapter.getPolicyData() instanceof PolicyType) { - Object policyData = policyAdapter.getPolicyData(); - PolicyType policy = (PolicyType) policyData; - policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName()); - String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("_") + 1, policyAdapter.getPolicyName().lastIndexOf(".")); - policyAdapter.setPolicyName(policyNameValue); - String description = ""; - try{ - description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:")); - }catch(Exception e){ - description = policy.getDescription(); - } - policyAdapter.setPolicyDescription(description); - // Get the target data under policy for Action. - TargetType target = policy.getTarget(); - if (target != null) { - // under target we have AnyOFType - List<AnyOfType> anyOfList = target.getAnyOf(); - if (anyOfList != null) { - Iterator<AnyOfType> iterAnyOf = anyOfList.iterator(); - while (iterAnyOf.hasNext()) { - AnyOfType anyOf = iterAnyOf.next(); - // Under AntOfType we have AllOfType - List<AllOfType> allOfList = anyOf.getAllOf(); - if (allOfList != null) { - Iterator<AllOfType> iterAllOf = allOfList.iterator(); - while (iterAllOf.hasNext()) { - AllOfType allOf = iterAllOf.next(); - // Under AllOfType we have Mathch. - List<MatchType> matchList = allOf.getMatch(); - int index = 0; - if (matchList != null) { - Iterator<MatchType> iterMatch = matchList.iterator(); - while (iterMatch.hasNext()) { - MatchType match = iterMatch.next(); - // - // Under the match we have attributevalue and - // attributeDesignator. So,finally down to the actual attribute. - // - AttributeValueType attributeValue = match.getAttributeValue(); - String value = (String) attributeValue.getContent().get(0); - AttributeDesignatorType designator = match.getAttributeDesignator(); - String attributeId = designator.getAttributeId(); - // First match in the target is EcompName, so set that value. - if (index == 0) { - policyAdapter.setEcompName(value); - } - // Component attributes are saved under Target here we are fetching them back. - // One row is default so we are not adding dynamic componet at index 0. - if (index >= 1) { - Map<String, String> attribute = new HashMap<String, String>(); - attribute.put("option", attributeId); - attribute.put("number", value); - attributeList.add(attribute); - } - index++; - } - } - policyAdapter.setAttributes(attributeList); - } - } - } - } - - List<Object> ruleList = policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition(); - int index = 0; - for (Object object : ruleList) { - if (object instanceof VariableDefinitionType) { - VariableDefinitionType variableDefinitionType = (VariableDefinitionType) object; - Map<String, String> settings = new HashMap<String, String>(); - settings.put("option", variableDefinitionType.getVariableId()); - JAXBElement<AttributeValueType> attributeValueTypeElement = (JAXBElement<AttributeValueType>) variableDefinitionType.getExpression(); - if (attributeValueTypeElement != null) { - AttributeValueType attributeValueType = attributeValueTypeElement.getValue(); - settings.put("number", attributeValueType.getContent().get(0).toString()); - } - decisionList.add(settings); - } else if (object instanceof RuleType) { - // get the condition data under the rule for rule Algorithms. - ruleID = ((RuleType) object).getRuleId(); - if (((RuleType) object).getEffect().equals(EffectType.PERMIT)) { - ConditionType condition = ((RuleType) object).getCondition(); - if (condition != null) { - ApplyType decisionApply = (ApplyType) condition.getExpression().getValue(); - ruleAlgoirthmTracker = new LinkedList<Integer>(); - // Populating Rule Algorithms starting from compound. - prePopulateDecisionCompoundRuleAlgorithm(index, decisionApply); - policyAdapter.setRuleAlgorithmschoices(ruleAlgorithmList); - } - }else if(((RuleType) object).getEffect().equals(EffectType.DENY)) { - if(((RuleType) object).getAdviceExpressions()!=null){ - if(((RuleType) object).getAdviceExpressions().getAdviceExpression().get(0).getAdviceId().toString().equalsIgnoreCase("AAF")){ - policyAdapter.setRuleProvider("AAF"); - break; - } - }else{ - policyAdapter.setRuleProvider("Custom"); - } - } - } - } - } - policyAdapter.setSettings(decisionList); - } - - } - - private void prePopulateDecisionRuleAlgorithms(int index, ApplyType decisionApply, List<JAXBElement<?>> jaxbDecisionTypes) { - Map<String, String> ruleMap = new HashMap<String, String>(); - ruleMap.put("id", "A" + (index +1)); - Map<String, String> dropDownMap = PolicyController.getDropDownMap(); - for (String key : dropDownMap.keySet()) { - String keyValue = dropDownMap.get(key); - if (keyValue.equals(decisionApply.getFunctionId())) { - ruleMap.put("dynamicRuleAlgorithmCombo", key); - } - } - // Populate the key and value fields - if (((jaxbDecisionTypes.get(0).getValue()) instanceof AttributeValueType)) { - ApplyType innerDecisionApply = (ApplyType) jaxbDecisionTypes.get(1).getValue(); - List<JAXBElement<?>> jaxbInnerDecisionTypes = innerDecisionApply.getExpression(); - if (jaxbInnerDecisionTypes.get(0).getValue() instanceof AttributeDesignatorType) { - AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerDecisionTypes.get(0).getValue(); - ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId()); - - // Get from Attribute Value - AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbDecisionTypes.get(0).getValue(); - String attributeValue = (String) actionConditionAttributeValue.getContent().get(0); - ruleMap.put("dynamicRuleAlgorithmField2", attributeValue); - } - } else if ((jaxbDecisionTypes.get(0).getValue()) instanceof VariableReferenceType) { - VariableReferenceType variableReference = (VariableReferenceType) jaxbDecisionTypes.get(0).getValue(); - ruleMap.put("dynamicRuleAlgorithmField1", "S_"+ variableReference.getVariableId()); - - - // Get from Attribute Value - AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbDecisionTypes.get(1).getValue(); - String attributeValue = (String) actionConditionAttributeValue.getContent().get(0); - ruleMap.put("dynamicRuleAlgorithmField2", attributeValue); - } - ruleAlgorithmList.add(ruleMap); - } - - private int prePopulateDecisionCompoundRuleAlgorithm(int index, ApplyType decisionApply) { - boolean isCompoundRule = true; - List<JAXBElement<?>> jaxbDecisionTypes = decisionApply.getExpression(); - for (JAXBElement<?> jaxbElement : jaxbDecisionTypes) { - // If There is Attribute Value under Decision Type that means we came to the final child - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating rule algoirthm: " + index); - } - // Check to see if Attribute Value exists, if yes then it is not a compound rule - if(jaxbElement.getValue() instanceof AttributeValueType) { - prePopulateDecisionRuleAlgorithms(index, decisionApply, jaxbDecisionTypes); - ruleAlgoirthmTracker.addLast(index); - isCompoundRule = false; - index++; - } - } - if (isCompoundRule) { - // As it's compound rule, Get the Apply types - for (JAXBElement<?> jaxbElement : jaxbDecisionTypes) { - ApplyType innerDecisionApply = (ApplyType) jaxbElement.getValue(); - index = prePopulateDecisionCompoundRuleAlgorithm(index, innerDecisionApply); - } - // Populate combo box - if (logger.isDebugEnabled()) { - logger.debug("Prepopulating Compound rule algorithm: " + index); - } - Map<String, String> rule = new HashMap<String, String>(); - for (String key : PolicyController.getDropDownMap().keySet()) { - String keyValue = PolicyController.getDropDownMap().get(key); - if (keyValue.equals(decisionApply.getFunctionId())) { - rule.put("dynamicRuleAlgorithmCombo", key); - } - } - - rule.put("id", "A" + (index +1)); - // Populate Key and values for Compound Rule - rule.put("dynamicRuleAlgorithmField1", "A" + (ruleAlgoirthmTracker.getLast() + 1 )); - ruleAlgoirthmTracker.removeLast(); - rule.put("dynamicRuleAlgorithmField2", "A" + (ruleAlgoirthmTracker.getLast() + 1)); - ruleAlgoirthmTracker.removeLast(); - ruleAlgoirthmTracker.addLast(index); - ruleAlgorithmList.add(rule); - index++; - } - return index; - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PDPController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PDPController.java deleted file mode 100644 index add650b1e..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PDPController.java +++ /dev/null @@ -1,302 +0,0 @@ -/*- - * ============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.PrintWriter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.dao.GroupEntityDao; -import org.openecomp.policy.dao.PDPEntityDao; -import org.openecomp.policy.model.PDPGroupContainer; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.JsonMessage; -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.servlet.ModelAndView; - -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; - -import com.att.research.xacml.api.pap.PAPException; -import com.att.research.xacml.api.pap.PDPGroup; -import org.openecomp.policy.xacml.std.pap.StdPDP; -import org.openecomp.policy.xacml.std.pap.StdPDPGroup; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -@Controller -@RequestMapping({"/"}) -public class PDPController extends RestrictedBaseController { - private static final Logger logger = FlexLogger.getLogger(PDPController.class); - - @Autowired - GroupEntityDao groupDAO; - - @Autowired - PDPEntityDao pdpDAO; - - protected List<EcompPDPGroup> groups = Collections.synchronizedList(new ArrayList<EcompPDPGroup>()); - private PDPGroupContainer container; - - public synchronized void refreshGroups() { - synchronized(this.groups) { - this.groups.clear(); - try { - this.groups.addAll(PolicyController.getPapEngine().getEcompPDPGroups()); - } catch (PAPException e) { - String message = "Unable to retrieve Groups from server: " + e; - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Pap Engine is Null" + message); - } - - } - } - - @RequestMapping(value={"/get_PDPGroupContainerData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPDPGroupContainerData(HttpServletRequest request, HttpServletResponse response){ - try{ - ObjectMapper mapper = new ObjectMapper(); - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while retrieving the PDP Group Container data" + e); - } - } - - @RequestMapping(value={"/get_PDPGroupData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPDPGroupEntityData(HttpServletRequest request, HttpServletResponse response){ - try{ - ObjectMapper mapper = new ObjectMapper(); - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while retrieving the PDP Group data" + e); - } - } - - @RequestMapping(value={"/pdp_Group/save_pdp_group"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView savePDPGroup(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - this.container = new PDPGroupContainer(PolicyController.getPapEngine()); - StdPDPGroup pdpGroupData = mapper.readValue(root.get("pdpGroupData").toString().replace("groupName", "name"), StdPDPGroup.class); - try { - if(pdpGroupData.getId() == null){ - this.container.addNewGroup(pdpGroupData.getName(), pdpGroupData.getDescription()); - }else{ - this.container.updateGroup(pdpGroupData); - } - - } catch (Exception e) { - String message = "Unable to create Group. Reason:\n" + e.getMessage(); - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while creating the PDP Group" + message); - } - - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - out.write(j.toString()); - - return null; - } - catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while Saving the PDP Group" + e); - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - @RequestMapping(value={"/pdp_Group/remove_pdp_group"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView removePDPGroup(HttpServletRequest request, HttpServletResponse response) throws Exception { - try{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - this.container = new PDPGroupContainer(PolicyController.getPapEngine()); - StdPDPGroup pdpGroupData = mapper.readValue(root.get("pdpGroupData").toString(), StdPDPGroup.class); - if(pdpGroupData.getName().equals("Default")) { - throw new UnsupportedOperationException("You can't remove the Default Group."); - }else{ - this.container.removeGroup(pdpGroupData, null); - } - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - out.write(j.toString()); - - return null; - } - catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while Removing the PDP Group" + e); - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - @RequestMapping(value={"/pdp_Group/save_pdpTogroup"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView savePDPToGroup(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - this.container = new PDPGroupContainer(PolicyController.getPapEngine()); - String update = root.get("update").toString(); - PdpData pdpGroupData = (PdpData)mapper.readValue(root.get("pdpInGroup").toString(), PdpData.class); - StdPDPGroup activeGroupData = mapper.readValue(root.get("activePDP").toString(), StdPDPGroup.class); - try { - - if(update.contains("false")){ - this.container.addNewPDP(pdpGroupData.getId(), activeGroupData, pdpGroupData.getName(), pdpGroupData.getDescription(), pdpGroupData.getJmxPort()); - }else{ - this.container.updateGroup(activeGroupData); - } - } catch (Exception e) { - String message = "Unable to create Group. Reason:\n" + e.getMessage(); - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while Creating Pdp in PDP Group" + message); - } - - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - refreshGroups(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups)); - JSONObject j = new JSONObject(msg); - out.write(j.toString()); - - return null; - } - catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while Creating Pdp in PDP Group" + e); - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - @RequestMapping(value={"/pdp_Group/remove_pdpFromGroup"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView removePDPFromGroup(HttpServletRequest request, HttpServletResponse response) throws Exception { - try{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - this.container = new PDPGroupContainer(PolicyController.getPapEngine()); - StdPDP deletePdp = mapper.readValue(root.get("data").toString(), StdPDP.class); - StdPDPGroup activeGroupData = mapper.readValue(root.get("activePDP").toString(), StdPDPGroup.class); - - this.container.removePDP(deletePdp, activeGroupData); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - refreshGroups(); - String responseString = mapper.writeValueAsString(groups); - JSONObject j = new JSONObject("{pdpEntityDatas: " + responseString + "}"); - out.write(j.toString()); - - return null; - } - catch (Exception e){ - logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Error Occured while Removing Pdp from PDP Group" + e); - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } -} - -class PdpData{ - String id; - int jmxPort; - String name; - String description; - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public int getJmxPort() { - return jmxPort; - } - public void setJmxPort(int jmxPort) { - this.jmxPort = jmxPort; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - -} 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 deleted file mode 100644 index c4b254c8e..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyController.java +++ /dev/null @@ -1,418 +0,0 @@ -/*- - * ============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<String, String> dropDownMap = new HashMap<String, String>(); - public static Map<String, String> getDropDownMap() { - return dropDownMap; - } - - public static void setDropDownMap(Map<String, String> 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<Datatype, List<FunctionDefinition>> mapDatatype2Function = null; - private static Map<String, FunctionDefinition> 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<Datatype, List<FunctionDefinition>> functionMap = getFunctionDatatypeMap(); - for (Datatype id : functionMap.keySet()) { - List<FunctionDefinition> functionDefinations = (List<FunctionDefinition>) functionMap.get(id); - for (FunctionDefinition functionDef : functionDefinations) { - dropDownMap.put(functionDef.getShortname(),functionDef.getXacmlid()); - } - } - - } - - public static Map<Datatype, List<FunctionDefinition>> getFunctionDatatypeMap() { - synchronized(mapAccess) { - if (mapDatatype2Function == null) { - buildFunctionMaps(); - } - } - return mapDatatype2Function; - } - - public static Map<String, FunctionDefinition> getFunctionIDMap() { - synchronized(mapAccess) { - if (mapID2Function == null) { - buildFunctionMaps(); - } - } - return mapID2Function; - } - - private static void buildFunctionMaps() { - mapDatatype2Function = new HashMap<Datatype, List<FunctionDefinition>>(); - mapID2Function = new HashMap<String, FunctionDefinition>(); - List<FunctionDefinition> 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<FunctionDefinition>()); - } - mapDatatype2Function.get(value.getDatatypeBean()).add(value); - } - } - - public static Map<String, Roles> getUserRoles(String userId) { - Map<String, Roles> scopes = new HashMap<String, Roles>(); - List<Roles> roles = rolesDao.getUserRoles(userId); - if (roles != null && roles.size() > 0) { - for (Roles role : roles) { - scopes.put(role.getScope(), role); - } - } - return scopes; - } - - public static List<String> getRolesOfUser(String userId) { - List<String> rolesList = new ArrayList<String>(); - List<Roles> roles = rolesDao.getUserRoles(userId); - for (Roles role: roles) { - rolesList.add(role.getRole()); - } - return rolesList; - } - - public static List<Roles> 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<String, Object> model = new HashMap<String, Object>(); - 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<String, Object> model = new HashMap<String, Object>(); - 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<PolicyVersion> 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<PolicyEditorScopes> 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<String> av = new ArrayList<String>(); - 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; - } - -} - diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyExportAndImportController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyExportAndImportController.java deleted file mode 100644 index 76fadb59d..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyExportAndImportController.java +++ /dev/null @@ -1,563 +0,0 @@ -/*- - * ============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.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.compress.archivers.tar.TarArchiveEntry; -import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; -import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.io.IOUtils; -import org.json.JSONObject; -import org.openecomp.policy.adapter.PolicyExportAdapter; -import org.openecomp.policy.dao.PolicyVersionDao; -import org.openecomp.policy.elk.client.ElkConnector; -import org.openecomp.policy.model.Roles; -import org.openecomp.policy.rest.jpa.PolicyVersion; -import org.openecomp.policy.utils.XACMLPolicyWriterWithPapNotify; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -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 PolicyExportAndImportController extends RestrictedBaseController { - private static Logger logger = FlexLogger.getLogger(PolicyExportAndImportController.class); - private ArrayList<File> selectedPolicy; - public static String CONFIG_HOME = PolicyController.getConfigHome(); - public static String ACTION_HOME = PolicyController.getActionHome(); - - private Set<String> scopes = null; - private List<String> roles = null; - private Boolean superadmin = false; - private Boolean showMessage = false; - private static final int BUFFER_SIZE = 4096; - private Path directory = PolicyController.getGitPath(); - - //Scopes Which Super Editor can't import - private Set<String> sEditorScopesCantCreate = new HashSet<String>(); - //List of scopes in Tar file - private Set<String> listOfTarNewScopes = new HashSet<String>(); - //List of xml policies - private ArrayList<String> xacmlFiles = new ArrayList<String>(); - //Scopes of the User based on the Roles - private List<String> userScopes = null; - //Directory names from tar file - private Set<String> directoryNames = new HashSet<String>(); - //compare the scopes of the user and tar file get unique - private Set<String> finalScopesToImport = new HashSet<String>(); - //final scopes User can import - private Set<String> finalScopes = new HashSet<String>(); - //User don't have permissions to import to scopes - private Set<String> roleIsNotSufficient = new HashSet<String>(); - //User don't have access to import new scopes - private Set<String> userDontHavePermission = new HashSet<String>(); - - private Map<String, Roles> scopeAndRoles = null; - - private static PolicyVersionDao policyVersionDao; - - @Autowired - ServletContext servletContext; - - @Autowired - private PolicyExportAndImportController(PolicyVersionDao policyVersionDao){ - PolicyExportAndImportController.policyVersionDao = policyVersionDao; - } - - public PolicyExportAndImportController(){} - - @RequestMapping(value={"/policy_download/exportPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView ExportPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try{ - selectedPolicy = new ArrayList<File>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyExportAdapter adapter = mapper.readValue(root.get("exportData").toString(), PolicyExportAdapter.class); - for (Object policyId : adapter.getPolicyDatas()) { - LinkedHashMap<?, ?> selected = (LinkedHashMap<?, ?>)policyId; - Path file = Paths.get(selected.get("filePath").toString()); - selectedPolicy.add(file.toFile()); - } - // Grab our working repository - // - final Path repoPath = PolicyController.getGitPath().toAbsolutePath(); - if(CONFIG_HOME == null || ACTION_HOME == null ){ - CONFIG_HOME = PolicyController.getConfigHome(); - ACTION_HOME = PolicyController.getActionHome(); - } - Path configPath = Paths.get(CONFIG_HOME); - Path actionPath = Paths.get(ACTION_HOME); - String tempDir = System.getProperty("catalina.base") + File.separator + "webapps" + File.separator + "temp"; - File temPath = new File(tempDir); - if(!temPath.exists()){ - temPath.mkdir(); - } - final Path tarFile = Paths.get(tempDir, "Repository.tar"); - try (OutputStream os = Files.newOutputStream(tarFile)) { - try (TarArchiveOutputStream tarOut = new TarArchiveOutputStream(os)) { - tarOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); - Files.walkFileTree(configPath, new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - for (File policyId : selectedPolicy) { - // Get the current selection - String policyDir = policyId.toString(); - policyDir = policyDir.substring(policyDir.indexOf("repository")+11); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - path = FilenameUtils.removeExtension(path); - if (path.endsWith(".xml")) { - path = path.substring(0, path.length() - 4); - } - File configFile = new File(path); - String fileName = FilenameUtils.removeExtension(file.getFileName().toString()); - File configHome = new File(fileName); - if(configFile.equals(configHome)) { - Path relative = configPath.relativize(file); - TarArchiveEntry entry = new TarArchiveEntry(relative.toFile()); - entry.setSize(Files.size(file)); - tarOut.putArchiveEntry(entry); - try { - IOUtils.copy(Files.newInputStream(file), tarOut); - } catch (IOException e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - tarOut.closeArchiveEntry(); - return super.visitFile(file, attrs); - } - } - return super.visitFile(file, attrs); - } - }); - - Files.walkFileTree(actionPath, new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - for (File policyId : selectedPolicy) { - // Get the current selection - String policyDir = policyId.toString(); - policyDir = policyDir.substring(policyDir.indexOf("repository")+11); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - path = FilenameUtils.removeExtension(path); - if (path.endsWith(".xml")) { - path = path.substring(0, path.length() - 4); - } - File actionFile = new File(path); - String fileName = FilenameUtils.removeExtension(file.getFileName().toString()); - File actionHome = new File(fileName); - if(actionFile.equals(actionHome)) { - Path relative = actionPath.relativize(file); - TarArchiveEntry entry = new TarArchiveEntry(relative.toFile()); - entry.setSize(Files.size(file)); - tarOut.putArchiveEntry(entry); - try { - IOUtils.copy(Files.newInputStream(file), tarOut); - } catch (IOException e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - tarOut.closeArchiveEntry(); - return super.visitFile(file, attrs); - } - } - return super.visitFile(file, attrs); - } - }); - - Files.walkFileTree(repoPath, new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (file.getFileName().toString().endsWith(".xml") == false) { - return super.visitFile(file, attrs); - } - for (File policyId : selectedPolicy) { - // Get the current selection - if(policyId.getAbsoluteFile().getName().equals(file.getFileName().toString())) { - Path relative = repoPath.relativize(file); - TarArchiveEntry entry = new TarArchiveEntry(relative.toFile()); - entry.setSize(Files.size(file)); - tarOut.putArchiveEntry(entry); - try { - IOUtils.copy(Files.newInputStream(file), tarOut); - } catch (IOException e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - tarOut.closeArchiveEntry(); - return super.visitFile(file, attrs); - } - } - return super.visitFile(file, attrs); - } - }); - - tarOut.closeArchiveEntry(); - tarOut.finish(); - logger.debug("closing the tar file"); - } - } catch (IOException e) { - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "getting IOexception"); - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - } - logger.info("trying to send tar file "+tarFile.toAbsolutePath().toString()); - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - String successMap = tarFile.toString().substring(tarFile.toString().lastIndexOf("webapps")+8); - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{data: " + responseString + "}"); - out.write(j.toString()); - - - return null; - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception Occured while Exporting Policies"+e); - } - return null; - } - - //Policy Import - public JSONObject ImportRepositoryFile(String file, HttpServletRequest request){ - TarArchiveEntry entry = null; - TarArchiveInputStream extractFile = null; - try { - extractFile = new TarArchiveInputStream (new FileInputStream(file)); - } catch (FileNotFoundException e1) { - e1.printStackTrace(); - } - String userId = null; - try { - userId = UserUtils.getUserIdFromCookie(request); - } catch (Exception e) { - logger.error("Exception Occured while reading userid from cookie" +e); - } - scopeAndRoles = PolicyController.getUserRoles(userId); - //Check if the Role and Scope Size are Null get the values from db. - List<Roles> userRoles = PolicyController.getRoles(userId); - roles = new ArrayList<String>(); - scopes = new HashSet<String>(); - for(Roles userRole: userRoles){ - roles.add(userRole.getRole()); - scopes.add(userRole.getScope()); - } - //Create a loop to read every single entry in TAR file - try { - if (roles.contains("super-admin") || roles.contains("super-editor") || roles.contains("super-guest") ) { - while ((entry = extractFile.getNextTarEntry()) != null) { - this.superadmin = true; - try{ - copyFileToLocation(extractFile, entry, xacmlFiles, null, superadmin); - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception while Importing Polcies"+e); - } - } - }else{ - this.showMessage = true; - //get the directory names from tar file and add to the list - while ((entry = extractFile.getNextTarEntry()) != null) { - if(entry.getName().endsWith(".xls")) { - this.superadmin = true; - try{ - copyFileToLocation(extractFile, entry, xacmlFiles, finalScopes, superadmin); - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception while Importing Polcies"+e); - } - } - if(entry.getName().endsWith(".xml")){ - String filename = null; - if(entry.getName().contains("\\")){ - filename = entry.getName().replace("\\", File.separator); - }else{ - filename = entry.getName().replace("/", File.separator); - } - directoryNames.add(filename.substring(0, filename.lastIndexOf(File.separator))); - } - - //get the matching scopes on comparing user scopes and tar file scopes - for(int i=0;i< userScopes.size(); i++){ - for(int j=0; j<directoryNames.size(); j++){ - if(userScopes.toArray()[i].equals(directoryNames.toArray()[j])){ - finalScopesToImport.add(userScopes.toArray()[i].toString()); - } - } - } - //get the scopes for which the user have permission to import - if(finalScopesToImport.size() != 0){ - for(int i = 0; i < finalScopesToImport.size() ; i++){ - String role = scopeAndRoles.get(finalScopesToImport.toArray()[i]).getRole(); - if(role.equalsIgnoreCase("editor") || role.equalsIgnoreCase("admin")){ - finalScopes.add(finalScopesToImport.toArray()[i].toString()); - if(role.equalsIgnoreCase("super-guest") || role.equalsIgnoreCase("guest")){ - roleIsNotSufficient.remove(finalScopesToImport.toArray()[i].toString()); - } - }else{ - roleIsNotSufficient.add(finalScopesToImport.toArray()[i].toString()); - } - } - } - //if final Scopes to import set is not 0, then copy the files - if(finalScopes.size() != 0) { - this.superadmin = false; - try{ - copyFileToLocation(extractFile, entry, xacmlFiles, finalScopes, superadmin); - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception while Importing Polcies"+e); - } - } - } - } - } catch (Exception e1) { - logger.info(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Exception:" +e1); - e1.printStackTrace(); - } - // Close TarAchiveInputStream - try { - extractFile.close(); - } catch (IOException e) { - logger.info(XACMLErrorConstants.ERROR_PROCESS_FLOW+"IO Exception:"+e); - e.printStackTrace(); - } - - File tarFile1 = new File(file.toString()); - tarFile1.delete(); - - for (String xacmlFile: xacmlFiles) { - String policyName = xacmlFile.substring(xacmlFile.indexOf("repository")+11); - if(policyName.endsWith(".xml")){ - policyName = policyName.replace(".xml", ""); - String version = policyName.substring(policyName.lastIndexOf(".")+1); - String finalPolicyName = policyName.substring(0, policyName.lastIndexOf(".")); - PolicyVersion policyVersion = new PolicyVersion(); - policyVersion.setPolicyName(finalPolicyName); - policyVersion.setActiveVersion(Integer.parseInt(version)); - policyVersion.setHigherVersion(Integer.parseInt(version)); - policyVersion.setCreatedBy(userId); - policyVersion.setModifiedBy(userId); - policyVersionDao.Save(policyVersion); - } - - //send to pap - if(!XACMLPolicyWriterWithPapNotify.notifyPapOfCreateUpdate(xacmlFile)){ - logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Failed adding imported policy to database: "+xacmlFile); - //throw new Exception("Failed adding imported policy to database: "+xacmlFile); - } - try { - File f = new File(xacmlFile); - ElkConnector.singleton.update(f); - } catch (Exception e) { - logger.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + ": Cannot ELK import: " + xacmlFile + " " + - e.getMessage(), e); - } - } - - //Filter the Set on Removing the Scopes which are imported - for(int j=0; j< finalScopesToImport.size(); j++){ - for(int i = 0; i < directoryNames.size(); i++){ - if(roles.contains("admin") || roles.contains("editor")){ - if(!((directoryNames.toArray()[i]).toString()).startsWith(finalScopesToImport.toArray()[j].toString())){ - userDontHavePermission.add(directoryNames.toArray()[i].toString()); - } - } - } - } - - //Show the Warn message to the User, if any of the policies are not Imported to teh Scopes - if(showMessage){ - if(roleIsNotSufficient.size() == 0 && userDontHavePermission.size() != 0){ - logger.warn(" User don't have Permissions to Import Policies to following Scopes:'"+userDontHavePermission+"'"); - } - else if(roleIsNotSufficient.size() != 0 && userDontHavePermission.size() == 0){ - logger.warn("Please Contact Super-Admin to Import the New Scopes:'"+roleIsNotSufficient+"'"); - } - else if(roleIsNotSufficient.size() != 0 && userDontHavePermission.size() != 0){ - logger.warn("Please Contact Super-Admin to Import the New Scopes:'"+roleIsNotSufficient+"' User don't have Permissions to Import Policies to following Scopes:'"+userDontHavePermission+"'"); - }else if(sEditorScopesCantCreate.size() != 0){ - logger.warn("Super-Editor can't create following new Scopes" +sEditorScopesCantCreate); - }else if(finalScopesToImport.size() == 0 && directoryNames.size() != 0){ - logger.warn(" User don't have Permissions to Import Policies to following Scopes:'"+directoryNames+"'"); - } - } - return null; - } - - //Copy files to Directorys - private void copyFileToLocation(TarArchiveInputStream extractFile, TarArchiveEntry entry, ArrayList<String> xacmlFiles, Set<String> finalScopes, Boolean superadminValue ) throws IOException{ - String individualFiles = ""; - int offset = 0; - FileOutputStream outputFile=null; - // Get the name of the file - if(superadminValue){ - individualFiles = entry.getName(); - //Add the list of scopes - if(entry.getName().endsWith(".xml")){ - String filename = null; - if(entry.getName().contains("\\")){ - filename = entry.getName().replace("\\", File.separator); - }else{ - filename = entry.getName().replace("/", File.separator); - } - if(roles.contains("super-editor")){ - listOfTarNewScopes.add(filename.substring(0, filename.lastIndexOf(File.separator))); - } - } - }else{ - for(int i =0; i< finalScopes.size(); i++){ - if(entry.getName().startsWith(finalScopes.toArray()[i].toString())){ - individualFiles = entry.getName(); - } - } - } - - //Filter the new Scopes which Super-Editor can't create - if(roles.contains("super-editor")){ - for(int j= 0; j< listOfTarNewScopes.size(); j++){ - boolean scopeExistsFlag = false; // This Flag is used to know if the Scope Exists. - for(int i=0; i < scopes.size(); i++ ){ - if(scopes.contains(listOfTarNewScopes.toArray()[j])){ - scopeExistsFlag = true; - } - } - if(!scopeExistsFlag){ - sEditorScopesCantCreate.add(listOfTarNewScopes.toArray()[j].toString()); - showMessage = true; - } - } - } - - individualFiles = individualFiles.replace("/", File.separator); - individualFiles = individualFiles.replace("\\", File.separator); - - //Create the path with the entry name - String filePath = directory + File.separator + individualFiles; - String configPath = CONFIG_HOME + File.separator + individualFiles; - String actionPath = ACTION_HOME + File.separator + individualFiles; - logger.info("File Name in TAR File is: " + individualFiles); - logger.info("Xml directory file path: " + filePath); - logger.info("Config Home directory file path: " + configPath); - logger.info("Action Home directory file path: " + actionPath); - - - // Get Size of the file and create a byte array for the size - byte[] content = new byte[(int) entry.getSize()]; - - offset=0; - logger.info("File Name in TAR File is: " + individualFiles); - logger.info("Size of the File is: " + entry.getSize()); - // Read file from the archive into byte array - extractFile.read(content, offset, content.length - offset); - if (!entry.isDirectory()) { - if(!individualFiles.contains(".Config_") || !individualFiles.contains(".Action_")){ - // if the entry is a file, extracts it - String filePath1 = filePath.substring(0, filePath.lastIndexOf(File.separator)); - File newFile = new File(filePath1); - if(!(newFile.exists()) && !(roles.contains("super-editor") || roles.contains("editor"))) { - File dir = new File(filePath1); - dir.mkdir(); - extractFile(extractFile, filePath); - } - } - } else { - // if the entry is a directory, make the directory - if(!(roles.contains("super-editor") || roles.contains("editor"))){ - File dir = new File(filePath); - dir.mkdir(); - } - } - // Define OutputStream for writing the file - if(individualFiles.contains(".Config_")){ - outputFile=new FileOutputStream(new File(configPath)); - }else if(individualFiles.contains(".Action_")){ - outputFile=new FileOutputStream(new File(actionPath)); - }else{ - if(filePath != null){ - outputFile=new FileOutputStream(new File(filePath)); - xacmlFiles.add(filePath); - } - } - - // Use IOUtiles to write content of byte array to physical file - IOUtils.write(content,outputFile); - - // Close Output Stream - try { - outputFile.close(); - } catch (IOException e) { - logger.info("IOException:" +e); - e.printStackTrace(); - } - } - - private void extractFile(TarArchiveInputStream extractFile, String filePath) throws IOException { - BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); - byte[] bytesIn = new byte[BUFFER_SIZE]; - int read = 0; - while ((read = extractFile.read(bytesIn)) != -1) { - bos.write(bytesIn, 0, read); - } - bos.close(); - - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyNotificationController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyNotificationController.java deleted file mode 100644 index 203f3dcc6..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyNotificationController.java +++ /dev/null @@ -1,122 +0,0 @@ -/*- - * ============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.PrintWriter; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.dao.WatchPolicyNotificationDao; -import org.openecomp.policy.rest.jpa.WatchPolicyNotificationTable; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; - -@Controller -@RequestMapping({"/"}) -public class PolicyNotificationController extends RestrictedBaseController { - - @Autowired - WatchPolicyNotificationDao policyNotificationDao; - - @RequestMapping(value={"/watchPolicy"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView watchPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - String path = ""; - String responseValue = ""; - try { - String userId = UserUtils.getUserIdFromCookie(request); - System.out.println(userId); - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - String name = root.get("watchData").get("name").toString(); - JsonNode pathList = root.get("watchData").get("path"); - String finalName = ""; - if(pathList.isArray()){ - ArrayNode arrayNode = (ArrayNode) pathList; - for (int i = 0; i < arrayNode.size(); i++) { - JsonNode individualElement = arrayNode.get(i); - if(i == 0){ - path = path + individualElement.toString().replace("\"", "").trim(); - }else{ - path = path + File.separator + individualElement.toString().replace("\"", "").trim(); - } - } - } - - if(pathList.size() > 0){ - finalName = path + File.separator + name.replace("\"", "").trim(); - }else{ - finalName = name.replace("\"", "").trim(); - } - if(finalName.contains("\\")){ - finalName = finalName.replace("\\", "\\\\"); - } - String query = "from WatchPolicyNotificationTable where POLICYNAME = '"+finalName+"' and LOGINIDS = '"+userId+"'"; - List<WatchPolicyNotificationTable> watchList = policyNotificationDao.watchListQuery(query); - if(watchList.isEmpty()){ - if(finalName.contains("\\\\")){ - finalName = finalName.replace("\\\\", File.separator); - } - WatchPolicyNotificationTable watch = new WatchPolicyNotificationTable(); - watch.setPolicyName(finalName); - watch.setLoginIds(userId); - policyNotificationDao.save(watch); - responseValue = "You have Subscribed Successfully"; - }else{ - policyNotificationDao.delete(watchList.get(0)); - responseValue = "You have UnSubscribed Successfully"; - } - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(responseValue); - JSONObject j = new JSONObject("{watchData: " + responseString + "}"); - out.write(j.toString()); - return null; - }catch(Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyRolesController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyRolesController.java deleted file mode 100644 index dea341ea9..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyRolesController.java +++ /dev/null @@ -1,137 +0,0 @@ -/*- - * ============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.PrintWriter; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.dao.PolicyRolesDao; -import org.openecomp.policy.rest.jpa.PolicyRoles; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.JsonMessage; -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.servlet.ModelAndView; - -import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -@Controller -@RequestMapping("/") -public class PolicyRolesController extends RestrictedBaseController{ - - @Autowired - PolicyRolesDao policyRolesDao; - List<String> scopelist; - - @RequestMapping(value={"/get_RolesData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPolicyRolesEntityData(HttpServletRequest request, HttpServletResponse response){ - try{ - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - model.put("rolesDatas", mapper.writeValueAsString(policyRolesDao.getUserRoles())); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - @RequestMapping(value={"/save_NonSuperRolesData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView SaveRolesEntityData(HttpServletRequest request, HttpServletResponse response){ - try{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyRoles adapter = mapper.readValue(root.get("editRoleData").toString(), PolicyRoles.class); - policyRolesDao.update(adapter); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(policyRolesDao.getUserRoles()); - JSONObject j = new JSONObject("{rolesDatas: " + responseString + "}"); - - out.write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - return null; - } - - @RequestMapping(value={"/get_PolicyRolesScopeData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE) - public void getPolicyScopesEntityData(HttpServletRequest request, HttpServletResponse response){ - try{ - scopelist = new ArrayList<String>(); - Map<String, Object> model = new HashMap<String, Object>(); - ObjectMapper mapper = new ObjectMapper(); - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - Path gitPath = PolicyController.getGitPath().toAbsolutePath(); - model.put("scopeDatas", mapper.writeValueAsString(readFileRepository(gitPath))); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model)); - JSONObject j = new JSONObject(msg); - response.getWriter().write(j.toString()); - } - catch (Exception e){ - e.printStackTrace(); - } - } - - public List<String> readFileRepository(Path path){ - File root = new File(path.toString()); - for ( File file : root.listFiles()){ - if(file.isDirectory()){ - String fileName = getDomain(file); - if (!(fileName.contains(".git") || fileName.equals(".DS_Store"))) { - scopelist.add(fileName); - } - readFileRepository(file.toPath()); - } - } - return scopelist; - } - - public String getDomain(File file) { - String filePath = file.getAbsolutePath(); - int startIndex = filePath.indexOf("repository") + 11; - return filePath.substring(startIndex, filePath.length()); - } - -} diff --git a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyValidationController.java b/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyValidationController.java deleted file mode 100644 index 5ffdd062a..000000000 --- a/ecomp-sdk-app/src/main/java/org/openecomp/policy/controller/PolicyValidationController.java +++ /dev/null @@ -1,300 +0,0 @@ -/*- - * ============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.PrintWriter; -import java.util.Arrays; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.json.JSONObject; -import org.openecomp.policy.adapter.ClosedLoopFaultBody; -import org.openecomp.policy.adapter.ClosedLoopPMBody; -import org.openecomp.policy.adapter.PolicyAdapter; -import org.openecomp.policy.admin.RESTfulPAPEngine; -import org.openecomp.policy.rest.dao.SafePolicyWarningDao; -import org.openecomp.policy.rest.jpa.SafePolicyWarning; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.JsonMessage; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.CharMatcher; - -@Controller -@RequestMapping("/") -public class PolicyValidationController extends RestrictedBaseController { - - public static final String CONFIG_POLICY = "Config"; - public static final String ACTION_POLICY = "Action"; - public static final String DECISION_POLICY = "Decision"; - public static final String CLOSEDLOOP_POLICY = "ClosedLoop_Fault"; - public static final String CLOSEDLOOP_PM = "ClosedLoop_PM"; - public static final String ENFORCER_CONFIG_POLICY= "Enforcer Config"; - public static final String MICROSERVICES="DCAE Micro Service"; - private Pattern pattern; - private Matcher matcher; - - private static final String EMAIL_PATTERN = - "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" - + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; - - @Autowired - SafePolicyWarningDao safePolicyWarningDao; - - @RequestMapping(value={"/policyController/validate_policy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public ModelAndView validatePolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ - try{ - boolean valid = true; - String responseString = ""; - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - PolicyAdapter policyData = (PolicyAdapter)mapper.readValue(root.get("policyData").toString(), PolicyAdapter.class); - if(policyData.getPolicyName() != null){ - String policyNameValidate = emptyValidator(policyData.getPolicyName()); - if(!policyNameValidate.contains("success")){ - responseString = responseString + "PolicyName:" + policyNameValidate; - valid = false; - }; - }else{ - responseString = responseString + "PolicyName: PolicyName Should not be empty" + "<br>"; - } - if(policyData.getPolicyDescription() != null){ - String descriptionValidate = descriptionValidator(policyData.getPolicyDescription()); - if(!descriptionValidate.contains("success")){ - responseString = responseString + "Description:" + descriptionValidate; - valid = false; - } - } - - if(policyData.getPolicyType().equals(CONFIG_POLICY)){ - if (policyData.getConfigPolicyType().equals("Base") || policyData.getConfigPolicyType().equals(CLOSEDLOOP_POLICY) - || policyData.getConfigPolicyType().equals(CLOSEDLOOP_PM) || policyData.getConfigPolicyType().equals(ENFORCER_CONFIG_POLICY) || policyData.getConfigPolicyType().equals(MICROSERVICES)) { - if(policyData.getEcompName() != null){ - String ecompNameValidate = emptyValidator(policyData.getEcompName()); - if(!ecompNameValidate.contains("success")){ - responseString = responseString + "EcompName:" + ecompNameValidate; - valid = false; - } - }else{ - responseString = responseString + "Ecomp Name: Ecomp Name Should not be empty" + "<br>"; - } - } - - if(policyData.getRiskType() != null){ - String riskTypeValidate = emptyValidator(policyData.getRiskType()); - if(!riskTypeValidate.contains("success")){ - responseString = responseString + "RiskType:" + riskTypeValidate; - valid = false; - }else { - SafePolicyWarning safePolicyWarningData = safePolicyWarningDao.getSafePolicyWarningDataById(policyData.getRiskType()); - if (safePolicyWarningData!=null){ - safePolicyWarningData.getMessage(); - responseString = responseString + "Messaage:" + safePolicyWarningData.getMessage(); - } - } - }else { - responseString = responseString + "Risk Type: Risk Type Should not be Empty" + "<br>"; - valid = false; - } - - if(policyData.getRiskLevel() != null){ - String validateRiskLevel = emptyValidator(policyData.getRiskLevel()); - if(!validateRiskLevel.contains("success")){ - responseString = responseString + "RiskLevel:" + validateRiskLevel; - valid = false; - } - }else { - responseString = responseString + "Risk Level: Risk Level Should not be Empty" + "<br>"; - valid = false; - } - - if(policyData.getGuard() != null){ - String validateGuard = emptyValidator(policyData.getGuard()); - if(!validateGuard.contains("success")){ - responseString = responseString + "Guard:" + validateGuard; - valid = false; - } - }else { - responseString = responseString + "Guard: Guard Value Should not be Empty" + "<br>"; - valid = false; - } - - if(policyData.getConfigPolicyType().equals("Base")){ - if(policyData.getConfigName() != null){ - String configNameValidate = emptyValidator(policyData.getConfigName()); - if(!configNameValidate.contains("success")){ - responseString = responseString + "ConfigName:" + configNameValidate; - valid = false; - } - }else{ - responseString = responseString + "Config Name: Config Name Should not be Empty" + "<br>"; - } - if(policyData.getConfigType() != null){ - String configTypeValidate = emptyValidator(policyData.getConfigType()); - if(!configTypeValidate.contains("success")){ - responseString = responseString + "ConfigType:" + configTypeValidate; - valid = false; - } - }else{ - responseString = responseString + "Config Type: Config Type Should not be Empty" + "<br>"; - } - if(policyData.getConfigBodyData() != null){ - String policyType = policyData.getPolicyType(); - RESTfulPAPEngine engine = (RESTfulPAPEngine) PolicyController.getPapEngine(); - if(!engine.validatePolicyRequest(policyData, policyType)){ - responseString = responseString + "ConfigBody: Validation Failed"; - valid = false; - } - }else{ - responseString = responseString + "Config Body: Config Body Should not be Empty" + "<br>"; - } - } - - - if(policyData.getJsonBodyData() != null){ - if(policyData.getConfigPolicyType().equals("ClosedLoop_PM")){ - ClosedLoopPMBody pmBody = (ClosedLoopPMBody)mapper.readValue(root.get("policyData").get("jsonBodyData").toString(), ClosedLoopPMBody.class); - if(pmBody.getEmailAddress() != null){ - String validateEmail = validateEmailAddress(pmBody.getEmailAddress().toString()); - if(!validateEmail.contains("success")){ - responseString = responseString + "Email:" + validateEmail; - valid = false; - } - }else{ - valid = true; - } - }else if(policyData.getConfigPolicyType().equals("ClosedLoop_Fault")){ - ClosedLoopFaultBody faultBody = (ClosedLoopFaultBody)mapper.readValue(root.get("policyData").get("jsonBodyData").toString(), ClosedLoopFaultBody.class); - if(faultBody.getEmailAddress() != null){ - String validateEmail = validateEmailAddress(faultBody.getEmailAddress().toString()); - if(!validateEmail.contains("success")){ - responseString = responseString + "Email:" + validateEmail; - valid = false; - } - }else{ - valid = true; - } - } - } - } - if (policyData.getPolicyType().equals(DECISION_POLICY)){ - String ecompNameValidate = emptyValidator(policyData.getEcompName()); - if(!ecompNameValidate.contains("success")){ - responseString = responseString + "EcompName:" + ecompNameValidate; - valid = false; - } - } - - if(policyData.getPolicyType().equals(ACTION_POLICY)){ - String actionPerformer = emptyValidator(policyData.getActionPerformer()); - String actionAttribute = emptyValidator(policyData.getActionAttributeValue()); - if(!actionPerformer.contains("success")){ - responseString = responseString + "ActionPerformer:" + actionPerformer; - valid = false; - }; - if(!actionAttribute.contains("success")){ - responseString = responseString + "ActionAttribute:" + actionAttribute; - valid = false; - }; - } - - if(policyData.getPolicyType().equals(CONFIG_POLICY)){ - if(valid){ - responseString = "success" + "@#"+ responseString; - } - }else{ - if(valid){ - responseString = "success"; - } - } - - PrintWriter out = response.getWriter(); - JsonMessage msg = new JsonMessage(mapper.writeValueAsString(responseString)); - JSONObject j = new JSONObject(msg); - out.write(j.toString()); - - return null; - } - catch (Exception e){ - response.setCharacterEncoding("UTF-8"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.write(e.getMessage()); - } - return null; - } - - protected String emptyValidator(String field){ - String error = "success"; - if (field.equals("") || field.contains(" ") || !field.matches("^[a-zA-Z0-9_]*$")) { - error = "The Value in Required Field will allow only '{0-9}, {a-z}, {A-Z}, _' following set of Combinations"; - return error; - } else { - if(CharMatcher.ASCII.matchesAllOf((CharSequence) field)){ - error = "success"; - }else{ - error = "The Value Contains Non ASCII Characters"; - return error; - } - } - return error; - } - - protected String descriptionValidator(String field) { - String error = "success"; - if (field.contains("@CreatedBy:") || field.contains("@ModifiedBy:")) { - error = "The value in the description shouldn't contain @CreatedBy: or @ModifiedBy:"; - return error; - } else { - error = "success"; - } - return error; - } - - public String validateEmailAddress(String emailAddressValue) { - String error = "success"; - List<String> emailList = Arrays.asList(emailAddressValue.toString().split(",")); - for(int i =0 ; i < emailList.size() ; i++){ - pattern = Pattern.compile(EMAIL_PATTERN); - matcher = pattern.matcher(emailList.get(i).trim()); - if(!matcher.matches()){ - error = "Please check the Following Email Address is not Valid .... " +emailList.get(i).toString(); - return error; - }else{ - error = "success"; - } - } - return error; - } - -} |