This is an automated email from the ASF dual-hosted git repository. pradeepagrawal8184 pushed a commit to branch RANGER-5421_api1 in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 412e910638a38f76e48d8a46711b5875644c90b5 Author: Pradeep Agrawal <[email protected]> AuthorDate: Tue Aug 11 15:55:11 2026 +0530 RANGER-5421: Align authorization and service detail handling for repository search APIs --- .../java/org/apache/ranger/rest/PublicAPIs.java | 21 ++++++++++++++++++--- .../java/org/apache/ranger/rest/ServiceREST.java | 13 +++++++++++++ .../java/org/apache/ranger/rest/TestPublicAPIs.java | 16 ++++++++-------- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java index 5d11e97a4..7d06babe0 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java @@ -32,6 +32,7 @@ import org.apache.ranger.plugin.model.RangerPolicy; import org.apache.ranger.plugin.model.RangerService; import org.apache.ranger.plugin.util.SearchFilter; +import org.apache.ranger.security.context.RangerAPIList; import org.apache.ranger.service.RangerPolicyService; import org.apache.ranger.service.XAssetService; import org.apache.ranger.view.VXAsset; @@ -62,6 +63,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.Context; +import java.util.ArrayList; import java.util.List; @Path("public") @@ -175,18 +177,31 @@ public void deleteRepository(@PathParam("id") Long id, @Context HttpServletReque @GET @Path("/api/repository/") @Produces("application/json") + @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.SEARCH_X_ASSETS + "\")") public VXRepositoryList searchRepositories(@Context HttpServletRequest request) { logger.debug("==> PublicAPIs.searchRepositories()"); + VXRepositoryList ret = new VXRepositoryList(); + SearchFilter filter = searchUtil.getSearchFilterFromLegacyRequestForRepositorySearch(request, xAssetService.sortFields); List<RangerService> serviceList = serviceREST.getServices(filter); - VXRepositoryList ret = null; if (serviceList != null) { - ret = serviceUtil.rangerServiceListToPublicObjectList(serviceList); + List<VXRepository> repositories = new ArrayList<>(); + for (RangerService service : serviceList) { + VXRepository repository = serviceUtil.toVXRepository(service); + + if (repository != null) { + repositories.add(repository); + } + } + + ret.setVXRepositories(repositories); + ret.setTotalCount(repositories.size()); + ret.setResultSize(repositories.size()); } - logger.debug("<== PublicAPIs.searchRepositories(): count={}", (ret == null ? 0 : ret.getListSize())); + logger.debug("<== PublicAPIs.searchRepositories(): count={}", ret.getListSize()); return ret; } 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 94efefa3d..371dfa0ee 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 @@ -992,6 +992,19 @@ public List<RangerService> getServices(SearchFilter filter) { } ret = svcStore.getServices(filter); + + if (ret != null) { + UserSessionBase userSession = ContextUtil.getCurrentUserSession(); + if (userSession != null && userSession.isSingleRoleUserSession()) { + List<RangerService> updateServiceList = new ArrayList<>(); + for (RangerService rangerService : ret) { + if (rangerService != null) { + updateServiceList.add(hideCriticalServiceDetailsForRoleUser(rangerService)); + } + } + ret = updateServiceList; + } + } } catch (WebApplicationException excp) { throw excp; } catch (Throwable excp) { diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java b/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java index d79e38dfb..6e0c20ba5 100644 --- a/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java +++ b/security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java @@ -180,21 +180,21 @@ public void test4deleteRepository() { @Test public void test5searchRepositories() { HttpServletRequest request = Mockito.mock(HttpServletRequest.class); - List<RangerService> ret = new ArrayList<>(); + List<RangerService> services = new ArrayList<>(); RangerService rangerService = rangerService(); VXRepository vXRepository = vXRepository(rangerService); - List<VXRepository> repoList = new ArrayList<>(); - repoList.add(vXRepository); - VXRepositoryList vXRepositoryList = new VXRepositoryList(repoList); - SearchFilter filter = new SearchFilter(); + services.add(rangerService); + SearchFilter filter = new SearchFilter(); filter.setParam(SearchFilter.POLICY_NAME, "policyName"); filter.setParam(SearchFilter.SERVICE_NAME, "serviceName"); Mockito.when(searchUtil.getSearchFilterFromLegacyRequestForRepositorySearch(request, xAssetService.sortFields)).thenReturn(filter); - Mockito.when(serviceREST.getServices(filter)).thenReturn(ret); - Mockito.when(serviceUtil.rangerServiceListToPublicObjectList(ret)).thenReturn(vXRepositoryList); + Mockito.when(serviceREST.getServices(filter)).thenReturn(services); + Mockito.when(serviceUtil.toVXRepository(rangerService)).thenReturn(vXRepository); VXRepositoryList dbVXRepositoryList = publicAPIs.searchRepositories(request); Assertions.assertNotNull(dbVXRepositoryList); - Assertions.assertEquals(dbVXRepositoryList.getResultSize(), vXRepositoryList.getResultSize()); + Assertions.assertEquals(1, dbVXRepositoryList.getResultSize()); + Assertions.assertEquals(vXRepository, dbVXRepositoryList.getVXRepositories().get(0)); + Mockito.verify(serviceUtil).toVXRepository(rangerService); } @Test
