Skip to content

Commit

Permalink
KEYCLOAK-19709 Remove MapStorage.createCriteriaBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
martin-kanis authored and hmlnarik committed Nov 3, 2021
1 parent 58e8110 commit 9c287af
Show file tree
Hide file tree
Showing 21 changed files with 221 additions and 282 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@

import static org.keycloak.common.util.StackUtil.getShortStackTrace;
import static org.keycloak.models.map.storage.QueryParameters.withCriteria;
import static org.keycloak.models.map.storage.criteria.DefaultModelCriteria.criteria;

/**
* @author <a href="mailto:[email protected]">Martin Kanis</a>
Expand All @@ -49,13 +50,11 @@ public class MapRootAuthenticationSessionProvider implements AuthenticationSessi
private static final Logger LOG = Logger.getLogger(MapRootAuthenticationSessionProvider.class);
private final KeycloakSession session;
protected final MapKeycloakTransaction<MapRootAuthenticationSessionEntity, RootAuthenticationSessionModel> tx;
private final MapStorage<MapRootAuthenticationSessionEntity, RootAuthenticationSessionModel> sessionStore;

private static final String AUTHENTICATION_SESSION_EVENTS = "AUTHENTICATION_SESSION_EVENTS";

public MapRootAuthenticationSessionProvider(KeycloakSession session, MapStorage<MapRootAuthenticationSessionEntity, RootAuthenticationSessionModel> sessionStore) {
this.session = session;
this.sessionStore = sessionStore;
this.tx = sessionStore.createTransaction(session);

session.getTransactionManager().enlistAfterCompletion(tx);
Expand Down Expand Up @@ -132,8 +131,8 @@ public void removeExpired(RealmModel realm) {

int expired = Time.currentTime() - RealmInfoUtil.getDettachedClientSessionLifespan(realm);

ModelCriteriaBuilder<RootAuthenticationSessionModel> mcb = sessionStore.createCriteriaBuilder()
.compare(SearchableFields.REALM_ID, Operator.EQ, realm.getId())
ModelCriteriaBuilder<RootAuthenticationSessionModel> mcb = criteria();
mcb = mcb.compare(SearchableFields.REALM_ID, Operator.EQ, realm.getId())
.compare(SearchableFields.TIMESTAMP, Operator.LT, expired);

long deletedCount = tx.delete(withCriteria(mcb));
Expand All @@ -144,8 +143,8 @@ public void removeExpired(RealmModel realm) {
@Override
public void onRealmRemoved(RealmModel realm) {
Objects.requireNonNull(realm, "The provided realm can't be null!");
ModelCriteriaBuilder<RootAuthenticationSessionModel> mcb = sessionStore.createCriteriaBuilder()
.compare(SearchableFields.REALM_ID, Operator.EQ, realm.getId());
ModelCriteriaBuilder<RootAuthenticationSessionModel> mcb = criteria();
mcb = mcb.compare(SearchableFields.REALM_ID, Operator.EQ, realm.getId());

tx.delete(withCriteria(mcb));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import static org.keycloak.common.util.StackUtil.getShortStackTrace;
import static org.keycloak.models.map.storage.QueryParameters.Order.ASCENDING;
import static org.keycloak.models.map.storage.QueryParameters.withCriteria;
import static org.keycloak.models.map.storage.criteria.DefaultModelCriteria.criteria;
import static org.keycloak.utils.StreamsUtil.distinctByKey;
import static org.keycloak.utils.StreamsUtil.paginatedStream;

Expand All @@ -53,11 +54,9 @@ public class MapPermissionTicketStore implements PermissionTicketStore {
private static final Logger LOG = Logger.getLogger(MapPermissionTicketStore.class);
private final AuthorizationProvider authorizationProvider;
final MapKeycloakTransaction<MapPermissionTicketEntity, PermissionTicket> tx;
private final MapStorage<MapPermissionTicketEntity, PermissionTicket> permissionTicketStore;

public MapPermissionTicketStore(KeycloakSession session, MapStorage<MapPermissionTicketEntity, PermissionTicket> permissionTicketStore, AuthorizationProvider provider) {
this.authorizationProvider = provider;
this.permissionTicketStore = permissionTicketStore;
this.tx = permissionTicketStore.createTransaction(session);
session.getTransactionManager().enlist(tx);
}
Expand All @@ -69,7 +68,7 @@ private PermissionTicket entityToAdapter(MapPermissionTicketEntity origEntity) {
}

private ModelCriteriaBuilder<PermissionTicket> forResourceServer(String resourceServerId) {
ModelCriteriaBuilder<PermissionTicket> mcb = permissionTicketStore.createCriteriaBuilder();
ModelCriteriaBuilder<PermissionTicket> mcb = criteria();

return resourceServerId == null
? mcb
Expand Down Expand Up @@ -215,28 +214,26 @@ private ModelCriteriaBuilder<PermissionTicket> filterEntryToModelCriteriaBuilder
PermissionTicket.FilterOption name = entry.getKey();
String value = entry.getValue();

ModelCriteriaBuilder<PermissionTicket> mcb = criteria();
switch (name) {
case ID:
case SCOPE_ID:
case RESOURCE_ID:
case OWNER:
case REQUESTER:
case POLICY_ID:
return permissionTicketStore.createCriteriaBuilder()
.compare(name.getSearchableModelField(), Operator.EQ, value);
return mcb.compare(name.getSearchableModelField(), Operator.EQ, value);
case SCOPE_IS_NULL:
case GRANTED:
case REQUESTER_IS_NULL: {
Operator op = Operator.NOT_EXISTS;
if (Boolean.parseBoolean(value)) {
op = Operator.EXISTS;
}
return permissionTicketStore.createCriteriaBuilder()
.compare(name.getSearchableModelField(), op);
return mcb.compare(name.getSearchableModelField(), op);
}
case POLICY_IS_NOT_NULL:
return permissionTicketStore.createCriteriaBuilder()
.compare(SearchableFields.REQUESTER, Operator.NOT_EXISTS);
return mcb.compare(SearchableFields.REQUESTER, Operator.NOT_EXISTS);
default:
throw new IllegalArgumentException("Unsupported filter [" + name + "]");

Expand Down Expand Up @@ -266,8 +263,8 @@ public List<PermissionTicket> findGranted(String resourceName, String userId, St

@Override
public List<Resource> findGrantedResources(String requester, String name, int first, int max) {
ModelCriteriaBuilder<PermissionTicket> mcb = permissionTicketStore.createCriteriaBuilder()
.compare(SearchableFields.REQUESTER, Operator.EQ, requester)
ModelCriteriaBuilder<PermissionTicket> mcb = criteria();
mcb = mcb.compare(SearchableFields.REQUESTER, Operator.EQ, requester)
.compare(SearchableFields.GRANTED_TIMESTAMP, Operator.EXISTS);

Function<MapPermissionTicketEntity, Resource> ticketResourceMapper;
Expand Down Expand Up @@ -298,8 +295,8 @@ public List<Resource> findGrantedResources(String requester, String name, int fi

@Override
public List<Resource> findGrantedOwnerResources(String owner, int first, int max) {
ModelCriteriaBuilder<PermissionTicket> mcb = permissionTicketStore.createCriteriaBuilder()
.compare(SearchableFields.OWNER, Operator.EQ, owner);
ModelCriteriaBuilder<PermissionTicket> mcb = criteria();
mcb = mcb.compare(SearchableFields.OWNER, Operator.EQ, owner);

return paginatedStream(tx.read(withCriteria(mcb).orderBy(SearchableFields.RESOURCE_ID, ASCENDING))
.filter(distinctByKey(MapPermissionTicketEntity::getResourceId)), first, max)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.keycloak.models.map.storage.MapStorage;
import org.keycloak.models.map.storage.ModelCriteriaBuilder;
import org.keycloak.models.map.storage.ModelCriteriaBuilder.Operator;
import org.keycloak.models.map.storage.criteria.DefaultModelCriteria;
import org.keycloak.representations.idm.authorization.AbstractPolicyRepresentation;

import java.util.Arrays;
Expand All @@ -42,17 +43,16 @@

import static org.keycloak.common.util.StackUtil.getShortStackTrace;
import static org.keycloak.models.map.storage.QueryParameters.withCriteria;
import static org.keycloak.models.map.storage.criteria.DefaultModelCriteria.criteria;

public class MapPolicyStore implements PolicyStore {

private static final Logger LOG = Logger.getLogger(MapPolicyStore.class);
private final AuthorizationProvider authorizationProvider;
final MapKeycloakTransaction<MapPolicyEntity, Policy> tx;
private final MapStorage<MapPolicyEntity, Policy> policyStore;

public MapPolicyStore(KeycloakSession session, MapStorage<MapPolicyEntity, Policy> policyStore, AuthorizationProvider provider) {
this.authorizationProvider = provider;
this.policyStore = policyStore;
this.tx = policyStore.createTransaction(session);
session.getTransactionManager().enlist(tx);
}
Expand All @@ -64,7 +64,7 @@ private Policy entityToAdapter(MapPolicyEntity origEntity) {
}

private ModelCriteriaBuilder<Policy> forResourceServer(String resourceServerId) {
ModelCriteriaBuilder<Policy> mcb = policyStore.createCriteriaBuilder();
ModelCriteriaBuilder<Policy> mcb = criteria();

return resourceServerId == null
? mcb
Expand Down Expand Up @@ -158,19 +158,18 @@ private ModelCriteriaBuilder<Policy> filterEntryToModelCriteriaBuilder(Map.Entry
Policy.FilterOption name = entry.getKey();
String[] value = entry.getValue();

ModelCriteriaBuilder<Policy> mcb = criteria();
switch (name) {
case ID:
case SCOPE_ID:
case RESOURCE_ID:
case OWNER:
return policyStore.createCriteriaBuilder()
.compare(name.getSearchableModelField(), Operator.IN, Arrays.asList(value));
return mcb.compare(name.getSearchableModelField(), Operator.IN, Arrays.asList(value));
case PERMISSION: {
ModelCriteriaBuilder<Policy> mcb = policyStore.createCriteriaBuilder()
.compare(SearchableFields.TYPE, Operator.IN, Arrays.asList("resource", "scope", "uma"));
mcb = mcb.compare(SearchableFields.TYPE, Operator.IN, Arrays.asList("resource", "scope", "uma"));

if (!Boolean.parseBoolean(value[0])) {
mcb = policyStore.createCriteriaBuilder().not(mcb); // TODO: create NOT_IN operator
mcb = DefaultModelCriteria.<Policy>criteria().not(mcb); // TODO: create NOT_IN operator
}

return mcb;
Expand All @@ -183,11 +182,10 @@ private ModelCriteriaBuilder<Policy> filterEntryToModelCriteriaBuilder(Map.Entry
}

value[1] = "%" + value[1] + "%";
return policyStore.createCriteriaBuilder()
.compare(SearchableFields.CONFIG, Operator.LIKE, (Object[]) value);
return mcb.compare(SearchableFields.CONFIG, Operator.LIKE, (Object[]) value);
case TYPE:
case NAME:
return policyStore.createCriteriaBuilder().compare(name.getSearchableModelField(), Operator.ILIKE, "%" + value[0] + "%");
return mcb.compare(name.getSearchableModelField(), Operator.ILIKE, "%" + value[0] + "%");
default:
throw new IllegalArgumentException("Unsupported filter [" + name + "]");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,15 @@

import static org.keycloak.common.util.StackUtil.getShortStackTrace;
import static org.keycloak.models.map.storage.QueryParameters.withCriteria;
import static org.keycloak.models.map.storage.criteria.DefaultModelCriteria.criteria;

public class MapResourceStore implements ResourceStore {

private static final Logger LOG = Logger.getLogger(MapResourceStore.class);
private final AuthorizationProvider authorizationProvider;
final MapKeycloakTransaction<MapResourceEntity, Resource> tx;
private final MapStorage<MapResourceEntity, Resource> resourceStore;

public MapResourceStore(KeycloakSession session, MapStorage<MapResourceEntity, Resource> resourceStore, AuthorizationProvider provider) {
this.resourceStore = resourceStore;
this.tx = resourceStore.createTransaction(session);
session.getTransactionManager().enlist(tx);
authorizationProvider = provider;
Expand All @@ -63,7 +62,7 @@ private Resource entityToAdapter(MapResourceEntity origEntity) {
}

private ModelCriteriaBuilder<Resource> forResourceServer(String resourceServerId) {
ModelCriteriaBuilder<Resource> mcb = resourceStore.createCriteriaBuilder();
ModelCriteriaBuilder<Resource> mcb = criteria();

return resourceServerId == null
? mcb
Expand Down Expand Up @@ -172,24 +171,21 @@ private ModelCriteriaBuilder<Resource> filterEntryToModelCriteriaBuilder(Map.Ent
Resource.FilterOption name = entry.getKey();
String[] value = entry.getValue();

ModelCriteriaBuilder<Resource> mcb = criteria();
switch (name) {
case ID:
case SCOPE_ID:
case OWNER:
case URI:
return resourceStore.createCriteriaBuilder()
.compare(name.getSearchableModelField(), Operator.IN, Arrays.asList(value));
return mcb.compare(name.getSearchableModelField(), Operator.IN, Arrays.asList(value));
case URI_NOT_NULL:
return resourceStore.createCriteriaBuilder().compare(SearchableFields.URI, Operator.EXISTS);
return mcb.compare(SearchableFields.URI, Operator.EXISTS);
case OWNER_MANAGED_ACCESS:
return resourceStore.createCriteriaBuilder()
.compare(SearchableFields.OWNER_MANAGED_ACCESS, Operator.EQ, Boolean.valueOf(value[0]));
return mcb.compare(SearchableFields.OWNER_MANAGED_ACCESS, Operator.EQ, Boolean.valueOf(value[0]));
case EXACT_NAME:
return resourceStore.createCriteriaBuilder()
.compare(SearchableFields.NAME, Operator.EQ, value[0]);
return mcb.compare(SearchableFields.NAME, Operator.EQ, value[0]);
case NAME:
return resourceStore.createCriteriaBuilder()
.compare(SearchableFields.NAME, Operator.ILIKE, "%" + value[0] + "%");
return mcb.compare(SearchableFields.NAME, Operator.ILIKE, "%" + value[0] + "%");
default:
throw new IllegalArgumentException("Unsupported filter [" + name + "]");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,16 @@

import static org.keycloak.common.util.StackUtil.getShortStackTrace;
import static org.keycloak.models.map.storage.QueryParameters.withCriteria;
import static org.keycloak.models.map.storage.criteria.DefaultModelCriteria.criteria;

public class MapScopeStore implements ScopeStore {

private static final Logger LOG = Logger.getLogger(MapScopeStore.class);
private final AuthorizationProvider authorizationProvider;
final MapKeycloakTransaction<MapScopeEntity, Scope> tx;
private final MapStorage<MapScopeEntity, Scope> scopeStore;

public MapScopeStore(KeycloakSession session, MapStorage<MapScopeEntity, Scope> scopeStore, AuthorizationProvider provider) {
this.authorizationProvider = provider;
this.scopeStore = scopeStore;
this.tx = scopeStore.createTransaction(session);
session.getTransactionManager().enlist(tx);
}
Expand All @@ -61,7 +60,7 @@ private Scope entityToAdapter(MapScopeEntity origEntity) {
}

private ModelCriteriaBuilder<Scope> forResourceServer(String resourceServerId) {
ModelCriteriaBuilder<Scope> mcb = scopeStore.createCriteriaBuilder();
ModelCriteriaBuilder<Scope> mcb = criteria();

return resourceServerId == null
? mcb
Expand Down
Loading

0 comments on commit 9c287af

Please sign in to comment.