package org.apereo.cas.oidc.web;
import org.apereo.cas.authentication.Authentication;
import org.apereo.cas.oidc.util.OidcAuthorizationRequestSupport;
import org.apereo.cas.support.oauth.web.response.OAuth20DefaultCasClientRedirectActionBuilder;
import org.pac4j.cas.client.CasClient;
import org.pac4j.core.context.WebContext;
import org.pac4j.core.redirect.RedirectAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Optional;
/**
* This is {@link OidcCasClientRedirectActionBuilder}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
public class OidcCasClientRedirectActionBuilder extends OAuth20DefaultCasClientRedirectActionBuilder {
private static final Logger LOGGER = LoggerFactory.getLogger(OidcCasClientRedirectActionBuilder.class);
private final OidcAuthorizationRequestSupport oidcAuthorizationRequestSupport;
public OidcCasClientRedirectActionBuilder(final OidcAuthorizationRequestSupport oidcAuthorizationRequestSupport) {
this.oidcAuthorizationRequestSupport = oidcAuthorizationRequestSupport;
}
@Override
public RedirectAction build(final CasClient casClient, final WebContext context) {
final Optional<Authentication> auth = oidcAuthorizationRequestSupport.isCasAuthenticationAvailable(context);
auth.ifPresent(authentication -> oidcAuthorizationRequestSupport.configureClientForMaxAgeAuthorizationRequest(casClient, context, authentication));
OidcAuthorizationRequestSupport.configureClientForPromptLoginAuthorizationRequest(casClient, context);
OidcAuthorizationRequestSupport.configureClientForPromptNoneAuthorizationRequest(casClient, context);
final RedirectAction action = super.build(casClient, context);
LOGGER.debug("Final redirect action is [{}]", action);
return action;
}
}