package org.pac4j.oauth.client;
import org.pac4j.core.context.WebContext;
import org.pac4j.oauth.exception.OAuthCredentialsException;
import org.pac4j.oauth.profile.orcid.OrcidProfile;
import org.pac4j.oauth.profile.orcid.OrcidProfileDefinition;
import org.pac4j.scribe.builder.api.OrcidApi20;
/**
* <p>This class is the OAuth client to authenticate users in ORCiD.</p>
* <p>It returns a {@link org.pac4j.oauth.profile.orcid.OrcidProfile}.</p>
* <p>More information at http://support.orcid.org/knowledgebase/articles/175079-tutorial-retrieve-data-from-an-orcid-record-with</p>
*
* @author Jens Tinglev
* @since 1.6.0
*/
public class OrcidClient extends OAuth20Client<OrcidProfile> {
protected static final String DEFAULT_SCOPE = "/orcid-profile/read-limited";
protected String scope = DEFAULT_SCOPE;
public OrcidClient() {
}
public OrcidClient(final String key, final String secret) {
setKey(key);
setSecret(secret);
}
@Override
protected void clientInit(final WebContext context) {
configuration.setApi(new OrcidApi20());
configuration.setProfileDefinition(new OrcidProfileDefinition());
configuration.setScope(this.scope);
configuration.setHasGrantType(true);
configuration.setTokenAsHeader(true);
configuration.setHasBeenCancelledFactory(ctx -> {
final String error = ctx.getRequestParameter(OAuthCredentialsException.ERROR);
final String errorDescription = ctx.getRequestParameter(OAuthCredentialsException.ERROR_DESCRIPTION);
// user has denied permissions
if ("access_denied".equals(error) && "User denied access".equals(errorDescription)) {
return true;
} else {
return false;
}
});
setConfiguration(configuration);
super.clientInit(context);
}
public String getScope() {
return this.scope;
}
public void setScope(final String scope) {
this.scope = scope;
}
}