keycloak-uncached

Merge pull request #1503 from mposolda/master KEYCLOAK-1549

7/24/2015 6:29:28 PM

Details

diff --git a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_4_0_Final.java b/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_4_0_Final.java
new file mode 100644
index 0000000..1f60d6b
--- /dev/null
+++ b/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/JpaUpdate1_4_0_Final.java
@@ -0,0 +1,54 @@
+package org.keycloak.connections.jpa.updater.liquibase.custom;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import liquibase.datatype.DataTypeFactory;
+import liquibase.exception.CustomChangeException;
+import liquibase.statement.core.InsertStatement;
+import liquibase.statement.core.UpdateStatement;
+import liquibase.structure.core.Table;
+import org.keycloak.models.utils.KeycloakModelUtils;
+
+/**
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class JpaUpdate1_4_0_Final extends CustomKeycloakTask {
+
+    @Override
+    protected void generateStatementsImpl() throws CustomChangeException {
+        String userAttributeTableName = database.correctObjectName("USER_ATTRIBUTE", Table.class);
+
+        try {
+            PreparedStatement statement = jdbcConnection.prepareStatement("select NAME, USER_ID from USER_ATTRIBUTE");
+
+            try {
+                ResultSet resultSet = statement.executeQuery();
+                try {
+                    while (resultSet.next()) {
+                        String name = resultSet.getString(1);
+                        String userId = resultSet.getString(2);
+
+                        UpdateStatement updateStatement = new UpdateStatement(null, null, userAttributeTableName)
+                                .addNewColumnValue("ID", KeycloakModelUtils.generateId())
+                                .setWhereClause("NAME='" + name + "' AND USER_ID='" + userId + "'");
+                        statements.add(updateStatement);
+                    }
+                } finally {
+                    resultSet.close();
+                }
+            } finally {
+                statement.close();
+            }
+
+            confirmationMessage.append("Updated " + statements.size() + " attributes in USER_ATTRIBUTE table");
+        } catch (Exception e) {
+            throw new CustomChangeException(getTaskId() + ": Exception when updating data from previous version", e);
+        }
+    }
+
+    @Override
+    protected String getTaskId() {
+        return "Update 1.4.0.Final";
+    }
+}
diff --git a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml
index 4c7052b..9258db7 100755
--- a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml
+++ b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.2.0.Beta1.xml
@@ -156,9 +156,9 @@
 
         <!-- Remove obsolete 'social' and 'claims' stuff -->
         <dropForeignKeyConstraint baseTableName="USER_SOCIAL_LINK" constraintName="FK_68CJYS5UWM55UY823Y75XG4OM" />
-        <dropTable tableName="USER_SOCIAL_LINK" />
+        <dropTable tableName="USER_SOCIAL_LINK" cascadeConstraints="true" />
         <dropForeignKeyConstraint baseTableName="REALM_SOCIAL_CONFIG" constraintName="FK_SV5I3C2TI7G0G922FGE683SOV" />
-        <dropTable tableName="REALM_SOCIAL_CONFIG" />
+        <dropTable tableName="REALM_SOCIAL_CONFIG" cascadeConstraints="true" />
         <dropColumn tableName="CLIENT" columnName="ALLOWED_CLAIMS_MASK" />
 
         <createTable tableName="REALM_ENABLED_EVENT_TYPES">
diff --git a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.4.0.xml b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.4.0.xml
index d3cd6c4..312a1f9 100755
--- a/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.4.0.xml
+++ b/connections/jpa-liquibase/src/main/resources/META-INF/jpa-changelog-1.4.0.xml
@@ -39,7 +39,7 @@
             </column>
         </addColumn>
         <addColumn tableName="USER_ATTRIBUTE">
-            <column name="ID" type="VARCHAR(36)">
+            <column name="ID" type="VARCHAR(36)" defaultValue="sybase-needs-something-here">
                 <constraints nullable="false"/>
             </column>
         </addColumn>
@@ -132,6 +132,8 @@
             </column>
         </createTable>
 
+        <customChange class="org.keycloak.connections.jpa.updater.liquibase.custom.JpaUpdate1_4_0_Final"/>
+
         <dropPrimaryKey constraintName="CONSTRAINT_6" tableName="USER_ATTRIBUTE"/>
         <addPrimaryKey columnNames="ID" constraintName="CONSTRAINT_USER_ATTRIBUTE_PK" tableName="USER_ATTRIBUTE"/>
         <addPrimaryKey columnNames="ID" constraintName="CONSTRAINT_REQ_ACT_PRV_PK" tableName="REQUIRED_ACTION_PROVIDER"/>
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html
index b60d904..9147e09 100644
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html
@@ -51,13 +51,6 @@
 
         <div class="form-group">
             <div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageRealm">
-                <button kc-save>Save</button>
-                <button kc-cancel data-ng-click="cancel()">Cancel</button>
-            </div>
-        </div>
-
-        <div class="form-group">
-            <div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageRealm">
                 <button kc-save  data-ng-show="changed">Save</button>
                 <button kc-reset data-ng-disabled="!changed">Clear changes</button>
             </div>
diff --git a/model/api/src/main/java/org/keycloak/migration/migrators/MigrateTo1_4_0.java b/model/api/src/main/java/org/keycloak/migration/migrators/MigrateTo1_4_0.java
index 5a8a6e0..daf8fe9 100755
--- a/model/api/src/main/java/org/keycloak/migration/migrators/MigrateTo1_4_0.java
+++ b/model/api/src/main/java/org/keycloak/migration/migrators/MigrateTo1_4_0.java
@@ -4,11 +4,13 @@ import org.keycloak.migration.ModelVersion;
 import org.keycloak.models.ImpersonationConstants;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.RealmModel;
+import org.keycloak.models.UserFederationMapperModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.models.utils.DefaultAuthenticationFlows;
 import org.keycloak.models.utils.DefaultRequiredActions;
 import org.keycloak.models.utils.KeycloakModelUtils;
 
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -26,12 +28,24 @@ public class MigrateTo1_4_0 {
                 DefaultRequiredActions.addActions(realm);
             }
             ImpersonationConstants.setupImpersonationService(session, realm);
+
+            migrateLDAPMappers(session, realm);
             migrateUsers(session, realm);
         }
 
     }
 
-    public void migrateUsers(KeycloakSession session, RealmModel realm) {
+    private void migrateLDAPMappers(KeycloakSession session, RealmModel realm) {
+        List<String> mandatoryInLdap = Arrays.asList("username", "username-cn", "first name", "last name");
+        for (UserFederationMapperModel ldapMapper : realm.getUserFederationMappers()) {
+            if (mandatoryInLdap.contains(ldapMapper.getName())) {
+                ldapMapper.getConfig().put("is.mandatory.in.ldap", "true");
+                realm.updateUserFederationMapper(ldapMapper);
+            }
+        }
+    }
+
+    private void migrateUsers(KeycloakSession session, RealmModel realm) {
         List<UserModel> users = session.userStorage().getUsers(realm, false);
         for (UserModel user : users) {
             String email = user.getEmail();