keycloak-aplcache

Merge pull request #1514 from stianst/master KEYCLOAK-1714

7/28/2015 5:15:09 AM

Details

diff --git a/connections/file/src/main/java/org/keycloak/connections/file/DefaultFileConnectionProviderFactory.java b/connections/file/src/main/java/org/keycloak/connections/file/DefaultFileConnectionProviderFactory.java
index 26c14de..9bfe362 100755
--- a/connections/file/src/main/java/org/keycloak/connections/file/DefaultFileConnectionProviderFactory.java
+++ b/connections/file/src/main/java/org/keycloak/connections/file/DefaultFileConnectionProviderFactory.java
@@ -90,18 +90,7 @@ public class DefaultFileConnectionProviderFactory implements FileConnectionProvi
                 ImportUtils.importFromStream(session, JsonSerialization.mapper, fis, Strategy.IGNORE_EXISTING);
                 session.realms().getMigrationModel().setStoredVersion(model.getModelVersion());
 
-                List<RealmRepresentation> realmReps = new ArrayList<RealmRepresentation>();
-                for (RealmRepresentation realmRep : model.getRealms()) {
-                    if (Config.getAdminRealm().equals(realmRep.getRealm())) {
-                        realmReps.add(0, realmRep);
-                    } else {
-                        realmReps.add(realmRep);
-                    }
-                }
-                for (RealmRepresentation realmRep : realmReps) {
-                    ImportUtils.importRealm(session, realmRep, Strategy.IGNORE_EXISTING);
-                }
-
+                ImportUtils.importRealms(session, model.getRealms(), Strategy.IGNORE_EXISTING);
             } catch (IOException ioe) {
                 logger.error("Unable to read model file " + kcdata.getAbsolutePath(), ioe);
             } finally {
diff --git a/core/src/main/java/org/keycloak/jose/jws/JWSHeader.java b/core/src/main/java/org/keycloak/jose/jws/JWSHeader.java
index e1bbd99..81d51e7 100755
--- a/core/src/main/java/org/keycloak/jose/jws/JWSHeader.java
+++ b/core/src/main/java/org/keycloak/jose/jws/JWSHeader.java
@@ -1,5 +1,6 @@
 package org.keycloak.jose.jws;
 
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
 import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.annotate.JsonSerialize;
@@ -11,6 +12,7 @@ import java.io.Serializable;
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
  */
+@JsonIgnoreProperties(ignoreUnknown = true)
 public class JWSHeader implements Serializable {
     @JsonProperty("alg")
     private Algorithm algorithm;
diff --git a/examples/cordova/README.md b/examples/cordova/README.md
index 9173783..370f647 100644
--- a/examples/cordova/README.md
+++ b/examples/cordova/README.md
@@ -24,6 +24,7 @@ Install to Android phone or emulator
 
     mkdir platforms plugins
     cordova plugin add org.apache.cordova.inappbrowser
+    cordova plugin add cordova-plugin-whitelist
     cordova platform add android
     cordova run android
 
diff --git a/examples/cordova/www/config.xml b/examples/cordova/www/config.xml
index 7bef553..111b45b 100644
--- a/examples/cordova/www/config.xml
+++ b/examples/cordova/www/config.xml
@@ -9,6 +9,7 @@
     <preference name="permissions" value="none"/>
 
     <gap:plugin name="org.apache.cordova.inappbrowser" />
+    <gap:plugin name="cordova-plugin-whitelist" version="1.0.0" source="npm" />
 
     <access origin="*"/>
 </widget>
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 4940820..2cad3c1 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
@@ -20,10 +20,8 @@ import org.keycloak.representations.idm.UserRepresentation;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
 import org.keycloak.exportimport.ExportImportConfig;
 
 /**
@@ -33,6 +31,21 @@ public class ImportUtils {
 
     private static final Logger logger = Logger.getLogger(ImportUtils.class);
 
+    public static void importRealms(KeycloakSession session, Collection<RealmRepresentation> realms, Strategy strategy) {
+        // Import admin realm first
+        for (RealmRepresentation realm : realms) {
+            if (Config.getAdminRealm().equals(realm.getRealm())) {
+                importRealm(session, realm, strategy);
+            }
+        }
+
+        for (RealmRepresentation realm : realms) {
+            if (!Config.getAdminRealm().equals(realm.getRealm())) {
+                importRealm(session, realm, strategy);
+            }
+        }
+    }
+
     /**
      * Fully import realm from representation, save it to model and return model of newly created realm
      *
@@ -41,7 +54,7 @@ public class ImportUtils {
      * @param strategy specifies whether to overwrite or ignore existing realm or user entries
      * @return newly imported realm (or existing realm if ignoreExisting is true and realm of this name already exists)
      */
-    public static RealmModel importRealm(KeycloakSession session, RealmRepresentation rep, Strategy strategy) {
+    public static void importRealm(KeycloakSession session, RealmRepresentation rep, Strategy strategy) {
         String realmName = rep.getRealm();
         RealmProvider model = session.realms();
         RealmModel realm = model.getRealmByName(realmName);
@@ -49,7 +62,7 @@ public class ImportUtils {
         if (realm != null) {
             if (strategy == Strategy.IGNORE_EXISTING) {
                 logger.infof("Realm '%s' already exists. Import skipped", realmName);
-                return realm;
+                return;
             } else {
                 logger.infof("Realm '%s' already exists. Removing it before import", realmName);
                 if (Config.getAdminRealm().equals(realm.getId())) {
@@ -73,7 +86,7 @@ public class ImportUtils {
             logger.infof("Realm '%s' imported", realmName);
         }
         
-        return realm;
+        return;
     }
 
     private static void refreshMasterAdminApps(RealmProvider model, RealmModel realm) {
@@ -145,9 +158,7 @@ public class ImportUtils {
      */
     public static void importFromStream(KeycloakSession session, ObjectMapper mapper, InputStream is, Strategy strategy) throws IOException {
         Map<String, RealmRepresentation> realmReps = getRealmsFromStream(mapper, is);
-        for (RealmRepresentation realmRep : realmReps.values()) {
-            importRealm(session, realmRep, strategy);
-        }
+        importRealms(session, realmReps.values(), strategy);
     }
 
     public static Map<String, RealmRepresentation> getRealmsFromStream(ObjectMapper mapper, InputStream is) throws IOException {
diff --git a/export-import/export-import-single-file/src/main/java/org/keycloak/exportimport/singlefile/SingleFileImportProvider.java b/export-import/export-import-single-file/src/main/java/org/keycloak/exportimport/singlefile/SingleFileImportProvider.java
index 62ae93b..7c600e8 100755
--- a/export-import/export-import-single-file/src/main/java/org/keycloak/exportimport/singlefile/SingleFileImportProvider.java
+++ b/export-import/export-import-single-file/src/main/java/org/keycloak/exportimport/singlefile/SingleFileImportProvider.java
@@ -42,9 +42,7 @@ public class SingleFileImportProvider implements ImportProvider {
 
             @Override
             protected void runExportImportTask(KeycloakSession session) throws IOException {
-                for (RealmRepresentation realmRep : realmReps.values()) {
-                    ImportUtils.importRealm(session, realmRep, strategy);
-                }
+                ImportUtils.importRealms(session, realmReps.values(), strategy);
             }
 
         });
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js
index 175a3b3..0bcc8bb 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/js/controllers/users.js
@@ -992,10 +992,6 @@ module.controller('UserFederationMapperCtrl', function($scope, realm,  provider,
         $scope.changed = false;
     };
 
-    $scope.cancel = function() {
-        window.history.back();
-    };
-
     $scope.remove = function() {
         Dialog.confirmDelete($scope.mapper.name, 'mapper', function() {
             UserFederationMapper.remove({ realm: realm.realm, provider: provider.id, mapperId : $scope.mapper.id }, function() {
@@ -1016,6 +1012,7 @@ module.controller('UserFederationMapperCreateCtrl', function($scope, realm, prov
     $scope.mapper = { federationProviderDisplayName: provider.displayName, config: {}};
     $scope.mapperTypes = mapperTypes;
     $scope.mapperType = null;
+    $scope.changed = true;
 
     $scope.$watch('mapperType', function() {
         if ($scope.mapperType != null) {
@@ -1052,8 +1049,8 @@ module.controller('UserFederationMapperCreateCtrl', function($scope, realm, prov
         });
     };
 
-    $scope.cancel = function() {
-        window.history.back();
+    $scope.reset = function() {
+        $location.url("/realms/" + realm.realm + '/user-federation/providers/' + provider.providerName + '/' + provider.id + '/mappers');
     };
 
 
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html
index 9147e09..2c91c92 100644
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/federated-mapper-detail.html
@@ -50,9 +50,9 @@
         </fieldset>
 
         <div class="form-group">
-            <div class="col-md-10 col-md-offset-2" data-ng-show="!create && access.manageRealm">
-                <button kc-save  data-ng-show="changed">Save</button>
-                <button kc-reset data-ng-disabled="!changed">Clear changes</button>
+            <div class="col-md-10 col-md-offset-2" data-ng-show="access.manageRealm">
+                <button kc-save  data-ng-disabled="!changed">Save</button>
+                <button kc-reset data-ng-disabled="!changed">Cancel</button>
             </div>
         </div>
     </form>