From 5673fb34b11b3b4f4690a66abafd7cadda6f992f Mon Sep 17 00:00:00 2001 From: mposolda Date: Thu, 7 Aug 2014 17:33:48 +0200 Subject: [PATCH] Fix adding social link in mongo. Fixed export/import of federationProviders. Enhanced ExportImportTest --- .../exportimport/util/ExportUtils.java | 1 + .../exportimport/util/ImportUtils.java | 2 +- .../exportimport/dir/DirImportProvider.java | 5 +-- .../exportimport/zip/ZipImportProvider.java | 2 +- .../models/utils/ModelToRepresentation.java | 5 +-- .../keycloak/adapters/MongoUserProvider.java | 1 + .../exportimport/ExportImportTest.java | 32 ++++++++++++++----- .../keycloak/testsuite/model/ImportTest.java | 1 + 8 files changed, 31 insertions(+), 18 deletions(-) diff --git a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java index d36828093d02..e6b71ba7f08e 100755 --- a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java +++ b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ExportUtils.java @@ -71,6 +71,7 @@ public static RealmRepresentation exportRealm(KeycloakSession session, RealmMode List oauthClientReps = new ArrayList(); for (OAuthClientModel oauthClient : oauthClients) { OAuthClientRepresentation clientRep = ModelToRepresentation.toRepresentation(oauthClient); + clientRep.setSecret(oauthClient.getSecret()); oauthClientReps.add(clientRep); } rep.setOauthClients(oauthClientReps); diff --git a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java index 1425b361e2d9..755c34f6c058 100755 --- a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java +++ b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/ImportUtils.java @@ -182,7 +182,7 @@ public static void importUsersFromStream(KeycloakSession session, String realmNa parser.nextToken(); String currRealmName = parser.getText(); if (!currRealmName.equals(realmName)) { - throw new IllegalStateException("Trying to import users into invalid realm. Realm name: " + realmName + ", Expected realm name: " + realmName); + throw new IllegalStateException("Trying to import users into invalid realm. Realm name: " + realmName + ", Expected realm name: " + currRealmName); } } else if ("users".equals(parser.getText())) { parser.nextToken(); diff --git a/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirImportProvider.java b/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirImportProvider.java index 512004d38191..1c9f4848453b 100644 --- a/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirImportProvider.java +++ b/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirImportProvider.java @@ -5,9 +5,6 @@ import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; import java.util.List; import org.jboss.logging.Logger; @@ -86,7 +83,7 @@ public void importRealm(KeycloakSessionFactory factory, final String realmName, @Override public boolean accept(File dir, String name) { - return (name.startsWith(realmName)) && (name.endsWith(".json")) && (name.substring(realmName.length()).contains("-users-") ); + return name.matches(realmName + "-users-[0-9]+\\.json"); } }); diff --git a/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipImportProvider.java b/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipImportProvider.java index 6970e87899f7..50651794cc7f 100644 --- a/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipImportProvider.java +++ b/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipImportProvider.java @@ -94,7 +94,7 @@ public void run(KeycloakSession session) throws IOException { // Import users for (ExtZipEntry entry : this.decrypter.getEntryList()) { String name = entry.getName(); - if ( (name.startsWith(realmName)) && (name.endsWith(".json")) && (name.substring(realmName.length()).contains("-users-")) ) { + if (name.matches(realmName + "-users-[0-9]+\\.json")) { bos = new ByteArrayOutputStream(); this.decrypter.extractEntry(entry, bos, this.password); final ByteArrayInputStream bis2 = new ByteArrayInputStream(bos.toByteArray()); diff --git a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java index 9e19b75ce62f..7e183b7786f6 100755 --- a/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java +++ b/model/api/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java @@ -134,10 +134,7 @@ public static RealmRepresentation toRepresentation(RealmModel realm) { if (fedProviderModels.size() > 0) { List fedProviderReps = new ArrayList(); for (UserFederationProviderModel model : fedProviderModels) { - UserFederationProviderRepresentation fedProvRep = new UserFederationProviderRepresentation(); - fedProvRep.setId(model.getId()); - fedProvRep.setProviderName(model.getProviderName()); - fedProvRep.setConfig(model.getConfig()); + UserFederationProviderRepresentation fedProvRep = toRepresentation(model); fedProviderReps.add(fedProvRep); } rep.setUserFederationProviders(fedProviderReps); diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoUserProvider.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoUserProvider.java index ed7fa5cc4357..ae8c33fc0fc0 100755 --- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoUserProvider.java +++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoUserProvider.java @@ -297,6 +297,7 @@ public boolean removeUser(RealmModel realm, UserModel user) { @Override public void addSocialLink(RealmModel realm, UserModel user, SocialLinkModel socialLink) { + user = getUserById(user.getId(), realm); MongoUserEntity userEntity = ((UserAdapter) user).getUser(); SocialLinkEntity socialLinkEntity = new SocialLinkEntity(); socialLinkEntity.setSocialProvider(socialLink.getSocialProvider()); diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java index 2eaaaa5a3764..0dc40ff67577 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java @@ -1,8 +1,10 @@ package org.keycloak.testsuite.exportimport; import java.io.File; +import java.io.IOException; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; @@ -26,10 +28,14 @@ import org.keycloak.models.RealmModel; import org.keycloak.models.RealmProvider; import org.keycloak.models.UserCredentialModel; +import org.keycloak.models.UserFederationProviderModel; import org.keycloak.models.UserModel; import org.keycloak.models.UserProvider; import org.keycloak.representations.idm.CredentialRepresentation; +import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.services.managers.RealmManager; +import org.keycloak.testsuite.model.AbstractModelTest; +import org.keycloak.testsuite.model.ImportTest; import org.keycloak.testsuite.rule.KeycloakRule; /** @@ -92,13 +98,21 @@ protected void after() { @Override public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { + // Create some users in "test" and "master" realms addUser(manager.getSession().users(), appRealm, "user1", "password"); addUser(manager.getSession().users(), appRealm, "user2", "password"); addUser(manager.getSession().users(), appRealm, "user3", "password"); addUser(manager.getSession().users(), adminstrationRealm, "admin2", "admin2"); - } - + // Import "test-realm" realm + try { + RealmRepresentation rep = AbstractModelTest.loadJson("model/testrealm.json"); + RealmModel demoRealm = manager.createRealm("test-realm", rep.getRealm()); + manager.importRealm(rep, demoRealm); + } catch (IOException ioe) { + throw new RuntimeException(ioe); + } + } }) { @Override @@ -137,8 +151,8 @@ public void testDirFullExportImport() throws Throwable { testFullExportImport(); - // There should be 4 files in target directory (2 realm, 2 user) - Assert.assertEquals(4, new File(targetDirPath).listFiles().length); + // There should be 6 files in target directory (3 realm, 3 user) + Assert.assertEquals(6, new File(targetDirPath).listFiles().length); } @Test @@ -210,7 +224,7 @@ private void testFullExportImport() { RealmProvider realmProvider = session.realms(); UserProvider userProvider = session.users(); new RealmManager(session).removeRealm(realmProvider.getRealmByName("test")); - Assert.assertEquals(1, realmProvider.getRealms().size()); + Assert.assertEquals(2, realmProvider.getRealms().size()); RealmModel master = realmProvider.getRealmByName(Config.getAdminRealm()); UserModel admin2 = session.users().getUserByUsername("admin2", master); @@ -235,7 +249,7 @@ private void testFullExportImport() { try { RealmProvider model = session.realms(); UserProvider userProvider = session.users(); - Assert.assertEquals(2, model.getRealms().size()); + Assert.assertEquals(3, model.getRealms().size()); assertAuthenticated(userProvider, model, Config.getAdminRealm(), "admin2", "admin2"); assertAuthenticated(userProvider, model, "test", "test-user@localhost", "password"); @@ -243,6 +257,8 @@ private void testFullExportImport() { assertAuthenticated(userProvider, model, "test", "user2", "password"); assertAuthenticated(userProvider, model, "test", "user3", "password"); + RealmModel testRealmRealm = model.getRealm("test-realm"); + ImportTest.assertDataImportedInRealm(session, testRealmRealm); } finally { keycloakRule.stopSession(session, true); } @@ -261,7 +277,7 @@ private void testRealmExportImport() { RealmProvider realmProvider = session.realms(); UserProvider userProvider = session.users(); new RealmManager(session).removeRealm(realmProvider.getRealmByName("test")); - Assert.assertEquals(1, realmProvider.getRealms().size()); + Assert.assertEquals(2, realmProvider.getRealms().size()); RealmModel master = realmProvider.getRealmByName(Config.getAdminRealm()); UserModel admin2 = session.users().getUserByUsername("admin2", master); @@ -287,7 +303,7 @@ private void testRealmExportImport() { try { RealmProvider realmProvider = session.realms(); UserProvider userProvider = session.users(); - Assert.assertEquals(2, realmProvider.getRealms().size()); + Assert.assertEquals(3, realmProvider.getRealms().size()); assertNotAuthenticated(userProvider, realmProvider, Config.getAdminRealm(), "admin2", "admin2"); assertAuthenticated(userProvider, realmProvider, "test", "test-user@localhost", "password"); diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ImportTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ImportTest.java index 5c852203a67c..96b60c684ac0 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ImportTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/ImportTest.java @@ -185,6 +185,7 @@ public static void assertDataImportedInRealm(KeycloakSession session, RealmModel Assert.assertTrue(session.users().removeSocialLink(realm, socialUser, "facebook")); Assert.assertNull(session.users().getSocialLink(socialUser, "facebook", realm)); Assert.assertFalse(session.users().removeSocialLink(realm, socialUser, "facebook")); + session.users().addSocialLink(realm, socialUser, new SocialLinkModel("facebook", "facebook1", "fbuser1")); // Test smtp config Map smtpConfig = realm.getSmtpConfig();