From 6638b8429ef70338054980441de98cfa959c4d1f Mon Sep 17 00:00:00 2001 From: Matthias Piepkorn <mpiepk@gmail.com> Date: Mon, 22 Jan 2018 19:26:42 +0000 Subject: [PATCH] update for Keycloak 3.4.3, version now matches Keycloak version --- .travis.yml | 6 --- src/main/java/org/keycloak/protocol/cas/endpoints/ValidateEndpoint.java | 33 ++-------------- src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java | 13 ------ pom.xml | 4 +- src/main/java/org/keycloak/protocol/cas/endpoints/LogoutEndpoint.java | 2 src/main/java/org/keycloak/protocol/cas/endpoints/AuthorizationEndpoint.java | 18 ++------- integrationTest/suite.sh | 2 7 files changed, 14 insertions(+), 64 deletions(-) diff --git a/.travis.yml b/.travis.yml index 27bd183..731551e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,12 +13,6 @@ - docker env: -# - KEYCLOAK_VERSION=2.5.5.Final -# - KEYCLOAK_VERSION=3.0.0.Final -# - KEYCLOAK_VERSION=3.1.0.Final - - KEYCLOAK_VERSION=3.2.1.Final - - KEYCLOAK_VERSION=3.3.0.Final - - KEYCLOAK_VERSION=3.4.0.Final - KEYCLOAK_VERSION=3.4.3.Final before_install: diff --git a/integrationTest/suite.sh b/integrationTest/suite.sh index 35d9f00..6958b45 100755 --- a/integrationTest/suite.sh +++ b/integrationTest/suite.sh @@ -12,7 +12,7 @@ exit 1 fi - login_url=${BASH_REMATCH[1]} + login_url=${BASH_REMATCH[1]//&/&} redirect_response=$(curl --fail --silent -D - -b /tmp/cookies --data 'username=admin&password=admin' "$login_url") if [[ !($redirect_response =~ $ticket_pattern) ]] ; then echo "No service ticket found in response" diff --git a/pom.xml b/pom.xml index a502285..59de4c5 100644 --- a/pom.xml +++ b/pom.xml @@ -22,12 +22,12 @@ <groupId>org.keycloak</groupId> <artifactId>keycloak-protocol-cas</artifactId> - <version>2.1.1-SNAPSHOT</version> + <version>3.4.3</version> <name>Keycloak CAS Protocol</name> <description /> <properties> - <keycloak.version>3.2.0.Final</keycloak.version> + <keycloak.version>${project.version}.Final</keycloak.version> <jboss.logging.version>3.3.0.Final</jboss.logging.version> <jboss.logging.tools.version>2.0.1.Final</jboss.logging.tools.version> <junit.version>4.12</junit.version> diff --git a/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java b/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java index b796962..dd08b5b 100644 --- a/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java +++ b/src/main/java/org/keycloak/protocol/cas/CASLoginProtocol.java @@ -12,13 +12,11 @@ import org.keycloak.services.managers.ClientSessionCode; import org.keycloak.services.managers.ResourceAdminManager; import org.keycloak.sessions.AuthenticationSessionModel; -import org.keycloak.sessions.CommonClientSessionModel; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import java.io.IOException; -import java.lang.reflect.Method; import java.net.URI; public class CASLoginProtocol implements LoginProtocol { @@ -93,16 +91,7 @@ String service = clientSession.getRedirectUri(); //TODO validate service - String code; - try { - // Keycloak >3.4 branch: Method getCode was renamed to getOrGenerateCode, CODE_TO_TOKEN was removed - Method getOrGenerateCode = ClientSessionCode.class.getMethod("getOrGenerateCode"); - code = (String) getOrGenerateCode.invoke(accessCode); - } catch (ReflectiveOperationException e) { - // Keycloak <=3.3 branch - accessCode.setAction(CommonClientSessionModel.Action.CODE_TO_TOKEN.name()); - code = accessCode.getCode(); - } + String code = accessCode.getOrGenerateCode(); KeycloakUriBuilder uriBuilder = KeycloakUriBuilder.fromUri(service); uriBuilder.queryParam(TICKET_RESPONSE_PARAM, SERVICE_TICKET_PREFIX + code); diff --git a/src/main/java/org/keycloak/protocol/cas/endpoints/AuthorizationEndpoint.java b/src/main/java/org/keycloak/protocol/cas/endpoints/AuthorizationEndpoint.java index 339051f..bcf1231 100644 --- a/src/main/java/org/keycloak/protocol/cas/endpoints/AuthorizationEndpoint.java +++ b/src/main/java/org/keycloak/protocol/cas/endpoints/AuthorizationEndpoint.java @@ -42,12 +42,7 @@ checkRealm(); checkClient(service); - AuthorizationEndpointChecks checks = getOrCreateAuthenticationSession(client, null); - if (checks.response != null) { - return checks.response; - } - - authenticationSession = checks.authSession; + authenticationSession = createAuthenticationSession(client, null); updateAuthenticationSession(); // So back button doesn't work @@ -64,7 +59,7 @@ private void checkClient(String service) { if (service == null) { event.error(Errors.INVALID_REQUEST); - throw new ErrorPageException(session, Messages.MISSING_PARAMETER, CASLoginProtocol.SERVICE_PARAM); + throw new ErrorPageException(session, Response.Status.BAD_REQUEST, Messages.MISSING_PARAMETER, CASLoginProtocol.SERVICE_PARAM); } client = realm.getClients().stream() @@ -73,12 +68,12 @@ .findFirst().orElse(null); if (client == null) { event.error(Errors.CLIENT_NOT_FOUND); - throw new ErrorPageException(session, Messages.CLIENT_NOT_FOUND); + throw new ErrorPageException(session, Response.Status.BAD_REQUEST, Messages.CLIENT_NOT_FOUND); } if (!client.isEnabled()) { event.error(Errors.CLIENT_DISABLED); - throw new ErrorPageException(session, Messages.CLIENT_DISABLED); + throw new ErrorPageException(session, Response.Status.BAD_REQUEST, Messages.CLIENT_DISABLED); } redirectUri = RedirectUtils.verifyRedirectUri(uriInfo, service, realm, client); @@ -93,10 +88,5 @@ authenticationSession.setProtocol(CASLoginProtocol.LOGIN_PROTOCOL); authenticationSession.setRedirectUri(redirectUri); authenticationSession.setAction(AuthenticationSessionModel.Action.AUTHENTICATE.name()); - } - - @Override - protected boolean isNewRequest(AuthenticationSessionModel authSession, ClientModel clientFromRequest, String requestState) { - return true; } } diff --git a/src/main/java/org/keycloak/protocol/cas/endpoints/LogoutEndpoint.java b/src/main/java/org/keycloak/protocol/cas/endpoints/LogoutEndpoint.java index b29588f..1db8322 100644 --- a/src/main/java/org/keycloak/protocol/cas/endpoints/LogoutEndpoint.java +++ b/src/main/java/org/keycloak/protocol/cas/endpoints/LogoutEndpoint.java @@ -66,7 +66,7 @@ logger.debug("finishing CAS browser logout"); return response; } - return ErrorPage.error(session, Messages.FAILED_LOGOUT); + return ErrorPage.error(session, null, Response.Status.BAD_REQUEST, Messages.FAILED_LOGOUT); } private void checkClient(String service) { diff --git a/src/main/java/org/keycloak/protocol/cas/endpoints/ValidateEndpoint.java b/src/main/java/org/keycloak/protocol/cas/endpoints/ValidateEndpoint.java index c250578..6145334 100644 --- a/src/main/java/org/keycloak/protocol/cas/endpoints/ValidateEndpoint.java +++ b/src/main/java/org/keycloak/protocol/cas/endpoints/ValidateEndpoint.java @@ -18,7 +18,6 @@ import javax.ws.rs.GET; import javax.ws.rs.core.*; -import java.lang.reflect.Method; public class ValidateEndpoint { protected static final Logger logger = Logger.getLogger(ValidateEndpoint.class); @@ -137,24 +136,14 @@ event.detail(Details.CODE_ID, parts[2]); } - ClientSessionCode.ParseResult<AuthenticatedClientSessionModel> parseResult; - try { - // Keycloak >3.4 branch: Parameter event was added to ClientSessionCode.parseResult - Method parseResultMethod = ClientSessionCode.class.getMethod("parseResult", - String.class, KeycloakSession.class, RealmModel.class, EventBuilder.class, Class.class); - parseResult = (ClientSessionCode.ParseResult<AuthenticatedClientSessionModel>) parseResultMethod.invoke( - null, code, session, realm, event, AuthenticatedClientSessionModel.class); - } catch (ReflectiveOperationException e) { - // Keycloak <=3.3 branch - parseResult = ClientSessionCode.parseResult(code, session, realm, AuthenticatedClientSessionModel.class); - } + ClientSessionCode.ParseResult<AuthenticatedClientSessionModel> parseResult = ClientSessionCode.parseResult(code, null, session, realm, client, event, AuthenticatedClientSessionModel.class); if (parseResult.isAuthSessionNotFound() || parseResult.isIllegalHash()) { event.error(Errors.INVALID_CODE); // Attempt to use same code twice should invalidate existing clientSession AuthenticatedClientSessionModel clientSession = parseResult.getClientSession(); if (clientSession != null) { - clientSession.setUserSession(null); + clientSession.detachFromUserSession(); } throw new CASValidationException(CASErrorCode.INVALID_TICKET, "Code not valid", Response.Status.BAD_REQUEST); @@ -162,21 +151,9 @@ clientSession = parseResult.getClientSession(); - try { - // Keycloak >3.4 branch: Method isExpiredToken was added - Method isExpiredToken = ClientSessionCode.ParseResult.class.getMethod("isExpiredToken"); - if ((Boolean) isExpiredToken.invoke(parseResult)) { - event.error(Errors.EXPIRED_CODE); - throw new CASValidationException(CASErrorCode.INVALID_TICKET, "Code is expired", Response.Status.BAD_REQUEST); - } - } catch (ReflectiveOperationException e) { - // Keycloak <=3.3 branch - if (!parseResult.getCode().isValid(AuthenticatedClientSessionModel.Action.CODE_TO_TOKEN.name(), ClientSessionCode.ActionType.CLIENT)) { - event.error(Errors.INVALID_CODE); - throw new CASValidationException(CASErrorCode.INVALID_TICKET, "Code is expired", Response.Status.BAD_REQUEST); - } - - parseResult.getCode().setAction(null); + if (parseResult.isExpiredToken()) { + event.error(Errors.EXPIRED_CODE); + throw new CASValidationException(CASErrorCode.INVALID_TICKET, "Code is expired", Response.Status.BAD_REQUEST); } clientSession.setNote(CASLoginProtocol.SESSION_SERVICE_TICKET, ticket); -- Gitblit v1.9.1