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));