2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.openecomp.policy.pdp.rest.api.services;
22 import java.util.Collection;
24 import java.util.UUID;
26 import javax.json.Json;
27 import javax.json.JsonArrayBuilder;
28 import javax.json.JsonObject;
29 import javax.json.JsonObjectBuilder;
31 import org.openecomp.policy.api.DecisionRequestParameters;
32 import org.openecomp.policy.api.DecisionResponse;
33 import org.openecomp.policy.api.PolicyDecision;
34 import org.openecomp.policy.api.PolicyDecisionException;
35 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
36 import org.openecomp.policy.common.logging.flexlogger.Logger;
37 import org.openecomp.policy.pdp.rest.api.models.PDPResponse;
38 import org.openecomp.policy.std.StdDecisionResponse;
39 import org.openecomp.policy.xacml.api.XACMLErrorConstants;
40 import org.springframework.http.HttpStatus;
42 public class GetDecisionService {
43 private static Logger LOGGER = FlexLogger.getLogger(GetDecisionService.class.getName());
45 private DecisionResponse decisionResponse = null;
46 private HttpStatus status = HttpStatus.BAD_REQUEST;
47 private DecisionRequestParameters decisionRequestParameters = null;
48 private String message = null;
49 private String eCOMPComponentName = null;
50 private Map<String,String> decisionAttributes = null;
52 public GetDecisionService(
53 DecisionRequestParameters decisionRequestParameters,
55 this.decisionRequestParameters = decisionRequestParameters;
56 if(decisionRequestParameters.getRequestID()==null){
57 UUID requestUUID = null;
58 if (requestID != null && !requestID.isEmpty()) {
60 requestUUID = UUID.fromString(requestID);
61 } catch (IllegalArgumentException e) {
62 requestUUID = UUID.randomUUID();
63 LOGGER.info("Generated Random UUID: " + requestUUID.toString());
66 requestUUID = UUID.randomUUID();
67 LOGGER.info("Generated Random UUID: " + requestUUID.toString());
69 this.decisionRequestParameters.setRequestID(requestUUID);
73 }catch(PolicyDecisionException e){
74 StdDecisionResponse decisionResponse = new StdDecisionResponse();
75 decisionResponse.setDecision(PolicyDecision.ERROR);
76 decisionResponse.setDetails(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
77 this.decisionResponse = decisionResponse;
78 status = HttpStatus.BAD_REQUEST;
82 private void run() throws PolicyDecisionException{
85 LOGGER.error(message);
86 throw new PolicyDecisionException(message);
89 String modelString = getModel().toString();
90 LOGGER.debug("Generated JSON Request is: " + modelString);
93 PDPServices pdpServices = new PDPServices();
94 status = HttpStatus.OK;
95 decisionResponse = decisionResult(pdpServices.generateRequest(modelString, decisionRequestParameters.getRequestID(), false, true));
96 } catch (Exception e) {
97 LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
98 status = HttpStatus.BAD_REQUEST;
99 throw new PolicyDecisionException(e);
103 private DecisionResponse decisionResult(
104 Collection<PDPResponse> generateRequest) {
105 StdDecisionResponse policyDecision = new StdDecisionResponse();
106 if (generateRequest == null) {
107 return policyDecision;
109 if (!generateRequest.isEmpty()) {
110 for (PDPResponse stdStatus : generateRequest) {
111 policyDecision.setDecision(stdStatus.getDecision());
112 policyDecision.setDetails(stdStatus.getDetails());
115 return policyDecision;
118 private JsonObject getModel() throws PolicyDecisionException{
119 JsonArrayBuilder resourceArray = Json.createArrayBuilder();
120 for (String key : decisionAttributes.keySet()) {
122 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot have an Empty Key";
123 LOGGER.error(message);
124 throw new PolicyDecisionException(message);
126 JsonObjectBuilder resourceBuilder = Json.createObjectBuilder();
127 if (decisionAttributes.get(key).matches("[0-9]+")) {
128 int val = Integer.parseInt(decisionAttributes.get(key));
129 resourceBuilder.add("Value", val);
131 resourceBuilder.add("Value", decisionAttributes.get(key));
133 resourceBuilder.add("AttributeId", key);
134 resourceArray.add(resourceBuilder);
136 JsonObject model = Json
137 .createObjectBuilder()
138 .add("Request", Json.createObjectBuilder()
139 .add("AccessSubject", Json.createObjectBuilder()
140 .add("Attribute", Json.createObjectBuilder()
141 .add("Value", eCOMPComponentName)
142 .add("AttributeId", "ECOMPName")))
143 .add("Resource", Json.createObjectBuilder()
144 .add("Attribute", resourceArray))
145 .add("Action", Json.createObjectBuilder()
146 .add("Attribute", Json.createObjectBuilder()
147 .add("Value", "DECIDE")
148 .add("AttributeId", "urn:oasis:names:tc:xacml:1.0:action:action-id"))))
153 private boolean getValidation() {
154 if(decisionRequestParameters==null){
155 message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Decision Request Paramaters";
158 eCOMPComponentName = decisionRequestParameters.getECOMPComponentName();
159 decisionAttributes = decisionRequestParameters.getDecisionAttributes();
160 if (eCOMPComponentName == null || eCOMPComponentName.isEmpty()) {
161 message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No eCOMPComponentName given : " + eCOMPComponentName;
164 if (decisionAttributes == null && decisionAttributes.isEmpty()) {
165 message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Decision Attributes Given. ";
171 public DecisionResponse getResult() {
172 return decisionResponse;
175 public HttpStatus getResponseCode() {