From a67ba89c71893420eb1920259d53f90d9f103036 Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Mon, 17 Jan 2011 15:38:02 +0800 Subject: [PATCH 01/15] change to support "realm" parameter(for douban.com) and second step (authorization) callback parameter(for t.sina.com.cn & t.qq.com) --- .../org/scribe/builder/api/DefaultApi10a.java | 2 +- .../org/scribe/builder/api/EvernoteApi.java | 5 +++-- .../org/scribe/builder/api/FoursquareApi.java | 3 ++- .../java/org/scribe/builder/api/GoogleApi.java | 2 +- .../org/scribe/builder/api/LinkedInApi.java | 2 +- .../org/scribe/builder/api/TwitterApi.java | 3 ++- .../java/org/scribe/builder/api/VimeoApi.java | 3 ++- .../java/org/scribe/builder/api/YahooApi.java | 3 ++- .../java/org/scribe/builder/api/YammerApi.java | 3 ++- .../java/org/scribe/model/OAuthConstants.java | 1 + .../java/org/scribe/model/OAuthRequest.java | 4 ++-- src/main/java/org/scribe/model/Request.java | 3 ++- .../org/scribe/oauth/OAuth10aServiceImpl.java | 18 +++++++++--------- 13 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/scribe/builder/api/DefaultApi10a.java b/src/main/java/org/scribe/builder/api/DefaultApi10a.java index 2899dee0f..1cf8f15af 100644 --- a/src/main/java/org/scribe/builder/api/DefaultApi10a.java +++ b/src/main/java/org/scribe/builder/api/DefaultApi10a.java @@ -124,7 +124,7 @@ public Verb getRequestTokenVerb() * @param requestToken the request token you need to authorize * @return the URL where you should redirect your users */ - public abstract String getAuthorizationUrl(Token requestToken); + public abstract String getAuthorizationUrl(Token requestToken, OAuthConfig config); /** * Returns the {@link OAuthService} for this Api diff --git a/src/main/java/org/scribe/builder/api/EvernoteApi.java b/src/main/java/org/scribe/builder/api/EvernoteApi.java index 48d45e920..045f15493 100644 --- a/src/main/java/org/scribe/builder/api/EvernoteApi.java +++ b/src/main/java/org/scribe/builder/api/EvernoteApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; import org.scribe.model.Verb; @@ -32,7 +33,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } @@ -54,7 +55,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(SANDBOX_URL + "?oauth_token=%s", requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/FoursquareApi.java b/src/main/java/org/scribe/builder/api/FoursquareApi.java index 060a76b76..4fd2a7f88 100644 --- a/src/main/java/org/scribe/builder/api/FoursquareApi.java +++ b/src/main/java/org/scribe/builder/api/FoursquareApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class FoursquareApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/GoogleApi.java b/src/main/java/org/scribe/builder/api/GoogleApi.java index 9c86e5e1a..dd3493292 100644 --- a/src/main/java/org/scribe/builder/api/GoogleApi.java +++ b/src/main/java/org/scribe/builder/api/GoogleApi.java @@ -31,7 +31,7 @@ public Verb getRequestTokenVerb() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/LinkedInApi.java b/src/main/java/org/scribe/builder/api/LinkedInApi.java index f459404d3..8308c810e 100644 --- a/src/main/java/org/scribe/builder/api/LinkedInApi.java +++ b/src/main/java/org/scribe/builder/api/LinkedInApi.java @@ -19,7 +19,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/TwitterApi.java b/src/main/java/org/scribe/builder/api/TwitterApi.java index af8f198a4..7ef8ffb55 100644 --- a/src/main/java/org/scribe/builder/api/TwitterApi.java +++ b/src/main/java/org/scribe/builder/api/TwitterApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class TwitterApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/VimeoApi.java b/src/main/java/org/scribe/builder/api/VimeoApi.java index 231895dab..bf46bd078 100644 --- a/src/main/java/org/scribe/builder/api/VimeoApi.java +++ b/src/main/java/org/scribe/builder/api/VimeoApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class VimeoApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/YahooApi.java b/src/main/java/org/scribe/builder/api/YahooApi.java index e8a29a738..bdb42602b 100644 --- a/src/main/java/org/scribe/builder/api/YahooApi.java +++ b/src/main/java/org/scribe/builder/api/YahooApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class YahooApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/YammerApi.java b/src/main/java/org/scribe/builder/api/YammerApi.java index 85477a599..223e2c70d 100644 --- a/src/main/java/org/scribe/builder/api/YammerApi.java +++ b/src/main/java/org/scribe/builder/api/YammerApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class YammerApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/model/OAuthConstants.java b/src/main/java/org/scribe/model/OAuthConstants.java index 01b98d3de..6ce16261a 100644 --- a/src/main/java/org/scribe/model/OAuthConstants.java +++ b/src/main/java/org/scribe/model/OAuthConstants.java @@ -38,6 +38,7 @@ public class OAuthConstants public static final String HEADER = "Authorization"; public static final Token EMPTY_TOKEN = new Token("", ""); public static final String SCOPE = "scope"; + public static final String REALM = "realm"; //OAuth 2.0 public static final String ACCESS_TOKEN = "access_token"; diff --git a/src/main/java/org/scribe/model/OAuthRequest.java b/src/main/java/org/scribe/model/OAuthRequest.java index 43892278f..ef404792f 100644 --- a/src/main/java/org/scribe/model/OAuthRequest.java +++ b/src/main/java/org/scribe/model/OAuthRequest.java @@ -41,13 +41,13 @@ public void addOAuthParameter(String key, String value) private String checkKey(String key) { - if (key.startsWith(OAUTH_PREFIX) || key.equals(OAuthConstants.SCOPE)) + if (key.startsWith(OAUTH_PREFIX) || key.equals(OAuthConstants.SCOPE) || key.equals(OAuthConstants.REALM)) { return key; } else { - throw new IllegalArgumentException(String.format("OAuth parameters must either be '%s' or start with '%s'", OAuthConstants.SCOPE, OAUTH_PREFIX)); + throw new IllegalArgumentException(String.format("OAuth parameters must either be '%s', '%s' or start with '%s'", OAuthConstants.SCOPE, OAuthConstants.REALM, OAUTH_PREFIX)); } } diff --git a/src/main/java/org/scribe/model/Request.java b/src/main/java/org/scribe/model/Request.java index 7557bb876..01d3d782d 100644 --- a/src/main/java/org/scribe/model/Request.java +++ b/src/main/java/org/scribe/model/Request.java @@ -61,9 +61,10 @@ public Response send() private void createConnection() throws IOException { + String effectiveUrl = URLUtils.appendParametersToQueryString(url, querystringParams); if (connection == null) { - connection = (HttpURLConnection) new URL(url).openConnection(); + connection = (HttpURLConnection) new URL(effectiveUrl).openConnection(); } } diff --git a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java index 9ab565a88..2e0d3baf0 100644 --- a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java @@ -10,12 +10,12 @@ */ public class OAuth10aServiceImpl implements OAuthService { - private static final String NO_SCOPE = null; + protected static final String NO_SCOPE = null; private static final String VERSION = "1.0"; - private OAuthConfig config; - private DefaultApi10a api; - private String scope; + protected OAuthConfig config; + protected DefaultApi10a api; + protected String scope; /** * Default constructor @@ -42,7 +42,7 @@ public Token getRequestToken() return api.getRequestTokenExtractor().extract(response.getBody()); } - private void addOAuthParams(OAuthRequest request, Token token) + protected void addOAuthParams(OAuthRequest request, Token token) { request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); @@ -99,16 +99,16 @@ public void addScope(String scope) */ public String getAuthorizationUrl(Token requestToken) { - return api.getAuthorizationUrl(requestToken); + return api.getAuthorizationUrl(requestToken, this.config); } - - private String getSignature(OAuthRequest request, Token token) + + protected String getSignature(OAuthRequest request, Token token) { String baseString = api.getBaseStringExtractor().extract(request); return api.getSignatureService().getSignature(baseString, config.getApiSecret(), token.getSecret()); } - private void addOAuthHeader(OAuthRequest request) + protected void addOAuthHeader(OAuthRequest request) { String oauthHeader = api.getHeaderExtractor().extract(request); request.addHeader(OAuthConstants.HEADER, oauthHeader); From 234ecdea98f9e65e8c55b0aa7e0ccf8a4c981860 Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Thu, 20 Jan 2011 16:49:42 +0800 Subject: [PATCH 02/15] oauth 2.0 for web application authentication --- .../org/scribe/builder/api/DefaultApi20.java | 27 +++++++++++++++++++ .../org/scribe/builder/api/FacebookApi.java | 8 +++++- .../java/org/scribe/model/OAuthConstants.java | 4 +++ .../org/scribe/oauth/OAuth20ServiceImpl.java | 8 +++++- 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/scribe/builder/api/DefaultApi20.java b/src/main/java/org/scribe/builder/api/DefaultApi20.java index 6e0356768..f203395b0 100644 --- a/src/main/java/org/scribe/builder/api/DefaultApi20.java +++ b/src/main/java/org/scribe/builder/api/DefaultApi20.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.extractors.*; import org.scribe.model.*; import org.scribe.oauth.*; @@ -21,6 +22,32 @@ */ public abstract class DefaultApi20 implements Api { + /** + * Returns the access token extractor. + * + * @return access token extractor + */ + public AccessTokenExtractor getAccessTokenExtractor() + { + return new AccessTokenExtractorImpl(); + } + + /** + * Returns the verb for the access token endpoint (defaults to POST) + * + * @return access token endpoint verb + */ + public Verb getAccessTokenVerb() + { + return Verb.POST; + } + + /** + * 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 diff --git a/src/main/java/org/scribe/builder/api/FacebookApi.java b/src/main/java/org/scribe/builder/api/FacebookApi.java index 896c71fed..20deb7b18 100644 --- a/src/main/java/org/scribe/builder/api/FacebookApi.java +++ b/src/main/java/org/scribe/builder/api/FacebookApi.java @@ -10,7 +10,13 @@ public class FacebookApi extends DefaultApi20 public String getAuthorizationUrl(OAuthConfig config) { if(OAuthConstants.OUT_OF_BAND.equals(config.getCallback())) - throw new OAuthException("Facebook does not support oob authentication."); + throw new OAuthException("Facebook does not support oob authentication."); + return String.format(AUTHORIZE_URL, config.getApiKey(), config.getCallback()); } + + @Override + public String getAccessTokenEndpoint() { + return "https://graph.facebook.com/oauth/access_token"; + } } diff --git a/src/main/java/org/scribe/model/OAuthConstants.java b/src/main/java/org/scribe/model/OAuthConstants.java index 6ce16261a..f4c525c88 100644 --- a/src/main/java/org/scribe/model/OAuthConstants.java +++ b/src/main/java/org/scribe/model/OAuthConstants.java @@ -41,5 +41,9 @@ public class OAuthConstants public static final String REALM = "realm"; //OAuth 2.0 + public static final String CLIENT_ID = "client_id"; + public static final String CLIENT_SECRET = "client_secret"; public static final String ACCESS_TOKEN = "access_token"; + public static final String VERIFICATION_CODE = "code"; + public static final String REDIRECT_URI = "redirect_uri"; } diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index f95725778..7ad2b8893 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -35,7 +35,13 @@ public void addScope(String scope) */ 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.addQuerystringParam(OAuthConstants.CLIENT_ID, this.config.getApiKey()); + request.addQuerystringParam(OAuthConstants.CLIENT_SECRET, this.config.getApiSecret()); + request.addQuerystringParam(OAuthConstants.VERIFICATION_CODE, verifier.getValue()); + request.addQuerystringParam(OAuthConstants.REDIRECT_URI, this.config.getCallback()); + Response response = request.send(); + return api.getAccessTokenExtractor().extract(response.getBody()); } /** From e0ed44896bc1fb2bbb453c8128ad687da907f4c0 Mon Sep 17 00:00:00 2001 From: JustinSong Date: Mon, 9 May 2011 03:02:16 -0700 Subject: [PATCH 03/15] Edited src/test/java/org/scribe/examples/FacebookExample.java via GitHub --- src/test/java/org/scribe/examples/FacebookExample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/scribe/examples/FacebookExample.java b/src/test/java/org/scribe/examples/FacebookExample.java index 74e8ed07f..68e08033a 100644 --- a/src/test/java/org/scribe/examples/FacebookExample.java +++ b/src/test/java/org/scribe/examples/FacebookExample.java @@ -37,7 +37,7 @@ public static void main(String[] args) System.out.println("Now go and authorize Scribe here:"); System.out.println(authorizationUrl); System.out.println("And paste the access token here"); - System.out.print(">>"); + System.out.print(">>>"); Token accessToken = new Token(in.nextLine(), NO_SECRET_NEEDED); System.out.println(); From bc65e3fbc663156cf642785fcfcb8a96ca7609f6 Mon Sep 17 00:00:00 2001 From: pnsantos Date: Thu, 28 Apr 2011 06:41:55 +0800 Subject: [PATCH 04/15] Added SAPO (http://id.sapo.pt/connect) API --- .../java/org/scribe/builder/api/SapoApi.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/org/scribe/builder/api/SapoApi.java diff --git a/src/main/java/org/scribe/builder/api/SapoApi.java b/src/main/java/org/scribe/builder/api/SapoApi.java new file mode 100644 index 000000000..12d2e27a8 --- /dev/null +++ b/src/main/java/org/scribe/builder/api/SapoApi.java @@ -0,0 +1,37 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.model.Verb; + + +public class SapoApi extends DefaultApi10a { + + private static final String AUTHORIZE_URL = "https://id.sapo.pt/oauth/authorize?oauth_token=%s"; + private static final String ACCESS_URL = "https://id.sapo.pt/oauth/access_token"; + private static final String REQUEST_URL ="https://id.sapo.pt/oauth/request_token"; + + @Override + public String getAccessTokenEndpoint() { + return ACCESS_URL; + } + + @Override + public String getRequestTokenEndpoint() { + return REQUEST_URL; + } + + @Override + public String getAuthorizationUrl(Token requestToken) { + return String.format(AUTHORIZE_URL, requestToken.getToken()); + } + + @Override + public Verb getRequestTokenVerb() { + return Verb.GET; + } + + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } +} From 974b5c3e20140abc7824573af88fd5cec3cd1b30 Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Thu, 12 May 2011 16:08:13 +0800 Subject: [PATCH 05/15] visibility enhance for token and service --- src/main/java/org/scribe/model/Token.java | 4 +- .../org/scribe/oauth/OAuth20ServiceImpl.java | 158 +++++++++--------- 2 files changed, 81 insertions(+), 81 deletions(-) diff --git a/src/main/java/org/scribe/model/Token.java b/src/main/java/org/scribe/model/Token.java index c6975ed9e..8410ac1bd 100644 --- a/src/main/java/org/scribe/model/Token.java +++ b/src/main/java/org/scribe/model/Token.java @@ -11,8 +11,8 @@ public class Token implements Serializable { private static final long serialVersionUID = 715000866082812683L; - private final String token; - private final String secret; + protected final String token; + protected final String secret; /** * Default constructor diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index 7ad2b8893..db9faa60a 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -1,79 +1,79 @@ -package org.scribe.oauth; - -import org.scribe.builder.api.*; -import org.scribe.model.*; - -public class OAuth20ServiceImpl implements OAuthService -{ - private static final String VERSION = "2.0"; - - private final DefaultApi20 api; - private final OAuthConfig config; - - /** - * Default constructor - * - * @param api OAuth2.0 api information - * @param config OAuth 2.0 configuration param object - */ - public OAuth20ServiceImpl(DefaultApi20 api, OAuthConfig config) - { - this.api = api; - this.config = config; - } - - /** - * {@inheritDoc} - */ - public void addScope(String scope) - { - throw new UnsupportedOperationException("OAuth 2 does not use scopes"); - } - - /** - * {@inheritDoc} - */ - public Token getAccessToken(Token requestToken, Verifier verifier) - { - OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); - request.addQuerystringParam(OAuthConstants.CLIENT_ID, this.config.getApiKey()); - request.addQuerystringParam(OAuthConstants.CLIENT_SECRET, this.config.getApiSecret()); - request.addQuerystringParam(OAuthConstants.VERIFICATION_CODE, verifier.getValue()); - request.addQuerystringParam(OAuthConstants.REDIRECT_URI, this.config.getCallback()); - Response response = request.send(); - return api.getAccessTokenExtractor().extract(response.getBody()); - } - - /** - * {@inheritDoc} - */ - public Token getRequestToken() - { - throw new UnsupportedOperationException("Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there"); - } - - /** - * {@inheritDoc} - */ - public String getVersion() - { - return VERSION; - } - - /** - * {@inheritDoc} - */ - public void signRequest(Token accessToken, OAuthRequest request) - { - request.addQuerystringParam(OAuthConstants.ACCESS_TOKEN, accessToken.getToken()); - } - - /** - * {@inheritDoc} - */ - public String getAuthorizationUrl(Token requestToken) - { - return api.getAuthorizationUrl(config); - } - -} +package org.scribe.oauth; + +import org.scribe.builder.api.*; +import org.scribe.model.*; + +public class OAuth20ServiceImpl implements OAuthService +{ + private static final String VERSION = "2.0"; + + private final DefaultApi20 api; + protected final OAuthConfig config; + + /** + * Default constructor + * + * @param api OAuth2.0 api information + * @param config OAuth 2.0 configuration param object + */ + public OAuth20ServiceImpl(DefaultApi20 api, OAuthConfig config) + { + this.api = api; + this.config = config; + } + + /** + * {@inheritDoc} + */ + public void addScope(String scope) + { + throw new UnsupportedOperationException("OAuth 2 does not use scopes"); + } + + /** + * {@inheritDoc} + */ + public Token getAccessToken(Token requestToken, Verifier verifier) + { + OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParam(OAuthConstants.CLIENT_ID, this.config.getApiKey()); + request.addQuerystringParam(OAuthConstants.CLIENT_SECRET, this.config.getApiSecret()); + request.addQuerystringParam(OAuthConstants.VERIFICATION_CODE, verifier.getValue()); + request.addQuerystringParam(OAuthConstants.REDIRECT_URI, this.config.getCallback()); + Response response = request.send(); + return api.getAccessTokenExtractor().extract(response.getBody()); + } + + /** + * {@inheritDoc} + */ + public Token getRequestToken() + { + throw new UnsupportedOperationException("Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there"); + } + + /** + * {@inheritDoc} + */ + public String getVersion() + { + return VERSION; + } + + /** + * {@inheritDoc} + */ + public void signRequest(Token accessToken, OAuthRequest request) + { + request.addQuerystringParam(OAuthConstants.ACCESS_TOKEN, accessToken.getToken()); + } + + /** + * {@inheritDoc} + */ + public String getAuthorizationUrl(Token requestToken) + { + return api.getAuthorizationUrl(config); + } + +} From f66db1fbaad3c71744a669a49df0c4b6d382b4cf Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Fri, 13 May 2011 15:31:50 +0800 Subject: [PATCH 06/15] enhance visiblity of signature method --- src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java index 2a8ddc71a..798383ccc 100644 --- a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java @@ -100,7 +100,7 @@ protected String getSignature(OAuthRequest request, Token token) return api.getSignatureService().getSignature(baseString, config.getApiSecret(), token.getSecret()); } - private void addSignature(OAuthRequest request) + protected void addSignature(OAuthRequest request) { switch (config.getSignatureType()) { From 4b0f1513a2f66a4b43ee18df8b9797e9cc9e84ee Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Mon, 16 May 2011 16:59:47 +0800 Subject: [PATCH 07/15] t --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f2730f1fa..be554a7c5 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ # Binaries -target \ No newline at end of file +target +bin \ No newline at end of file From 4d7af4cd4c76bbb94d084a7ea709ff507fd86a98 Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Fri, 20 May 2011 16:44:55 +0800 Subject: [PATCH 08/15] add post body signature type support --- src/main/java/org/scribe/model/SignatureType.java | 3 ++- src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/scribe/model/SignatureType.java b/src/main/java/org/scribe/model/SignatureType.java index 3440a361f..04fe63bc6 100644 --- a/src/main/java/org/scribe/model/SignatureType.java +++ b/src/main/java/org/scribe/model/SignatureType.java @@ -3,5 +3,6 @@ public enum SignatureType { Header, - QueryString + QueryString, + PostBody } diff --git a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java index 798383ccc..fa0a4c821 100644 --- a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java @@ -114,6 +114,12 @@ protected void addSignature(OAuthRequest request) request.addQuerystringParameter(entry.getKey(), entry.getValue()); } break; + case PostBody: + for (Map.Entry entry : request.getOauthParameters().entrySet()) + { + request.addBodyParameter(entry.getKey(), entry.getValue()); + } + break; } } } From 52011058008faa0b8ae3b5df775d8d5f6cc39f1a Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Fri, 27 May 2011 17:09:33 +0800 Subject: [PATCH 09/15] enhance visibility for OAuth20ServiceImpl.api --- src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index d0ca8fbd4..92665ad36 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -7,7 +7,7 @@ public class OAuth20ServiceImpl implements OAuthService { private static final String VERSION = "2.0"; - private final DefaultApi20 api; + protected final DefaultApi20 api; protected final OAuthConfig config; /** From 09f7d7d74afd00536af51e074f04f43bf59127fa Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Tue, 20 Sep 2011 15:56:57 +0800 Subject: [PATCH 10/15] merge --- .../scribe/builder/api/NeteaseWeibooApi.java | 9 +- .../java/org/scribe/builder/api/PlurkApi.java | 37 ++++--- .../org/scribe/builder/api/SinaWeiboApi.java | 5 +- .../org/scribe/builder/api/SohuWeiboApi.java | 5 +- .../org/scribe/builder/api/TwitterApi.java | 103 +++++++++--------- 5 files changed, 81 insertions(+), 78 deletions(-) diff --git a/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java b/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java index fae38ac30..7aad79ef8 100644 --- a/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java +++ b/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java @@ -1,6 +1,7 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; public class NeteaseWeibooApi extends DefaultApi10a { @@ -10,7 +11,7 @@ public class NeteaseWeibooApi extends DefaultApi10a private static final String AUTHENTICATE_URL = "http://api.t.163.com/oauth/authenticate?oauth_token=%s"; @Override - public String getRequestTokenEndpoint() + public String getRequestTokenEndpoint() { return REQUEST_TOKEN_URL; } @@ -29,14 +30,14 @@ public String getAccessTokenEndpoint() * * via http://open.t.163.com/wiki/index.php?title=%E8%AF%B7%E6%B1%82%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83Token(oauth/authorize) */ - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } /** * this method is for web client with callback url - * if you're creating a desktop client please call getAuthorizationUrl + * if you're creating a desktop client please call getAuthorizationUrl * * via http://open.t.163.com/wiki/index.php?title=%E8%AF%B7%E6%B1%82%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83Token(oauth/authenticate) */ diff --git a/src/main/java/org/scribe/builder/api/PlurkApi.java b/src/main/java/org/scribe/builder/api/PlurkApi.java index 132c8f00f..a3f2618a1 100644 --- a/src/main/java/org/scribe/builder/api/PlurkApi.java +++ b/src/main/java/org/scribe/builder/api/PlurkApi.java @@ -1,28 +1,29 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class PlurkApi extends DefaultApi10a { - private static final String REQUEST_TOKEN_URL = "http://www.plurk.com/OAuth/request_token"; - private static final String AUTHORIZE_URL = "http://www.plurk.com/OAuth/authorize?oauth_token=%s"; - private static final String ACCESS_TOKEN_URL = "http://www.plurk.com/OAuth/access_token"; + private static final String REQUEST_TOKEN_URL = "http://www.plurk.com/OAuth/request_token"; + private static final String AUTHORIZE_URL = "http://www.plurk.com/OAuth/authorize?oauth_token=%s"; + private static final String ACCESS_TOKEN_URL = "http://www.plurk.com/OAuth/access_token"; - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } + @Override + public String getRequestTokenEndpoint() + { + return REQUEST_TOKEN_URL; + } - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } + @Override + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) + { + return String.format(AUTHORIZE_URL, requestToken.getToken()); + } - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } + @Override + public String getAccessTokenEndpoint() + { + return ACCESS_TOKEN_URL; + } } diff --git a/src/main/java/org/scribe/builder/api/SinaWeiboApi.java b/src/main/java/org/scribe/builder/api/SinaWeiboApi.java index 14951d31b..eb3f316d2 100644 --- a/src/main/java/org/scribe/builder/api/SinaWeiboApi.java +++ b/src/main/java/org/scribe/builder/api/SinaWeiboApi.java @@ -1,6 +1,7 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; public class SinaWeiboApi extends DefaultApi10a { @@ -21,7 +22,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/SohuWeiboApi.java b/src/main/java/org/scribe/builder/api/SohuWeiboApi.java index 1f927b7a5..a88a221c4 100644 --- a/src/main/java/org/scribe/builder/api/SohuWeiboApi.java +++ b/src/main/java/org/scribe/builder/api/SohuWeiboApi.java @@ -1,6 +1,7 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; public class SohuWeiboApi extends DefaultApi10a { @@ -21,7 +22,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/TwitterApi.java b/src/main/java/org/scribe/builder/api/TwitterApi.java index b0f94083b..107da86d8 100644 --- a/src/main/java/org/scribe/builder/api/TwitterApi.java +++ b/src/main/java/org/scribe/builder/api/TwitterApi.java @@ -5,63 +5,62 @@ public class TwitterApi extends DefaultApi10a { - private static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize?oauth_token=%s"; - private static final String REQUEST_TOKEN_RESOURCE = "api.twitter.com/oauth/request_token"; - private static final String ACCESS_TOKEN_RESOURCE = "api.twitter.com/oauth/access_token"; - - @Override - public String getAccessTokenEndpoint() - { - return "http://" + ACCESS_TOKEN_RESOURCE; - } + private static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize?oauth_token=%s"; + private static final String REQUEST_TOKEN_RESOURCE = "api.twitter.com/oauth/request_token"; + private static final String ACCESS_TOKEN_RESOURCE = "api.twitter.com/oauth/access_token"; - @Override - public String getRequestTokenEndpoint() - { - return "http://" + REQUEST_TOKEN_RESOURCE; - } + @Override + public String getAccessTokenEndpoint() + { + return "http://" + ACCESS_TOKEN_RESOURCE; + } - @Override - public String getAuthorizationUrl(Token requestToken, OAuthConfig config) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } + @Override + public String getRequestTokenEndpoint() + { + return "http://" + REQUEST_TOKEN_RESOURCE; + } - public static class SSL extends TwitterApi - { - @Override - public String getAccessTokenEndpoint() - { - return "https://" + ACCESS_TOKEN_RESOURCE; - } + @Override + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) + { + return String.format(AUTHORIZE_URL, requestToken.getToken()); + } - @Override - public String getRequestTokenEndpoint() - { - return "https://" + REQUEST_TOKEN_RESOURCE; - } - } + public static class SSL extends TwitterApi + { + @Override + public String getAccessTokenEndpoint() + { + return "https://" + ACCESS_TOKEN_RESOURCE; + } - /** - * Twitter 'friendlier' authorization endpoint for OAuth. - * - * Uses SSL. - */ - public static class Authenticate extends SSL - { - private static final String AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate?oauth_token=%s"; + @Override + public String getRequestTokenEndpoint() + { + return "https://" + REQUEST_TOKEN_RESOURCE; + } + } - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHENTICATE_URL, requestToken.getToken()); - } - } + /** + * Twitter 'friendlier' authorization endpoint for OAuth. + * + * Uses SSL. + */ + public static class Authenticate extends SSL + { + private static final String AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate?oauth_token=%s"; - /** - * Just an alias to the default (SSL) authorization endpoint. - * - * Need to include this for symmetry with 'Authenticate' only. - */ - public static class Authorize extends SSL{} + public String getAuthorizationUrl(Token requestToken) + { + return String.format(AUTHENTICATE_URL, requestToken.getToken()); + } + } + + /** + * Just an alias to the default (SSL) authorization endpoint. + * + * Need to include this for symmetry with 'Authenticate' only. + */ + public static class Authorize extends SSL{} } From a13b33a1e967e0779b10f99b871183d62b959b9b Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Wed, 28 Sep 2011 15:49:34 +0800 Subject: [PATCH 11/15] make OAuthConfig visible for logging purpose --- src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java | 6 ++++++ src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java | 5 +++++ src/main/java/org/scribe/oauth/OAuthService.java | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java index fa0a4c821..e4b6fec89 100644 --- a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java @@ -122,4 +122,10 @@ protected void addSignature(OAuthRequest request) break; } } + + @Override + public OAuthConfig getConfig() + { + return this.config; + } } diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index 92665ad36..240f6c5d9 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -69,4 +69,9 @@ public String getAuthorizationUrl(Token requestToken) return api.getAuthorizationUrl(config); } + @Override + public OAuthConfig getConfig() + { + return this.config; + } } diff --git a/src/main/java/org/scribe/oauth/OAuthService.java b/src/main/java/org/scribe/oauth/OAuthService.java index 0c9c57e9b..23f45d8e1 100644 --- a/src/main/java/org/scribe/oauth/OAuthService.java +++ b/src/main/java/org/scribe/oauth/OAuthService.java @@ -50,4 +50,10 @@ public interface OAuthService * @return the URL where you should redirect your users */ public String getAuthorizationUrl(Token requestToken); + + /** + * Return oauth configuration for this service instance + * @return + */ + public OAuthConfig getConfig(); } From 5386e10e2de9b03b2ed611ddfc7e1e5b2e315e6a Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Fri, 4 Nov 2011 11:17:30 +0800 Subject: [PATCH 12/15] add referenceID support in OAuthConfig --- src/main/java/org/scribe/builder/ServiceBuilder.java | 12 +++++++++++- src/main/java/org/scribe/model/OAuthConfig.java | 11 +++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/scribe/builder/ServiceBuilder.java b/src/main/java/org/scribe/builder/ServiceBuilder.java index 10d080282..6d1b09a25 100644 --- a/src/main/java/org/scribe/builder/ServiceBuilder.java +++ b/src/main/java/org/scribe/builder/ServiceBuilder.java @@ -21,6 +21,7 @@ public class ServiceBuilder private Api api; private String scope; private SignatureType signatureType; + private String referenceId; /** * Default constructor @@ -136,6 +137,15 @@ public ServiceBuilder signatureType(SignatureType type) this.signatureType = type; return this; } + + /** + * 外部referenceId,如application_id + */ + public ServiceBuilder referenceId(String referenceId) + { + this.referenceId = referenceId; + return this; + } /** * Returns the fully configured {@link OAuthService} @@ -147,6 +157,6 @@ public OAuthService build() Preconditions.checkNotNull(api, "You must specify a valid api through the provider() method"); Preconditions.checkEmptyString(apiKey, "You must provide an api key"); Preconditions.checkEmptyString(apiSecret, "You must provide an api secret"); - return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope)); + return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, referenceId)); } } diff --git a/src/main/java/org/scribe/model/OAuthConfig.java b/src/main/java/org/scribe/model/OAuthConfig.java index 314d2d9b4..21caedce1 100644 --- a/src/main/java/org/scribe/model/OAuthConfig.java +++ b/src/main/java/org/scribe/model/OAuthConfig.java @@ -12,19 +12,21 @@ public class OAuthConfig private final String callback; private final SignatureType signatureType; private final String scope; + private final String referenceId; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null); + this(key, secret, null, null, null, null); } - public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope) + public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, String refID) { this.apiKey = key; this.apiSecret = secret; this.callback = callback != null ? callback : OAuthConstants.OUT_OF_BAND; this.signatureType = (type != null) ? type : SignatureType.Header; this.scope = scope; + this.referenceId = refID; } public String getApiKey() @@ -56,4 +58,9 @@ public boolean hasScope() { return scope != null; } + + public String getReferenceId() + { + return referenceId; + } } \ No newline at end of file From 15f91872e48c20c56b5ebcf8dd50f7fb1190d0e5 Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Fri, 18 Nov 2011 17:02:00 +0800 Subject: [PATCH 13/15] add oauth 2.0 refresh token support add oauth 2.0 state parameter --- src/main/java/org/scribe/builder/ServiceBuilder.java | 12 +++++++++++- .../java/org/scribe/builder/api/Foursquare2Api.java | 2 +- src/main/java/org/scribe/builder/api/LiveApi.java | 2 +- src/main/java/org/scribe/model/OAuthConfig.java | 11 +++++++++-- src/main/java/org/scribe/model/OAuthConstants.java | 2 ++ .../java/org/scribe/oauth/OAuth20ServiceImpl.java | 11 +++++++++++ 6 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/scribe/builder/ServiceBuilder.java b/src/main/java/org/scribe/builder/ServiceBuilder.java index 6d1b09a25..c2de4f565 100644 --- a/src/main/java/org/scribe/builder/ServiceBuilder.java +++ b/src/main/java/org/scribe/builder/ServiceBuilder.java @@ -21,6 +21,7 @@ public class ServiceBuilder private Api api; private String scope; private SignatureType signatureType; + private String state; private String referenceId; /** @@ -138,6 +139,15 @@ public ServiceBuilder signatureType(SignatureType type) return this; } + /** + * @param oauth 2.0 status + */ + public ServiceBuilder state(String state) + { + this.state = state; + return this; + } + /** * 外部referenceId,如application_id */ @@ -157,6 +167,6 @@ public OAuthService build() Preconditions.checkNotNull(api, "You must specify a valid api through the provider() method"); Preconditions.checkEmptyString(apiKey, "You must provide an api key"); Preconditions.checkEmptyString(apiSecret, "You must provide an api secret"); - return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, referenceId)); + return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, state, referenceId)); } } diff --git a/src/main/java/org/scribe/builder/api/Foursquare2Api.java b/src/main/java/org/scribe/builder/api/Foursquare2Api.java index 5bb0fdcd0..cb6ab5fa5 100644 --- a/src/main/java/org/scribe/builder/api/Foursquare2Api.java +++ b/src/main/java/org/scribe/builder/api/Foursquare2Api.java @@ -11,7 +11,7 @@ public class Foursquare2Api extends DefaultApi20 @Override public String getAccessTokenEndpoint() { - return "https://foursquare.com/oauth2/access_token?grant_type=authorization_code"; + return "https://foursquare.com/oauth2/access_token"; } @Override diff --git a/src/main/java/org/scribe/builder/api/LiveApi.java b/src/main/java/org/scribe/builder/api/LiveApi.java index 789631fea..8c297b750 100644 --- a/src/main/java/org/scribe/builder/api/LiveApi.java +++ b/src/main/java/org/scribe/builder/api/LiveApi.java @@ -17,7 +17,7 @@ public class LiveApi extends DefaultApi20 @Override public String getAccessTokenEndpoint() { - return "https://oauth.live.com/token?grant_type=authorization_code"; + return "https://oauth.live.com/token"; } @Override diff --git a/src/main/java/org/scribe/model/OAuthConfig.java b/src/main/java/org/scribe/model/OAuthConfig.java index 21caedce1..f8725f365 100644 --- a/src/main/java/org/scribe/model/OAuthConfig.java +++ b/src/main/java/org/scribe/model/OAuthConfig.java @@ -12,20 +12,22 @@ public class OAuthConfig private final String callback; private final SignatureType signatureType; private final String scope; + private final String state; private final String referenceId; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null); + this(key, secret, null, null, null, null, null); } - public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, String refID) + public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, String state, String refID) { this.apiKey = key; this.apiSecret = secret; this.callback = callback != null ? callback : OAuthConstants.OUT_OF_BAND; this.signatureType = (type != null) ? type : SignatureType.Header; this.scope = scope; + this.state = state; this.referenceId = refID; } @@ -59,6 +61,11 @@ public boolean hasScope() return scope != null; } + public String getState() + { + return state; + } + public String getReferenceId() { return referenceId; diff --git a/src/main/java/org/scribe/model/OAuthConstants.java b/src/main/java/org/scribe/model/OAuthConstants.java index cc40dc75d..baed119a4 100644 --- a/src/main/java/org/scribe/model/OAuthConstants.java +++ b/src/main/java/org/scribe/model/OAuthConstants.java @@ -41,7 +41,9 @@ public class OAuthConstants public static final String REALM = "realm"; //OAuth 2.0 + public static final String GRANT_TYPE = "grant_type"; public static final String ACCESS_TOKEN = "access_token"; + public static final String REFRESH_TOKEN = "refresh_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"; diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index 240f6c5d9..122fdee0a 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -28,6 +28,7 @@ public OAuth20ServiceImpl(DefaultApi20 api, OAuthConfig config) public Token getAccessToken(Token requestToken, Verifier verifier) { OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParameter(OAuthConstants.GRANT_TYPE, "authorization_code"); request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); request.addQuerystringParameter(OAuthConstants.CODE, verifier.getValue()); @@ -74,4 +75,14 @@ public OAuthConfig getConfig() { return this.config; } + + public Token refreshToken(Token refreshToken, String sessionHandle) + { + OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParameter(OAuthConstants.GRANT_TYPE, "refresh_token"); + request.addQuerystringParameter(OAuthConstants.REFRESH_TOKEN, refreshToken.getToken()); + if(config.hasScope()) request.addQuerystringParameter(OAuthConstants.SCOPE, config.getScope()); + Response response = request.send(); + return api.getAccessTokenExtractor().extract(response.getBody()); + } } From ac99a83aeafd37523e332584fa094d07cf6d7d06 Mon Sep 17 00:00:00 2001 From: hyperion_cc Date: Fri, 24 Feb 2012 10:55:30 +0800 Subject: [PATCH 14/15] proxy facebook&twitter request to localhost:7552 port --- src/main/java/org/scribe/model/Request.java | 33 ++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/scribe/model/Request.java b/src/main/java/org/scribe/model/Request.java index f40794dc1..fba3c944e 100644 --- a/src/main/java/org/scribe/model/Request.java +++ b/src/main/java/org/scribe/model/Request.java @@ -1,13 +1,20 @@ package org.scribe.model; -import java.io.*; -import java.net.*; -import java.nio.charset.*; -import java.util.*; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.InetSocketAddress; +import java.net.MalformedURLException; +import java.net.Proxy; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; -import org.scribe.exceptions.*; -import org.scribe.utils.*; +import org.scribe.exceptions.OAuthException; +import org.scribe.utils.MapUtils; +import org.scribe.utils.URLUtils; /** * Represents an HTTP Request object @@ -71,9 +78,21 @@ private void createConnection() throws IOException if (connection == null) { System.setProperty("http.keepAlive", connectionKeepAlive ? "true" : "false"); - connection = (HttpURLConnection) new URL(effectiveUrl).openConnection(); + if (this.checkProxyable()) + { + Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7552)); + connection = (HttpURLConnection) new URL(effectiveUrl).openConnection(proxy); + } + else + { + connection = (HttpURLConnection) new URL(effectiveUrl).openConnection(); + } } } + + private boolean checkProxyable() { + return this.url.matches("^http(s)?://(www|graph)\\.facebook\\.com/.*$") || this.url.matches("^http(s)?://api\\.twitter\\.com/.*$"); + } Response doSend() throws IOException { From 523581ac3482a4dae4e4bbc787a8b3482520bd5e Mon Sep 17 00:00:00 2001 From: hyperioncc Date: Fri, 16 May 2014 16:17:13 +0800 Subject: [PATCH 15/15] add proxy ability for facebook&twitter and maven pom.xml --- pom.xml | 11 ++++- src/main/java/org/scribe/model/Request.java | 9 +++- src/main/java/org/scribe/model/Response.java | 47 ++++++++++++++++++++ 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index a68bf1bbf..870bff8f6 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,10 @@ 4.0.0 - org.scribe + denglu.cc scribe jar - 1.2.2 + 1.2.2-mod Scribe OAuth Library The best OAuth library out there http://github.com/fernandezpablo85/scribe-java @@ -82,4 +82,11 @@ + + + deploymentRepo + Local Repository + http://192.168.2.209:8081/nexus/content/repositories/releases/ + + diff --git a/src/main/java/org/scribe/model/Request.java b/src/main/java/org/scribe/model/Request.java index fba3c944e..fa61e81c7 100644 --- a/src/main/java/org/scribe/model/Request.java +++ b/src/main/java/org/scribe/model/Request.java @@ -96,8 +96,15 @@ private boolean checkProxyable() { Response doSend() throws IOException { + if (connection.getURL().getProtocol().toLowerCase().contains("https")) + { + try + { + Response.trustAllHttpsCertificates(); + } catch (Exception e) {} + } connection.setRequestMethod(this.verb.name()); - if (connectTimeout != null) + if (connectTimeout != null) { connection.setConnectTimeout(connectTimeout.intValue()); } diff --git a/src/main/java/org/scribe/model/Response.java b/src/main/java/org/scribe/model/Response.java index 6164e1495..0b036a8a3 100644 --- a/src/main/java/org/scribe/model/Response.java +++ b/src/main/java/org/scribe/model/Response.java @@ -4,6 +4,9 @@ import java.net.*; import java.util.*; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSession; + import org.scribe.utils.*; /** @@ -24,6 +27,13 @@ public class Response { try { + if (connection.getURL().getProtocol().toLowerCase().contains("https")) + { + try + { + Response.trustAllHttpsCertificates(); + } catch (Exception e) {} + } connection.connect(); code = connection.getResponseCode(); headers = parseHeaders(connection); @@ -110,4 +120,41 @@ public String getHeader(String name) return headers.get(name); } + HostnameVerifier hv = new HostnameVerifier() { + public boolean verify(String urlHostName, SSLSession session) { + return true; + } + }; + + public static void trustAllHttpsCertificates() throws Exception { + javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; + javax.net.ssl.TrustManager tm = new miTM(); + trustAllCerts[0] = tm; + javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, null); + javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } + + static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { + return; + } + + public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { + return; + } + } + } \ No newline at end of file