From 2224743a6215764649dcf16dcfdb58dfbd68e9c0 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Wed, 06 Oct 2021 21:45:13 +0000 Subject: [PATCH] Update README to mention the difference between CAS URL and login URL. --- src/main/java/org/keycloak/protocol/cas/endpoints/ServiceValidateEndpoint.java | 52 ++++++++++++++++++++++------------------------------ 1 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/keycloak/protocol/cas/endpoints/ServiceValidateEndpoint.java b/src/main/java/org/keycloak/protocol/cas/endpoints/ServiceValidateEndpoint.java index 7b6a77e..fa56d4f 100644 --- a/src/main/java/org/keycloak/protocol/cas/endpoints/ServiceValidateEndpoint.java +++ b/src/main/java/org/keycloak/protocol/cas/endpoints/ServiceValidateEndpoint.java @@ -1,21 +1,25 @@ package org.keycloak.protocol.cas.endpoints; import org.keycloak.events.EventBuilder; -import org.keycloak.models.KeycloakSessionFactory; -import org.keycloak.models.ProtocolMapperModel; -import org.keycloak.models.RealmModel; -import org.keycloak.models.UserSessionModel; +import org.keycloak.models.*; import org.keycloak.protocol.ProtocolMapper; -import org.keycloak.protocol.cas.CASLoginProtocol; -import org.keycloak.services.ErrorResponseException; +import org.keycloak.protocol.cas.mappers.CASAttributeMapper; +import org.keycloak.protocol.cas.representations.CASServiceResponse; +import org.keycloak.protocol.cas.utils.CASValidationException; +import org.keycloak.protocol.cas.utils.ContentTypeHelper; +import org.keycloak.protocol.cas.utils.ServiceResponseHelper; import org.keycloak.services.managers.ClientSessionCode; +import org.keycloak.services.util.DefaultClientSessionContext; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import javax.ws.rs.core.*; +import java.util.HashMap; +import java.util.Map; import java.util.Set; public class ServiceValidateEndpoint extends ValidateEndpoint { + @Context + private Request restRequest; + public ServiceValidateEndpoint(RealmModel realm, EventBuilder event) { super(realm, event); } @@ -23,31 +27,19 @@ @Override protected Response successResponse() { UserSessionModel userSession = clientSession.getUserSession(); - - Set<ProtocolMapperModel> mappings = new ClientSessionCode(session, realm, clientSession).getRequestedProtocolMappers(); - KeycloakSessionFactory sessionFactory = session.getKeycloakSessionFactory(); - for (ProtocolMapperModel mapping : mappings) { - ProtocolMapper mapper = (ProtocolMapper) sessionFactory.getProviderFactory(ProtocolMapper.class, mapping.getProtocolMapper()); - } - - return Response.ok() - .header(HttpHeaders.CONTENT_TYPE, (jsonFormat() ? MediaType.APPLICATION_JSON_TYPE : MediaType.APPLICATION_XML_TYPE).withCharset("utf-8")) - .entity("<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>\n" + - " <cas:authenticationSuccess>\n" + - " <cas:user>" + userSession.getUser().getUsername() + "</cas:user>\n" + - " <cas:attributes>\n" + - " </cas:attributes>\n" + - " </cas:authenticationSuccess>\n" + - "</cas:serviceResponse>") - .build(); + Map<String, Object> attributes = getUserAttributes(); + CASServiceResponse serviceResponse = ServiceResponseHelper.createSuccess(userSession.getUser().getUsername(), attributes); + return prepare(Response.Status.OK, serviceResponse); } @Override - protected Response errorResponse(ErrorResponseException e) { - return super.errorResponse(e); + protected Response errorResponse(CASValidationException e) { + CASServiceResponse serviceResponse = ServiceResponseHelper.createFailure(e.getError(), e.getErrorDescription()); + return prepare(e.getStatus(), serviceResponse); } - private boolean jsonFormat() { - return "json".equalsIgnoreCase(uriInfo.getQueryParameters().getFirst(CASLoginProtocol.FORMAT_PARAM)); + private Response prepare(Response.Status status, CASServiceResponse serviceResponse) { + MediaType responseMediaType = new ContentTypeHelper(request, restRequest, session.getContext().getUri()).selectResponseType(); + return ServiceResponseHelper.createResponse(status, responseMediaType, serviceResponse); } } -- Gitblit v1.9.1