package org.pac4j.oauth.profile.vk; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.github.scribejava.core.model.OAuth2AccessToken; import org.pac4j.core.exception.HttpAction; import org.pac4j.core.profile.converter.Converters; import org.pac4j.core.profile.converter.DateConverter; import org.pac4j.oauth.client.VkClient; import org.pac4j.oauth.config.OAuth20Configuration; import org.pac4j.oauth.profile.JsonHelper; import org.pac4j.oauth.profile.definition.OAuth20ProfileDefinition; import java.util.Arrays; /** * This class is the Vk profile definition. * * @author indvdum (gotoindvdum[at]gmail[dot]com) * @since 1.5 */ public class VkProfileDefinition extends OAuth20ProfileDefinition<VkProfile> { public static final String LAST_NAME = "last_name"; public static final String SEX = "sex"; public static final String BIRTH_DATE = "bdate"; public static final String PHOTO_50 = "photo_50"; public static final String PHOTO_100 = "photo_100"; public static final String PHOTO_200_ORIG = "photo_200_orig"; public static final String PHOTO_200 = "photo_200"; public static final String PHOTO_400_ORIG = "photo_400_orig"; public static final String PHOTO_MAX = "photo_max"; public static final String PHOTO_MAX_ORIG = "photo_max_orig"; public static final String ONLINE = "online"; public static final String ONLINE_MOBILE = "online_mobile"; public static final String DOMAIN = "domain"; public static final String HAS_MOBILE = "has_mobile"; public static final String MOBILE_PHONE = "mobile_phone"; public static final String HOME_PHONE = "home_phone"; public static final String SKYPE = "skype"; public static final String SITE = "site"; public static final String CAN_POST = "can_post"; public static final String CAN_SEE_ALL_POST = "can_see_all_posts"; public static final String CAN_SEE_AUDIO = "can_see_audio"; public static final String CAN_WRITE_PRIVATE_MESSAGE = "can_write_private_message"; public static final String STATUS = "status"; public static final String COMMON_COUNT = "common_count"; public static final String RELATION = "relation"; protected final static String BASE_URL = "https://api.vk.com/method/users.get"; public VkProfileDefinition() { super(x -> new VkProfile()); Arrays.stream(new String[] {LAST_NAME, PHOTO_50, PHOTO_100, PHOTO_200_ORIG, PHOTO_200, PHOTO_400_ORIG, PHOTO_MAX, PHOTO_MAX_ORIG, DOMAIN, MOBILE_PHONE, HOME_PHONE, SKYPE, SITE, STATUS}).forEach(a -> primary(a, Converters.STRING)); primary(COMMON_COUNT, Converters.INTEGER); primary(RELATION, Converters.INTEGER); Arrays.stream(new String[] {ONLINE, ONLINE_MOBILE, HAS_MOBILE, CAN_POST, CAN_SEE_ALL_POST, CAN_SEE_AUDIO, CAN_WRITE_PRIVATE_MESSAGE}) .forEach(a -> primary(a, Converters.BOOLEAN)); primary(BIRTH_DATE, new DateConverter("dd.MM.yyyy")); primary(SEX, Converters.GENDER); } @Override public String getProfileUrl(final OAuth2AccessToken accessToken, final OAuth20Configuration configuration) { final VkClient client = (VkClient) configuration.getClient(); return BASE_URL + "?fields=" + client.getFields(); } @Override public VkProfile extractUserProfile(final String body) throws HttpAction { final VkProfile profile = newProfile(); JsonNode json = JsonHelper.getFirstNode(body); if (json != null) { ArrayNode array = (ArrayNode) json.get("response"); JsonNode userNode = array.get(0); profile.setId(JsonHelper.getElement(userNode, "uid")); for (final String attribute : getPrimaryAttributes()) { convertAndAdd(profile, attribute, JsonHelper.getElement(userNode, attribute)); } } return profile; } }