diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java index a072c75cc6..1a24530d77 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java @@ -83,12 +83,12 @@ public class JpaKeycloakSession implements KeycloakSession { adapter.removeApplication(a.getId()); } + em.createQuery("delete from " + OAuthClientEntity.class.getSimpleName() + " where realm = :realm").setParameter("realm", realm).executeUpdate(); + for (UserEntity u : em.createQuery("from UserEntity", UserEntity.class).getResultList()) { adapter.removeUser(u.getLoginName()); } - em.createQuery("delete from " + OAuthClientEntity.class.getSimpleName() + " where realm = :realm").setParameter("realm", realm).executeUpdate(); - em.remove(realm); return true; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/AbstractRoleMappingEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/AbstractRoleMappingEntity.java index c8404531bf..101d558fc9 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/AbstractRoleMappingEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/AbstractRoleMappingEntity.java @@ -1,11 +1,12 @@ package org.keycloak.models.jpa.entities; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.MappedSuperclass; +import org.hibernate.annotations.GenericGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -13,18 +14,19 @@ import javax.persistence.MappedSuperclass; @MappedSuperclass public class AbstractRoleMappingEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - protected long id; + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") + protected String id; @ManyToOne protected UserEntity user; @ManyToOne protected RoleEntity role; - public long getId() { + public String getId() { return id; } - public void setId(long id) { + public void setId(String id) { this.id = id; } diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ApplicationEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ApplicationEntity.java index 667fd483d1..5da99fceff 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ApplicationEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/ApplicationEntity.java @@ -4,7 +4,6 @@ import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinTable; import javax.persistence.OneToMany; @@ -12,6 +11,8 @@ import javax.persistence.OneToOne; import java.util.ArrayList; import java.util.Collection; +import org.hibernate.annotations.GenericGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -19,7 +20,8 @@ import java.util.Collection; @Entity public class ApplicationEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") private String id; private String name; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/CredentialEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/CredentialEntity.java index ec110b8d7c..e42eefe7f7 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/CredentialEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/CredentialEntity.java @@ -2,12 +2,13 @@ package org.keycloak.models.jpa.entities; import javax.persistence.Entity; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import org.hibernate.annotations.GenericGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -18,7 +19,8 @@ import javax.persistence.NamedQuery; @Entity public class CredentialEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") protected String id; protected String type; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/OAuthClientEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/OAuthClientEntity.java index 9d440c309e..d266ed7502 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/OAuthClientEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/OAuthClientEntity.java @@ -3,13 +3,14 @@ package org.keycloak.models.jpa.entities; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToOne; +import org.hibernate.annotations.GenericGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -22,7 +23,8 @@ import javax.persistence.OneToOne; @Entity public class OAuthClientEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") private String id; private String name; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RequiredCredentialEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RequiredCredentialEntity.java index 8a35808169..94870224a5 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RequiredCredentialEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RequiredCredentialEntity.java @@ -2,9 +2,10 @@ package org.keycloak.models.jpa.entities; import javax.persistence.Entity; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; +import org.hibernate.annotations.GenericGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -12,7 +13,8 @@ import javax.persistence.Id; @Entity public class RequiredCredentialEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") protected String id; protected String type; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java index 1c21d125cc..acb40c9d23 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java @@ -3,7 +3,6 @@ package org.keycloak.models.jpa.entities; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; @@ -13,6 +12,8 @@ import javax.persistence.OneToMany; import java.util.ArrayList; import java.util.Collection; +import org.hibernate.annotations.GenericGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -21,7 +22,8 @@ import java.util.Collection; @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public abstract class RoleEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") private String id; private String name; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/SocialLinkEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/SocialLinkEntity.java index ccc0a592bc..9063948673 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/SocialLinkEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/SocialLinkEntity.java @@ -8,6 +8,9 @@ import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import org.hibernate.annotations.GenericGenerator; +import org.keycloak.models.jpa.utils.JpaIdGenerator; + /** * @author Bill Burke * @version $Revision: 1 $ @@ -20,8 +23,11 @@ import javax.persistence.NamedQuery; @Entity public class SocialLinkEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; + @GenericGenerator(name="keycloak_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "keycloak_generator") + private String id; + + private String str = JpaIdGenerator.class.getName(); @ManyToOne private UserEntity user; @@ -32,11 +38,11 @@ public class SocialLinkEntity { protected String socialProvider; protected String socialUsername; - public long getId() { + public String getId() { return id; } - public void setId(long id) { + public void setId(String id) { this.id = id; } diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserEntity.java index bcddabd47c..04af485bf8 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/UserEntity.java @@ -1,5 +1,6 @@ package org.keycloak.models.jpa.entities; +import org.hibernate.annotations.GenericGenerator; import org.keycloak.models.UserModel; import javax.persistence.CascadeType; @@ -35,7 +36,8 @@ import java.util.Set; @Entity public class UserEntity { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name="uuid_generator", strategy="org.keycloak.models.jpa.utils.JpaIdGenerator") + @GeneratedValue(generator = "uuid_generator") protected String id; protected String loginName; diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/utils/JpaIdGenerator.java b/model/jpa/src/main/java/org/keycloak/models/jpa/utils/JpaIdGenerator.java new file mode 100644 index 0000000000..6fc10e854b --- /dev/null +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/utils/JpaIdGenerator.java @@ -0,0 +1,19 @@ +package org.keycloak.models.jpa.utils; + +import java.io.Serializable; + +import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.id.IdentifierGenerator; +import org.keycloak.models.utils.KeycloakModelUtils; + +/** + * @author Marek Posolda + */ +public class JpaIdGenerator implements IdentifierGenerator { + + @Override + public Serializable generate(SessionImplementor session, Object object) throws HibernateException { + return KeycloakModelUtils.generateId(); + } +} diff --git a/model/tests/src/test/java/org/keycloak/model/test/CompositeRolesModelTest.java b/model/tests/src/test/java/org/keycloak/model/test/CompositeRolesModelTest.java index 1baf83e0a9..ec14411199 100644 --- a/model/tests/src/test/java/org/keycloak/model/test/CompositeRolesModelTest.java +++ b/model/tests/src/test/java/org/keycloak/model/test/CompositeRolesModelTest.java @@ -28,48 +28,29 @@ public class CompositeRolesModelTest extends AbstractModelTest { } @Test - public void testAppComposites() { + public void testComposites() { Set requestedRoles = getRequestedRoles("APP_COMPOSITE_APPLICATION", "APP_COMPOSITE_USER"); - Assert.assertEquals(2, requestedRoles.size()); assertContains("APP_ROLE_APPLICATION", "APP_ROLE_1", requestedRoles); assertContains("realm", "REALM_ROLE_1", requestedRoles); - } - - @Test - public void testRealmAppComposites() { - Set requestedRoles = getRequestedRoles("APP_COMPOSITE_APPLICATION", "REALM_APP_COMPOSITE_USER"); + requestedRoles = getRequestedRoles("APP_COMPOSITE_APPLICATION", "REALM_APP_COMPOSITE_USER"); Assert.assertEquals(1, requestedRoles.size()); assertContains("APP_ROLE_APPLICATION", "APP_ROLE_1", requestedRoles); - } - - @Test - public void testRealmOnlyWithUserCompositeAppComposite() throws Exception { - Set requestedRoles = getRequestedRoles("REALM_COMPOSITE_1_APPLICATION", "REALM_COMPOSITE_1_USER"); + requestedRoles = getRequestedRoles("REALM_COMPOSITE_1_APPLICATION", "REALM_COMPOSITE_1_USER"); Assert.assertEquals(1, requestedRoles.size()); assertContains("realm", "REALM_COMPOSITE_1", requestedRoles); - } - @Test - public void testRealmOnlyWithUserCompositeAppRole() throws Exception { - Set requestedRoles = getRequestedRoles("REALM_ROLE_1_APPLICATION", "REALM_COMPOSITE_1_USER"); + requestedRoles = getRequestedRoles("REALM_ROLE_1_APPLICATION", "REALM_COMPOSITE_1_USER"); + Assert.assertEquals(1, requestedRoles.size()); + assertContains("realm", "REALM_ROLE_1", requestedRoles); + requestedRoles = getRequestedRoles("REALM_COMPOSITE_1_APPLICATION", "REALM_ROLE_1_USER"); Assert.assertEquals(1, requestedRoles.size()); assertContains("realm", "REALM_ROLE_1", requestedRoles); } - @Test - public void testRealmOnlyWithUserRoleAppComposite() throws Exception { - Set requestedRoles = getRequestedRoles("REALM_COMPOSITE_1_APPLICATION", "REALM_ROLE_1_USER"); - - Assert.assertEquals(1, requestedRoles.size()); - assertContains("realm", "REALM_ROLE_1", requestedRoles); - } - - // TODO: more tests... - // Same algorithm as in TokenManager.createAccessCode private Set getRequestedRoles(String applicationName, String username) { Set requestedRoles = new HashSet(); diff --git a/pom.xml b/pom.xml index 21f7d6cb1d..8e5632ef9e 100755 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ 5.1.29 9.3-1100-jdbc41 1.6.1 + 1.4.01 5.1.25 1.6.1 7.1.1.Final @@ -325,6 +326,11 @@ dom4j ${dom4j.version} + + xml-apis + xml-apis + ${xml-apis.version} + org.slf4j slf4j-api @@ -561,7 +567,6 @@ mysql mysql-connector-java ${mysql.version} - test @@ -579,8 +584,7 @@ org.postgresql postgresql - postgresql.version - test + ${postgresql.version} diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml index d668ee8389..d1d1d5ad20 100755 --- a/testsuite/integration/pom.xml +++ b/testsuite/integration/pom.xml @@ -232,12 +232,10 @@ com.h2database h2 - 1.3.161 org.hibernate hibernate-entitymanager - 3.6.6.Final com.icegreen @@ -247,6 +245,10 @@ org.seleniumhq.selenium selenium-java + + xml-apis + xml-apis + org.seleniumhq.selenium selenium-chrome-driver