Added PermissionTicket count test.
This commit is contained in:
parent
5a500055f6
commit
b97f5eb128
4 changed files with 55 additions and 0 deletions
|
@ -19,6 +19,7 @@ package org.keycloak.authorization.client.resource;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
@ -58,6 +59,34 @@ public class PermissionResource {
|
||||||
return create(request);
|
return create(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long count(final String resourceId,
|
||||||
|
final String scopeId,
|
||||||
|
final String owner,
|
||||||
|
final String requester,
|
||||||
|
final Boolean granted,
|
||||||
|
final Boolean returnNames) {
|
||||||
|
Callable<Map<String, Long>> callable = new Callable<Map<String, Long>>() {
|
||||||
|
@Override
|
||||||
|
public Map<String, Long> call() throws Exception {
|
||||||
|
return http.<Map<String, Long>>get(serverConfiguration.getPermissionEndpoint()+"/ticket/count")
|
||||||
|
.authorizationBearer(pat.call())
|
||||||
|
.param("resourceId", resourceId)
|
||||||
|
.param("scopeId", scopeId)
|
||||||
|
.param("owner", owner)
|
||||||
|
.param("requester", requester)
|
||||||
|
.param("granted", granted == null ? null : granted.toString())
|
||||||
|
.param("returnNames", returnNames == null ? null : returnNames.toString())
|
||||||
|
.response().json(new TypeReference<Map<String, Long>>(){}).execute();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
return callable.call().get("count");
|
||||||
|
} catch (Exception cause) {
|
||||||
|
return Throwables.retryAndWrapExceptionIfNecessary(callable, pat, "Error querying permission ticket count", cause)
|
||||||
|
.get("count");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new permission ticket for a single resource and scope(s).
|
* Creates a new permission ticket for a single resource and scope(s).
|
||||||
*
|
*
|
||||||
|
|
|
@ -1114,6 +1114,11 @@ public class StoreFactoryCacheSession implements CachedStoreFactoryProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class PermissionTicketCache implements PermissionTicketStore {
|
protected class PermissionTicketCache implements PermissionTicketStore {
|
||||||
|
@Override
|
||||||
|
public long count(Map<String, String> attributes, String resourceServerId) {
|
||||||
|
return getPermissionTicketStoreDelegate().count(attributes, resourceServerId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PermissionTicket create(String resourceId, String scopeId, String requester, ResourceServer resourceServer) {
|
public PermissionTicket create(String resourceId, String scopeId, String requester, ResourceServer resourceServer) {
|
||||||
PermissionTicket created = getPermissionTicketStoreDelegate().create(resourceId, scopeId, requester, resourceServer);
|
PermissionTicket created = getPermissionTicketStoreDelegate().create(resourceId, scopeId, requester, resourceServer);
|
||||||
|
|
|
@ -228,6 +228,7 @@ public class PermissionTicketService {
|
||||||
|
|
||||||
@Path("/count")
|
@Path("/count")
|
||||||
@GET
|
@GET
|
||||||
|
@Produces("application/json")
|
||||||
public Response getResourceCount(@QueryParam("scopeId") String scopeId,
|
public Response getResourceCount(@QueryParam("scopeId") String scopeId,
|
||||||
@QueryParam("resourceId") String resourceId,
|
@QueryParam("resourceId") String resourceId,
|
||||||
@QueryParam("owner") String owner,
|
@QueryParam("owner") String owner,
|
||||||
|
|
|
@ -448,4 +448,24 @@ public class PermissionManagementTest extends AbstractResourceServerTest {
|
||||||
foundScope = expectedScopes.remove(tickets.get(1).getScopeName());
|
foundScope = expectedScopes.remove(tickets.get(1).getScopeName());
|
||||||
assertTrue("Returned set of permission tickets must be only a sub-set as per pagination offset and specified page size.", foundScope);
|
assertTrue("Returned set of permission tickets must be only a sub-set as per pagination offset and specified page size.", foundScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPermissionCount() throws Exception {
|
||||||
|
String[] scopes = {"ScopeA", "ScopeB", "ScopeC", "ScopeD"};
|
||||||
|
ResourceRepresentation resource = addResource("Resource A", "kolo", true, scopes);
|
||||||
|
AuthzClient authzClient = getAuthzClient();
|
||||||
|
PermissionResponse response = authzClient.protection("marta", "password").permission().create(new PermissionRequest(resource.getId(), scopes));
|
||||||
|
AuthorizationRequest request = new AuthorizationRequest();
|
||||||
|
request.setTicket(response.getTicket());
|
||||||
|
request.setClaimToken(authzClient.obtainAccessToken("marta", "password").getToken());
|
||||||
|
|
||||||
|
try {
|
||||||
|
authzClient.authorization().authorize(request);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Long ticketCount = getAuthzClient().protection().permission().count(resource.getId(), null, null, null, null, true);
|
||||||
|
assertEquals("Returned number of permissions tickets must match the amount of permission tickets.", Long.valueOf(4), ticketCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue