Fix handling of 'renew' parameter
| | |
| | | protected UriInfo uriInfo; |
| | | protected HttpHeaders headers; |
| | | protected EventBuilder event; |
| | | private boolean requireReauth; |
| | | |
| | | public CASLoginProtocol(KeycloakSession session, RealmModel realm, UriInfo uriInfo, HttpHeaders headers, EventBuilder event, boolean requireReauth) { |
| | | public CASLoginProtocol(KeycloakSession session, RealmModel realm, UriInfo uriInfo, HttpHeaders headers, EventBuilder event) { |
| | | this.session = session; |
| | | this.realm = realm; |
| | | this.uriInfo = uriInfo; |
| | | this.headers = headers; |
| | | this.event = event; |
| | | this.requireReauth = requireReauth; |
| | | } |
| | | |
| | | public CASLoginProtocol() { |
| | |
| | | |
| | | @Override |
| | | public boolean requireReauthentication(UserSessionModel userSession, ClientSessionModel clientSession) { |
| | | return requireReauth; |
| | | return "true".equals(clientSession.getNote(CASLoginProtocol.RENEW_PARAM)); |
| | | } |
| | | |
| | | @Override |
| | |
| | | public Response build() { |
| | | MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); |
| | | String service = params.getFirst(CASLoginProtocol.SERVICE_PARAM); |
| | | boolean renew = "true".equalsIgnoreCase(params.getFirst(CASLoginProtocol.RENEW_PARAM)); |
| | | boolean gateway = "true".equalsIgnoreCase(params.getFirst(CASLoginProtocol.GATEWAY_PARAM)); |
| | | boolean renew = params.containsKey(CASLoginProtocol.RENEW_PARAM); |
| | | boolean gateway = params.containsKey(CASLoginProtocol.GATEWAY_PARAM); |
| | | |
| | | checkSsl(); |
| | | checkRealm(); |
| | |
| | | // So back button doesn't work |
| | | CacheControlUtil.noBackButtonCacheControlHeader(); |
| | | |
| | | if (renew) { |
| | | clientSession.setNote(CASLoginProtocol.RENEW_PARAM, "true"); |
| | | } |
| | | |
| | | this.event.event(EventType.LOGIN); |
| | | return handleBrowserAuthenticationRequest(clientSession, new CASLoginProtocol(session, realm, uriInfo, headers, event, renew), gateway, false); |
| | | return handleBrowserAuthenticationRequest(clientSession, new CASLoginProtocol(session, realm, uriInfo, headers, event), gateway, false); |
| | | } |
| | | |
| | | private void checkSsl() { |
| | |
| | | MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); |
| | | String service = params.getFirst(CASLoginProtocol.SERVICE_PARAM); |
| | | String ticket = params.getFirst(CASLoginProtocol.TICKET_PARAM); |
| | | boolean renew = "true".equalsIgnoreCase(params.getFirst(CASLoginProtocol.RENEW_PARAM)); |
| | | boolean renew = params.containsKey(CASLoginProtocol.RENEW_PARAM); |
| | | |
| | | event.event(EventType.CODE_TO_TOKEN); |
| | | |
| | |
| | | |
| | | parseResult.getCode().setAction(null); |
| | | |
| | | if (requireReauth && AuthenticationManager.isSSOAuthentication(clientSession)) { |
| | | event.error(Errors.SESSION_EXPIRED); |
| | | throw new CASValidationException(CASErrorCode.INVALID_TICKET, "Interactive authentication was requested but not performed", Response.Status.BAD_REQUEST); |
| | | } |
| | | |
| | | UserSessionModel userSession = clientSession.getUserSession(); |
| | | |
| | | if (userSession == null) { |