KEYCLOAK-2844 Unexpected error when trying to remove clientTemplate in use
This commit is contained in:
parent
e490a6e3bd
commit
919a3791ea
2 changed files with 46 additions and 4 deletions
|
@ -22,6 +22,7 @@ import org.keycloak.events.admin.OperationType;
|
|||
import org.keycloak.models.ClientTemplateModel;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.ModelDuplicateException;
|
||||
import org.keycloak.models.ModelException;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.utils.ModelToRepresentation;
|
||||
import org.keycloak.models.utils.RepresentationToModel;
|
||||
|
@ -133,11 +134,16 @@ public class ClientTemplateResource {
|
|||
*/
|
||||
@DELETE
|
||||
@NoCache
|
||||
public void deleteClientTemplate() {
|
||||
public Response deleteClientTemplate() {
|
||||
auth.requireManage();
|
||||
|
||||
realm.removeClientTemplate(template.getId());
|
||||
adminEvent.operation(OperationType.DELETE).resourcePath(uriInfo).success();
|
||||
|
||||
try {
|
||||
realm.removeClientTemplate(template.getId());
|
||||
adminEvent.operation(OperationType.DELETE).resourcePath(uriInfo).success();
|
||||
return Response.noContent().build();
|
||||
} catch (ModelException me) {
|
||||
return ErrorResponse.error(me.getMessage(), Response.Status.BAD_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.ws.rs.BadRequestException;
|
||||
import javax.ws.rs.NotFoundException;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
|
@ -35,6 +36,7 @@ import org.keycloak.models.AccountRoles;
|
|||
import org.keycloak.models.Constants;
|
||||
import org.keycloak.protocol.oidc.OIDCLoginProtocol;
|
||||
import org.keycloak.protocol.saml.SamlProtocol;
|
||||
import org.keycloak.representations.idm.ClientRepresentation;
|
||||
import org.keycloak.representations.idm.ClientTemplateRepresentation;
|
||||
import org.keycloak.representations.idm.ErrorRepresentation;
|
||||
import org.keycloak.representations.idm.MappingsRepresentation;
|
||||
|
@ -270,6 +272,40 @@ public class ClientTemplateTest extends AbstractClientTest {
|
|||
}
|
||||
|
||||
|
||||
// KEYCLOAK-2844
|
||||
@Test
|
||||
public void testRemoveTemplateInUse() {
|
||||
// Add client template
|
||||
ClientTemplateRepresentation templateRep = new ClientTemplateRepresentation();
|
||||
templateRep.setName("foo-template");
|
||||
templateRep.setFullScopeAllowed(false);
|
||||
String templateId = createTemplate(templateRep);
|
||||
|
||||
// Add client with the clientTemplate
|
||||
ClientRepresentation clientRep = new ClientRepresentation();
|
||||
clientRep.setClientId("bar-client");
|
||||
clientRep.setName("bar-client");
|
||||
clientRep.setRootUrl("foo");
|
||||
clientRep.setProtocol("openid-connect");
|
||||
clientRep.setClientTemplate("foo-template");
|
||||
String clientDbId = createClient(clientRep);
|
||||
|
||||
// Can't remove clientTemplate
|
||||
try {
|
||||
clientTemplates().get(templateId).remove();
|
||||
} catch (BadRequestException bre) {
|
||||
ErrorRepresentation error = bre.getResponse().readEntity(ErrorRepresentation.class);
|
||||
Assert.assertEquals("Cannot remove client template, it is currently in use", error.getErrorMessage());
|
||||
}
|
||||
|
||||
// Remove client
|
||||
testRealmResource().clients().get(clientDbId).remove();
|
||||
|
||||
// Can remove clientTemplate now
|
||||
clientTemplates().get(templateId).remove();
|
||||
}
|
||||
|
||||
|
||||
private ClientTemplatesResource clientTemplates() {
|
||||
return testRealmResource().clientTemplates();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue