Merged Diego's changes for OAuth2.0 server-side flow
This commit is contained in:
commit
c441b7d8a4
8 files changed
+152
-7
No files matched your search
@@ -1,5 +1,6 @@
|
||||
package org.scribe.builder.api;
|
||||
|
||||
import org.scribe.extractors.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.oauth.*;
|
||||
|
||||
@@ -22,6 +23,33 @@ import org.scribe.oauth.*;
|
||||
public abstract class DefaultApi20 implements Api
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns the access token extractor.
|
||||
*
|
||||
* @return access token extractor
|
||||
*/
|
||||
public AccessTokenExtractor getAccessTokenExtractor()
|
||||
{
|
||||
return new TokenExtractor20Impl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the verb for the access token endpoint (defaults to GET)
|
||||
*
|
||||
* @return access token endpoint verb
|
||||
*/
|
||||
public Verb getAccessTokenVerb()
|
||||
{
|
||||
return Verb.GET;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the URL that receives the access token requests.
|
||||
*
|
||||
* @return access token URL
|
||||
*/
|
||||
public abstract String getAccessTokenEndpoint();
|
||||
|
||||
/**
|
||||
* Returns the URL where you should redirect your users to authenticate
|
||||
* your application.
|
||||
|
||||
@@ -5,8 +5,14 @@ import org.scribe.utils.*;
|
||||
|
||||
public class FacebookApi extends DefaultApi20
|
||||
{
|
||||
private static final String AUTHORIZE_URL = "https://graph.facebook.com/oauth/authorize?response_type=token&client_id=%s&redirect_uri=%s";
|
||||
private static final String AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s";
|
||||
|
||||
@Override
|
||||
public String getAccessTokenEndpoint()
|
||||
{
|
||||
return "https://graph.facebook.com/oauth/access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthorizationUrl(OAuthConfig config)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package org.scribe.extractors;
|
||||
|
||||
import java.util.regex.*;
|
||||
|
||||
import org.scribe.exceptions.*;
|
||||
import org.scribe.model.*;
|
||||
import org.scribe.utils.*;
|
||||
|
||||
/**
|
||||
* Default implementation of {@AccessTokenExtractor}. Conforms to OAuth 2.0
|
||||
*
|
||||
*/
|
||||
public class TokenExtractor20Impl implements AccessTokenExtractor
|
||||
{
|
||||
private static final String TOKEN_REGEX = "access_token=(\\S*?)(&(\\S*))?";
|
||||
private static final String EMPTY_SECRET = "";
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public Token extract(String response)
|
||||
{
|
||||
Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string");
|
||||
|
||||
Matcher matcher = Pattern.compile(TOKEN_REGEX).matcher(response);
|
||||
if (matcher.matches())
|
||||
{
|
||||
String token = URLUtils.percentDecode(matcher.group(1));
|
||||
return new Token(token, EMPTY_SECRET);
|
||||
} else
|
||||
{
|
||||
throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" + response + "'", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -41,4 +41,9 @@ public class OAuthConstants
|
||||
|
||||
//OAuth 2.0
|
||||
public static final String ACCESS_TOKEN = "access_token";
|
||||
public static final String CLIENT_ID = "client_id";
|
||||
public static final String CLIENT_SECRET = "client_secret";
|
||||
public static final String REDIRECT_URI = "redirect_uri";
|
||||
public static final String CODE = "code";
|
||||
|
||||
}
|
||||
@@ -35,7 +35,13 @@ public class OAuth20ServiceImpl implements OAuthService
|
||||
*/
|
||||
public Token getAccessToken(Token requestToken, Verifier verifier)
|
||||
{
|
||||
throw new UnsupportedOperationException("Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there");
|
||||
OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
|
||||
request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey());
|
||||
request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret());
|
||||
request.addQuerystringParameter(OAuthConstants.CODE, verifier.getValue());
|
||||
request.addQuerystringParameter(OAuthConstants.REDIRECT_URI, config.getCallback());
|
||||
Response response = request.send();
|
||||
return api.getAccessTokenExtractor().extract(response.getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user