package org.pac4j.oauth.profile.orcid; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth2AccessToken; import org.pac4j.core.exception.HttpAction; import org.pac4j.core.profile.converter.Converters; import org.pac4j.core.util.CommonHelper; import org.pac4j.oauth.config.OAuth20Configuration; import org.pac4j.oauth.profile.definition.OAuth20ProfileDefinition; import org.pac4j.scribe.model.OrcidToken; /** * This class is the Orcid profile definition. * * @author Jens Tinglev * @since 1.6.0 */ public class OrcidProfileDefinition extends OAuth20ProfileDefinition<OrcidProfile> { public static final String ORCID = "path"; public static final String FIRST_NAME = "given-names"; public static final String FAMILY_NAME = "family-name"; public static final String URI = "uri"; public static final String CREATION_METHOD = "creation-method"; public static final String CLAIMED = "claimed"; public OrcidProfileDefinition() { super(x -> new OrcidProfile()); primary(ORCID, Converters.STRING); primary(FIRST_NAME, Converters.STRING); primary(FAMILY_NAME, Converters.STRING); primary(URI, Converters.URL); primary(CREATION_METHOD, Converters.STRING); primary(CLAIMED, Converters.BOOLEAN); } @Override public String getProfileUrl(final OAuth2AccessToken accessToken, final OAuth20Configuration configuration) { if (accessToken instanceof OrcidToken) { return String.format("https://api.orcid.org/v1.1/%s/orcid-profile", ((OrcidToken) accessToken).getOrcid()); } else { throw new OAuthException("Token in getProfileUrl is not an OrcidToken"); } } @Override public OrcidProfile extractUserProfile(String body) throws HttpAction { OrcidProfile profile = newProfile(); for(final String attribute : getPrimaryAttributes()) { convertAndAdd(profile, attribute, CommonHelper.substringBetween(body, "<" + attribute + ">", "</" + attribute + ">")); } return profile; } }