package org.pac4j.oauth.client;
import com.github.scribejava.apis.TwitterApi;
import com.github.scribejava.core.builder.api.BaseApi;
import com.github.scribejava.core.builder.api.DefaultApi10a;
import com.github.scribejava.core.oauth.OAuth10aService;
import org.pac4j.core.context.WebContext;
import org.pac4j.core.redirect.RedirectAction;
import org.pac4j.core.util.CommonHelper;
import org.pac4j.oauth.profile.twitter.TwitterProfile;
import org.pac4j.oauth.profile.twitter.TwitterProfileDefinition;
/**
* <p>This class is the OAuth client to authenticate users in Twitter.</p>
* <p>You can define if a screen should always been displayed for authorization confirmation by using the
* {@link #setAlwaysConfirmAuthorization(boolean)} method (<code>false</code> by default).</p>
* <p>It returns a {@link org.pac4j.oauth.profile.twitter.TwitterProfile}.</p>
* <p>More information at https://dev.twitter.com/docs/api/1/get/account/verify_credentials</p>
*
* @author Jerome Leleu
* @since 1.0.0
*/
public class TwitterClient extends OAuth10Client<TwitterProfile> {
private boolean alwaysConfirmAuthorization = false;
public TwitterClient() {}
public TwitterClient(final String key, final String secret) {
setKey(key);
setSecret(secret);
}
@Override
protected void clientInit(final WebContext context) {
configuration.setApi(getApi());
configuration.setProfileDefinition(new TwitterProfileDefinition());
configuration.setHasBeenCancelledFactory(ctx -> {
final String denied = ctx.getRequestParameter("denied");
if (CommonHelper.isNotBlank(denied)) {
return true;
} else {
return false;
}
});
setConfiguration(configuration);
defaultLogoutActionBuilder((ctx, profile, targetUrl) -> RedirectAction.redirect("https://twitter.com/logout"));
super.clientInit(context);
}
protected BaseApi<OAuth10aService> getApi() {
final DefaultApi10a api;
if (this.alwaysConfirmAuthorization == false) {
api = TwitterApi.Authenticate.instance();
} else {
api = TwitterApi.instance();
}
return api;
}
public boolean isAlwaysConfirmAuthorization() {
return this.alwaysConfirmAuthorization;
}
public void setAlwaysConfirmAuthorization(final boolean alwaysConfirmAuthorization) {
this.alwaysConfirmAuthorization = alwaysConfirmAuthorization;
}
}