This is an automated email from the ASF dual-hosted git repository.

pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 400beaa  RANGER-2856: A policy should be deleted if it has no 
policyItems
400beaa is described below

commit 400beaa7604e4c83d051dc6e83b8bc109e5d8c53
Author: RickyMa <mhx8...@gmail.com>
AuthorDate: Tue Jul 7 13:22:16 2020 +0530

    RANGER-2856: A policy should be deleted if it has no policyItems
    
    Signed-off-by: pradeep <prad...@apache.org>
---
 .../org/apache/ranger/biz/PolicyRefUpdater.java    |  2 +-
 .../java/org/apache/ranger/rest/PublicAPIsv2.java  | 19 ++++++++
 .../java/org/apache/ranger/rest/ServiceREST.java   | 51 +++++++++++++++++++++-
 3 files changed, 69 insertions(+), 3 deletions(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java 
b/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java
index 9ce481c..6bd06f4 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/PolicyRefUpdater.java
@@ -352,7 +352,7 @@ public class PolicyRefUpdater {
                return true;
        }
 
-       static List<List<? extends RangerPolicyItem>> 
getAllPolicyItems(RangerPolicy policy) {
+       public static List<List<? extends RangerPolicyItem>> 
getAllPolicyItems(RangerPolicy policy) {
                List<List<? extends RangerPolicyItem>> ret = new ArrayList<>();
 
                if (CollectionUtils.isNotEmpty(policy.getPolicyItems())) {
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java 
b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
index 4862442..19b93e6 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
@@ -554,6 +554,25 @@ public class PublicAPIsv2 {
                }
        }
 
+       @DELETE
+       @Path("/api/server/purgepolicies/{serviceName}")
+       @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+       public void purgeEmptyPolicies(@PathParam("serviceName") String 
serviceName, @Context HttpServletRequest request) {
+               if (logger.isDebugEnabled()) {
+                       logger.debug("==> PublicAPIsv2.purgeEmptyPolicies(" + 
serviceName + ")");
+               }
+
+               if (serviceName == null) {
+                       throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST , "Invalid 
service name", true);
+               }
+
+               serviceREST.purgeEmptyPolicies(serviceName, request);
+
+               if (logger.isDebugEnabled()) {
+                       logger.debug("<== PublicAPIsv2.purgeEmptyPolicies(" + 
serviceName + ")");
+               }
+       }
+
        /*
         * Role Creation API
         */
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 62cc26e..3422e43 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -62,8 +62,11 @@ import org.apache.ranger.admin.client.datatype.RESTResponse;
 import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
 import org.apache.ranger.authorization.utils.StringUtil;
 import org.apache.ranger.biz.AssetMgr;
+import org.apache.ranger.biz.PolicyRefUpdater;
 import org.apache.ranger.biz.RangerPolicyAdmin;
 import org.apache.ranger.biz.RangerBizUtil;
+import org.apache.ranger.biz.RangerPolicyAdminCache;
+import org.apache.ranger.biz.RangerPolicyAdminCacheForEngineOptions;
 import org.apache.ranger.biz.RoleDBStore;
 import org.apache.ranger.biz.SecurityZoneDBStore;
 import org.apache.ranger.biz.ServiceDBStore;
@@ -110,8 +113,6 @@ import 
org.apache.ranger.plugin.model.validation.RangerValidator.Action;
 import org.apache.ranger.plugin.policyengine.RangerAccessResource;
 import org.apache.ranger.plugin.policyengine.RangerAccessResourceImpl;
 import org.apache.ranger.plugin.policyengine.RangerPolicyEngine;
-import org.apache.ranger.biz.RangerPolicyAdminCache;
-import org.apache.ranger.biz.RangerPolicyAdminCacheForEngineOptions;
 import org.apache.ranger.plugin.policyengine.RangerPolicyEngineOptions;
 import org.apache.ranger.plugin.service.ResourceLookupContext;
 import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
@@ -3255,6 +3256,52 @@ public class ServiceREST {
                }
        }
 
+       @DELETE
+       @Path("/server/purgepolicies/{serviceName}")
+       @PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
+       public void purgeEmptyPolicies(@PathParam("serviceName") String 
serviceName, @Context HttpServletRequest request) {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> ServiceREST.purgeEmptyPolicies(" + 
serviceName + ")");
+               }
+
+               if (serviceName == null) {
+                       throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST , "Invalid 
service name", true);
+               }
+
+               RangerPerfTracer perf = null;
+
+               try {
+                       if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
+                               perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"ServiceREST.purgeEmptyPolicies(serviceName=" + serviceName + ")");
+                       }
+
+                       if (svcStore.getServiceByName(serviceName) == null) {
+                               throw new Exception("service does not exist - 
name=" + serviceName);
+                       }
+
+                       ServicePolicies servicePolicies = 
svcStore.getServicePolicies(serviceName, -1L);
+                       if (servicePolicies != null && 
CollectionUtils.isNotEmpty(servicePolicies.getPolicies())) {
+                               for (RangerPolicy policy : 
servicePolicies.getPolicies()) {
+                                       if 
(CollectionUtils.isEmpty(PolicyRefUpdater.getAllPolicyItems(policy))) {
+                                               deletePolicy(policy.getId());
+                                       }
+                               }
+                       }
+               } catch(WebApplicationException excp) {
+                       throw excp;
+               } catch(Throwable excp) {
+                       LOG.error("purgeEmptyPolicies(" + serviceName + ") 
failed", excp);
+
+                       throw 
restErrorUtil.createRESTException(excp.getMessage());
+               } finally {
+                       RangerPerfTracer.log(perf);
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== ServiceREST.purgeEmptyPolicies(" + 
serviceName + ")");
+               }
+       }
+
        private void createPolicyDownloadAudit(String serviceName, Long 
lastKnownVersion, String pluginId, int httpRespCode, String clusterName, String 
zoneName, HttpServletRequest request) {
                try {
                        String ipAddress = request.getHeader("X-FORWARDED-FOR");

Reply via email to