package org.pac4j.cas.client.direct; import org.pac4j.cas.authorization.DefaultCasAuthorizationGenerator; import org.pac4j.cas.client.CasProxyReceptor; import org.pac4j.cas.config.CasConfiguration; import org.pac4j.cas.config.CasProtocol; import org.pac4j.cas.credentials.authenticator.CasAuthenticator; import org.pac4j.core.client.DirectClient; import org.pac4j.core.context.WebContext; import org.pac4j.core.credentials.TokenCredentials; import org.pac4j.core.credentials.extractor.ParameterExtractor; import org.pac4j.core.profile.CommonProfile; import org.pac4j.core.util.CommonHelper; /** * <p>This class is the direct client to authenticate users based on CAS proxy tickets.</p> * * <p>The configuration can be defined via the {@link #configuration} object.</p> * * <p>As no session is meant to be created, this client does not handle CAS logout requests.</p> * * <p>For proxy support, a {@link CasProxyReceptor} must be defined in the configuration (the corresponding "callback filter" must be enabled) * and set to the CAS configuration of this client. In that case, a {@link org.pac4j.cas.profile.CasProxyProfile} will be return * (instead of a {@link org.pac4j.cas.profile.CasProfile}) to be able to request proxy tickets.</p> * * @author Jerome Leleu * @since 1.9.2 */ public class DirectCasProxyClient extends DirectClient<TokenCredentials, CommonProfile> { private CasConfiguration configuration; private String serviceUrl; public DirectCasProxyClient() { } public DirectCasProxyClient(final CasConfiguration casConfiguration, final String serviceUrl) { this.configuration = casConfiguration; this.serviceUrl = serviceUrl; } @Override protected void clientInit(final WebContext context) { CommonHelper.assertNotNull("configuration", this.configuration); CommonHelper.assertNotBlank("serviceUrl", this.serviceUrl); // must be a CAS proxy protocol final CasProtocol protocol = configuration.getProtocol(); CommonHelper.assertTrue(protocol == CasProtocol.CAS20_PROXY || protocol == CasProtocol.CAS30_PROXY, "The DirectCasProxyClient must be configured with a CAS proxy protocol (CAS20_PROXY or CAS30_PROXY)"); configuration.init(context); defaultCredentialsExtractor(new ParameterExtractor(CasConfiguration.TICKET_PARAMETER, true, false, getName())); defaultAuthenticator(new CasAuthenticator(configuration, this.serviceUrl)); addAuthorizationGenerator(new DefaultCasAuthorizationGenerator<>()); } public CasConfiguration getConfiguration() { return configuration; } public void setConfiguration(final CasConfiguration configuration) { this.configuration = configuration; } public String getServiceUrl() { return serviceUrl; } public void setServiceUrl(final String serviceUrl) { this.serviceUrl = serviceUrl; } @Override public String toString() { return CommonHelper.toString(this.getClass(), "configuration", this.configuration, "serviceUrl", serviceUrl); } }