keycloak-uncached
Changes
connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/DefaultMongoUpdaterProvider.java 3(+2 -1)
Details
diff --git a/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/DefaultMongoUpdaterProvider.java b/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/DefaultMongoUpdaterProvider.java
index 3ca2bff..fa75d6b 100644
--- a/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/DefaultMongoUpdaterProvider.java
+++ b/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/DefaultMongoUpdaterProvider.java
@@ -27,7 +27,8 @@ public class DefaultMongoUpdaterProvider implements MongoUpdaterProvider {
             Update1_1_0_Beta1.class,
             Update1_2_0_Beta1.class,
             Update1_2_0_CR1.class,
-            Update1_3_0.class
+            Update1_3_0.class,
+            Update1_4_0.class
     };
 
     @Override
                diff --git a/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_4_0.java b/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_4_0.java
new file mode 100644
index 0000000..b58d5a3
--- /dev/null
+++ b/connections/mongo-update/src/main/java/org/keycloak/connections/mongo/updater/impl/updates/Update1_4_0.java
@@ -0,0 +1,63 @@
+package org.keycloak.connections.mongo.updater.impl.updates;
+
+import java.util.HashSet;
+import java.util.Map;
+
+import com.mongodb.BasicDBList;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.representations.idm.IdentityProviderRepresentation;
+
+/**
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class Update1_4_0 extends Update {
+
+    @Override
+    public String getId() {
+        return "1.4.0";
+    }
+
+    @Override
+    public void update(KeycloakSession session) throws ClassNotFoundException {
+        deleteEntries("clientSessions");
+        deleteEntries("sessions");
+
+        // Remove warning
+        removeField("realms", "authenticators");
+
+        updateUserAttributes();
+    }
+
+    private void updateUserAttributes() {
+        DBCollection users = db.getCollection("users");
+        DBCursor usersCursor = users.find();
+
+        try {
+            while (usersCursor.hasNext()) {
+                BasicDBObject user = (BasicDBObject) usersCursor.next();
+
+                BasicDBObject attributes = (BasicDBObject) user.get("attributes");
+                if (attributes != null) {
+                    for (Map.Entry<String, Object> attr : new HashSet<>(attributes.entrySet())) {
+                        String attrName = attr.getKey();
+                        Object attrValue = attr.getValue();
+                        if (attrValue != null && attrValue instanceof String) {
+                            BasicDBList asList = new BasicDBList();
+                            asList.add(attrValue);
+                            attributes.put(attrName, asList);
+                        }
+                    }
+
+                    user.put("attributes", attributes);
+
+                    users.save(user);
+                }
+            }
+        } finally {
+            usersCursor.close();
+        }
+    }
+}
                diff --git a/model/api/src/main/java/org/keycloak/migration/ModelVersion.java b/model/api/src/main/java/org/keycloak/migration/ModelVersion.java
index d866320..93e7798 100755
--- a/model/api/src/main/java/org/keycloak/migration/ModelVersion.java
+++ b/model/api/src/main/java/org/keycloak/migration/ModelVersion.java
@@ -56,9 +56,24 @@ public class ModelVersion {
     }
 
     public boolean lessThan(ModelVersion version) {
-        if (major < version.major) return true;
-        if (minor < version.minor) return true;
-        if (micro < version.micro) return true;
+        if (major < version.major) {
+            return true;
+        } else if (major > version.major) {
+            return false;
+        }
+
+        if (minor < version.minor) {
+            return true;
+        } else if (minor > version.minor) {
+            return false;
+        }
+
+        if (micro < version.micro) {
+            return true;
+        } else if (minor > version.minor) {
+            return false;
+        }
+
         if (qualifier != null && qualifier.equals(version.qualifier)) return false;
         if (qualifier == null) return false;
         if (version.qualifier == null) return true;
                diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/MigrationVersionTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/MigrationVersionTest.java
index e119c03..4e5039a 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/MigrationVersionTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/MigrationVersionTest.java
@@ -21,10 +21,12 @@ public class MigrationVersionTest {
         ModelVersion version_110Beta1 = new ModelVersion("1.1.0.Beta1");
         ModelVersion version_110CR1 = new ModelVersion("1.1.0.CR1");
         ModelVersion version_110 = new ModelVersion("1.1.0");
-        ModelVersion version_111Beta1 = new ModelVersion("1.1.1.Beta1");
-        ModelVersion version_111CR1 = new ModelVersion("1.1.1.CR1");
-        ModelVersion version_111 = new ModelVersion("1.1.1");
-        ModelVersion version_211Beta1 = new ModelVersion("2.1.1.Beta1");
+
+        ModelVersion version_120CR1 = new ModelVersion("1.2.0.CR1");
+        ModelVersion version_130Beta1 = new ModelVersion("1.3.0.Beta1");
+        ModelVersion version_130 = new ModelVersion("1.3.0");
+        ModelVersion version_140 = new ModelVersion("1.4.0");
+
         ModelVersion version_211CR1 = new ModelVersion("2.1.1.CR1");
         Assert.assertEquals(version_211CR1.getMajor(), 2);
         Assert.assertEquals(version_211CR1.getMinor(), 1);
@@ -38,6 +40,12 @@ public class MigrationVersionTest {
         Assert.assertTrue(version_100Beta1.lessThan(version_110Beta1));
         Assert.assertTrue(version_100Beta1.lessThan(version_110CR1));
         Assert.assertTrue(version_100Beta1.lessThan(version_110));
+        Assert.assertFalse(version_110Beta1.lessThan(version_100CR1));
+        Assert.assertFalse(version_130Beta1.lessThan(version_120CR1));
+        Assert.assertTrue(version_130Beta1.lessThan(version_130));
+        Assert.assertTrue(version_130Beta1.lessThan(version_140));
+        Assert.assertFalse(version_211CR1.lessThan(version_140));
+        Assert.assertTrue(version_140.lessThan(version_211CR1));
 
         Assert.assertFalse(version_211.lessThan(version_110CR1));