keycloak-uncached

KEYCLOAK-1549 Mongo migration

7/25/2015 3:58:05 AM

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();
+        }
+    }
+}