keycloak-uncached
Changes
audit/jpa/pom.xml 17(+0 -17)
audit/mongo/pom.xml 91(+0 -91)
audit/pom.xml 1(+0 -1)
connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java 3(+2 -1)
connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java 3(+2 -1)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java 16(+14 -2)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java 2(+1 -1)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java 5(+3 -2)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java 6(+6 -0)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java 2(+1 -1)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java 5(+3 -2)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java 9(+8 -1)
model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java 4(+2 -2)
model/jpa/pom.xml 51(+0 -51)
model/mongo/pom.xml 129(+0 -129)
model/pom.xml 7(+0 -7)
testsuite/integration/pom.xml 57(+44 -13)
testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java 134(+134 -0)
testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java 2(+1 -1)
testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java 5(+2 -3)
testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthenticationManagerTest.java 25(+10 -15)
testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthProvidersConfigTest.java 4(+2 -2)
testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthProvidersExternalModelTest.java 2(+1 -1)
testsuite/integration/src/test/java/org/keycloak/testsuite/model/AuthProvidersLDAPTest.java 8(+3 -5)
testsuite/integration/src/test/java/org/keycloak/testsuite/model/CompositeRolesModelTest.java 10(+5 -5)
Details
audit/jpa/pom.xml 17(+0 -17)
diff --git a/audit/jpa/pom.xml b/audit/jpa/pom.xml
index 08df5b9..dd725b8 100755
--- a/audit/jpa/pom.xml
+++ b/audit/jpa/pom.xml
@@ -38,12 +38,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-audit-tests</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<scope>provided</scope>
@@ -64,16 +58,5 @@
<artifactId>jackson-core-asl</artifactId>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
-
</project>
audit/mongo/pom.xml 91(+0 -91)
diff --git a/audit/mongo/pom.xml b/audit/mongo/pom.xml
index 3f40488..e928784 100755
--- a/audit/mongo/pom.xml
+++ b/audit/mongo/pom.xml
@@ -38,12 +38,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-audit-tests</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
@@ -53,90 +47,5 @@
<artifactId>mongo-java-driver</artifactId>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
-
- <properties>
- <keycloak.audit.mongo.host>localhost</keycloak.audit.mongo.host>
- <keycloak.audit.mongo.port>27018</keycloak.audit.mongo.port>
- <keycloak.audit.mongo.db>keycloak</keycloak.audit.mongo.db>
- <keycloak.audit.mongo.clearOnStartup>true</keycloak.audit.mongo.clearOnStartup>
- <keycloak.audit.mongo.bindIp>127.0.0.1</keycloak.audit.mongo.bindIp>
- </properties>
-
- <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>
-
- <!-- Postpone tests to "integration-test" phase, so that we can bootstrap embedded mongo on 27018 before running tests -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <executions>
- <execution>
- <id>test</id>
- <phase>integration-test</phase>
- <goals>
- <goal>test</goal>
- </goals>
- <configuration>
- <systemPropertyVariables>
- <keycloak.audit.mongo.host>${keycloak.audit.mongo.host}</keycloak.audit.mongo.host>
- <keycloak.audit.mongo.port>${keycloak.audit.mongo.port}</keycloak.audit.mongo.port>
- <keycloak.audit.mongo.db>${keycloak.audit.mongo.db}</keycloak.audit.mongo.db>
- <keycloak.audit.mongo.clearOnStartup>${keycloak.audit.mongo.clearOnStartup}</keycloak.audit.mongo.clearOnStartup>
- <keycloak.audit.mongo.bindIp>${keycloak.model.mongo.bindIp}</keycloak.audit.mongo.bindIp>
- </systemPropertyVariables>
- </configuration>
- </execution>
- <execution>
- <id>default-test</id>
- <configuration>
- <skip>true</skip>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
- <!-- Embedded mongo -->
- <plugin>
- <groupId>com.github.joelittlejohn.embedmongo</groupId>
- <artifactId>embedmongo-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>start-mongodb</id>
- <phase>pre-integration-test</phase>
- <goals>
- <goal>start</goal>
- </goals>
- <configuration>
- <port>${keycloak.audit.mongo.port}</port>
- <logging>file</logging>
- <logFile>${project.build.directory}/mongodb.log</logFile>
- <bindIp>${keycloak.audit.mongo.bindIp}</bindIp>
- </configuration>
- </execution>
- <execution>
- <id>stop-mongodb</id>
- <phase>post-integration-test</phase>
- <goals>
- <goal>stop</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
</project>
audit/pom.xml 1(+0 -1)
diff --git a/audit/pom.xml b/audit/pom.xml
index b6ae9e3..0f210d3 100755
--- a/audit/pom.xml
+++ b/audit/pom.xml
@@ -21,6 +21,5 @@
<module>jpa</module>
<module>jboss-logging</module>
<module>mongo</module>
- <module>tests</module>
</modules>
</project>
diff --git a/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java b/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
index 2b40f80..cea49ff 100644
--- a/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
+++ b/connections/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
@@ -31,7 +31,8 @@ public class DefaultMongoConnectionFactoryProvider implements MongoConnectionPro
"org.keycloak.models.mongo.keycloak.entities.MongoApplicationEntity",
"org.keycloak.models.mongo.keycloak.entities.MongoOAuthClientEntity",
"org.keycloak.models.sessions.mongo.entities.MongoUsernameLoginFailureEntity",
- "org.keycloak.models.sessions.mongo.entities.MongoUserSessionEntity"
+ "org.keycloak.models.sessions.mongo.entities.MongoUserSessionEntity",
+ "org.keycloak.models.entities.FederationProviderEntity"
};
private static final Logger logger = Logger.getLogger(DefaultMongoConnectionFactoryProvider.class);
diff --git a/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java b/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java
index 41dc75c..513a7fc 100755
--- a/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java
+++ b/connections/mongo/src/main/java/org/keycloak/connections/mongo/impl/types/MongoEntityMapper.java
@@ -1,6 +1,7 @@
package org.keycloak.connections.mongo.impl.types;
import com.mongodb.BasicDBObject;
+import org.keycloak.connections.mongo.api.MongoIdentifiableEntity;
import org.keycloak.connections.mongo.api.types.Mapper;
import org.keycloak.connections.mongo.api.types.MapperContext;
import org.keycloak.connections.mongo.api.types.MapperRegistry;
@@ -38,7 +39,7 @@ public class MongoEntityMapper<T> implements Mapper<T, BasicDBObject> {
String propName = property.getName();
// Ignore "id" property
- if (!"id".equals(propName)) {
+ if (!"id".equals(propName) || !(applicationObject instanceof MongoIdentifiableEntity)) {
Object propValue = property.getValue(applicationObject);
if (propValue != null) {
Object dbValue = propValue == null ? null : mapperRegistry.convertApplicationObjectToDBObject(propValue, Object.class);
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java
index 57f3f90..dfbd165 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/DefaultCacheRealmProvider.java
@@ -243,14 +243,18 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
public RoleModel getRoleById(String id, RealmModel realm) {
if (!cache.isEnabled()) return getDelegate().getRoleById(id, realm);
CachedRole cached = cache.getRole(id);
+ if (cached != null && !cached.getRealm().equals(realm.getId())) {
+ cached = null;
+ }
+
if (cached == null) {
RoleModel model = getDelegate().getRoleById(id, realm);
if (model == null) return null;
if (roleInvalidations.contains(id)) return model;
if (model.getContainer() instanceof ApplicationModel) {
- cached = new CachedApplicationRole(((ApplicationModel) model.getContainer()).getId(), model);
+ cached = new CachedApplicationRole(((ApplicationModel) model.getContainer()).getId(), model, realm);
} else {
- cached = new CachedRealmRole(model);
+ cached = new CachedRealmRole(model, realm);
}
cache.addCachedRole(cached);
@@ -268,6 +272,10 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
public ApplicationModel getApplicationById(String id, RealmModel realm) {
if (!cache.isEnabled()) return getDelegate().getApplicationById(id, realm);
CachedApplication cached = cache.getApplication(id);
+ if (cached != null && !cached.getRealm().equals(realm.getId())) {
+ cached = null;
+ }
+
if (cached == null) {
ApplicationModel model = getDelegate().getApplicationById(id, realm);
if (model == null) return null;
@@ -288,6 +296,10 @@ public class DefaultCacheRealmProvider implements CacheRealmProvider {
public OAuthClientModel getOAuthClientById(String id, RealmModel realm) {
if (!cache.isEnabled()) return getDelegate().getOAuthClientById(id, realm);
CachedOAuthClient cached = cache.getOAuthClient(id);
+ if (cached != null && !cached.getRealm().equals(realm.getId())) {
+ cached = null;
+ }
+
if (cached == null) {
OAuthClientModel model = getDelegate().getOAuthClientById(id, realm);
if (model == null) return null;
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java
index 3ccacbf..db0e1c0 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplication.java
@@ -32,7 +32,7 @@ public class CachedApplication extends CachedClient {
bearerOnly = model.isBearerOnly();
for (RoleModel role : model.getRoles()) {
roles.put(role.getName(), role.getId());
- cache.addCachedRole(new CachedApplicationRole(id, role));
+ cache.addCachedRole(new CachedApplicationRole(id, role, realm));
}
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java
index 269fba9..da0451c 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedApplicationRole.java
@@ -1,5 +1,6 @@
package org.keycloak.models.cache.entities;
+import org.keycloak.models.RealmModel;
import org.keycloak.models.RoleModel;
/**
@@ -9,8 +10,8 @@ import org.keycloak.models.RoleModel;
public class CachedApplicationRole extends CachedRole {
private final String appId;
- public CachedApplicationRole(String appId, RoleModel model) {
- super(model);
+ public CachedApplicationRole(String appId, RoleModel model, RealmModel realm) {
+ super(model, realm);
this.appId = appId;
}
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java
index feabb45..8e4b008 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedClient.java
@@ -16,6 +16,7 @@ import java.util.Set;
public class CachedClient {
protected String id;
protected String name;
+ protected String realm;
protected long allowedClaimsMask;
protected Set<String> redirectUris = new HashSet<String>();
protected boolean enabled;
@@ -30,6 +31,7 @@ public class CachedClient {
id = model.getId();
secret = model.getSecret();
name = model.getClientId();
+ this.realm = realm.getId();
enabled = model.isEnabled();
notBefore = model.getNotBefore();
directGrantsOnly = model.isDirectGrantsOnly();
@@ -51,6 +53,10 @@ public class CachedClient {
return name;
}
+ public String getRealm() {
+ return realm;
+ }
+
public long getAllowedClaimsMask() {
return allowedClaimsMask;
}
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
index 507cef4..cfd6018 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealm.java
@@ -136,7 +136,7 @@ public class CachedRealm {
for (RoleModel role : model.getRoles()) {
realmRoles.put(role.getName(), role.getId());
- CachedRole cachedRole = new CachedRealmRole(role);
+ CachedRole cachedRole = new CachedRealmRole(role, model);
cache.addCachedRole(cachedRole);
}
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java
index f1f34dc..e34478e 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRealmRole.java
@@ -1,5 +1,6 @@
package org.keycloak.models.cache.entities;
+import org.keycloak.models.RealmModel;
import org.keycloak.models.RoleModel;
/**
@@ -9,8 +10,8 @@ import org.keycloak.models.RoleModel;
public class CachedRealmRole extends CachedRole {
- public CachedRealmRole(RoleModel model) {
- super(model);
+ public CachedRealmRole(RoleModel model, RealmModel realm) {
+ super(model, realm);
}
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java
index ed451e2..d52d0ff 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/entities/CachedRole.java
@@ -1,5 +1,6 @@
package org.keycloak.models.cache.entities;
+import org.keycloak.models.RealmModel;
import org.keycloak.models.RoleModel;
import java.util.HashSet;
@@ -12,15 +13,17 @@ import java.util.Set;
public class CachedRole {
final protected String id;
final protected String name;
+ final protected String realm;
final protected String description;
final protected boolean composite;
final protected Set<String> composites = new HashSet<String>();
- public CachedRole(RoleModel model) {
+ public CachedRole(RoleModel model, RealmModel realm) {
composite = model.isComposite();
description = model.getDescription();
id = model.getId();
name = model.getName();
+ this.realm = realm.getId();
if (composite) {
for (RoleModel child : model.getComposites()) {
composites.add(child.getId());
@@ -37,6 +40,10 @@ public class CachedRole {
return name;
}
+ public String getRealm() {
+ return realm;
+ }
+
public String getDescription() {
return description;
}
diff --git a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
index b4fa0c8..deed00b 100755
--- a/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
+++ b/model/invalidation-cache/model-adapters/src/main/java/org/keycloak/models/cache/RealmAdapter.java
@@ -1,5 +1,6 @@
package org.keycloak.models.cache;
+import org.keycloak.Config;
import org.keycloak.models.ApplicationModel;
import org.keycloak.models.AuthenticationProviderModel;
import org.keycloak.models.ClientModel;
@@ -726,8 +727,7 @@ public class RealmAdapter implements RealmModel {
@Override
public ApplicationModel getMasterAdminApp() {
- if (updated != null) return updated.getMasterAdminApp();
- return getApplicationById(cached.getMasterAdminApp());
+ return cacheSession.getRealm(Config.getAdminRealm()).getApplicationById(cached.getMasterAdminApp());
}
@Override
model/jpa/pom.xml 51(+0 -51)
diff --git a/model/jpa/pom.xml b/model/jpa/pom.xml
index 9a3e026..52c7db5 100755
--- a/model/jpa/pom.xml
+++ b/model/jpa/pom.xml
@@ -83,26 +83,6 @@
</exclusion>
</exclusions>
</dependency>
-
- <!--<dependency>-->
- <!--<groupId>org.keycloak</groupId>-->
- <!--<artifactId>keycloak-model-tests</artifactId>-->
- <!--<version>${project.version}</version>-->
- <!--<scope>test</scope>-->
- <!--</dependency>-->
- <!--<dependency>-->
- <!--<groupId>org.keycloak</groupId>-->
- <!--<artifactId>keycloak-model-tests</artifactId>-->
- <!--<version>${project.version}</version>-->
- <!--<classifier>tests</classifier>-->
- <!--<scope>test</scope>-->
- <!--</dependency>-->
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>test</scope>
- </dependency>
-
</dependencies>
<build>
<plugins>
@@ -114,37 +94,6 @@
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
-
- <!-- Test jar used in export-import -->
- <!--<plugin>-->
- <!--<groupId>org.apache.maven.plugins</groupId>-->
- <!--<artifactId>maven-jar-plugin</artifactId>-->
- <!--<executions>-->
- <!--<execution>-->
- <!--<id>package-tests-jar</id>-->
- <!--<phase>package</phase>-->
- <!--<goals>-->
- <!--<goal>test-jar</goal>-->
- <!--</goals>-->
- <!--</execution>-->
- <!--</executions>-->
- <!--</plugin>-->
-
- <!--<plugin>-->
- <!--<groupId>org.apache.maven.plugins</groupId>-->
- <!--<artifactId>maven-surefire-plugin</artifactId>-->
- <!--<executions>-->
- <!--<execution>-->
- <!--<id>default-test</id>-->
- <!--<configuration>-->
- <!--<dependenciesToScan>-->
- <!--<dependency>org.keycloak:keycloak-model-tests</dependency>-->
- <!--</dependenciesToScan>-->
- <!--</configuration>-->
- <!--</execution>-->
- <!--</executions>-->
- <!--</plugin>-->
-
</plugins>
</build>
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java
index 2d3ddbd..d2161e9 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserRequiredActionEntity.java
@@ -20,7 +20,7 @@ import java.io.Serializable;
* @version $Revision: 1 $
*/
@NamedQueries({
- @NamedQuery(name="deleteUserRequiredActionsByRealm", query="delete from UserRequiredActionEntity action where action.user IN (select u from UserEntity u where realm=:realm)")
+ @NamedQuery(name="deleteUserRequiredActionsByRealm", query="delete from UserRequiredActionEntity action where action.user IN (select u from UserEntity u where u.realmId=:realmId)")
})
@Entity
@Table(name="USER_REQUIRED_ACTION")
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java
index 24e6797..b93fdff 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaUserProvider.java
@@ -123,6 +123,8 @@ public class JpaUserProvider implements UserProvider {
public void preRemove(RealmModel realm) {
int num = em.createNamedQuery("deleteUserRoleMappingsByRealm")
.setParameter("realmId", realm.getId()).executeUpdate();
+ num = em.createNamedQuery("deleteUserRequiredActionsByRealm")
+ .setParameter("realmId", realm.getId()).executeUpdate();
num = em.createNamedQuery("deleteSocialLinkByRealm")
.setParameter("realmId", realm.getId()).executeUpdate();
num = em.createNamedQuery("deleteCredentialsByRealm")
model/mongo/pom.xml 129(+0 -129)
diff --git a/model/mongo/pom.xml b/model/mongo/pom.xml
index cdf80b3..c239f07 100755
--- a/model/mongo/pom.xml
+++ b/model/mongo/pom.xml
@@ -44,12 +44,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-invalidation-cache-model</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
@@ -59,128 +53,5 @@
<artifactId>mongo-java-driver</artifactId>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-model-sessions-mem</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
-
- </dependency>
- <dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-model-tests</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.resteasy</groupId>
- <artifactId>resteasy-jaxrs</artifactId>
- <scope>test</scope>
- <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.keycloak</groupId>-->
- <!--<artifactId>keycloak-model-tests</artifactId>-->
- <!--<version>${project.version}</version>-->
- <!--<classifier>tests</classifier>-->
- <!--<scope>test</scope>-->
- <!--</dependency>-->
</dependencies>
-
- <properties>
- <keycloak.model.mongo.host>localhost</keycloak.model.mongo.host>
- <keycloak.model.mongo.port>27018</keycloak.model.mongo.port>
- <keycloak.model.mongo.db>keycloak</keycloak.model.mongo.db>
- <keycloak.model.mongo.clearOnStartup>true</keycloak.model.mongo.clearOnStartup>
- <keycloak.model.mongo.bindIp>127.0.0.1</keycloak.model.mongo.bindIp>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>${maven.compiler.source}</source>
- <target>${maven.compiler.target}</target>
- </configuration>
- </plugin>
-
- <!-- Postpone tests to "integration-test" phase, so that we can bootstrap embedded mongo on 27018 before running tests -->
- <!--<plugin>-->
- <!--<groupId>org.apache.maven.plugins</groupId>-->
- <!--<artifactId>maven-surefire-plugin</artifactId>-->
- <!--<executions>-->
- <!--<execution>-->
- <!--<id>test</id>-->
- <!--<phase>integration-test</phase>-->
- <!--<goals>-->
- <!--<goal>test</goal>-->
- <!--</goals>-->
- <!--<configuration>-->
- <!--<systemPropertyVariables>-->
- <!--<keycloak.model.mongo.host>${keycloak.model.mongo.host}</keycloak.model.mongo.host>-->
- <!--<keycloak.model.mongo.port>${keycloak.model.mongo.port}</keycloak.model.mongo.port>-->
- <!--<keycloak.model.mongo.db>${keycloak.model.mongo.db}</keycloak.model.mongo.db>-->
- <!--<keycloak.model.mongo.clearOnStartup>${keycloak.model.mongo.clearOnStartup}</keycloak.model.mongo.clearOnStartup>-->
- <!--<keycloak.model.mongo.bindIp>${keycloak.model.mongo.bindIp}</keycloak.model.mongo.bindIp>-->
- <!--</systemPropertyVariables>-->
- <!--<dependenciesToScan>-->
- <!--<dependency>org.keycloak:keycloak-model-tests</dependency>-->
- <!--</dependenciesToScan>-->
- <!--</configuration>-->
- <!--</execution>-->
- <!--<execution>-->
- <!--<id>default-test</id>-->
- <!--<configuration>-->
- <!--<skip>true</skip>-->
- <!--</configuration>-->
- <!--</execution>-->
- <!--</executions>-->
- <!--</plugin>-->
-
- <!-- Embedded mongo -->
- <!--<plugin>-->
- <!--<groupId>com.github.joelittlejohn.embedmongo</groupId>-->
- <!--<artifactId>embedmongo-maven-plugin</artifactId>-->
- <!--<executions>-->
- <!--<execution>-->
- <!--<id>start-mongodb</id>-->
- <!--<phase>pre-integration-test</phase>-->
- <!--<goals>-->
- <!--<goal>start</goal>-->
- <!--</goals>-->
- <!--<configuration>-->
- <!--<port>${keycloak.model.mongo.port}</port>-->
- <!--<logging>file</logging>-->
- <!--<logFile>${project.build.directory}/mongodb.log</logFile>-->
- <!--<bindIp>${keycloak.model.mongo.bindIp}</bindIp>-->
- <!--</configuration>-->
- <!--</execution>-->
- <!--<execution>-->
- <!--<id>stop-mongodb</id>-->
- <!--<phase>post-integration-test</phase>-->
- <!--<goals>-->
- <!--<goal>stop</goal>-->
- <!--</goals>-->
- <!--</execution>-->
- <!--</executions>-->
- <!--</plugin>-->
-
- </plugins>
- </build>
</project>
\ No newline at end of file
model/pom.xml 7(+0 -7)
diff --git a/model/pom.xml b/model/pom.xml
index cc61acb..bfb162d 100755
--- a/model/pom.xml
+++ b/model/pom.xml
@@ -29,15 +29,8 @@
<module>invalidation-cache</module>
<module>jpa</module>
<module>mongo</module>
- <module>tests</module>
-
<module>sessions-jpa</module>
<module>sessions-mem</module>
<module>sessions-mongo</module>
-
- <!--<module>hybrid</module>-->
- <!--<module>realms-jpa</module>-->
- <!--<module>users-jpa</module>-->
- <!--<module>tests-hybrid</module>-->
</modules>
</project>
diff --git a/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java b/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java
index 6b972ce..7df23f2 100755
--- a/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java
+++ b/services/src/main/java/org/keycloak/services/managers/AuthenticationManager.java
@@ -301,16 +301,16 @@ public class AuthenticationManager {
if (!session.users().validCredentials(realm, user, UserCredentialModel.totp(token))) {
return AuthenticationStatus.INVALID_CREDENTIALS;
}
- } else {
- logger.debug("validating password for user: " + username);
+ }
- AuthProviderStatus authStatus = AuthenticationProviderManager.getManager(realm, session).validatePassword(user, password);
- if (authStatus == AuthProviderStatus.INVALID_CREDENTIALS) {
- logger.debug("invalid password for user: " + username);
- return AuthenticationStatus.INVALID_CREDENTIALS;
- } else if (authStatus == AuthProviderStatus.FAILED) {
- return AuthenticationStatus.FAILED;
- }
+ logger.debug("validating password for user: " + username);
+
+ AuthProviderStatus authStatus = AuthenticationProviderManager.getManager(realm, session).validatePassword(user, password);
+ if (authStatus == AuthProviderStatus.INVALID_CREDENTIALS) {
+ logger.debug("invalid password for user: " + username);
+ return AuthenticationStatus.INVALID_CREDENTIALS;
+ } else if (authStatus == AuthProviderStatus.FAILED) {
+ return AuthenticationStatus.FAILED;
}
if (!user.getRequiredActions().isEmpty()) {
testsuite/integration/pom.xml 57(+44 -13)
diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml
index 3aa1ffd..55fe1a0 100755
--- a/testsuite/integration/pom.xml
+++ b/testsuite/integration/pom.xml
@@ -30,7 +30,19 @@
<version>${project.version}</version>
<type>pom</type>
</dependency>
-
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
@@ -177,12 +189,16 @@
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
</dependency>
-
- <!-- This adds couple of other dependencies (like picketlink) -->
<dependency>
- <groupId>org.keycloak</groupId>
- <artifactId>keycloak-model-tests</artifactId>
- <version>${project.version}</version>
+ <groupId>org.picketbox</groupId>
+ <artifactId>picketbox-ldap</artifactId>
+ <scope>compile</scope>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.picketbox</groupId>
+ <artifactId>picketbox-ldap</artifactId>
+ <scope>compile</scope>
</dependency>
</dependencies>
<build>
@@ -257,13 +273,28 @@
</profile>
<profile>
+ <id>jpa</id>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <keycloak.realm.provider>jpa</keycloak.realm.provider>
+ <keycloak.user.provider>jpa</keycloak.user.provider>
+ <keycloak.audit.provider>jpa</keycloak.audit.provider>
+ <keycloak.userSessions.provider>jpa</keycloak.userSessions.provider>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
<id>mongo</id>
- <activation>
- <property>
- <name>keycloak.realm.provider</name>
- <value>mongo</value>
- </property>
- </activation>
<properties>
<keycloak.connectionsMongo.host>localhost</keycloak.connectionsMongo.host>
@@ -292,7 +323,7 @@
<keycloak.realm.provider>mongo</keycloak.realm.provider>
<keycloak.user.provider>mongo</keycloak.user.provider>
<keycloak.audit.provider>mongo</keycloak.audit.provider>
- <!--<keycloak.userSessions.provider>mongo</keycloak.userSessions.provider>-->
+ <keycloak.userSessions.provider>mongo</keycloak.userSessions.provider>
<keycloak.connectionsMongo.host>${keycloak.connectionsMongo.host}</keycloak.connectionsMongo.host>
<keycloak.connectionsMongo.port>${keycloak.connectionsMongo.port}</keycloak.connectionsMongo.port>
<keycloak.connectionsMongo.db>${keycloak.connectionsMongo.db}</keycloak.connectionsMongo.db>
diff --git a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
index 9c23dad..8e1ef4c 100755
--- a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
+++ b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
@@ -77,7 +77,7 @@
"host": "${keycloak.connectionsMongo.host:127.0.0.1}",
"port": "${keycloak.connectionsMongo.port:27017}",
"db": "${keycloak.connectionsMongo.db:keycloak}",
- "clearOnStartup": "${keycloak.connectionsMongo.clearOnStartup:false}"
+ "clearOnStartup": "${keycloak.connectionsMongo.clearOnStartup:true}"
}
}
}
\ No newline at end of file
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java
new file mode 100644
index 0000000..6c0c538
--- /dev/null
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/audit/AuditProviderTest.java
@@ -0,0 +1,134 @@
+package org.keycloak.testsuite.audit;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.keycloak.audit.AuditProvider;
+import org.keycloak.audit.Event;
+import org.keycloak.audit.EventType;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.testsuite.rule.KeycloakRule;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
+ */
+public class AuditProviderTest {
+
+ @ClassRule
+ public static KeycloakRule kc = new KeycloakRule();
+
+ private KeycloakSession session;
+
+ private AuditProvider audit;
+
+ @Before
+ public void before() {
+ session = kc.startSession();
+ audit = session.getProvider(AuditProvider.class);
+ }
+
+ @After
+ public void after() {
+ audit.clear();
+ kc.stopSession(session, true);
+ }
+
+ @Test
+ public void save() {
+ audit.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ }
+
+ @Test
+ public void query() {
+ long oldest = System.currentTimeMillis() - 30000;
+ long newest = System.currentTimeMillis() + 30000;
+
+ audit.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(newest, EventType.REGISTER, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(newest, EventType.REGISTER, "realmId", "clientId", "userId2", "127.0.0.1", "error"));
+ audit.onEvent(create(EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(oldest, EventType.LOGIN, "realmId", "clientId2", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(EventType.LOGIN, "realmId", "clientId", "userId2", "127.0.0.1", "error"));
+
+ resetSession();
+
+ Assert.assertEquals(5, audit.createQuery().client("clientId").getResultList().size());
+ Assert.assertEquals(5, audit.createQuery().realm("realmId").getResultList().size());
+ Assert.assertEquals(4, audit.createQuery().event(EventType.LOGIN).getResultList().size());
+ Assert.assertEquals(6, audit.createQuery().event(EventType.LOGIN, EventType.REGISTER).getResultList().size());
+ Assert.assertEquals(4, audit.createQuery().user("userId").getResultList().size());
+
+ Assert.assertEquals(1, audit.createQuery().user("userId").event(EventType.REGISTER).getResultList().size());
+
+ Assert.assertEquals(2, audit.createQuery().maxResults(2).getResultList().size());
+ Assert.assertEquals(1, audit.createQuery().firstResult(5).getResultList().size());
+
+ Assert.assertEquals(newest, audit.createQuery().maxResults(1).getResultList().get(0).getTime());
+ Assert.assertEquals(oldest, audit.createQuery().firstResult(5).maxResults(1).getResultList().get(0).getTime());
+ }
+
+ @Test
+ public void clear() {
+ audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis() - 20000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
+
+ resetSession();
+
+ audit.clear("realmId");
+
+ Assert.assertEquals(1, audit.createQuery().getResultList().size());
+ }
+
+ @Test
+ public void clearOld() {
+ audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis() - 20000, EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis(), EventType.LOGIN, "realmId", "clientId", "userId", "127.0.0.1", "error"));
+ audit.onEvent(create(System.currentTimeMillis() - 30000, EventType.LOGIN, "realmId2", "clientId", "userId", "127.0.0.1", "error"));
+
+ resetSession();
+
+ audit.clear("realmId", System.currentTimeMillis() - 10000);
+
+ Assert.assertEquals(3, audit.createQuery().getResultList().size());
+ }
+
+ private Event create(EventType event, String realmId, String clientId, String userId, String ipAddress, String error) {
+ return create(System.currentTimeMillis(), event, realmId, clientId, userId, ipAddress, error);
+ }
+
+ private Event create(long time, EventType event, String realmId, String clientId, String userId, String ipAddress, String error) {
+ Event e = new Event();
+ e.setTime(time);
+ e.setEvent(event);
+ e.setRealmId(realmId);
+ e.setClientId(clientId);
+ e.setUserId(userId);
+ e.setIpAddress(ipAddress);
+ e.setError(error);
+
+ Map<String, String> details = new HashMap<String, String>();
+ details.put("key1", "value1");
+ details.put("key2", "value2");
+
+ e.setDetails(details);
+
+ return e;
+ }
+
+ private void resetSession() {
+ kc.stopSession(session, true);
+ session = kc.startSession();
+ audit = session.getProvider(AuditProvider.class);
+ }
+
+}
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java
index ede84bf..49ac620 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/AuthProvidersIntegrationTest.java
@@ -9,7 +9,7 @@ import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
import org.junit.runners.MethodSorters;
import org.keycloak.OAuth2Constants;
-import org.keycloak.model.test.LDAPTestUtils;
+import org.keycloak.testsuite.LDAPTestUtils;
import org.keycloak.models.AuthenticationProviderModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.PasswordPolicy;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
index a2d0305..56221f8 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/FederationProvidersIntegrationTest.java
@@ -11,8 +11,8 @@ import org.junit.runners.MethodSorters;
import org.keycloak.OAuth2Constants;
import org.keycloak.authentication.AuthProviderConstants;
import org.keycloak.federation.ldap.LDAPFederationProviderFactory;
-import org.keycloak.model.test.LDAPEmbeddedServer;
-import org.keycloak.model.test.LDAPTestUtils;
+import org.keycloak.testsuite.LDAPEmbeddedServer;
+import org.keycloak.testsuite.LDAPTestUtils;
import org.keycloak.models.AuthenticationProviderModel;
import org.keycloak.models.FederationProviderModel;
import org.keycloak.models.KeycloakSession;
@@ -36,7 +36,6 @@ import org.keycloak.testsuite.rule.WebRule;
import org.openqa.selenium.WebDriver;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
index 6ff7436..da334fa 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
@@ -8,6 +8,7 @@ import io.undertow.servlet.api.WebResourceCollection;
import org.junit.rules.ExternalResource;
import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.models.utils.ModelToRepresentation;
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java
index 3409b0e..b2b4aae 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/LDAPRule.java
@@ -1,7 +1,7 @@
package org.keycloak.testsuite.rule;
import org.junit.rules.ExternalResource;
-import org.keycloak.model.test.LDAPEmbeddedServer;
+import org.keycloak.testsuite.LDAPEmbeddedServer;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>