diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthInfo.java b/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthInfo.java index 28e98557..51991ed6 100644 --- a/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthInfo.java +++ b/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthInfo.java @@ -1,24 +1,29 @@ package com.feth.play.module.pa.providers.oauth2.facebook; import java.util.Date; -import java.util.Map; +import com.fasterxml.jackson.databind.JsonNode; import com.feth.play.module.pa.providers.oauth2.OAuth2AuthInfo; -import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider; + +import static com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider.Constants.ACCESS_TOKEN; +import static com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider.Constants.REFRESH_TOKEN; + public class FacebookAuthInfo extends OAuth2AuthInfo { /** - * + * */ private static final long serialVersionUID = 1L; - private static final String EXPIRES = "expires"; + private static final String EXPIRES_IN = "expires_in"; - public FacebookAuthInfo(final Map m) { - super( m.get(OAuth2AuthProvider.Constants.ACCESS_TOKEN), - new Date().getTime() + Long.parseLong(m.get(EXPIRES)) * 1000, - m.get(OAuth2AuthProvider.Constants.REFRESH_TOKEN)); + public FacebookAuthInfo(final JsonNode json) { + super( + json.get(ACCESS_TOKEN).asText(), + new Date().getTime() + json.get(EXPIRES_IN).asLong() * 1000, + json.get(REFRESH_TOKEN) != null ? json.get(REFRESH_TOKEN).asText() : null + ); } } diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java index 8fd4ddf7..68d30811 100644 --- a/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java +++ b/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java @@ -1,12 +1,11 @@ package com.feth.play.module.pa.providers.oauth2.facebook; -import java.net.URI; -import java.util.HashMap; + import java.util.List; -import java.util.Map; + import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; + import org.apache.http.message.BasicNameValuePair; import play.Application; @@ -80,24 +79,21 @@ public String getKey() { @Override protected FacebookAuthInfo buildInfo(final WSResponse r) throws AccessTokenException { + + final JsonNode respJson = r.asJson(); + if (r.getStatus() >= 400) { throw new AccessTokenException(r.asJson().get(ERROR).get(MESSAGE).asText()); + } else { - final String query = r.getBody(); - Logger.debug(query); - final List pairs = URLEncodedUtils.parse( - URI.create("/?" + query), "utf-8"); - if (pairs.size() < 2) { - throw new AccessTokenException(); - } - final Map m = new HashMap( - pairs.size()); - for (final NameValuePair nameValuePair : pairs) { - m.put(nameValuePair.getName(), nameValuePair.getValue()); + + if (respJson.size() < 2) { + throw new AccessTokenException("At least two values were expected, but got " + respJson.size()); } - return new FacebookAuthInfo(m); + return new FacebookAuthInfo(respJson); } + } @Override