package org.pac4j.oauth.profile.twitter;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.scribejava.core.model.OAuth1Token;
import org.pac4j.core.profile.converter.Converters;
import org.pac4j.core.profile.converter.DateConverter;
import org.pac4j.oauth.config.OAuth10Configuration;
import org.pac4j.oauth.profile.JsonHelper;
import org.pac4j.oauth.profile.definition.OAuth10ProfileDefinition;
import java.util.Arrays;
import java.util.Locale;
/**
* This class is the Twitter profile definition.
*
* @author Jerome Leleu
* @since 1.1.0
*/
public class TwitterProfileDefinition extends OAuth10ProfileDefinition<TwitterProfile> {
public static final String CONTRIBUTORS_ENABLED = "contributors_enabled";
public static final String CREATED_AT = "created_at";
public static final String DEFAULT_PROFILE = "default_profile";
public static final String DEFAULT_PROFILE_IMAGE = "default_profile_image";
public static final String DESCRIPTION = "description";
public static final String FAVOURITES_COUNT = "favourites_count";
public static final String FOLLOW_REQUEST_SENT = "follow_request_sent";
public static final String FOLLOWERS_COUNT = "followers_count";
public static final String FOLLOWING = "following";
public static final String FRIENDS_COUNT = "friends_count";
public static final String GEO_ENABLED = "geo_enabled";
public static final String IS_TRANSLATOR = "is_translator";
public static final String LANG = "lang";
public static final String LISTED_COUNT = "listed_count";
public static final String NAME = "name";
public static final String NOTIFICATIONS = "notifications";
public static final String PROFILE_BACKGROUND_COLOR = "profile_background_color";
public static final String PROFILE_BACKGROUND_IMAGE_URL = "profile_background_image_url";
public static final String PROFILE_BACKGROUND_IMAGE_URL_HTTPS = "profile_background_image_url_https";
public static final String PROFILE_BACKGROUND_TILE = "profile_background_tile";
public static final String PROFILE_IMAGE_URL = "profile_image_url";
public static final String PROFILE_IMAGE_URL_HTTPS = "profile_image_url_https";
public static final String PROFILE_LINK_COLOR = "profile_link_color";
public static final String PROFILE_SIDEBAR_BORDER_COLOR = "profile_sidebar_border_color";
public static final String PROFILE_SIDEBAR_FILL_COLOR = "profile_sidebar_fill_color";
public static final String PROFILE_TEXT_COLOR = "profile_text_color";
public static final String PROFILE_USE_BACKGROUND_IMAGE = "profile_use_background_image";
public static final String PROTECTED = "protected";
public static final String SCREEN_NAME = "screen_name";
public static final String SHOW_ALL_INLINE_MEDIA = "show_all_inline_media";
public static final String STATUSES_COUNT = "statuses_count";
public static final String TIME_ZONE = "time_zone";
public static final String URL = "url";
public static final String UTC_OFFSET = "utc_offset";
public static final String VERIFIED = "verified";
public TwitterProfileDefinition() {
super(x -> new TwitterProfile());
Arrays.stream(new String[] {DESCRIPTION, NAME, SCREEN_NAME, TIME_ZONE})
.forEach(a -> primary(a, Converters.STRING));
Arrays.stream(new String[] {CONTRIBUTORS_ENABLED, DEFAULT_PROFILE, DEFAULT_PROFILE_IMAGE, FOLLOW_REQUEST_SENT, FOLLOWING,
GEO_ENABLED, IS_TRANSLATOR, NOTIFICATIONS, PROFILE_USE_BACKGROUND_IMAGE, PROTECTED, SHOW_ALL_INLINE_MEDIA,
PROFILE_BACKGROUND_TILE, VERIFIED})
.forEach(a -> primary(a, Converters.BOOLEAN));
Arrays.stream(new String[] {FAVOURITES_COUNT, FOLLOWERS_COUNT, FRIENDS_COUNT, LISTED_COUNT, STATUSES_COUNT, UTC_OFFSET})
.forEach(a -> primary(a, Converters.INTEGER));
Arrays.stream(new String[] {URL, PROFILE_BACKGROUND_IMAGE_URL, PROFILE_BACKGROUND_IMAGE_URL_HTTPS,
PROFILE_IMAGE_URL, PROFILE_IMAGE_URL_HTTPS}).forEach(a -> primary(a, Converters.URL));
Arrays.stream(new String[] {PROFILE_BACKGROUND_COLOR, PROFILE_LINK_COLOR, PROFILE_SIDEBAR_BORDER_COLOR,
PROFILE_SIDEBAR_FILL_COLOR, PROFILE_TEXT_COLOR}).forEach(a -> primary(a, Converters.COLOR));
primary(LANG, Converters.LOCALE);
primary(CREATED_AT, new DateConverter("EEE MMM dd HH:mm:ss Z yyyy", Locale.US));
}
@Override
public String getProfileUrl(final OAuth1Token accessToken, final OAuth10Configuration configuration) {
return "https://api.twitter.com/1.1/account/verify_credentials.json";
}
@Override
public TwitterProfile extractUserProfile(final String body) {
final TwitterProfile profile = newProfile();
final JsonNode json = JsonHelper.getFirstNode(body);
if (json != null) {
profile.setId(JsonHelper.getElement(json, "id"));
for (final String attribute : getPrimaryAttributes()) {
convertAndAdd(profile, attribute, JsonHelper.getElement(json, attribute));
}
}
return profile;
}
}