Details
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 9edfe52..62b6b7d 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
@@ -137,7 +137,7 @@ module.controller('RealmDetailCtrl', function($scope, Current, Realm, realm, $ht
$scope.remove = function() {
Dialog.confirmDelete($scope.realm.realm, 'realm', function() {
- Realm.remove($scope.realm, function() {
+ Realm.remove({ id : $scope.realm.id }, function() {
Current.realms = Realm.get();
$location.url("/realms");
Notifications.success("The realm has been deleted.");
diff --git a/model/api/src/main/java/org/keycloak/models/KeycloakSession.java b/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
index 43d4298..1636a12 100755
--- a/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
+++ b/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
@@ -13,7 +13,7 @@ public interface KeycloakSession {
RealmModel createRealm(String id, String name);
RealmModel getRealm(String id);
List<RealmModel> getRealms(UserModel admin);
- void deleteRealm(RealmModel realm);
+ boolean removeRealm(String id);
void close();
}
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java
index 13d26d3..b9de288 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/JpaKeycloakSession.java
@@ -1,15 +1,13 @@
package org.keycloak.models.jpa;
-import org.keycloak.models.KeycloakSession;
-import org.keycloak.models.KeycloakTransaction;
-import org.keycloak.models.RealmModel;
-import org.keycloak.models.UserModel;
-import org.keycloak.models.jpa.entities.RealmEntity;
+import org.keycloak.models.*;
+import org.keycloak.models.jpa.entities.*;
import org.keycloak.models.utils.KeycloakSessionUtils;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.ArrayList;
+import java.util.LinkedList;
import java.util.List;
/**
@@ -62,8 +60,26 @@ public class JpaKeycloakSession implements KeycloakSession {
}
@Override
- public void deleteRealm(RealmModel realm) {
- throw new RuntimeException("Not Implemented Yet");
+ public boolean removeRealm(String id) {
+ RealmEntity realm = em.find(RealmEntity.class, id);
+ if (realm == null) {
+ return false;
+ }
+
+ RealmAdapter adapter = new RealmAdapter(em, realm);
+ for (ApplicationEntity a : new LinkedList<ApplicationEntity>(realm.getApplications())) {
+ adapter.removeApplication(a.getId());
+ }
+
+ for (UserEntity u : em.createQuery("from UserEntity", UserEntity.class).getResultList()) {
+ adapter.removeUser(u.getLoginName());
+ }
+
+ em.createQuery("delete from " + OAuthClientEntity.class.getSimpleName() + " where realm = :realm").setParameter("realm", realm).executeUpdate();
+
+ em.remove(realm);
+
+ return true;
}
@Override
diff --git a/model/picketlink/src/main/java/org/keycloak/models/picketlink/PicketlinkKeycloakSession.java b/model/picketlink/src/main/java/org/keycloak/models/picketlink/PicketlinkKeycloakSession.java
index fcaf72e..7e1a50b 100755
--- a/model/picketlink/src/main/java/org/keycloak/models/picketlink/PicketlinkKeycloakSession.java
+++ b/model/picketlink/src/main/java/org/keycloak/models/picketlink/PicketlinkKeycloakSession.java
@@ -95,9 +95,13 @@ public class PicketlinkKeycloakSession implements KeycloakSession {
}
@Override
- public void deleteRealm(RealmModel realm) {
- throw new RuntimeException("Not Implemented Yet");
-
+ public boolean removeRealm(String id) {
+ RealmData partition = partitionManager.getPartition(RealmData.class, id);
+ if (partition == null) {
+ return false;
+ }
+ partitionManager.remove(partition);
+ return true;
}
@Override
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java
index ec4ae9b..a7f06ce 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java
@@ -8,11 +8,7 @@ import org.keycloak.models.UserModel;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.RealmManager;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
import javax.ws.rs.container.ResourceContext;
import javax.ws.rs.core.Context;
@@ -65,6 +61,12 @@ public class RealmAdminResource extends RoleContainerResource {
new RealmManager(session).updateRealm(rep, realm);
}
+ @DELETE
+ public void deleteRealms() {
+ if (!session.removeRealm(realm.getId())) {
+ throw new NotFoundException();
+ }
+ }
@Path("users")
public UsersResource users() {
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 fb4bfeb..3e2049d 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
@@ -9,13 +9,7 @@ import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.services.resources.SaasService;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.NotFoundException;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
import javax.ws.rs.container.ResourceContext;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context;
@@ -94,6 +88,4 @@ public class RealmsAdminResource {
resourceContext.initResource(adminResource);
return adminResource;
}
-
-
}
diff --git a/services/src/test/java/org/keycloak/test/AdapterTest.java b/services/src/test/java/org/keycloak/test/AdapterTest.java
index e504c39..c0c1382 100755
--- a/services/src/test/java/org/keycloak/test/AdapterTest.java
+++ b/services/src/test/java/org/keycloak/test/AdapterTest.java
@@ -229,6 +229,34 @@ public class AdapterTest extends AbstractKeycloakTest {
@Test
+ public void testRemoveRealm() throws Exception {
+ test1CreateRealm();
+
+ UserModel user = realmModel.addUser("bburke");
+
+ UserCredentialModel cred = new UserCredentialModel();
+ cred.setType(CredentialRepresentation.PASSWORD);
+ cred.setValue("password");
+ realmModel.updateCredential(user, cred);
+
+ OAuthClientModel client = realmModel.addOAuthClient("client");
+
+ ApplicationModel app = realmModel.addApplication("test-app");
+
+ RoleModel appRole = app.addRole("test");
+ app.grantRole(user, appRole);
+ app.addScopeMapping(client.getOAuthAgent(), appRole);
+
+ RoleModel realmRole = realmModel.addRole("test");
+ realmModel.addScopeMapping(app.getApplicationUser(), realmRole);
+
+ Assert.assertTrue(identitySession.removeRealm(realmModel.getId()));
+ Assert.assertFalse(identitySession.removeRealm(realmModel.getId()));
+ Assert.assertNull(identitySession.getRealm(realmModel.getId()));
+ }
+
+
+ @Test
public void testRemoveRole() throws Exception {
test1CreateRealm();