Rebased MongoDB on top of latest master. Divide testsuite into integration and performance submodules
This commit is contained in:
parent
ae4bd42ff7
commit
71cd9cffa4
115 changed files with 1098 additions and 701 deletions
|
@ -0,0 +1,15 @@
|
||||||
|
package org.keycloak.models.utils;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
*/
|
||||||
|
public class KeycloakSessionUtils {
|
||||||
|
|
||||||
|
private static AtomicLong counter = new AtomicLong(1);
|
||||||
|
|
||||||
|
public static String generateId() {
|
||||||
|
return counter.getAndIncrement() + "-" + System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.0-alpha-1</version>
|
<version>1.0-alpha-1</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
77
model/mongo/pom.xml
Normal file
77
model/mongo/pom.xml
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>keycloak-parent</artifactId>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<version>1.0-alpha-1</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-model-mongo</artifactId>
|
||||||
|
<name>Keycloak Model Mongo</name>
|
||||||
|
<description/>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
<artifactId>bcprov-jdk16</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-model-api</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.logging</groupId>
|
||||||
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-common</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-idm-api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mongodb</groupId>
|
||||||
|
<artifactId>mongo-java-driver</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.flapdoodle.embed</groupId>
|
||||||
|
<artifactId>de.flapdoodle.embed.mongo</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQueryBuilder;
|
import org.keycloak.models.mongo.api.query.NoSQLQueryBuilder;
|
||||||
import org.picketlink.common.properties.Property;
|
import org.picketlink.common.properties.Property;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Inherited;
|
import java.lang.annotation.Inherited;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api;
|
package org.keycloak.models.mongo.api;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base interface for object, which is persisted in NoSQL database
|
* Base interface for object, which is persisted in NoSQL database
|
|
@ -1,7 +1,6 @@
|
||||||
package org.keycloak.services.models.nosql.api.query;
|
package org.keycloak.models.mongo.api.query;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api.query;
|
package org.keycloak.models.mongo.api.query;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api.types;
|
package org.keycloak.models.mongo.api.types;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SPI object to convert object from application type to database type and vice versa. Shouldn't be directly used by application.
|
* SPI object to convert object from application type to database type and vice versa. Shouldn't be directly used by application.
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.api.types;
|
package org.keycloak.models.mongo.api.types;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.impl;
|
package org.keycloak.models.mongo.impl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -14,23 +14,23 @@ import com.mongodb.DBCollection;
|
||||||
import com.mongodb.DBCursor;
|
import com.mongodb.DBCursor;
|
||||||
import com.mongodb.DBObject;
|
import com.mongodb.DBObject;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
import org.jboss.resteasy.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQueryBuilder;
|
import org.keycloak.models.mongo.api.query.NoSQLQueryBuilder;
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
import org.keycloak.services.models.nosql.api.types.TypeConverter;
|
import org.keycloak.models.mongo.api.types.TypeConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.EnumToStringConverter;
|
import org.keycloak.models.mongo.impl.types.EnumToStringConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.ListConverter;
|
import org.keycloak.models.mongo.impl.types.ListConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.BasicDBListConverter;
|
import org.keycloak.models.mongo.impl.types.BasicDBListConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.BasicDBObjectConverter;
|
import org.keycloak.models.mongo.impl.types.BasicDBObjectConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.NoSQLObjectConverter;
|
import org.keycloak.models.mongo.impl.types.NoSQLObjectConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.SimpleConverter;
|
import org.keycloak.models.mongo.impl.types.SimpleConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.types.StringToEnumConverter;
|
import org.keycloak.models.mongo.impl.types.StringToEnumConverter;
|
||||||
import org.picketlink.common.properties.Property;
|
import org.picketlink.common.properties.Property;
|
||||||
import org.picketlink.common.properties.query.AnnotatedPropertyCriteria;
|
import org.picketlink.common.properties.query.AnnotatedPropertyCriteria;
|
||||||
import org.picketlink.common.properties.query.PropertyQueries;
|
import org.picketlink.common.properties.query.PropertyQueries;
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.impl;
|
package org.keycloak.models.mongo.impl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
@ -6,7 +6,7 @@ import java.util.List;
|
||||||
|
|
||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQueryBuilder;
|
import org.keycloak.models.mongo.api.query.NoSQLQueryBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.impl;
|
package org.keycloak.models.mongo.impl;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -6,7 +6,7 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.picketlink.common.properties.Property;
|
import org.picketlink.common.properties.Property;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,11 +1,11 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import com.mongodb.BasicDBList;
|
import com.mongodb.BasicDBList;
|
||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
import org.keycloak.services.models.nosql.api.types.TypeConverter;
|
import org.keycloak.models.mongo.api.types.TypeConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,13 +1,13 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import org.jboss.resteasy.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.services.models.nosql.api.AttributedNoSQLObject;
|
import org.keycloak.models.mongo.api.AttributedNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
import org.keycloak.services.models.nosql.api.types.TypeConverter;
|
import org.keycloak.models.mongo.api.types.TypeConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.MongoDBImpl;
|
import org.keycloak.models.mongo.impl.MongoDBImpl;
|
||||||
import org.keycloak.services.models.nosql.impl.ObjectInfo;
|
import org.keycloak.models.mongo.impl.ObjectInfo;
|
||||||
import org.picketlink.common.properties.Property;
|
import org.picketlink.common.properties.Property;
|
||||||
import org.picketlink.common.reflection.Types;
|
import org.picketlink.common.reflection.Types;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
|
@ -1,6 +1,6 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,11 +1,11 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.mongodb.BasicDBList;
|
import com.mongodb.BasicDBList;
|
||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
import org.keycloak.services.models.nosql.api.types.TypeConverter;
|
import org.keycloak.models.mongo.api.types.TypeConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,18 +1,16 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.mongodb.BasicDBObject;
|
import com.mongodb.BasicDBObject;
|
||||||
import org.keycloak.services.models.nosql.api.AttributedNoSQLObject;
|
import org.keycloak.models.mongo.api.AttributedNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
import org.keycloak.services.models.nosql.api.types.TypeConverter;
|
import org.keycloak.models.mongo.api.types.TypeConverter;
|
||||||
import org.keycloak.services.models.nosql.impl.MongoDBImpl;
|
import org.keycloak.models.mongo.impl.MongoDBImpl;
|
||||||
import org.keycloak.services.models.nosql.impl.ObjectInfo;
|
import org.keycloak.models.mongo.impl.ObjectInfo;
|
||||||
import org.picketlink.common.properties.Property;
|
import org.picketlink.common.properties.Property;
|
||||||
import org.picketlink.common.reflection.Types;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,6 +1,6 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,6 +1,6 @@
|
||||||
package org.keycloak.services.models.nosql.impl.types;
|
package org.keycloak.models.mongo.impl.types;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.types.Converter;
|
import org.keycloak.models.mongo.api.types.Converter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,18 +1,18 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.keycloak.services.models.ApplicationModel;
|
import org.keycloak.models.ApplicationModel;
|
||||||
import org.keycloak.services.models.RoleModel;
|
import org.keycloak.models.RoleModel;
|
||||||
import org.keycloak.services.models.UserModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.ApplicationData;
|
import org.keycloak.models.mongo.keycloak.data.ApplicationData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RoleData;
|
import org.keycloak.models.mongo.keycloak.data.RoleData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.UserData;
|
import org.keycloak.models.mongo.keycloak.data.UserData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
@ -30,12 +30,12 @@ public class ApplicationAdapter implements ApplicationModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateResource() {
|
public void updateApplication() {
|
||||||
noSQL.saveObject(application);
|
noSQL.saveObject(application);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserModel getResourceUser() {
|
public UserModel getApplicationUser() {
|
||||||
// This is not thread-safe. Assumption is that ApplicationAdapter instance is per-client object
|
// This is not thread-safe. Assumption is that ApplicationAdapter instance is per-client object
|
||||||
if (resourceUser == null) {
|
if (resourceUser == null) {
|
||||||
resourceUser = noSQL.loadObject(UserData.class, application.getResourceUserId());
|
resourceUser = noSQL.loadObject(UserData.class, application.getResourceUserId());
|
||||||
|
@ -89,6 +89,16 @@ public class ApplicationAdapter implements ApplicationModel {
|
||||||
application.setManagementUrl(url);
|
application.setManagementUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBaseUrl(String url) {
|
||||||
|
application.setBaseUrl(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return application.getBaseUrl();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RoleAdapter getRole(String name) {
|
public RoleAdapter getRole(String name) {
|
||||||
NoSQLQuery query = noSQL.createQueryBuilder()
|
NoSQLQuery query = noSQL.createQueryBuilder()
|
||||||
|
@ -103,6 +113,22 @@ public class ApplicationAdapter implements ApplicationModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RoleModel getRoleById(String id) {
|
||||||
|
RoleData role = noSQL.loadObject(RoleData.class, id);
|
||||||
|
if (role == null) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return new RoleAdapter(role, noSQL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void grantRole(UserModel user, RoleModel role) {
|
||||||
|
UserData userData = ((UserAdapter)user).getUser();
|
||||||
|
noSQL.pushItemToList(userData, "roleIds", role.getId());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RoleAdapter addRole(String name) {
|
public RoleAdapter addRole(String name) {
|
||||||
if (getRole(name) != null) {
|
if (getRole(name) != null) {
|
||||||
|
@ -132,17 +158,21 @@ public class ApplicationAdapter implements ApplicationModel {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// Static so that it can be used from RealmAdapter as well
|
||||||
public Set<String> getRoleMappings(UserModel user) {
|
static List<RoleData> getAllRolesOfUser(UserModel user, NoSQL noSQL) {
|
||||||
UserData userData = ((UserAdapter)user).getUser();
|
UserData userData = ((UserAdapter)user).getUser();
|
||||||
List<String> roleIds = userData.getRoleIds();
|
List<String> roleIds = userData.getRoleIds();
|
||||||
|
|
||||||
Set<String> result = new HashSet<String>();
|
|
||||||
|
|
||||||
NoSQLQuery query = noSQL.createQueryBuilder()
|
NoSQLQuery query = noSQL.createQueryBuilder()
|
||||||
.inCondition("_id", roleIds)
|
.inCondition("_id", roleIds)
|
||||||
.build();
|
.build();
|
||||||
List<RoleData> roles = noSQL.loadObjects(RoleData.class, query);
|
return noSQL.loadObjects(RoleData.class, query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getRoleMappingValues(UserModel user) {
|
||||||
|
Set<String> result = new HashSet<String>();
|
||||||
|
List<RoleData> roles = getAllRolesOfUser(user, noSQL);
|
||||||
// TODO: Maybe improve as currently we need to obtain all roles and then filter programmatically...
|
// TODO: Maybe improve as currently we need to obtain all roles and then filter programmatically...
|
||||||
for (RoleData role : roles) {
|
for (RoleData role : roles) {
|
||||||
if (getId().equals(role.getApplicationId())) {
|
if (getId().equals(role.getApplicationId())) {
|
||||||
|
@ -153,23 +183,42 @@ public class ApplicationAdapter implements ApplicationModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addScope(UserModel agent, String roleName) {
|
public List<RoleModel> getRoleMappings(UserModel user) {
|
||||||
|
List<RoleModel> result = new ArrayList<RoleModel>();
|
||||||
|
List<RoleData> roles = getAllRolesOfUser(user, noSQL);
|
||||||
|
// TODO: Maybe improve as currently we need to obtain all roles and then filter programmatically...
|
||||||
|
for (RoleData role : roles) {
|
||||||
|
if (getId().equals(role.getApplicationId())) {
|
||||||
|
result.add(new RoleAdapter(role, noSQL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteRoleMapping(UserModel user, RoleModel role) {
|
||||||
|
UserData userData = ((UserAdapter)user).getUser();
|
||||||
|
noSQL.pullItemFromList(userData, "roleIds", role.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addScopeMapping(UserModel agent, String roleName) {
|
||||||
RoleAdapter role = getRole(roleName);
|
RoleAdapter role = getRole(roleName);
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
throw new RuntimeException("Role not found");
|
throw new RuntimeException("Role not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
addScope(agent, role);
|
addScopeMapping(agent, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addScope(UserModel agent, RoleModel role) {
|
public void addScopeMapping(UserModel agent, RoleModel role) {
|
||||||
UserData userData = ((UserAdapter)agent).getUser();
|
UserData userData = ((UserAdapter)agent).getUser();
|
||||||
noSQL.pushItemToList(userData, "scopeIds", role.getId());
|
noSQL.pushItemToList(userData, "scopeIds", role.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getScope(UserModel agent) {
|
public Set<String> getScopeMapping(UserModel agent) {
|
||||||
UserData userData = ((UserAdapter)agent).getUser();
|
UserData userData = ((UserAdapter)agent).getUser();
|
||||||
List<String> scopeIds = userData.getScopeIds();
|
List<String> scopeIds = userData.getScopeIds();
|
||||||
|
|
|
@ -1,27 +1,24 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
import com.mongodb.DB;
|
import com.mongodb.DB;
|
||||||
import com.mongodb.MongoClient;
|
import com.mongodb.MongoClient;
|
||||||
import org.jboss.resteasy.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.services.managers.RealmManager;
|
import org.keycloak.models.KeycloakSession;
|
||||||
import org.keycloak.services.models.KeycloakSession;
|
import org.keycloak.models.KeycloakSessionFactory;
|
||||||
import org.keycloak.services.models.KeycloakSessionFactory;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.keycloak.data.ApplicationData;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.keycloak.data.OAuthClientData;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQueryBuilder;
|
import org.keycloak.models.mongo.keycloak.data.RealmData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.ApplicationData;
|
import org.keycloak.models.mongo.keycloak.data.RequiredCredentialData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RealmData;
|
import org.keycloak.models.mongo.keycloak.data.RoleData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RequiredCredentialData;
|
import org.keycloak.models.mongo.keycloak.data.SocialLinkData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RoleData;
|
import org.keycloak.models.mongo.keycloak.data.UserData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.SocialLinkData;
|
import org.keycloak.models.mongo.impl.MongoDBImpl;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.UserData;
|
import org.keycloak.models.mongo.keycloak.data.credentials.OTPData;
|
||||||
import org.keycloak.services.models.nosql.impl.MongoDBImpl;
|
import org.keycloak.models.mongo.keycloak.data.credentials.PasswordData;
|
||||||
import org.keycloak.services.models.nosql.impl.MongoDBQueryBuilder;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.credentials.OTPData;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.credentials.PasswordData;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NoSQL implementation based on MongoDB
|
* NoSQL implementation based on MongoDB
|
||||||
|
@ -39,7 +36,8 @@ public class MongoDBSessionFactory implements KeycloakSessionFactory {
|
||||||
PasswordData.class,
|
PasswordData.class,
|
||||||
OTPData.class,
|
OTPData.class,
|
||||||
SocialLinkData.class,
|
SocialLinkData.class,
|
||||||
ApplicationData.class
|
ApplicationData.class,
|
||||||
|
OAuthClientData.class
|
||||||
};
|
};
|
||||||
|
|
||||||
private final MongoClient mongoClient;
|
private final MongoClient mongoClient;
|
|
@ -1,19 +1,16 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.jboss.resteasy.spi.NotImplementedYetException;
|
import org.keycloak.models.KeycloakSession;
|
||||||
import org.keycloak.services.models.KeycloakSession;
|
import org.keycloak.models.KeycloakTransaction;
|
||||||
import org.keycloak.services.models.KeycloakTransaction;
|
import org.keycloak.models.RealmModel;
|
||||||
import org.keycloak.services.models.RealmModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.services.models.UserModel;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.keycloak.data.RealmData;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQueryBuilder;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.impl.MongoDBQueryBuilder;
|
import org.keycloak.models.utils.KeycloakSessionUtils;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RealmData;
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
|
||||||
import org.keycloak.services.models.picketlink.PicketlinkKeycloakSession;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
@ -38,7 +35,7 @@ public class NoSQLSession implements KeycloakSession {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RealmModel createRealm(String name) {
|
public RealmModel createRealm(String name) {
|
||||||
return createRealm(PicketlinkKeycloakSession.generateId(), name);
|
return createRealm(KeycloakSessionUtils.generateId(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -1,6 +1,6 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
import org.keycloak.services.models.KeycloakTransaction;
|
import org.keycloak.models.KeycloakTransaction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -0,0 +1,43 @@
|
||||||
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
|
import org.keycloak.models.OAuthClientModel;
|
||||||
|
import org.keycloak.models.UserModel;
|
||||||
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
|
import org.keycloak.models.mongo.keycloak.data.OAuthClientData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
*/
|
||||||
|
public class OAuthClientAdapter implements OAuthClientModel {
|
||||||
|
|
||||||
|
private final OAuthClientData delegate;
|
||||||
|
private final UserAdapter oauthAgent;
|
||||||
|
private final NoSQL noSQL;
|
||||||
|
|
||||||
|
public OAuthClientAdapter(OAuthClientData oauthClientData, UserAdapter oauthAgent, NoSQL noSQL) {
|
||||||
|
this.delegate = oauthClientData;
|
||||||
|
this.oauthAgent = oauthAgent;
|
||||||
|
this.noSQL = noSQL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return delegate.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserModel getOAuthAgent() {
|
||||||
|
return oauthAgent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return delegate.getBaseUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBaseUrl(String base) {
|
||||||
|
delegate.setBaseUrl(base);
|
||||||
|
noSQL.saveObject(delegate);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
@ -12,28 +12,30 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bouncycastle.openssl.PEMWriter;
|
import org.bouncycastle.openssl.PEMWriter;
|
||||||
import org.jboss.resteasy.security.PemUtils;
|
import org.keycloak.PemUtils;
|
||||||
|
import org.keycloak.models.ApplicationModel;
|
||||||
|
import org.keycloak.models.OAuthClientModel;
|
||||||
|
import org.keycloak.models.RealmModel;
|
||||||
|
import org.keycloak.models.RequiredCredentialModel;
|
||||||
|
import org.keycloak.models.RoleModel;
|
||||||
|
import org.keycloak.models.SocialLinkModel;
|
||||||
|
import org.keycloak.models.UserCredentialModel;
|
||||||
|
import org.keycloak.models.UserModel;
|
||||||
|
import org.keycloak.models.mongo.api.query.NoSQLQueryBuilder;
|
||||||
|
import org.keycloak.models.mongo.keycloak.data.OAuthClientData;
|
||||||
import org.keycloak.representations.idm.CredentialRepresentation;
|
import org.keycloak.representations.idm.CredentialRepresentation;
|
||||||
import org.keycloak.services.models.ApplicationModel;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.RealmModel;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.RequiredCredentialModel;
|
import org.keycloak.models.mongo.keycloak.credentials.PasswordCredentialHandler;
|
||||||
import org.keycloak.services.models.RoleModel;
|
import org.keycloak.models.mongo.keycloak.credentials.TOTPCredentialHandler;
|
||||||
import org.keycloak.services.models.SocialLinkModel;
|
import org.keycloak.models.mongo.keycloak.data.ApplicationData;
|
||||||
import org.keycloak.services.models.UserCredentialModel;
|
import org.keycloak.models.mongo.keycloak.data.RealmData;
|
||||||
import org.keycloak.services.models.UserModel;
|
import org.keycloak.models.mongo.keycloak.data.RequiredCredentialData;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.keycloak.data.RoleData;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.keycloak.data.SocialLinkData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.credentials.PasswordCredentialHandler;
|
import org.keycloak.models.mongo.keycloak.data.UserData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.credentials.TOTPCredentialHandler;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.ApplicationData;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RealmData;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RequiredCredentialData;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RoleData;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.SocialLinkData;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.UserData;
|
|
||||||
import org.picketlink.idm.credential.Credentials;
|
import org.picketlink.idm.credential.Credentials;
|
||||||
import org.picketlink.idm.credential.Password;
|
import org.picketlink.idm.model.sample.User;
|
||||||
import org.picketlink.idm.credential.TOTPCredentials;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
@ -152,6 +154,17 @@ public class RealmAdapter implements RealmModel {
|
||||||
updateRealm();
|
updateRealm();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isResetPasswordAllowed() {
|
||||||
|
return realm.isResetPasswordAllowed();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setResetPasswordAllowed(boolean resetPassword) {
|
||||||
|
realm.setResetPasswordAllowed(resetPassword);
|
||||||
|
updateRealm();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getTokenLifespan() {
|
public int getTokenLifespan() {
|
||||||
return realm.getTokenLifespan();
|
return realm.getTokenLifespan();
|
||||||
|
@ -290,6 +303,7 @@ public class RealmAdapter implements RealmModel {
|
||||||
|
|
||||||
UserData userData = new UserData();
|
UserData userData = new UserData();
|
||||||
userData.setLoginName(username);
|
userData.setLoginName(username);
|
||||||
|
userData.setEnabled(true);
|
||||||
userData.setRealmId(getOid());
|
userData.setRealmId(getOid());
|
||||||
|
|
||||||
noSQL.saveObject(userData);
|
noSQL.saveObject(userData);
|
||||||
|
@ -405,7 +419,7 @@ public class RealmAdapter implements RealmModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ApplicationModel> getResourceNameMap() {
|
public Map<String, ApplicationModel> getApplicationNameMap() {
|
||||||
Map<String, ApplicationModel> resourceMap = new HashMap<String, ApplicationModel>();
|
Map<String, ApplicationModel> resourceMap = new HashMap<String, ApplicationModel>();
|
||||||
for (ApplicationModel resource : getApplications()) {
|
for (ApplicationModel resource : getApplications()) {
|
||||||
resourceMap.put(resource.getName(), resource);
|
resourceMap.put(resource.getName(), resource);
|
||||||
|
@ -439,7 +453,7 @@ public class RealmAdapter implements RealmModel {
|
||||||
|
|
||||||
ApplicationModel resource = new ApplicationAdapter(appData, noSQL);
|
ApplicationModel resource = new ApplicationAdapter(appData, noSQL);
|
||||||
resource.addRole("*");
|
resource.addRole("*");
|
||||||
resource.addScope(resourceUser, "*");
|
resource.addScopeMapping(resourceUser, "*");
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,16 +480,22 @@ public class RealmAdapter implements RealmModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getRoleMappings(UserModel user) {
|
public List<RoleModel> getRoleMappings(UserModel user) {
|
||||||
UserData userData = ((UserAdapter)user).getUser();
|
List<RoleModel> result = new ArrayList<RoleModel>();
|
||||||
List<String> roleIds = userData.getRoleIds();
|
List<RoleData> roles = ApplicationAdapter.getAllRolesOfUser(user, noSQL);
|
||||||
|
// TODO: Maybe improve as currently we need to obtain all roles and then filter programmatically...
|
||||||
|
for (RoleData role : roles) {
|
||||||
|
if (getOid().equals(role.getRealmId())) {
|
||||||
|
result.add(new RoleAdapter(role, noSQL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getRoleMappingValues(UserModel user) {
|
||||||
Set<String> result = new HashSet<String>();
|
Set<String> result = new HashSet<String>();
|
||||||
|
List<RoleData> roles = ApplicationAdapter.getAllRolesOfUser(user, noSQL);
|
||||||
NoSQLQuery query = noSQL.createQueryBuilder()
|
|
||||||
.inCondition("_id", roleIds)
|
|
||||||
.build();
|
|
||||||
List<RoleData> roles = noSQL.loadObjects(RoleData.class, query);
|
|
||||||
// TODO: Maybe improve as currently we need to obtain all roles and then filter programmatically...
|
// TODO: Maybe improve as currently we need to obtain all roles and then filter programmatically...
|
||||||
for (RoleData role : roles) {
|
for (RoleData role : roles) {
|
||||||
if (getOid().equals(role.getRealmId())) {
|
if (getOid().equals(role.getRealmId())) {
|
||||||
|
@ -486,7 +506,13 @@ public class RealmAdapter implements RealmModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addScope(UserModel agent, String roleName) {
|
public void deleteRoleMapping(UserModel user, RoleModel role) {
|
||||||
|
UserData userData = ((UserAdapter)user).getUser();
|
||||||
|
noSQL.pullItemFromList(userData, "roleIds", role.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addScopeMapping(UserModel agent, String roleName) {
|
||||||
UserData userData = ((UserAdapter)agent).getUser();
|
UserData userData = ((UserAdapter)agent).getUser();
|
||||||
RoleAdapter role = getRole(roleName);
|
RoleAdapter role = getRole(roleName);
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
|
@ -497,7 +523,31 @@ public class RealmAdapter implements RealmModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getScope(UserModel agent) {
|
public OAuthClientModel addOAuthClient(String name) {
|
||||||
|
UserAdapter oauthAgent = addUser(name);
|
||||||
|
|
||||||
|
OAuthClientData oauthClient = new OAuthClientData();
|
||||||
|
oauthClient.setOauthAgentId(oauthAgent.getUser().getId());
|
||||||
|
oauthClient.setRealmId(getOid());
|
||||||
|
noSQL.saveObject(oauthClient);
|
||||||
|
|
||||||
|
return new OAuthClientAdapter(oauthClient, oauthAgent, noSQL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OAuthClientModel getOAuthClient(String name) {
|
||||||
|
UserAdapter user = getUser(name);
|
||||||
|
if (user == null) return null;
|
||||||
|
NoSQLQuery query = noSQL.createQueryBuilder()
|
||||||
|
.andCondition("realmId", getOid())
|
||||||
|
.andCondition("oauthAgentId", user.getUser().getId())
|
||||||
|
.build();
|
||||||
|
OAuthClientData oauthClient = noSQL.loadSingleObject(OAuthClientData.class, query);
|
||||||
|
return oauthClient == null ? null : new OAuthClientAdapter(oauthClient, user, noSQL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<String> getScopeMapping(UserModel agent) {
|
||||||
UserData userData = ((UserAdapter)agent).getUser();
|
UserData userData = ((UserAdapter)agent).getUser();
|
||||||
List<String> scopeIds = userData.getScopeIds();
|
List<String> scopeIds = userData.getScopeIds();
|
||||||
|
|
||||||
|
@ -755,4 +805,28 @@ public class RealmAdapter implements RealmModel {
|
||||||
}
|
}
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<UserModel> searchForUserByAttributes(Map<String, String> attributes) {
|
||||||
|
NoSQLQueryBuilder queryBuilder = noSQL.createQueryBuilder();
|
||||||
|
for (Map.Entry<String, String> entry : attributes.entrySet()) {
|
||||||
|
if (entry.getKey().equals(UserModel.LOGIN_NAME)) {
|
||||||
|
queryBuilder.andCondition("loginName", entry.getValue());
|
||||||
|
} else if (entry.getKey().equalsIgnoreCase(UserModel.FIRST_NAME)) {
|
||||||
|
queryBuilder.andCondition(UserModel.FIRST_NAME, entry.getValue());
|
||||||
|
|
||||||
|
} else if (entry.getKey().equalsIgnoreCase(UserModel.LAST_NAME)) {
|
||||||
|
queryBuilder.andCondition(UserModel.LAST_NAME, entry.getValue());
|
||||||
|
|
||||||
|
} else if (entry.getKey().equalsIgnoreCase(UserModel.EMAIL)) {
|
||||||
|
queryBuilder.andCondition(UserModel.EMAIL, entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<UserData> users = noSQL.loadObjects(UserData.class, queryBuilder.build());
|
||||||
|
List<UserModel> userModels = new ArrayList<UserModel>();
|
||||||
|
for (UserData user : users) {
|
||||||
|
userModels.add(new UserAdapter(user, noSQL));
|
||||||
|
}
|
||||||
|
return userModels;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
import org.keycloak.services.models.RoleModel;
|
import org.keycloak.models.RoleModel;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.RoleData;
|
import org.keycloak.models.mongo.keycloak.data.RoleData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper around RoleData object, which will persist wrapped object after each set operation (compatibility with picketlink based impl)
|
* Wrapper around RoleData object, which will persist wrapped object after each set operation (compatibility with picketlink based impl)
|
|
@ -1,11 +1,14 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.adapters;
|
package org.keycloak.models.mongo.keycloak.adapters;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
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 org.keycloak.services.models.UserModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.UserData;
|
import org.keycloak.models.mongo.keycloak.data.UserData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper around UserData object, which will persist wrapped object after each set operation (compatibility with picketlink based impl)
|
* Wrapper around UserData object, which will persist wrapped object after each set operation (compatibility with picketlink based impl)
|
||||||
|
@ -33,17 +36,11 @@ public class UserAdapter implements UserModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStatus(Status status) {
|
public void setEnabled(boolean enabled) {
|
||||||
user.setStatus(status);
|
user.setEnabled(enabled);
|
||||||
noSQL.saveObject(user);
|
noSQL.saveObject(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Status getStatus() {
|
|
||||||
Status status = user.getStatus();
|
|
||||||
return status != null ? status : Status.ENABLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getFirstName() {
|
public String getFirstName() {
|
||||||
return user.getFirstName();
|
return user.getFirstName();
|
||||||
|
@ -114,15 +111,19 @@ public class UserAdapter implements UserModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<RequiredAction> getRequiredActions() {
|
public Set<RequiredAction> getRequiredActions() {
|
||||||
List<RequiredAction> requiredActions = user.getRequiredActions();
|
List<RequiredAction> actions = user.getRequiredActions();
|
||||||
|
|
||||||
// Compatibility with picketlink impl
|
// Compatibility with picketlink impl
|
||||||
if (requiredActions == null || requiredActions.size() == 0) {
|
if (actions == null) {
|
||||||
return null;
|
return Collections.emptySet();
|
||||||
|
} else {
|
||||||
|
Set<RequiredAction> s = new HashSet<RequiredAction>();
|
||||||
|
for (RequiredAction a : actions) {
|
||||||
|
s.add(a);
|
||||||
|
}
|
||||||
|
return Collections.unmodifiableSet(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
return requiredActions;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -1,13 +1,13 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.credentials;
|
package org.keycloak.models.mongo.keycloak.credentials;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.UserData;
|
import org.keycloak.models.mongo.keycloak.data.UserData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.credentials.PasswordData;
|
import org.keycloak.models.mongo.keycloak.data.credentials.PasswordData;
|
||||||
import org.picketlink.idm.credential.Credentials;
|
import org.picketlink.idm.credential.Credentials;
|
||||||
import org.picketlink.idm.credential.encoder.PasswordEncoder;
|
import org.picketlink.idm.credential.encoder.PasswordEncoder;
|
||||||
import org.picketlink.idm.credential.encoder.SHAPasswordEncoder;
|
import org.picketlink.idm.credential.encoder.SHAPasswordEncoder;
|
|
@ -1,12 +1,12 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.credentials;
|
package org.keycloak.models.mongo.keycloak.credentials;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.UserData;
|
import org.keycloak.models.mongo.keycloak.data.UserData;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.credentials.OTPData;
|
import org.keycloak.models.mongo.keycloak.data.credentials.OTPData;
|
||||||
import org.picketlink.idm.credential.Credentials;
|
import org.picketlink.idm.credential.Credentials;
|
||||||
import org.picketlink.idm.credential.util.TimeBasedOTP;
|
import org.picketlink.idm.credential.util.TimeBasedOTP;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data;
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
@ -18,6 +18,7 @@ public class ApplicationData implements NoSQLObject {
|
||||||
private boolean enabled;
|
private boolean enabled;
|
||||||
private boolean surrogateAuthRequired;
|
private boolean surrogateAuthRequired;
|
||||||
private String managementUrl;
|
private String managementUrl;
|
||||||
|
private String baseUrl;
|
||||||
|
|
||||||
private String resourceUserId;
|
private String resourceUserId;
|
||||||
private String realmId;
|
private String realmId;
|
||||||
|
@ -67,6 +68,15 @@ public class ApplicationData implements NoSQLObject {
|
||||||
this.managementUrl = managementUrl;
|
this.managementUrl = managementUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NoSQLField
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
@NoSQLField
|
@NoSQLField
|
||||||
public String getResourceUserId() {
|
public String getResourceUserId() {
|
||||||
return resourceUserId;
|
return resourceUserId;
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
*/
|
||||||
|
@NoSQLCollection(collectionName = "oauthClients")
|
||||||
|
public class OAuthClientData implements NoSQLObject {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String baseUrl;
|
||||||
|
|
||||||
|
private String oauthAgentId;
|
||||||
|
private String realmId;
|
||||||
|
|
||||||
|
@NoSQLId
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoSQLField
|
||||||
|
public String getBaseUrl() {
|
||||||
|
return baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBaseUrl(String baseUrl) {
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoSQLField
|
||||||
|
public String getOauthAgentId() {
|
||||||
|
return oauthAgentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOauthAgentId(String oauthUserId) {
|
||||||
|
this.oauthAgentId = oauthUserId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoSQLField
|
||||||
|
public String getRealmId() {
|
||||||
|
return realmId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRealmId(String realmId) {
|
||||||
|
this.realmId = realmId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterRemove(NoSQL noSQL) {
|
||||||
|
// Remove user of this oauthClient
|
||||||
|
noSQL.removeObject(UserData.class, oauthAgentId);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,16 +1,13 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data;
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
import java.security.SecureRandom;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
@ -27,6 +24,7 @@ public class RealmData implements NoSQLObject {
|
||||||
private boolean cookieLoginAllowed;
|
private boolean cookieLoginAllowed;
|
||||||
private boolean registrationAllowed;
|
private boolean registrationAllowed;
|
||||||
private boolean verifyEmail;
|
private boolean verifyEmail;
|
||||||
|
private boolean resetPasswordAllowed;
|
||||||
private boolean social;
|
private boolean social;
|
||||||
private boolean automaticRegistrationAfterSocialLogin;
|
private boolean automaticRegistrationAfterSocialLogin;
|
||||||
private int tokenLifespan;
|
private int tokenLifespan;
|
||||||
|
@ -110,6 +108,15 @@ public class RealmData implements NoSQLObject {
|
||||||
this.verifyEmail = verifyEmail;
|
this.verifyEmail = verifyEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NoSQLField
|
||||||
|
public boolean isResetPasswordAllowed() {
|
||||||
|
return resetPasswordAllowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResetPasswordAllowed(boolean resetPasswordAllowed) {
|
||||||
|
this.resetPasswordAllowed = resetPasswordAllowed;
|
||||||
|
}
|
||||||
|
|
||||||
@NoSQLField
|
@NoSQLField
|
||||||
public boolean isSocial() {
|
public boolean isSocial() {
|
||||||
return social;
|
return social;
|
|
@ -1,10 +1,9 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data;
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.AbstractNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,14 +1,14 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data;
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.jboss.resteasy.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,10 +1,8 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data;
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.AbstractNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,16 +1,16 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data;
|
package org.keycloak.models.mongo.keycloak.data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.jboss.resteasy.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
import org.keycloak.services.models.UserModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.services.models.nosql.api.AbstractAttributedNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractAttributedNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.keycloak.data.credentials.PasswordData;
|
import org.keycloak.models.mongo.keycloak.data.credentials.PasswordData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
|
@ -27,7 +27,7 @@ public class UserData extends AbstractAttributedNoSQLObject {
|
||||||
private String email;
|
private String email;
|
||||||
private boolean emailVerified;
|
private boolean emailVerified;
|
||||||
private boolean totp;
|
private boolean totp;
|
||||||
private UserModel.Status status;
|
private boolean enabled;
|
||||||
|
|
||||||
private String realmId;
|
private String realmId;
|
||||||
|
|
||||||
|
@ -89,8 +89,13 @@ public class UserData extends AbstractAttributedNoSQLObject {
|
||||||
this.emailVerified = emailVerified;
|
this.emailVerified = emailVerified;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NoSQLField
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
return !UserModel.Status.DISABLED.equals(getStatus());
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NoSQLField
|
@NoSQLField
|
||||||
|
@ -102,15 +107,6 @@ public class UserData extends AbstractAttributedNoSQLObject {
|
||||||
this.totp = totp;
|
this.totp = totp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NoSQLField
|
|
||||||
public UserModel.Status getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(UserModel.Status status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NoSQLField
|
@NoSQLField
|
||||||
public String getRealmId() {
|
public String getRealmId() {
|
||||||
return realmId;
|
return realmId;
|
|
@ -1,10 +1,10 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data.credentials;
|
package org.keycloak.models.mongo.keycloak.data.credentials;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.AbstractNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,12 +1,10 @@
|
||||||
package org.keycloak.services.models.nosql.keycloak.data.credentials;
|
package org.keycloak.models.mongo.keycloak.data.credentials;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.AbstractNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,9 +1,9 @@
|
||||||
package org.keycloak.test.nosql;
|
package org.keycloak.models.mongo.test;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.AbstractNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,4 +1,4 @@
|
||||||
package org.keycloak.test.nosql;
|
package org.keycloak.models.mongo.test;
|
||||||
|
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -10,11 +10,10 @@ import com.mongodb.MongoClient;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.keycloak.models.mongo.api.NoSQL;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQL;
|
import org.keycloak.models.mongo.api.NoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLObject;
|
import org.keycloak.models.mongo.api.query.NoSQLQuery;
|
||||||
import org.keycloak.services.models.nosql.api.query.NoSQLQuery;
|
import org.keycloak.models.mongo.impl.MongoDBImpl;
|
||||||
import org.keycloak.services.models.nosql.impl.MongoDBImpl;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -1,11 +1,11 @@
|
||||||
package org.keycloak.test.nosql;
|
package org.keycloak.models.mongo.test;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.keycloak.services.models.nosql.api.AbstractNoSQLObject;
|
import org.keycloak.models.mongo.api.AbstractNoSQLObject;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLCollection;
|
import org.keycloak.models.mongo.api.NoSQLCollection;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLField;
|
import org.keycloak.models.mongo.api.NoSQLField;
|
||||||
import org.keycloak.services.models.nosql.api.NoSQLId;
|
import org.keycloak.models.mongo.api.NoSQLId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
|
@ -4,7 +4,7 @@
|
||||||
<artifactId>keycloak-parent</artifactId>
|
<artifactId>keycloak-parent</artifactId>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<version>1.0-alpha-1</version>
|
<version>1.0-alpha-1</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.keycloak.models.RealmModel;
|
||||||
import org.keycloak.models.UserModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.models.picketlink.mappings.RealmData;
|
import org.keycloak.models.picketlink.mappings.RealmData;
|
||||||
import org.keycloak.models.picketlink.relationships.RealmAdminRelationship;
|
import org.keycloak.models.picketlink.relationships.RealmAdminRelationship;
|
||||||
|
import org.keycloak.models.utils.KeycloakSessionUtils;
|
||||||
import org.picketlink.idm.PartitionManager;
|
import org.picketlink.idm.PartitionManager;
|
||||||
import org.picketlink.idm.RelationshipManager;
|
import org.picketlink.idm.RelationshipManager;
|
||||||
import org.picketlink.idm.query.RelationshipQuery;
|
import org.picketlink.idm.query.RelationshipQuery;
|
||||||
|
@ -25,11 +26,6 @@ public class PicketlinkKeycloakSession implements KeycloakSession {
|
||||||
protected PartitionManager partitionManager;
|
protected PartitionManager partitionManager;
|
||||||
protected EntityManager entityManager;
|
protected EntityManager entityManager;
|
||||||
|
|
||||||
private static AtomicLong counter = new AtomicLong(1);
|
|
||||||
public static String generateId() {
|
|
||||||
return counter.getAndIncrement() + "-" + System.currentTimeMillis();
|
|
||||||
}
|
|
||||||
|
|
||||||
public PicketlinkKeycloakSession(PartitionManager partitionManager, EntityManager entityManager) {
|
public PicketlinkKeycloakSession(PartitionManager partitionManager, EntityManager entityManager) {
|
||||||
this.partitionManager = partitionManager;
|
this.partitionManager = partitionManager;
|
||||||
this.entityManager = entityManager;
|
this.entityManager = entityManager;
|
||||||
|
@ -50,7 +46,7 @@ public class PicketlinkKeycloakSession implements KeycloakSession {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RealmAdapter createRealm(String name) {
|
public RealmAdapter createRealm(String name) {
|
||||||
return createRealm(generateId(), name);
|
return createRealm(KeycloakSessionUtils.generateId(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -37,5 +37,6 @@
|
||||||
<module>api</module>
|
<module>api</module>
|
||||||
<module>picketlink</module>
|
<module>picketlink</module>
|
||||||
<module>jpa</module>
|
<module>jpa</module>
|
||||||
|
<module>mongo</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
|
3
pom.xml
3
pom.xml
|
@ -18,6 +18,7 @@
|
||||||
<hibernate.entitymanager.version>3.6.6.Final</hibernate.entitymanager.version>
|
<hibernate.entitymanager.version>3.6.6.Final</hibernate.entitymanager.version>
|
||||||
<h2.version>1.3.161</h2.version>
|
<h2.version>1.3.161</h2.version>
|
||||||
<dom4j.version>1.6.1</dom4j.version>
|
<dom4j.version>1.6.1</dom4j.version>
|
||||||
|
<mysql.version>5.1.25</mysql.version>
|
||||||
<slf4j.version>1.6.1</slf4j.version>
|
<slf4j.version>1.6.1</slf4j.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
@ -295,7 +296,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>mysql</groupId>
|
<groupId>mysql</groupId>
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
<version>5.1.25</version>
|
<version>${mysql.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -34,6 +34,12 @@
|
||||||
<artifactId>keycloak-model-picketlink</artifactId>
|
<artifactId>keycloak-model-picketlink</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- TODO: Remove -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-model-mongo</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-social-core</artifactId>
|
<artifactId>keycloak-social-core</artifactId>
|
||||||
|
|
|
@ -1,18 +1,13 @@
|
||||||
package org.keycloak.services.resources;
|
package org.keycloak.services.resources;
|
||||||
|
|
||||||
import org.keycloak.SkeletonKeyContextResolver;
|
import org.keycloak.SkeletonKeyContextResolver;
|
||||||
|
import org.keycloak.models.mongo.keycloak.adapters.MongoDBSessionFactory;
|
||||||
import org.keycloak.services.managers.TokenManager;
|
import org.keycloak.services.managers.TokenManager;
|
||||||
import org.keycloak.models.KeycloakSessionFactory;
|
import org.keycloak.models.KeycloakSessionFactory;
|
||||||
import org.keycloak.models.picketlink.PicketlinkKeycloakSession;
|
import org.keycloak.models.picketlink.PicketlinkKeycloakSession;
|
||||||
import org.keycloak.models.picketlink.PicketlinkKeycloakSessionFactory;
|
import org.keycloak.models.picketlink.PicketlinkKeycloakSessionFactory;
|
||||||
import org.keycloak.models.picketlink.mappings.ApplicationEntity;
|
import org.keycloak.models.picketlink.mappings.ApplicationEntity;
|
||||||
import org.keycloak.models.picketlink.mappings.RealmEntity;
|
import org.keycloak.models.picketlink.mappings.RealmEntity;
|
||||||
import org.keycloak.services.models.KeycloakSessionFactory;
|
|
||||||
import org.keycloak.services.models.nosql.keycloak.adapters.MongoDBSessionFactory;
|
|
||||||
import org.keycloak.services.models.picketlink.PicketlinkKeycloakSession;
|
|
||||||
import org.keycloak.services.models.picketlink.PicketlinkKeycloakSessionFactory;
|
|
||||||
import org.keycloak.services.models.picketlink.mappings.ApplicationEntity;
|
|
||||||
import org.keycloak.services.models.picketlink.mappings.RealmEntity;
|
|
||||||
import org.keycloak.social.SocialRequestManager;
|
import org.keycloak.social.SocialRequestManager;
|
||||||
import org.picketlink.idm.PartitionManager;
|
import org.picketlink.idm.PartitionManager;
|
||||||
import org.picketlink.idm.config.IdentityConfigurationBuilder;
|
import org.picketlink.idm.config.IdentityConfigurationBuilder;
|
||||||
|
@ -25,8 +20,6 @@ import javax.persistence.EntityManager;
|
||||||
import javax.persistence.EntityManagerFactory;
|
import javax.persistence.EntityManagerFactory;
|
||||||
import javax.persistence.Persistence;
|
import javax.persistence.Persistence;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
import javax.persistence.Persistence;
|
|
||||||
import javax.ws.rs.core.Application;
|
import javax.ws.rs.core.Application;
|
||||||
import javax.ws.rs.core.Context;
|
import javax.ws.rs.core.Context;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
|
@ -141,6 +141,8 @@ public class AdapterTest extends AbstractKeycloakTest {
|
||||||
user.setEmail("bburke@redhat.com");
|
user.setEmail("bburke@redhat.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RealmManager adapter = getRealmManager();
|
||||||
|
|
||||||
{
|
{
|
||||||
List<UserModel> userModels = adapter.searchUsers("total junk query", realmModel);
|
List<UserModel> userModels = adapter.searchUsers("total junk query", realmModel);
|
||||||
Assert.assertEquals(userModels.size(), 0);
|
Assert.assertEquals(userModels.size(), 0);
|
||||||
|
|
|
@ -11,11 +11,6 @@ import org.keycloak.services.managers.AuthenticationManager;
|
||||||
import org.keycloak.services.managers.RealmManager;
|
import org.keycloak.services.managers.RealmManager;
|
||||||
import org.keycloak.models.KeycloakSession;
|
import org.keycloak.models.KeycloakSession;
|
||||||
import org.keycloak.models.RealmModel;
|
import org.keycloak.models.RealmModel;
|
||||||
import org.keycloak.services.models.KeycloakSession;
|
|
||||||
import org.keycloak.services.models.RealmModel;
|
|
||||||
import org.keycloak.services.resources.KeycloakApplication;
|
|
||||||
import org.keycloak.test.common.AbstractKeycloakTest;
|
|
||||||
import org.keycloak.test.common.SessionFactoryTestContext;
|
|
||||||
|
|
||||||
import javax.ws.rs.NotAuthorizedException;
|
import javax.ws.rs.NotAuthorizedException;
|
||||||
import javax.ws.rs.client.Entity;
|
import javax.ws.rs.client.Entity;
|
||||||
|
|
|
@ -10,9 +10,9 @@ import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.Parameterized;
|
import org.junit.runners.Parameterized;
|
||||||
|
import org.keycloak.models.KeycloakSession;
|
||||||
|
import org.keycloak.models.KeycloakSessionFactory;
|
||||||
import org.keycloak.services.managers.RealmManager;
|
import org.keycloak.services.managers.RealmManager;
|
||||||
import org.keycloak.services.models.KeycloakSession;
|
|
||||||
import org.keycloak.services.models.KeycloakSessionFactory;
|
|
||||||
import org.keycloak.services.resources.KeycloakApplication;
|
import org.keycloak.services.resources.KeycloakApplication;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package org.keycloak.test.common;
|
package org.keycloak.test.common;
|
||||||
|
|
||||||
import com.mongodb.DB;
|
|
||||||
import com.mongodb.MongoClient;
|
|
||||||
import de.flapdoodle.embed.mongo.MongodExecutable;
|
import de.flapdoodle.embed.mongo.MongodExecutable;
|
||||||
import de.flapdoodle.embed.mongo.MongodProcess;
|
import de.flapdoodle.embed.mongo.MongodProcess;
|
||||||
import de.flapdoodle.embed.mongo.MongodStarter;
|
import de.flapdoodle.embed.mongo.MongodStarter;
|
||||||
|
@ -9,7 +7,6 @@ import de.flapdoodle.embed.mongo.config.MongodConfig;
|
||||||
import de.flapdoodle.embed.mongo.distribution.Version;
|
import de.flapdoodle.embed.mongo.distribution.Version;
|
||||||
import de.flapdoodle.embed.process.runtime.Network;
|
import de.flapdoodle.embed.process.runtime.Network;
|
||||||
import org.jboss.resteasy.logging.Logger;
|
import org.jboss.resteasy.logging.Logger;
|
||||||
import org.keycloak.services.models.KeycloakSessionFactory;
|
|
||||||
import org.keycloak.services.resources.KeycloakApplication;
|
import org.keycloak.services.resources.KeycloakApplication;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.keycloak.test.common;
|
package org.keycloak.test.common;
|
||||||
|
|
||||||
import org.keycloak.services.models.KeycloakSessionFactory;
|
|
||||||
import org.keycloak.services.resources.KeycloakApplication;
|
import org.keycloak.services.resources.KeycloakApplication;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package org.keycloak.test.common;
|
package org.keycloak.test.common;
|
||||||
|
|
||||||
import org.keycloak.services.models.KeycloakSessionFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
*/
|
*/
|
||||||
|
|
223
testsuite/integration/pom.xml
Normal file
223
testsuite/integration/pom.xml
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<project>
|
||||||
|
<parent>
|
||||||
|
<artifactId>keycloak-parent</artifactId>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<version>1.0-alpha-1</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-testsuite-integration</artifactId>
|
||||||
|
<name>Keycloak Integration TestSuite</name>
|
||||||
|
<description />
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-as7-adapter</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
<artifactId>bcprov-jdk16</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-services</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!--
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-server</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-social-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-social-google</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-social-twitter</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-social-facebook</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak</groupId>
|
||||||
|
<artifactId>keycloak-forms</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.logging</groupId>
|
||||||
|
<artifactId>jboss-logging</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-idm-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-idm-impl</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-idm-simple-schema</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.picketlink</groupId>
|
||||||
|
<artifactId>picketlink-config</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-jaxrs</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-simple</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>jaxrs-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-client</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-crypto</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>jose-jwt</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.resteasy</groupId>
|
||||||
|
<artifactId>resteasy-undertow</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.undertow</groupId>
|
||||||
|
<artifactId>undertow-servlet</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.undertow</groupId>
|
||||||
|
<artifactId>undertow-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.jackson</groupId>
|
||||||
|
<artifactId>jackson-core-asl</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.jackson</groupId>
|
||||||
|
<artifactId>jackson-mapper-asl</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.spec.javax.servlet</groupId>
|
||||||
|
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.jackson</groupId>
|
||||||
|
<artifactId>jackson-xc</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate.javax.persistence</groupId>
|
||||||
|
<artifactId>hibernate-jpa-2.0-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<version>1.3.161</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-entitymanager</artifactId>
|
||||||
|
<version>3.6.6.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.icegreen</groupId>
|
||||||
|
<artifactId>greenmail</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.seleniumhq.selenium</groupId>
|
||||||
|
<artifactId>selenium-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.6</source>
|
||||||
|
<target>1.6</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>jboss-managed</id>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.as</groupId>
|
||||||
|
<artifactId>jboss-as-arquillian-container-managed</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
<version>7.1.1.Final</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<id>jboss-remote</id>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jboss.as</groupId>
|
||||||
|
<artifactId>jboss-as-arquillian-container-remote</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
<version>7.1.1.Final</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
</project>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue