Fix mongo model
This commit is contained in:
parent
5da05aa62a
commit
4795059e15
8 changed files with 59 additions and 10 deletions
|
@ -18,6 +18,7 @@ import org.keycloak.connections.mongo.api.types.Mapper;
|
||||||
import org.keycloak.connections.mongo.api.types.MapperContext;
|
import org.keycloak.connections.mongo.api.types.MapperContext;
|
||||||
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
||||||
import org.keycloak.connections.mongo.impl.types.BasicDBListMapper;
|
import org.keycloak.connections.mongo.impl.types.BasicDBListMapper;
|
||||||
|
import org.keycloak.connections.mongo.impl.types.BasicDBListToSetMapper;
|
||||||
import org.keycloak.connections.mongo.impl.types.BasicDBObjectMapper;
|
import org.keycloak.connections.mongo.impl.types.BasicDBObjectMapper;
|
||||||
import org.keycloak.connections.mongo.impl.types.BasicDBObjectToMapMapper;
|
import org.keycloak.connections.mongo.impl.types.BasicDBObjectToMapMapper;
|
||||||
import org.keycloak.connections.mongo.impl.types.EnumToStringMapper;
|
import org.keycloak.connections.mongo.impl.types.EnumToStringMapper;
|
||||||
|
@ -35,8 +36,10 @@ import org.keycloak.models.utils.reflection.PropertyQueries;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
|
@ -71,6 +74,10 @@ public class MongoStoreImpl implements MongoStore {
|
||||||
mapperRegistry.addAppObjectMapper(new ListMapper(mapperRegistry, List.class));
|
mapperRegistry.addAppObjectMapper(new ListMapper(mapperRegistry, List.class));
|
||||||
mapperRegistry.addDBObjectMapper(new BasicDBListMapper(mapperRegistry));
|
mapperRegistry.addDBObjectMapper(new BasicDBListMapper(mapperRegistry));
|
||||||
|
|
||||||
|
mapperRegistry.addAppObjectMapper(new ListMapper(mapperRegistry, HashSet.class));
|
||||||
|
mapperRegistry.addAppObjectMapper(new ListMapper(mapperRegistry, Set.class));
|
||||||
|
mapperRegistry.addDBObjectMapper(new BasicDBListToSetMapper(mapperRegistry));
|
||||||
|
|
||||||
mapperRegistry.addAppObjectMapper(new MapMapper(HashMap.class));
|
mapperRegistry.addAppObjectMapper(new MapMapper(HashMap.class));
|
||||||
mapperRegistry.addAppObjectMapper(new MapMapper(Map.class));
|
mapperRegistry.addAppObjectMapper(new MapMapper(Map.class));
|
||||||
mapperRegistry.addDBObjectMapper(new BasicDBObjectToMapMapper());
|
mapperRegistry.addDBObjectMapper(new BasicDBObjectToMapMapper());
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.keycloak.connections.mongo.api.types.MapperContext;
|
||||||
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package org.keycloak.connections.mongo.impl.types;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.mongodb.BasicDBList;
|
||||||
|
import org.keycloak.connections.mongo.api.types.Mapper;
|
||||||
|
import org.keycloak.connections.mongo.api.types.MapperContext;
|
||||||
|
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
*/
|
||||||
|
public class BasicDBListToSetMapper implements Mapper<BasicDBList, Set> {
|
||||||
|
|
||||||
|
private final MapperRegistry mapperRegistry;
|
||||||
|
|
||||||
|
public BasicDBListToSetMapper(MapperRegistry mapperRegistry) {
|
||||||
|
this.mapperRegistry = mapperRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set convertObject(MapperContext<BasicDBList, Set> context) {
|
||||||
|
BasicDBList dbList = context.getObjectToConvert();
|
||||||
|
Set<Object> appObjects = new HashSet<Object>();
|
||||||
|
Class<?> expectedListElementType = context.getGenericTypes().get(0);
|
||||||
|
|
||||||
|
for (Object dbObject : dbList) {
|
||||||
|
MapperContext<Object, Object> newContext = new MapperContext<Object, Object>(dbObject, expectedListElementType, null);
|
||||||
|
appObjects.add(mapperRegistry.convertDBObjectToApplicationObject(newContext));
|
||||||
|
}
|
||||||
|
return appObjects;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends BasicDBList> getTypeOfObjectToConvert() {
|
||||||
|
return BasicDBList.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<Set> getExpectedReturnType() {
|
||||||
|
return Set.class;
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,12 +5,12 @@ import org.keycloak.connections.mongo.api.types.Mapper;
|
||||||
import org.keycloak.connections.mongo.api.types.MapperContext;
|
import org.keycloak.connections.mongo.api.types.MapperContext;
|
||||||
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
import org.keycloak.connections.mongo.api.types.MapperRegistry;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
*/
|
*/
|
||||||
public class ListMapper<T extends List> implements Mapper<T, BasicDBList> {
|
public class ListMapper<T extends Collection> implements Mapper<T, BasicDBList> {
|
||||||
|
|
||||||
private final MapperRegistry mapperRegistry;
|
private final MapperRegistry mapperRegistry;
|
||||||
private final Class<T> listType;
|
private final Class<T> listType;
|
||||||
|
|
|
@ -27,11 +27,9 @@ public class MongoRealmProvider implements RealmProvider {
|
||||||
|
|
||||||
private final MongoStoreInvocationContext invocationContext;
|
private final MongoStoreInvocationContext invocationContext;
|
||||||
private final KeycloakSession session;
|
private final KeycloakSession session;
|
||||||
private final MongoStore mongoStore;
|
|
||||||
|
|
||||||
public MongoRealmProvider(KeycloakSession session, MongoStore mongoStore, MongoStoreInvocationContext invocationContext) {
|
public MongoRealmProvider(KeycloakSession session, MongoStoreInvocationContext invocationContext) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.mongoStore = mongoStore;
|
|
||||||
this.invocationContext = invocationContext;
|
this.invocationContext = invocationContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class MongoRealmProviderFactory implements RealmProviderFactory {
|
||||||
@Override
|
@Override
|
||||||
public RealmProvider create(KeycloakSession session) {
|
public RealmProvider create(KeycloakSession session) {
|
||||||
MongoConnectionProvider connection = session.getProvider(MongoConnectionProvider.class);
|
MongoConnectionProvider connection = session.getProvider(MongoConnectionProvider.class);
|
||||||
return new MongoRealmProvider(session, connection.getMongoStore(), connection.getInvocationContext());
|
return new MongoRealmProvider(session, connection.getInvocationContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -33,11 +33,9 @@ public class MongoUserProvider implements UserProvider {
|
||||||
|
|
||||||
private final MongoStoreInvocationContext invocationContext;
|
private final MongoStoreInvocationContext invocationContext;
|
||||||
private final KeycloakSession session;
|
private final KeycloakSession session;
|
||||||
private final MongoStore mongoStore;
|
|
||||||
|
|
||||||
public MongoUserProvider(KeycloakSession session, MongoStore mongoStore, MongoStoreInvocationContext invocationContext) {
|
public MongoUserProvider(KeycloakSession session, MongoStoreInvocationContext invocationContext) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.mongoStore = mongoStore;
|
|
||||||
this.invocationContext = invocationContext;
|
this.invocationContext = invocationContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,6 +309,7 @@ public class MongoUserProvider implements UserProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateFederatedIdentity(RealmModel realm, UserModel federatedUser, FederatedIdentityModel federatedIdentityModel) {
|
public void updateFederatedIdentity(RealmModel realm, UserModel federatedUser, FederatedIdentityModel federatedIdentityModel) {
|
||||||
|
federatedUser = getUserById(federatedUser.getId(), realm);
|
||||||
MongoUserEntity userEntity = ((UserAdapter) federatedUser).getUser();
|
MongoUserEntity userEntity = ((UserAdapter) federatedUser).getUser();
|
||||||
FederatedIdentityEntity federatedIdentityEntity = findFederatedIdentityLink(userEntity, federatedIdentityModel.getIdentityProvider());
|
FederatedIdentityEntity federatedIdentityEntity = findFederatedIdentityLink(userEntity, federatedIdentityModel.getIdentityProvider());
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class MongoUserProviderFactory implements UserProviderFactory {
|
||||||
@Override
|
@Override
|
||||||
public UserProvider create(KeycloakSession session) {
|
public UserProvider create(KeycloakSession session) {
|
||||||
MongoConnectionProvider connection = session.getProvider(MongoConnectionProvider.class);
|
MongoConnectionProvider connection = session.getProvider(MongoConnectionProvider.class);
|
||||||
return new MongoUserProvider(session, connection.getMongoStore(), connection.getInvocationContext());
|
return new MongoUserProvider(session, connection.getInvocationContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue