X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=main%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpdpx%2Fmain%2Frest%2Fprovider%2FDecisionProvider.java;h=7bc23b150f0a23bd6cb521e3e1a855a587d0c262;hb=b71454295b279a8a35bf1b2245949ba80bc2be90;hp=a5141b906aa59891c0808a255bf0026116571146;hpb=3107498c86304ef114e6799ee430013fc26e1750;p=policy%2Fxacml-pdp.git diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java index a5141b90..7bc23b15 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java @@ -1,6 +1,7 @@ /*- * ============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. @@ -20,6 +21,7 @@ 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; @@ -30,6 +32,7 @@ import org.onap.policy.models.decisions.concepts.DecisionResponse; 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; @@ -39,9 +42,10 @@ public class DecisionProvider { /** * 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 queryParams) { LOGGER.debug("Fetching decision {}", request); @@ -56,50 +60,84 @@ public class DecisionProvider { // // 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; - } } } - }