package org.pac4j.oauth.profile.yahoo; import com.github.scribejava.core.model.OAuth1Token; import com.github.scribejava.core.model.Verb; import org.pac4j.core.exception.HttpAction; import org.pac4j.core.exception.HttpCommunicationException; import org.pac4j.core.util.CommonHelper; import org.pac4j.oauth.config.OAuth10Configuration; import org.pac4j.oauth.profile.creator.OAuth10ProfileCreator; import org.pac4j.oauth.profile.definition.OAuth10ProfileDefinition; /** * Specific profile creator for Yahoo. * * @author Jerome Leleu * @since 2.0.0 */ public class YahooProfileCreator extends OAuth10ProfileCreator<YahooProfile> { public YahooProfileCreator(final OAuth10Configuration configuration) { super(configuration); } @Override protected YahooProfile retrieveUserProfileFromToken(final OAuth1Token accessToken) throws HttpAction { // get the guid: https://developer.yahoo.com/social/rest_api_guide/introspective-guid-resource.html final OAuth10ProfileDefinition<YahooProfile> profileDefinition = (OAuth10ProfileDefinition<YahooProfile>) configuration.getProfileDefinition(); final String profileUrl = profileDefinition.getProfileUrl(accessToken, this.configuration); String body = sendRequestForData(accessToken, profileUrl, profileDefinition.getProfileVerb()); final String guid = CommonHelper.substringBetween(body, "<value>", "</value>"); logger.debug("guid : {}", guid); if (CommonHelper.isBlank(guid)) { throw new HttpCommunicationException("Cannot find guid from body : " + body); } body = sendRequestForData(accessToken, "https://social.yahooapis.com/v1/user/" + guid + "/profile?format=json", Verb.GET); final YahooProfile profile = (YahooProfile) configuration.getProfileDefinition().extractUserProfile(body); addAccessTokenToProfile(profile, accessToken); return profile; } }