/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020, 2022 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2023 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.policy.pdpx.main.rest.provider;
+import com.att.research.xacml.api.Request;
import com.att.research.xacml.api.Response;
import com.att.research.xacml.api.Result;
import java.util.Map;
import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager;
import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
+import org.onap.policy.xacml.pdp.application.nativ.NativePdpApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Retrieves the policy decision for the specified parameters.
- * @param body
*
- * @return the Decision object
+ * @param request DecisionRequest
+ * @param queryParams Map of parameters
+ * @return DecisionResponse
*/
public DecisionResponse fetchDecision(DecisionRequest request, Map<String, String[]> queryParams) {
LOGGER.debug("Fetching decision {}", request);
//
// Calculate statistics
//
- this.calculateStatistic(decision.getValue());
+ this.calculateStatistic(decision.getValue(), application.applicationName());
//
// Return the decision
//
return decision.getKey();
}
+ /**
+ * Retrieves the policy decision for the native xacml request.
+ *
+ * @param request the xacml request
+ * @return the xacml response
+ */
+ public Response fetchNativeDecision(Request request) {
+ LOGGER.debug("Fetching decision {}", request);
+ //
+ // Assign native request to native application directly
+ //
+ XacmlApplicationServiceProvider nativeApp = findNativeApplication();
+ //
+ // Make xacml decision
+ //
+ Response decision = ((NativePdpApplication) nativeApp).makeNativeDecision(request);
+ LOGGER.debug("Xacml decision {}", decision);
+ //
+ // Calculate statistics
+ //
+ this.calculateStatistic(decision, nativeApp.applicationName());
+ //
+ // Return the string decision
+ //
+ return decision;
+ }
+
private XacmlApplicationServiceProvider findApplication(DecisionRequest request) {
XacmlApplicationServiceProvider application = XacmlPdpApplicationManager.getCurrent().findApplication(request);
if (application != null) {
return application;
}
- throw new DecisionException(javax.ws.rs.core.Response.Status.BAD_REQUEST,
+ throw new DecisionException(jakarta.ws.rs.core.Response.Status.BAD_REQUEST,
"No application for action " + request.getAction());
}
- private void calculateStatistic(Response xacmlResponse) {
+ private XacmlApplicationServiceProvider findNativeApplication() {
+ XacmlApplicationServiceProvider application = XacmlPdpApplicationManager.getCurrent().findNativeApplication();
+ if (application instanceof NativePdpApplication) {
+ return application;
+ }
+ throw new DecisionException(jakarta.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR,
+ "Native PDP application cannot be found");
+ }
+ private void calculateStatistic(Response xacmlResponse, String appName) {
+ if (xacmlResponse == null) {
+ XacmlPdpStatisticsManager.getCurrent().updateErrorCount();
+ return;
+ }
for (Result result : xacmlResponse.getResults()) {
switch (result.getDecision()) {
case PERMIT:
- XacmlPdpStatisticsManager.getCurrent().updatePermitDecisionsCount();
+ XacmlPdpStatisticsManager.getCurrent().updatePermitDecisionsCount(appName);
break;
case DENY:
- XacmlPdpStatisticsManager.getCurrent().updateDenyDecisionsCount();
+ XacmlPdpStatisticsManager.getCurrent().updateDenyDecisionsCount(appName);
break;
- case INDETERMINATE:
- case INDETERMINATE_DENY:
- case INDETERMINATE_DENYPERMIT:
- case INDETERMINATE_PERMIT:
- XacmlPdpStatisticsManager.getCurrent().updateIndeterminantDecisionsCount();
+ case INDETERMINATE, INDETERMINATE_DENY, INDETERMINATE_DENYPERMIT, INDETERMINATE_PERMIT:
+ XacmlPdpStatisticsManager.getCurrent().updateIndeterminantDecisionsCount(appName);
break;
case NOTAPPLICABLE:
- XacmlPdpStatisticsManager.getCurrent().updateNotApplicableDecisionsCount();
+ XacmlPdpStatisticsManager.getCurrent().updateNotApplicableDecisionsCount(appName);
break;
default:
break;
-
}
}
}
-
}