aboutsummaryrefslogtreecommitdiffstats
path: root/ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/api/services/GetConfigService.java
diff options
context:
space:
mode:
Diffstat (limited to 'ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/api/services/GetConfigService.java')
-rw-r--r--ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/api/services/GetConfigService.java303
1 files changed, 303 insertions, 0 deletions
diff --git a/ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/api/services/GetConfigService.java b/ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/api/services/GetConfigService.java
new file mode 100644
index 000000000..b501a5c6a
--- /dev/null
+++ b/ECOMP-PDP-REST/src/main/java/org/openecomp/policy/pdp/rest/api/services/GetConfigService.java
@@ -0,0 +1,303 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ECOMP-PDP-REST
+ * ================================================================================
+ * 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.pdp.rest.api.services;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+
+import org.openecomp.policy.api.ConfigRequestParameters;
+import org.openecomp.policy.api.PolicyConfigException;
+import org.openecomp.policy.api.PolicyConfigStatus;
+import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
+import org.openecomp.policy.common.logging.flexlogger.Logger;
+import org.openecomp.policy.pdp.rest.api.models.PDPResponse;
+import org.openecomp.policy.pdp.rest.api.models.PolicyConfig;
+import org.openecomp.policy.xacml.api.XACMLErrorConstants;
+import org.springframework.http.HttpStatus;
+
+public class GetConfigService {
+ private static Logger LOGGER = FlexLogger.getLogger(GetConfigService.class.getName());
+
+ private ConfigRequestParameters configRequestParameters = null;
+ private String message = null;
+ private HttpStatus responseCode = HttpStatus.BAD_REQUEST;
+ private Collection<PolicyConfig> policyConfigs = null;
+ private boolean unique = false;
+
+ public GetConfigService(ConfigRequestParameters configRequestParameters,
+ String requestID){
+ this.configRequestParameters = configRequestParameters;
+ if(configRequestParameters.getRequestID()==null){
+ UUID requestUUID = null;
+ if (requestID != null && !requestID.isEmpty()) {
+ try {
+ requestUUID = UUID.fromString(requestID);
+ } catch (IllegalArgumentException e) {
+ requestUUID = UUID.randomUUID();
+ LOGGER.info("Generated Random UUID: " + requestUUID.toString());
+ }
+ }else{
+ requestUUID = UUID.randomUUID();
+ LOGGER.info("Generated Random UUID: " + requestUUID.toString());
+ }
+ this.configRequestParameters.setRequestID(requestUUID);
+ }
+ policyConfigs = new ArrayList<PolicyConfig>();
+ try{
+ run();
+ specialCheck();
+ }catch(PolicyConfigException e){
+ PolicyConfig policyConfig = new PolicyConfig();
+ policyConfig.setPolicyConfigMessage(e.getMessage());
+ policyConfig.setPolicyConfigStatus(PolicyConfigStatus.CONFIG_NOT_FOUND);
+ policyConfigs.add(policyConfig);
+ responseCode = HttpStatus.BAD_REQUEST;
+ }
+ }
+
+ private void specialCheck() {
+ if(policyConfigs==null || policyConfigs.size()==0){
+ responseCode = HttpStatus.BAD_REQUEST;
+ }else if(policyConfigs.size()==1){
+ for(PolicyConfig policyConfig: policyConfigs){
+ if(policyConfig.getPolicyConfigMessage()!=null && policyConfig.getPolicyConfigMessage().contains("PE300")){
+ responseCode = HttpStatus.BAD_REQUEST;
+ }
+ }
+ }else{
+ responseCode = HttpStatus.OK;
+ }
+ }
+
+ private void run() throws PolicyConfigException{
+ // getValidation.
+ if(!getValidation()){
+ LOGGER.error(message);
+ throw new PolicyConfigException(message);
+ }
+ // Generate Request.
+ String modelString = getModel().toString();
+ LOGGER.debug("Generated JSON Request is: " + modelString);
+ if(configRequestParameters.getUnique()){
+ LOGGER.info("Requested for Unique Result only. ");
+ unique = true;
+ }
+ // Process Result.
+ try {
+ PDPServices pdpServices = new PDPServices();
+ responseCode = HttpStatus.OK;
+ policyConfigs = configResult(pdpServices.generateRequest(modelString, configRequestParameters.getRequestID(), unique, false));
+ // Filter addition.
+ policyConfigs = filterResults(policyConfigs, configRequestParameters);
+ } catch (Exception e) {
+ LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
+ responseCode = HttpStatus.BAD_REQUEST;
+ throw new PolicyConfigException(XACMLErrorConstants.ERROR_DATA_ISSUE +e);
+ }
+ }
+
+ private Collection<PolicyConfig> configResult(
+ Collection<PDPResponse> generateRequest) {
+ Collection<PolicyConfig> result = new HashSet<PolicyConfig>();
+ if (generateRequest == null) {
+ return null;
+ }
+ if (!generateRequest.isEmpty()) {
+ for (PDPResponse stdStatus : generateRequest) {
+ PolicyConfig policyConfig = new PolicyConfig();
+ policyConfig.setConfig(stdStatus.getConfig());
+ policyConfig.setMatchingConditions(stdStatus.getMatchingConditions());
+ policyConfig.setPolicyConfigMessage(stdStatus.getPolicyConfigMessage());
+ policyConfig.setPolicyConfigStatus(stdStatus.getPolicyConfigStatus());
+ policyConfig.setPolicyName(stdStatus.getPolicyName());
+ policyConfig.setPolicyVersion(stdStatus.getPolicyVersion());
+ policyConfig.setProperty(stdStatus.getProperty());
+ policyConfig.setResponseAttributes(stdStatus.getResponseAttributes());
+ policyConfig.setType(stdStatus.getType());
+ result.add(policyConfig);
+ }
+ }
+ return result;
+ }
+
+ // Filter logic required for results comparing with requests.
+ private Collection<PolicyConfig> filterResults(
+ Collection<PolicyConfig> policyConfigs,
+ ConfigRequestParameters configRequestParameters) {
+ List<PolicyConfig> policyConfig = new ArrayList<PolicyConfig>();
+ for(PolicyConfig config: policyConfigs){
+ if(config.getPolicyName()!=null && configRequestParameters.getPolicyName()!=null && configRequestParameters.getPolicyName().trim().length()>0){
+ if(!config.getPolicyName().matches(configRequestParameters.getPolicyName())){
+ continue;
+ }
+ }
+ if(config.getMatchingConditions()!=null && config.getMatchingConditions().size()>0){
+ if(configRequestParameters.getEcompName()!=null && configRequestParameters.getEcompName().trim().length()>0 && config.getMatchingConditions().containsKey("ECOMPName")){
+ if(!config.getMatchingConditions().get("ECOMPName").matches(configRequestParameters.getEcompName())){
+ continue;
+ }
+ }
+ if(configRequestParameters.getConfigName()!=null && configRequestParameters.getConfigName().trim().length()>0 && config.getMatchingConditions().containsKey("ConfigName")){
+ if(!config.getMatchingConditions().get("ConfigName").matches(configRequestParameters.getConfigName())){
+ continue;
+ }
+ }
+ if(configRequestParameters.getConfigAttributes()!=null && configRequestParameters.getConfigAttributes().size()>0){
+ boolean flag = false;
+ for(String key: configRequestParameters.getConfigAttributes().keySet()){
+ if(!config.getMatchingConditions().containsKey(key) || !config.getMatchingConditions().get(key).matches(configRequestParameters.getConfigAttributes().get(key))){
+ flag = true;
+ break;
+ }
+ }
+ if(flag){
+ continue;
+ }
+ }
+ }
+ policyConfig.add(config);
+ }
+ if(policyConfig.size()==0){
+ PolicyConfig pConfig = new PolicyConfig();
+ pConfig.setPolicyConfigStatus(PolicyConfigStatus.CONFIG_NOT_FOUND);
+ pConfig.setPolicyConfigMessage(XACMLErrorConstants.ERROR_DATA_ISSUE+"No Match Found, for the parameters sent.");
+ policyConfig.add(pConfig);
+ }
+ return policyConfig;
+ }
+
+ private JsonObject getModel() throws PolicyConfigException{
+ String policyName = configRequestParameters.getPolicyName();
+ if(policyName!= null && !policyName.trim().isEmpty() && !policyName.endsWith("xml")){
+ policyName = policyName + ".[\\d].*";
+ configRequestParameters.setPolicyName(policyName);
+ }
+ JsonArrayBuilder subjectArray = Json.createArrayBuilder();
+ JsonArrayBuilder resourceArray = Json.createArrayBuilder();
+ if(configRequestParameters.getPolicyName()!=null){
+ JsonObjectBuilder subjectBuilder = Json.createObjectBuilder();
+ subjectBuilder.add("Value", policyName);
+ subjectBuilder.add("AttributeId", "PolicyName");
+ subjectArray.add(subjectBuilder);
+ }else{
+ LOGGER.info("PolicyName values are not given. ");
+ }
+ if(configRequestParameters.getEcompName()!=null){
+ JsonObjectBuilder subjectBuilder = Json.createObjectBuilder();
+ subjectBuilder.add("Value", configRequestParameters.getEcompName());
+ subjectBuilder.add("AttributeId", "ECOMPName");
+ subjectArray.add(subjectBuilder);
+ if(configRequestParameters.getConfigName()!=null){
+ subjectBuilder = Json.createObjectBuilder();
+ subjectBuilder.add("Value", configRequestParameters.getConfigName());
+ subjectBuilder.add("AttributeId", "ConfigName");
+ subjectArray.add(subjectBuilder);
+ resourceArray = getResourceArray(configRequestParameters.getConfigAttributes());
+ }else{
+ LOGGER.info("Config Name is not given. ");
+ }
+ }else{
+ LOGGER.info("Ecomp Name is not given. ");
+ }
+ JsonObject model = Json.createObjectBuilder()
+ .add("Request",Json.createObjectBuilder()
+ .add("AccessSubject",Json.createObjectBuilder()
+ .add("Attribute",subjectArray))
+ .add("Action",Json.createObjectBuilder()
+ .add("Attribute",Json.createObjectBuilder()
+ .add("Value","ACCESS")
+ .add("AttributeId","urn:oasis:names:tc:xacml:1.0:action:action-id")))
+ .add("Resource",Json.createObjectBuilder()
+ .add("Attribute",resourceArray
+ .add(Json.createObjectBuilder()
+ .add("Value","Config")
+ .add("AttributeId","urn:oasis:names:tc:xacml:1.0:resource:resource-id")))))
+ .build();
+ return model;
+ }
+
+ private JsonArrayBuilder getResourceArray(Map<String, String> configAttributes) throws PolicyConfigException{
+ JsonArrayBuilder resourceArray = Json.createArrayBuilder();
+ configAttributes = configRequestParameters.getConfigAttributes();
+ if (configAttributes != null && !configAttributes.isEmpty()) {
+ if(!configAttributes.containsKey("RiskType")){
+ configAttributes.put("RiskType", ".*");
+ }
+ if(!configAttributes.containsKey("RiskLevel")){
+ configAttributes.put("RiskLevel", ".*");
+ }
+ if(!configAttributes.containsKey("guard")){
+ configAttributes.put("guard", ".*");
+ }
+ if(!configAttributes.containsKey("TTLDate")){
+ configAttributes.put("TTLDate", ".*");
+ }
+ }else{
+ // ConfigAttributes is Null. So add basic values.
+ configAttributes = new HashMap<String,String>();
+ configAttributes.put("RiskType", ".*");
+ configAttributes.put("RiskLevel", ".*");
+ configAttributes.put("guard", ".*");
+ configAttributes.put("TTLDate", ".*");
+ }
+ for (String key : configAttributes.keySet()) {
+ if (key.isEmpty()) {
+ String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot have an Empty Key";
+ LOGGER.error(message);
+ throw new PolicyConfigException(message);
+ }
+ JsonObjectBuilder resourceBuilder = Json.createObjectBuilder();
+ resourceBuilder.add("Value", configAttributes.get(key));
+ resourceBuilder.add("AttributeId", key);
+ resourceArray.add(resourceBuilder);
+ }
+ return resourceArray;
+ }
+
+ private Boolean getValidation(){
+ if(configRequestParameters==null){
+ message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No config Request Parameters given.";
+ return false;
+ }
+ if(configRequestParameters.getEcompName()==null && configRequestParameters.getPolicyName()==null){
+ message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot proceed without eCOMPComponentName or PolicyName";
+ return false;
+ }
+ return true;
+ }
+
+ public Collection<PolicyConfig> getResult() {
+ return policyConfigs;
+ }
+
+ public HttpStatus getResponseCode() {
+ return responseCode;
+ }
+} \ No newline at end of file