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