diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js index 8220e9ca91..b270045bbe 100755 --- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js +++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js @@ -8,10 +8,14 @@ module.controller('GlobalCtrl', function($scope, $http, Auth, Current, $location Auth.user = data; Auth.loggedIn = true; - function getAccess(realm, role) { + function getAccess(role) { + if (!Current.realm) { + return false; + } + var realmAccess = Auth.user['realm_access']; if (realmAccess) { - realmAccess = realmAccess[realm]; + realmAccess = realmAccess[Current.realm.realm]; if (realmAccess) { return realmAccess.indexOf(role) >= 0; } @@ -23,35 +27,35 @@ module.controller('GlobalCtrl', function($scope, $http, Auth, Current, $location admin: data.admin, get viewRealm() { - return getAccess(Current.realm.realm, 'view-realm') || this.viewRealm; + return getAccess('view-realm') || this.manageRealm; }, get viewApplications() { - return getAccess(Current.realm.realm, 'view-applications') || this.manageApplications; + return getAccess('view-applications') || this.manageApplications; }, get viewClients() { - return getAccess(Current.realm.realm, 'view-clients') || this.manageClients; + return getAccess('view-clients') || this.manageClients; }, get viewUsers() { - return getAccess(Current.realm.realm, 'view-users') || this.manageClients; + return getAccess('view-users') || this.manageClients; }, get manageRealm() { - return getAccess(Current.realm.realm, 'manage-realm'); + return getAccess('manage-realm'); }, get manageApplications() { - return getAccess(Current.realm.realm, 'manage-applications'); + return getAccess('manage-applications'); }, get manageClients() { - return getAccess(Current.realm.realm, 'manage-clients'); + return getAccess('manage-clients'); }, get manageUsers() { - return getAccess(Current.realm.realm, 'manage-users'); + return getAccess('manage-users'); } } }) @@ -147,9 +151,23 @@ module.controller('RealmCreateCtrl', function($scope, Current, Realm, $upload, $ //formDataAppender: function(formData, key, val){} }).progress(function(evt) { console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total)); - }).success(function(data, status, headers, config) { - Notifications.success("The realm has been uploaded."); - $location.url("/realms"); + }).success(function(data, status, headers) { + Realm.query(function(data) { + Current.realms = data; + + $http.get('/auth/rest/admin/whoami').success(function(user) { + Auth.user = user; + + Notifications.success("The realm has been uploaded."); + + var location = headers('Location'); + if (location) { + $location.url("/realms/" + location.substring(location.lastIndexOf('/') + 1)); + } else { + $location.url("/realms"); + } + }); + }); }) .error(function() { Notifications.error("The realm can not be uploaded. Please verify the file."); @@ -170,18 +188,12 @@ module.controller('RealmCreateCtrl', function($scope, Current, Realm, $upload, $ var ssl = window.location.protocol == 'https:'; realmCopy.sslNotRequired = !ssl; console.log('creating new realm **'); - Realm.create(realmCopy, function(data, headers) { - var data = Realm.query(function() { + Realm.create(realmCopy, function() { + Realm.query(function(data) { Current.realms = data; - for (var i = 0; i < Current.realms.length; i++) { - if (Current.realms[i].realm == realmCopy.realm) { - Current.realm = Current.realms[i]; - } - } - $http.get('/auth/rest/admin/whoami').success(function(data, status) { - Auth.user = data; - console.log("reloaded auth"); + $http.get('/auth/rest/admin/whoami').success(function(user) { + Auth.user = user; $location.url("/realms/" + realmCopy.realm); Notifications.success("The realm has been created."); diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RealmsAdminResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RealmsAdminResource.java index c2cbafb021..b21cbb4223 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/RealmsAdminResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/RealmsAdminResource.java @@ -105,7 +105,7 @@ public class RealmsAdminResource { @POST @Consumes(MediaType.MULTIPART_FORM_DATA) - public Response uploadRealm(MultipartFormDataInput input) throws IOException { + public Response uploadRealm(@Context final UriInfo uriInfo, MultipartFormDataInput input) throws IOException { if (!auth.hasRealmRole(AdminRoles.ADMIN)) { throw new ForbiddenException(); } @@ -117,8 +117,14 @@ public class RealmsAdminResource { for (InputPart inputPart : inputParts) { inputPart.setMediaType(MediaType.APPLICATION_JSON_TYPE); RealmRepresentation rep = inputPart.getBody(new GenericType(){}); - realmManager.importRealm(rep); + RealmModel realm = realmManager.importRealm(rep); + + if (inputParts.size() == 1) { + URI location = realmUrl(uriInfo).build(realm.getName()); + return Response.created(location).build(); + } } + return Response.noContent().build(); }