Skip to content

Commit 7cfb4cd

Browse files
RANGER-5421: Align authorization and service detail handling for repository search APIs
1 parent efe3fa6 commit 7cfb4cd

3 files changed

Lines changed: 39 additions & 11 deletions

File tree

security-admin/src/main/java/org/apache/ranger/rest/PublicAPIs.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.ranger.plugin.model.RangerPolicy;
3333
import org.apache.ranger.plugin.model.RangerService;
3434
import org.apache.ranger.plugin.util.SearchFilter;
35+
import org.apache.ranger.security.context.RangerAPIList;
3536
import org.apache.ranger.service.RangerPolicyService;
3637
import org.apache.ranger.service.XAssetService;
3738
import org.apache.ranger.view.VXAsset;
@@ -62,6 +63,7 @@
6263
import javax.ws.rs.Produces;
6364
import javax.ws.rs.core.Context;
6465

66+
import java.util.ArrayList;
6567
import java.util.List;
6668

6769
@Path("public")
@@ -175,18 +177,31 @@ public void deleteRepository(@PathParam("id") Long id, @Context HttpServletReque
175177
@GET
176178
@Path("/api/repository/")
177179
@Produces("application/json")
180+
@PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.SEARCH_X_ASSETS + "\")")
178181
public VXRepositoryList searchRepositories(@Context HttpServletRequest request) {
179182
logger.debug("==> PublicAPIs.searchRepositories()");
180183

184+
VXRepositoryList ret = new VXRepositoryList();
185+
181186
SearchFilter filter = searchUtil.getSearchFilterFromLegacyRequestForRepositorySearch(request, xAssetService.sortFields);
182187
List<RangerService> serviceList = serviceREST.getServices(filter);
183-
VXRepositoryList ret = null;
184188

185189
if (serviceList != null) {
186-
ret = serviceUtil.rangerServiceListToPublicObjectList(serviceList);
190+
List<VXRepository> repositories = new ArrayList<>(serviceList.size());
191+
for (RangerService service : serviceList) {
192+
VXRepository repository = serviceUtil.toVXRepository(service);
193+
194+
if (repository != null) {
195+
repositories.add(repository);
196+
}
197+
}
198+
199+
ret.setVXRepositories(repositories);
200+
ret.setTotalCount(repositories.size());
201+
ret.setResultSize(repositories.size());
187202
}
188203

189-
logger.debug("<== PublicAPIs.searchRepositories(): count={}", (ret == null ? 0 : ret.getListSize()));
204+
logger.debug("<== PublicAPIs.searchRepositories(): count={}", ret.getListSize());
190205

191206
return ret;
192207
}

security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,19 @@ public List<RangerService> getServices(SearchFilter filter) {
992992
}
993993

994994
ret = svcStore.getServices(filter);
995+
996+
if (ret != null) {
997+
UserSessionBase userSession = ContextUtil.getCurrentUserSession();
998+
if (userSession != null && userSession.isSingleRoleUserSession()) {
999+
List<RangerService> updateServiceList = new ArrayList<>(ret.size());
1000+
for (RangerService rangerService : ret) {
1001+
if (rangerService != null) {
1002+
updateServiceList.add(hideCriticalServiceDetailsForRoleUser(rangerService));
1003+
}
1004+
}
1005+
ret = updateServiceList;
1006+
}
1007+
}
9951008
} catch (WebApplicationException excp) {
9961009
throw excp;
9971010
} catch (Throwable excp) {

security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIs.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,21 +180,21 @@ public void test4deleteRepository() {
180180
@Test
181181
public void test5searchRepositories() {
182182
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
183-
List<RangerService> ret = new ArrayList<>();
183+
List<RangerService> services = new ArrayList<>();
184184
RangerService rangerService = rangerService();
185185
VXRepository vXRepository = vXRepository(rangerService);
186-
List<VXRepository> repoList = new ArrayList<>();
187-
repoList.add(vXRepository);
188-
VXRepositoryList vXRepositoryList = new VXRepositoryList(repoList);
189-
SearchFilter filter = new SearchFilter();
186+
services.add(rangerService);
187+
SearchFilter filter = new SearchFilter();
190188
filter.setParam(SearchFilter.POLICY_NAME, "policyName");
191189
filter.setParam(SearchFilter.SERVICE_NAME, "serviceName");
192190
Mockito.when(searchUtil.getSearchFilterFromLegacyRequestForRepositorySearch(request, xAssetService.sortFields)).thenReturn(filter);
193-
Mockito.when(serviceREST.getServices(filter)).thenReturn(ret);
194-
Mockito.when(serviceUtil.rangerServiceListToPublicObjectList(ret)).thenReturn(vXRepositoryList);
191+
Mockito.when(serviceREST.getServices(filter)).thenReturn(services);
192+
Mockito.when(serviceUtil.toVXRepository(rangerService)).thenReturn(vXRepository);
195193
VXRepositoryList dbVXRepositoryList = publicAPIs.searchRepositories(request);
196194
Assertions.assertNotNull(dbVXRepositoryList);
197-
Assertions.assertEquals(dbVXRepositoryList.getResultSize(), vXRepositoryList.getResultSize());
195+
Assertions.assertEquals(1, dbVXRepositoryList.getResultSize());
196+
Assertions.assertEquals(vXRepository, dbVXRepositoryList.getVXRepositories().get(0));
197+
Mockito.verify(serviceUtil).toVXRepository(rangerService);
198198
}
199199

200200
@Test

0 commit comments

Comments
 (0)