|  |  | 
 |  |  | import org.keycloak.protocol.cas.utils.LogoutHelper; | 
 |  |  | import org.keycloak.services.managers.ClientSessionCode; | 
 |  |  | import org.keycloak.services.managers.ResourceAdminManager; | 
 |  |  | import org.keycloak.sessions.AuthenticationSessionModel; | 
 |  |  |  | 
 |  |  | import javax.ws.rs.core.HttpHeaders; | 
 |  |  | import javax.ws.rs.core.Response; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Response authenticated(UserSessionModel userSession, ClientSessionCode accessCode) { | 
 |  |  |         ClientSessionModel clientSession = accessCode.getClientSession(); | 
 |  |  |     public Response authenticated(UserSessionModel userSession, ClientSessionContext clientSessionCtx) { | 
 |  |  |         AuthenticatedClientSessionModel clientSession = clientSessionCtx.getClientSession(); | 
 |  |  |         ClientSessionCode<AuthenticatedClientSessionModel> accessCode = new ClientSessionCode<>(session, realm, clientSession); | 
 |  |  |  | 
 |  |  |         String service = clientSession.getRedirectUri(); | 
 |  |  |         //TODO validate service | 
 |  |  |         accessCode.setAction(ClientSessionModel.Action.CODE_TO_TOKEN.name()); | 
 |  |  |  | 
 |  |  |         String code = accessCode.getOrGenerateCode(); | 
 |  |  |         KeycloakUriBuilder uriBuilder = KeycloakUriBuilder.fromUri(service); | 
 |  |  |         uriBuilder.queryParam(TICKET_RESPONSE_PARAM, SERVICE_TICKET_PREFIX + accessCode.getCode()); | 
 |  |  |         uriBuilder.queryParam(TICKET_RESPONSE_PARAM, SERVICE_TICKET_PREFIX + code); | 
 |  |  |  | 
 |  |  |         URI redirectUri = uriBuilder.build(); | 
 |  |  |  | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Response sendError(ClientSessionModel clientSession, Error error) { | 
 |  |  |     public Response sendError(AuthenticationSessionModel authSession, Error error) { | 
 |  |  |         return Response.serverError().entity(error).build(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void backchannelLogout(UserSessionModel userSession, ClientSessionModel clientSession) { | 
 |  |  |     public void backchannelLogout(UserSessionModel userSession, AuthenticatedClientSessionModel clientSession) { | 
 |  |  |         String logoutUrl = clientSession.getRedirectUri(); | 
 |  |  |         String serviceTicket = clientSession.getNote(CASLoginProtocol.SESSION_SERVICE_TICKET); | 
 |  |  |         //check if session is fully authenticated (i.e. serviceValidate has been called) | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Response frontchannelLogout(UserSessionModel userSession, ClientSessionModel clientSession) { | 
 |  |  |     public Response frontchannelLogout(UserSessionModel userSession, AuthenticatedClientSessionModel clientSession) { | 
 |  |  |         // todo oidc redirect support | 
 |  |  |         throw new RuntimeException("NOT IMPLEMENTED"); | 
 |  |  |     } | 
 |  |  | 
 |  |  |  | 
 |  |  |         event.event(EventType.LOGOUT); | 
 |  |  |         event.user(userSession.getUser()).session(userSession).success(); | 
 |  |  |         LoginFormsProvider infoPage = session.getProvider(LoginFormsProvider.class).setSuccess("Logout successful"); | 
 |  |  |  | 
 |  |  |         if (redirectUri != null) { | 
 |  |  |             infoPage.setAttribute("pageRedirectUri", redirectUri); | 
 |  |  |             return Response.status(302).location(URI.create(redirectUri)).build(); | 
 |  |  |         } else { | 
 |  |  |             LoginFormsProvider infoPage = session.getProvider(LoginFormsProvider.class).setSuccess("Logout successful"); | 
 |  |  |             infoPage.setAttribute("skipLink", true); | 
 |  |  |             return infoPage.createInfoPage(); | 
 |  |  |         } | 
 |  |  |         return infoPage.createInfoPage(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public boolean requireReauthentication(UserSessionModel userSession, ClientSessionModel clientSession) { | 
 |  |  |         return "true".equals(clientSession.getNote(CASLoginProtocol.RENEW_PARAM)); | 
 |  |  |     public boolean requireReauthentication(UserSessionModel userSession, AuthenticationSessionModel authSession) { | 
 |  |  |         return "true".equals(authSession.getClientNote(CASLoginProtocol.RENEW_PARAM)); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override |