package org.pac4j.oauth.client;
import org.pac4j.core.context.WebContext;
import org.pac4j.core.logout.CasLogoutActionBuilder;
import org.pac4j.core.util.CommonHelper;
import org.pac4j.oauth.profile.casoauthwrapper.CasOAuthWrapperProfile;
import org.pac4j.oauth.profile.casoauthwrapper.CasOAuthWrapperProfileDefinition;
import org.pac4j.scribe.builder.api.CasOAuthWrapperApi20;
/**
* <p>This class is the OAuth client to authenticate users on CAS servers using OAuth wrapper.</p>
* <p>The url of the OAuth endpoint of the CAS server must be set by using the {@link #setCasOAuthUrl(String)} method.</p>
* <p>It returns a {@link org.pac4j.oauth.profile.casoauthwrapper.CasOAuthWrapperProfile}.</p>
* <p>More information at https://wiki.jasig.org/display/CASUM/OAuth+server+support</p>
*
* @author Jerome Leleu
* @since 1.3.0
*/
public class CasOAuthWrapperClient extends OAuth20Client<CasOAuthWrapperProfile> {
/**
* The CAS OAuth server url (without a trailing slash).
* For example: http://localhost:8080/cas/oauth2.0
*/
private String casOAuthUrl;
private String casLogoutUrl;
private boolean springSecurityCompliant = false;
private boolean implicitFlow = false;
public CasOAuthWrapperClient() {
}
public CasOAuthWrapperClient(final String key, final String secret, final String casOAuthUrl) {
setKey(key);
setSecret(secret);
setCasOAuthUrl(casOAuthUrl);
}
@Override
protected void clientInit(final WebContext context) {
CommonHelper.assertNotBlank("casOAuthUrl", this.casOAuthUrl);
configuration.setApi(new CasOAuthWrapperApi20(this.casOAuthUrl, this.springSecurityCompliant, this.implicitFlow));
configuration.setProfileDefinition(new CasOAuthWrapperProfileDefinition());
configuration.setHasGrantType(true);
setConfiguration(configuration);
defaultLogoutActionBuilder(new CasLogoutActionBuilder<>(casLogoutUrl, "service"));
super.clientInit(context);
}
public String getCasOAuthUrl() {
return this.casOAuthUrl;
}
public void setCasOAuthUrl(final String casOAuthUrl) {
CommonHelper.assertNotBlank("casOAuthUrl", casOAuthUrl);
if (casOAuthUrl.endsWith("/")) {
this.casOAuthUrl = casOAuthUrl.substring(0, casOAuthUrl.length() - 1);
} else {
this.casOAuthUrl = casOAuthUrl;
}
}
public boolean isSpringSecurityCompliant() {
return this.springSecurityCompliant;
}
public void setSpringSecurityCompliant(final boolean springSecurityCompliant) {
this.springSecurityCompliant = springSecurityCompliant;
}
public boolean isImplicitFlow() {
return implicitFlow;
}
public void setImplicitFlow(final boolean implicitFlow) {
this.implicitFlow = implicitFlow;
}
public String getCasLogoutUrl() {
return casLogoutUrl;
}
public void setCasLogoutUrl(final String casLogoutUrl) {
this.casLogoutUrl = casLogoutUrl;
}
}