package org.pac4j.oauth.profile.paypal; import com.fasterxml.jackson.databind.JsonNode; 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.JsonHelper; import org.pac4j.oauth.profile.converter.JsonConverter; import org.pac4j.oauth.profile.definition.OAuth20ProfileDefinition; import java.util.Arrays; /** * This class is the PayPal profile definition. * * @author Jerome Leleu * @since 1.4.2 */ public class PayPalProfileDefinition extends OAuth20ProfileDefinition<PayPalProfile> { public static final String ADDRESS = "address"; public static final String LANGUAGE = "language"; public static final String ZONEINFO = "zoneinfo"; public static final String NAME = "name"; public static final String GIVEN_NAME = "given_name"; public PayPalProfileDefinition() { super(x -> new PayPalProfile()); Arrays.stream(new String[] {ZONEINFO, NAME, GIVEN_NAME}).forEach(a -> primary(a, Converters.STRING)); primary(ADDRESS, new JsonConverter<>(PayPalAddress.class)); primary(LANGUAGE, Converters.LOCALE); } @Override public String getProfileUrl(final OAuth2AccessToken accessToken, final OAuth20Configuration configuration) { return "https://api.paypal.com/v1/identity/openidconnect/userinfo?schema=openid"; } @Override public PayPalProfile extractUserProfile(final String body) throws HttpAction { final PayPalProfile profile = newProfile(); final JsonNode json = JsonHelper.getFirstNode(body); if (json != null) { final String userId = (String) JsonHelper.getElement(json, "user_id"); profile.setId(CommonHelper.substringAfter(userId, "/user/")); for (final String attribute : getPrimaryAttributes()) { convertAndAdd(profile, attribute, JsonHelper.getElement(json, attribute)); } } return profile; } }