package backend.twitter; import com.ning.http.client.Realm; import org.codehaus.jackson.JsonNode; import play.libs.F; import play.libs.WS; /** * @author sondre */ public final class TwitterApplicationAuthenticator { private TwitterApplicationAuthenticator() {} public static TwitterApplicationAuthenticator create() { return new TwitterApplicationAuthenticator(); } public F.Promise<String> obtainBearerToken(final String consumerKey, final String consumerToken) { final F.Promise<WS.Response> responsePromise = WS.url(TwitterClientFactory.TWITTER_API_BASE + "/oauth2/token") .setAuth(consumerKey, consumerToken, Realm.AuthScheme.BASIC) .setContentType("application/x-www-form-urlencoded;charset=UTF-8") .post("grant_type=client_credentials"); return responsePromise.map(new F.Function<WS.Response, String>() { @Override public String apply(WS.Response response) throws Throwable { final JsonNode jsonNode = response.asJson(); if("bearer".equals(jsonNode.findPath("token_type").getTextValue())) { return jsonNode.findPath("access_token").getTextValue(); } else { throw new RuntimeException(String.format("Illegal response from the Twitter API. Data returned: %1$s", response.getBody())); } } }); } }