From 72d4ecf1bca4d87a5f335818eabd7639b4c32171 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 25 Feb 2016 11:21:37 +0300 Subject: [PATCH 001/250] update Forks chapter in Readme --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 59e58dc7f..4004a29af 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,4 @@ Feel free to drop us an email or create issue right here on github.com ## Forks -Looking for a ScribeJava variation? check the [Fork List](https://github.com/scribejava/scribejava/wiki/Forks) - If you have a useful fork that should be listed there please contact us From 0f3993972f62359c659edc384bf6e7c274b1a914 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 25 Feb 2016 13:09:31 +0300 Subject: [PATCH 002/250] conforms OAuth 1.0 Tokens to the last not obsolete specs --- .../core/model/OAuth1AccessToken.java | 24 +++++++++++++-- .../core/model/OAuth1RequestToken.java | 30 +++++++++++++++---- .../scribejava/core/model/OAuth1Token.java | 10 ------- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1AccessToken.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1AccessToken.java index 838fc2adb..e57a7db39 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1AccessToken.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1AccessToken.java @@ -3,11 +3,11 @@ import java.util.Objects; /** - * Represents an OAuth 1 Access Token http://oauth.net/core/1.0a/#rfc.section.6.3.2 + * Represents an OAuth 1 Access Token http://tools.ietf.org/html/rfc5849#section-2.3 */ public class OAuth1AccessToken extends OAuth1Token { - private static final long serialVersionUID = -8784937061938486135L; + private static final long serialVersionUID = -103999293167210966L; public OAuth1AccessToken(String token, String tokenSecret) { this(token, tokenSecret, null); @@ -17,6 +17,26 @@ public OAuth1AccessToken(String token, String tokenSecret, String rawResponse) { super(token, tokenSecret, rawResponse); } + /** + * The token identifier. + * + * @return oauth_token + */ + @Override + public String getToken() { + return super.getToken(); + } + + /** + * The token shared-secret. + * + * @return oauth_token_secret + */ + @Override + public String getTokenSecret() { + return super.getTokenSecret(); + } + @Override public int hashCode() { int hash = 3; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1RequestToken.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1RequestToken.java index b7db7047b..1c53d4932 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1RequestToken.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1RequestToken.java @@ -3,17 +3,17 @@ import java.util.Objects; /** - * Represents an OAuth 1 Request Token http://oauth.net/core/1.0a/#rfc.section.6.1.2 + * Represents an OAuth 1 Request Token http://tools.ietf.org/html/rfc5849#section-2.1 */ public class OAuth1RequestToken extends OAuth1Token { - private static final long serialVersionUID = 359527630020350893L; + private static final long serialVersionUID = 6185104114662587991L; /** * oauth_callback_confirmed: *

- * MUST be present and set to true. The Consumer MAY use this to confirm that the Service Provider received the - * callback value.

+ * MUST be present and set to "true". The parameter is used to differentiate from previous versions of the protocol. + *

*/ private final boolean oauthCallbackConfirmed; @@ -30,6 +30,26 @@ public OAuth1RequestToken(String token, String tokenSecret, boolean oauthCallbac this.oauthCallbackConfirmed = oauthCallbackConfirmed; } + /** + * The temporary credentials identifier. + * + * @return oauth_token + */ + @Override + public String getToken() { + return super.getToken(); + } + + /** + * The temporary credentials shared-secret. + * + * @return oauth_token_secret + */ + @Override + public String getTokenSecret() { + return super.getTokenSecret(); + } + public boolean isOauthCallbackConfirmed() { return oauthCallbackConfirmed; } @@ -69,6 +89,6 @@ public String toString() { return "OAuth1RequestToken{" + "oauth_token=" + getToken() + ", oauth_token_secret=" + getTokenSecret() - + ", oauthCallbackConfirmed=" + oauthCallbackConfirmed + '}'; + + ", oauth_callback_confirmed=" + oauthCallbackConfirmed + '}'; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1Token.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1Token.java index c50fbd29e..3d02f49aa 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1Token.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth1Token.java @@ -9,18 +9,8 @@ public abstract class OAuth1Token extends Token { private static final long serialVersionUID = 6285873427974823019L; - /** - * oauth_token: - *

- * The Request/Access Token.

- */ private final String token; - /** - * oauth_token_secret: - *

- * The Token Secret.

- */ private final String tokenSecret; public OAuth1Token(String token, String tokenSecret, String rawResponse) { From f7f390a8cfaaabcc6416a94a375e60955b31f9d0 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 25 Feb 2016 13:26:51 +0300 Subject: [PATCH 003/250] OAuth 1 APIs can choose whether to pass empty oauth_token param in requests --- changelog | 1 + .../scribejava/core/builder/api/DefaultApi10a.java | 10 ++++++++++ .../github/scribejava/core/oauth/OAuth10aService.java | 3 +-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/changelog b/changelog index 8e7e9690c..795257fae 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). * Support response in gzip. * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs + * OAuth 1 APIs can choose whether to pass empty oauth_token param in requests [2.2.2] * make all APIs to be extentable (have protected constructors, useful for testing) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java index 89d1eb499..f0920e103 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java @@ -129,4 +129,14 @@ public Verb getRequestTokenVerb() { public OAuth10aService createService(OAuthConfig config) { return new OAuth10aService(this, config); } + + /** + * http://tools.ietf.org/html/rfc5849 says that "The client MAY omit the empty "oauth_token" protocol parameter from + * the request", but not all oauth servers are good boys. + * + * @return whether to inlcude empty oauth_token param to the request + */ + public boolean isEmptyOAuthTokenParamIsRequired() { + return false; + } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index 76b076935..ad9347448 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -130,8 +130,7 @@ public void signRequest(OAuth1AccessToken token, AbstractRequest request) { final OAuthConfig config = getConfig(); config.log("signing request: " + request.getCompleteUrl()); - // Do not append the token if empty. This is for two legged OAuth calls. - if (!token.isEmpty()) { + if (!token.isEmpty() || api.isEmptyOAuthTokenParamIsRequired()) { request.addOAuthParameter(OAuthConstants.TOKEN, token.getToken()); } config.log("setting token to: " + token); From 18c1d06234015e7d2e79a9e8ac82f4b32da17de5 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 25 Feb 2016 16:30:23 +0300 Subject: [PATCH 004/250] extract all oauth token params from response --- .../apis/google/GoogleJsonTokenExtractor.java | 19 +++----- .../scribejava/apis/google/GoogleToken.java | 9 +++- .../OAuth2AccessTokenExtractor.java | 33 +++++++++++--- .../OAuth2AccessTokenJsonExtractor.java | 45 ++++++++++++++++--- .../OAuth2AccessTokenExtractorTest.java | 15 ++++++- 5 files changed, 92 insertions(+), 29 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java index 13b7cff39..9cac46623 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java @@ -1,15 +1,14 @@ package com.github.scribejava.apis.google; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; /** * additionally parses OpenID id_token */ public class GoogleJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { - private static final String REGEXP = "\"id_token\"\\s*:\\s*\"(\\S*?)\""; + private static final String ID_TOKEN_REGEX = "\"id_token\"\\s*:\\s*\"(\\S*?)\""; protected GoogleJsonTokenExtractor() { } @@ -24,15 +23,9 @@ public static GoogleJsonTokenExtractor instance() { } @Override - public GoogleToken extract(String response) { - return new GoogleToken(extractAccessToken(response), extractOpenIdToken(response), response); - } - - private String extractOpenIdToken(String response) { - final Matcher matcher = Pattern.compile(REGEXP).matcher(response); - if (matcher.find()) { - return matcher.group(1); - } - return null; + protected OAuth2AccessToken createToken(String accessToken, String tokenType, Integer expiresIn, + String refreshToken, String scope, String response) { + return new GoogleToken(accessToken, tokenType, expiresIn, refreshToken, scope, + extractParameter(response, ID_TOKEN_REGEX, false), response); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java index 1afe0b084..a47395571 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java @@ -5,7 +5,7 @@ public class GoogleToken extends OAuth2AccessToken { - private static final long serialVersionUID = 6150970703986214220L; + private static final long serialVersionUID = 7845679917727899612L; /** * Id_token is part of OpenID Connect specification. It can hold user information that you can directly extract @@ -19,7 +19,12 @@ public class GoogleToken extends OAuth2AccessToken { private final String openIdToken; public GoogleToken(String accessToken, String openIdToken, String rawResponse) { - super(accessToken, rawResponse); + this(accessToken, null, null, null, null, openIdToken, rawResponse); + } + + public GoogleToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, + String openIdToken, String rawResponse) { + super(accessToken, tokenType, expiresIn, refreshToken, scope, rawResponse); this.openIdToken = openIdToken; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java index 928f9f4d8..dd80c0012 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java @@ -12,7 +12,11 @@ */ public class OAuth2AccessTokenExtractor implements TokenExtractor { - private static final String TOKEN_REGEX = "access_token=([^&]+)"; + private static final String ACCESS_TOKEN_REGEX = "access_token=([^&]+)"; + private static final String TOKEN_TYPE_REGEX = "token_type=([^&]+)"; + private static final String EXPIRES_IN_REGEX = "expires_in=([^&]+)"; + private static final String REFRESH_TOKEN_REGEX = "refresh_token=([^&]+)"; + private static final String SCOPE_REGEX = "scope=([^&]+)"; protected OAuth2AccessTokenExtractor() { } @@ -34,13 +38,30 @@ public OAuth2AccessToken extract(String response) { Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string"); - final Matcher matcher = Pattern.compile(TOKEN_REGEX).matcher(response); + final String accessToken = extractParameter(response, ACCESS_TOKEN_REGEX, true); + final String tokenType = extractParameter(response, TOKEN_TYPE_REGEX, false); + final String expiresInString = extractParameter(response, EXPIRES_IN_REGEX, false); + Integer expiresIn; + try { + expiresIn = expiresInString == null ? null : Integer.valueOf(expiresInString); + } catch (NumberFormatException nfe) { + expiresIn = null; + } + final String refreshToken = extractParameter(response, REFRESH_TOKEN_REGEX, false); + final String scope = extractParameter(response, SCOPE_REGEX, false); + + return new OAuth2AccessToken(accessToken, tokenType, expiresIn, refreshToken, scope, response); + } + + private static String extractParameter(String response, String regex, boolean required) throws OAuthException { + final Matcher matcher = Pattern.compile(regex).matcher(response); if (matcher.find()) { - final String token = OAuthEncoder.decode(matcher.group(1)); - return new OAuth2AccessToken(token, response); + return OAuthEncoder.decode(matcher.group(1)); + } else if (required) { + throw new OAuthException("Response body is incorrect. Can't extract a '" + regex + + "' from this: '" + response + "'", null); } else { - throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" + response + "'", - null); + return null; } } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java index a06e8054d..514f38610 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java @@ -6,9 +6,16 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.utils.Preconditions; +/** + * JSON implementation of {@link TokenExtractor} for OAuth 2.0 + */ public class OAuth2AccessTokenJsonExtractor implements TokenExtractor { - private static final String ACCESS_TOKENS_REGEXP = "\"access_token\"\\s*:\\s*\"(\\S*?)\""; + private static final String ACCESS_TOKEN_REGEX = "\"access_token\"\\s*:\\s*\"(\\S*?)\""; + private static final String TOKEN_TYPE_REGEX = "\"token_type\"\\s*:\\s*\"(\\S*?)\""; + private static final String EXPIRES_IN_REGEX = "\"expires_in\"\\s*:\\s*\"?(\\d*?)\"?\\D"; + private static final String REFRESH_TOKEN_REGEX = "\"refresh_token\"\\s*:\\s*\"(\\S*?)\""; + private static final String SCOPE_REGEX = "\"scope\"\\s*:\\s*\"(\\S*?)\""; protected OAuth2AccessTokenJsonExtractor() { } @@ -24,16 +31,40 @@ public static OAuth2AccessTokenJsonExtractor instance() { @Override public OAuth2AccessToken extract(String response) { - return new OAuth2AccessToken(extractAccessToken(response), response); + Preconditions.checkEmptyString(response, + "Response body is incorrect. Can't extract a token from an empty string"); + + final String accessToken = extractParameter(response, ACCESS_TOKEN_REGEX, true); + final String tokenType = extractParameter(response, TOKEN_TYPE_REGEX, false); + final String expiresInString = extractParameter(response, EXPIRES_IN_REGEX, false); + Integer expiresIn; + try { + expiresIn = expiresInString == null ? null : Integer.valueOf(expiresInString); + } catch (NumberFormatException nfe) { + expiresIn = null; + } + final String refreshToken = extractParameter(response, REFRESH_TOKEN_REGEX, false); + final String scope = extractParameter(response, SCOPE_REGEX, false); + + return createToken(accessToken, tokenType, expiresIn, refreshToken, scope, response); + } + + protected OAuth2AccessToken createToken(String accessToken, String tokenType, Integer expiresIn, + String refreshToken, String scope, String response) { + return new OAuth2AccessToken(accessToken, tokenType, expiresIn, refreshToken, scope, response); } - protected String extractAccessToken(String response) { - Preconditions.checkEmptyString(response, "Cannot extract a token from a null or empty String"); - final Matcher matcher = Pattern.compile(ACCESS_TOKENS_REGEXP).matcher(response); + protected static String extractParameter(String response, String regex, boolean required) throws OAuthException { + final Matcher matcher = Pattern.compile(regex).matcher(response); if (matcher.find()) { return matcher.group(1); - } else { - throw new OAuthException("Cannot extract an access token. Response was: " + response); } + + if (required) { + throw new OAuthException("Response body is incorrect. Can't extract a '" + regex + + "' from this: '" + response + "'", null); + } + + return null; } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java index 8ed1707b3..fa66956d5 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java @@ -27,10 +27,23 @@ public void shouldExtractTokenFromOAuthStandardResponse() { @Test public void shouldExtractTokenFromResponseWithExpiresParam() { final String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159" - + "|RsXNdKrpxg8L6QNLWcs2TVTmcaE&expires=5108"; + + "|RsXNdKrpxg8L6QNLWcs2TVTmcaE&expires_in=5108"; final OAuth2AccessToken extracted = extractor.extract(response); assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", extracted.getAccessToken()); + assertEquals(Integer.valueOf(5108), extracted.getExpiresIn()); + } + + @Test + public void shouldExtractTokenFromResponseWithExpiresAndRefreshParam() { + final String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159" + + "|RsXNdKrpxg8L6QNLWcs2TVTmcaE&expires_in=5108&token_type=bearer&refresh_token=166942940015970"; + final OAuth2AccessToken extracted = extractor.extract(response); + assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", + extracted.getAccessToken()); + assertEquals(Integer.valueOf(5108), extracted.getExpiresIn()); + assertEquals("bearer", extracted.getTokenType()); + assertEquals("166942940015970", extracted.getRefreshToken()); } @Test From a2cea9b4fad141e9adad6e799d1257f0a91c4176 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 25 Feb 2016 16:34:41 +0300 Subject: [PATCH 005/250] show accessToken rawResponse in examples --- .../com/github/scribejava/apis/examples/AWeberExample.java | 3 ++- .../java/com/github/scribejava/apis/examples/DiggExample.java | 3 ++- .../github/scribejava/apis/examples/FacebookAsyncExample.java | 3 ++- .../com/github/scribejava/apis/examples/FacebookExample.java | 3 ++- .../com/github/scribejava/apis/examples/FlickrExample.java | 3 ++- .../github/scribejava/apis/examples/Foursquare2Example.java | 3 ++- .../github/scribejava/apis/examples/FoursquareExample.java | 3 ++- .../github/scribejava/apis/examples/FreelancerExample.java | 3 ++- .../com/github/scribejava/apis/examples/GitHubExample.java | 3 ++- .../com/github/scribejava/apis/examples/Google20Example.java | 3 ++- .../com/github/scribejava/apis/examples/GoogleExample.java | 3 ++- .../java/com/github/scribejava/apis/examples/HHExample.java | 3 ++- .../com/github/scribejava/apis/examples/ImgurExample.java | 3 ++- .../com/github/scribejava/apis/examples/Kaixin20Example.java | 3 ++- .../github/scribejava/apis/examples/LinkedIn20Example.java | 3 ++- .../com/github/scribejava/apis/examples/LinkedInExample.java | 3 ++- .../scribejava/apis/examples/LinkedInExampleWithScopes.java | 3 ++- .../java/com/github/scribejava/apis/examples/LiveExample.java | 3 ++- .../com/github/scribejava/apis/examples/LoveFilmExample.java | 3 ++- .../github/scribejava/apis/examples/MailruAsyncExample.java | 3 ++- .../com/github/scribejava/apis/examples/MailruExample.java | 3 ++- .../com/github/scribejava/apis/examples/MeetupExample.java | 3 ++- .../github/scribejava/apis/examples/NeteaseWeiboExample.java | 4 ++-- .../github/scribejava/apis/examples/OdnoklassnikiExample.java | 3 ++- .../com/github/scribejava/apis/examples/PinterestExample.java | 3 ++- .../com/github/scribejava/apis/examples/Px500Example.java | 3 ++- .../com/github/scribejava/apis/examples/RenrenExample.java | 3 ++- .../github/scribejava/apis/examples/SinaWeibo2Example.java | 3 ++- .../com/github/scribejava/apis/examples/SinaWeiboExample.java | 4 ++-- .../com/github/scribejava/apis/examples/SkyrockExample.java | 3 ++- .../com/github/scribejava/apis/examples/SohuWeiboExample.java | 4 ++-- .../github/scribejava/apis/examples/StackExchangeExample.java | 3 ++- .../com/github/scribejava/apis/examples/TrelloExample.java | 3 ++- .../com/github/scribejava/apis/examples/TumblrExample.java | 3 ++- .../com/github/scribejava/apis/examples/TutByExample.java | 3 ++- .../com/github/scribejava/apis/examples/TwitterExample.java | 3 ++- .../com/github/scribejava/apis/examples/ViadeoExample.java | 3 ++- .../com/github/scribejava/apis/examples/VkontakteExample.java | 3 ++- .../java/com/github/scribejava/apis/examples/XingExample.java | 3 ++- .../com/github/scribejava/apis/examples/YahooExample.java | 3 ++- 40 files changed, 80 insertions(+), 43 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index d1478b901..505f29e1d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -47,7 +47,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index e0e7ae8cc..f6ce3702e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -50,7 +50,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java index d610596ab..a8075e9a1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java @@ -74,7 +74,8 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessTokenAsync(verifier, null).get(); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 137ec6507..b199df0d7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -59,7 +59,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index 2f6724777..30a8d1a07 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -46,7 +46,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index 17c37f5a9..7f5e61a6b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index fe6f60e13..7c48e71d5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -42,7 +42,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index a135f94f1..46224cb3c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -50,7 +50,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index 889c505a8..bbf78434c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -59,7 +59,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index f4fc5dec3..e9d2e29fe 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -60,7 +60,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java index 19e249d9f..205cd37a8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java @@ -47,7 +47,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index 9e91e301e..9477ea363 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -47,7 +47,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); System.out.println("Now we're going to access a protected resource..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index fd3870708..01409fbb6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 3f79d4d51..17f5ac0fb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index 2232e3dc8..e4506b374 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -45,7 +45,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index e026c969a..5489688c8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -43,7 +43,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index e24d39747..17a0d6aaf 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -47,7 +47,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index 199bb111a..47536186e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -45,7 +45,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java index 46db1f3ba..55a22b416 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java @@ -50,7 +50,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index f0824d2a7..981690be6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -58,7 +58,8 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessTokenAsync(verifier, null).get(); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); System.out.println("Now we're going to access a protected resource..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 6e0ac27c8..4d25f14c2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -46,7 +46,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); System.out.println("Now we're going to access a protected resource..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index 6a19c459d..3028349ce 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -42,7 +42,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index e5130908f..60f8082e3 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -50,8 +50,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " - + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index a7b1b9710..136b05774 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -52,7 +52,8 @@ public static void main(String... args) { final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index 3860ebfb4..3e0d1cb4b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -45,7 +45,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index 9d366e38d..3e969fd06 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -42,7 +42,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 48f37ad17..392ff3881 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -54,7 +54,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 33e46454e..230f28875 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index f6ddf99e2..42962c6ed 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -50,8 +50,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " - + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index 3c0a8655a..c90e658d2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -42,7 +42,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index 3f39264fa..9bd89762d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -50,8 +50,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " - + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index c6f8a4288..47d43168e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -64,7 +64,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index c2076371f..1c274a060 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index 2b1b32f9d..413214eec 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index c3c7075a2..74ae83af9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -47,7 +47,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index 1c26e836b..90446f8a6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -42,7 +42,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if you're curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index 76516ee91..caffce403 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -44,7 +44,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index 5213a1b05..d9be140d5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -45,7 +45,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 5542c34cc..c09b1ddc3 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -42,7 +42,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index e2cda508c..d6f8e2e72 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -43,7 +43,8 @@ public static void main(String... args) { System.out.println("Trading the Request Token for an Access Token..."); final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + " )"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); // Now let's go and ask for a protected resource! From 23e7f930f5e64067669a6365bcebd06050fec856 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Feb 2016 14:23:29 +0300 Subject: [PATCH 006/250] allow to pass any additional params to auth url --- .../core/builder/api/DefaultApi20.java | 29 +++++++++++++++++++ .../scribejava/core/oauth/OAuth20Service.java | 15 ++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index c789da72a..fe07dbf6c 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -6,6 +6,8 @@ import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import com.github.scribejava.core.utils.OAuthEncoder; +import java.util.Map; /** * Default implementation of the OAuth protocol, version 2.0 (draft 11) @@ -55,6 +57,33 @@ public Verb getAccessTokenVerb() { */ public abstract String getAuthorizationUrl(OAuthConfig config); + /** + * Returns the URL where you should redirect your users to authenticate your application. + * + * @param config OAuth 2.0 configuration param object + * @param additionalParams any additional GET params to add to the URL + * @return the URL where you should redirect your users + */ + public String getAuthorizationUrl(OAuthConfig config, Map additionalParams) { + String authUrl = getAuthorizationUrl(config); + + if (additionalParams != null && !additionalParams.isEmpty()) { + final StringBuilder authUrlWithParams = new StringBuilder(authUrl) + .append(authUrl.indexOf('?') == -1 ? '?' : '&'); + + for (Map.Entry param : additionalParams.entrySet()) { + authUrlWithParams.append(OAuthEncoder.encode(param.getKey())) + .append('=') + .append(OAuthEncoder.encode(param.getValue())) + .append('&'); + } + + authUrl = authUrlWithParams.substring(0, authUrlWithParams.length() - 1); + } + + return authUrl; + } + public OAuth20Service createService(OAuthConfig config) { return new OAuth20Service(this, config); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 84ae8a8ef..4eecefa1f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -13,6 +13,7 @@ import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verifier; +import java.util.Map; public class OAuth20Service extends OAuthService { @@ -94,8 +95,18 @@ public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) * * @return the URL where you should redirect your users */ - public String getAuthorizationUrl() { - return api.getAuthorizationUrl(getConfig()); + public final String getAuthorizationUrl() { + return getAuthorizationUrl(null); + } + + /** + * Returns the URL where you should redirect your users to authenticate your application. + * + * @param additionalParams any additional GET params to add to the URL + * @return the URL where you should redirect your users + */ + public String getAuthorizationUrl(Map additionalParams) { + return api.getAuthorizationUrl(getConfig(), additionalParams); } public DefaultApi20 getApi() { From 1e4238bc1f2aa490b8c142b976e3087303f63a4a Mon Sep 17 00:00:00 2001 From: Daniel Tyreus Date: Wed, 13 Jan 2016 17:53:38 -0800 Subject: [PATCH 007/250] support OAuth 2 refresh token (+update urls for Google) --- changelog | 1 + .../github/scribejava/apis/FacebookApi.java | 4 +-- .../github/scribejava/apis/GoogleApi20.java | 2 +- .../scribejava/apis/NeteaseWeibooApi.java | 3 +- .../apis/examples/FacebookExample.java | 1 + .../apis/examples/Google20Example.java | 18 ++++++++-- .../core/model/OAuth2AccessToken.java | 6 +++- .../scribejava/core/model/OAuthConstants.java | 2 +- .../core/oauth/OAuth10aService.java | 26 ++++++-------- .../scribejava/core/oauth/OAuth20Service.java | 36 +++++++++++++++++++ 10 files changed, 76 insertions(+), 23 deletions(-) diff --git a/changelog b/changelog index 795257fae..1904d9081 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ * Support response in gzip. * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs * OAuth 1 APIs can choose whether to pass empty oauth_token param in requests + * Support refresh tokens for OAuth2 (very thanks to P. Daniel Tyreus https://github.com/pdtyreus) [2.2.2] * make all APIs to be extentable (have protected constructors, useful for testing) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index ec0acd245..c3f3bfcea 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -9,9 +9,8 @@ import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; -/*** +/** * Facebook v2.5 API - * */ public class FacebookApi extends DefaultApi20 { @@ -22,6 +21,7 @@ protected FacebookApi() { } private static class InstanceHolder { + private static final FacebookApi INSTANCE = new FacebookApi(); } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index cde5105a0..9e02c0cfa 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -34,7 +34,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://accounts.google.com/o/oauth2/token"; + return "https://www.googleapis.com/oauth2/v4/token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/NeteaseWeibooApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/NeteaseWeibooApi.java index 317d1e74e..91edb38ca 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/NeteaseWeibooApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/NeteaseWeibooApi.java @@ -32,14 +32,15 @@ public String getAccessTokenEndpoint() { return ACCESS_TOKEN_URL; } - @Override /** * this method will ignore your callback if you're creating a desktop client please choose this url else your can * call getAuthenticateUrl * * 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) + * @return url to redirect user to (to get code) */ + @Override public String getAuthorizationUrl(OAuth1RequestToken requestToken) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index b199df0d7..a7d4a76f4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -27,6 +27,7 @@ public static void main(String... args) { .state(secretState) .callback("http://www.example.com/oauth_callback/") .build(FacebookApi.instance()); + final Scanner in = new Scanner(System.in, "UTF-8"); System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index e9d2e29fe..964560044 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -10,6 +10,8 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; +import java.util.HashMap; +import java.util.Map; public abstract class Google20Example { @@ -35,7 +37,13 @@ public static void main(String... args) { // Obtain the Authorization URL System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); + //pass access_type=offline to get refresh token + //https://developers.google.com/identity/protocols/OAuth2WebServer#preparing-to-start-the-oauth-20-flow + final Map additionalParams = new HashMap<>(); + additionalParams.put("access_type", "offline"); + //force to reget refresh token (if usera are asked not the first time) + additionalParams.put("prompt", "consent"); + final String authorizationUrl = service.getAuthorizationUrl(additionalParams); System.out.println("Got the Authorization URL!"); System.out.println("Now go and authorize ScribeJava here:"); System.out.println(authorizationUrl); @@ -58,8 +66,14 @@ public static void main(String... args) { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + OAuth2AccessToken accessToken = service.getAccessToken(verifier); System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + + System.out.println("Refreshing the Access Token..."); + accessToken = service.refreshAccessToken(accessToken.getRefreshToken()); + System.out.println("Refreshed the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessToken.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessToken.java index 5205aa64f..b97e4e0a0 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessToken.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessToken.java @@ -4,7 +4,11 @@ import java.util.Objects; /** - * Represents an OAuth 2 Access Token http://tools.ietf.org/html/rfc6749#section-5.1 + * Represents an OAuth 2 Access token. + *

+ * http://tools.ietf.org/html/rfc6749#section-5.1 + * + * @see OAuth 2 Access Token Specification

*/ public class OAuth2AccessToken extends Token { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java index 229392c38..4648b24e1 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java @@ -20,7 +20,6 @@ public interface OAuthConstants { String OUT_OF_BAND = "oob"; String VERIFIER = "oauth_verifier"; String HEADER = "Authorization"; - OAuth1RequestToken EMPTY_TOKEN = new OAuth1RequestToken("", ""); String SCOPE = "scope"; // OAuth 2.0 @@ -29,6 +28,7 @@ public interface OAuthConstants { String CLIENT_SECRET = "client_secret"; String REDIRECT_URI = "redirect_uri"; String CODE = "code"; + String REFRESH_TOKEN = "refresh_token"; String GRANT_TYPE = "grant_type"; String AUTHORIZATION_CODE = "authorization_code"; String STATE = "state"; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index ad9347448..b03001d77 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.OAuth1Token; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; @@ -50,7 +49,7 @@ public OAuth1RequestToken getRequestToken() { config.log("setting oauth_callback to " + config.getCallback()); request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback()); - addOAuthParams(request, OAuthConstants.EMPTY_TOKEN); + addOAuthParams(request, ""); appendSignature(request); config.log("sending request..."); @@ -62,7 +61,7 @@ public OAuth1RequestToken getRequestToken() { return api.getRequestTokenExtractor().extract(body); } - private void addOAuthParams(AbstractRequest request, OAuth1Token token) { + private void addOAuthParams(AbstractRequest request, String tokenSecret) { final OAuthConfig config = getConfig(); request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); @@ -72,7 +71,7 @@ private void addOAuthParams(AbstractRequest request, OAuth1Token token) { if (config.hasScope()) { request.addOAuthParameter(OAuthConstants.SCOPE, config.getScope()); } - request.addOAuthParameter(OAuthConstants.SIGNATURE, getSignature(request, token)); + request.addOAuthParameter(OAuthConstants.SIGNATURE, getSignature(request, tokenSecret)); config.log("appended additional OAuth parameters: " + MapUtils.toString(request.getOauthParameters())); } @@ -87,8 +86,8 @@ public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, V } /** - * Start the request to retrieve the access token. The optionally provided callback will be called with the Token - * when it is available. + * Start the request to retrieve the access token. The optionally provided + * callback will be called with the Token when it is available. * * @param requestToken request token (obtained previously or null) * @param verifier verifier code @@ -122,7 +121,7 @@ protected void prepareAccessTokenRequest(AbstractRequest request, OAuth1RequestT request.addOAuthParameter(OAuthConstants.TOKEN, requestToken.getToken()); request.addOAuthParameter(OAuthConstants.VERIFIER, verifier.getValue()); config.log("setting token to: " + requestToken + " and verifier to: " + verifier); - addOAuthParams(request, requestToken); + addOAuthParams(request, requestToken.getTokenSecret()); appendSignature(request); } @@ -134,20 +133,18 @@ public void signRequest(OAuth1AccessToken token, AbstractRequest request) { request.addOAuthParameter(OAuthConstants.TOKEN, token.getToken()); } config.log("setting token to: " + token); - addOAuthParams(request, token); + addOAuthParams(request, token.getTokenSecret()); appendSignature(request); } - /** - * {@inheritDoc} - */ @Override public String getVersion() { return VERSION; } /** - * Returns the URL where you should redirect your users to authenticate your application. + * Returns the URL where you should redirect your users to authenticate your + * application. * * @param requestToken the request token you need to authorize * @return the URL where you should redirect your users @@ -156,13 +153,12 @@ public String getAuthorizationUrl(OAuth1RequestToken requestToken) { return api.getAuthorizationUrl(requestToken); } - private String getSignature(AbstractRequest request, OAuth1Token token) { + private String getSignature(AbstractRequest request, String tokenSecret) { final OAuthConfig config = getConfig(); config.log("generating signature..."); config.log("using base64 encoder: " + Base64Encoder.type()); final String baseString = api.getBaseStringExtractor().extract(request); - final String signature = api.getSignatureService() - .getSignature(baseString, config.getApiSecret(), token.getTokenSecret()); + final String signature = api.getSignatureService().getSignature(baseString, config.getApiSecret(), tokenSecret); config.log("base string is: " + baseString); config.log("signature is: " + signature); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 4eecefa1f..76c680922 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -78,6 +78,42 @@ protected T createAccessTokenRequest(Verifier verifi return request; } + public final OAuth2AccessToken refreshAccessToken(String refreshToken) { + final Response response = createRefreshTokenRequest(refreshToken, + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)).send(); + return api.getAccessTokenExtractor().extract(response.getBody()); + } + + public final Future refreshAccessTokenAsync(String refreshToken, + OAuthAsyncRequestCallback callback) { + return refreshAccessTokenAsync(refreshToken, callback, null); + } + + public final Future refreshAccessTokenAsync(String refreshToken, + OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + final OAuthRequestAsync request = createRefreshTokenRequest(refreshToken, + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { + @Override + public OAuth2AccessToken convert(com.ning.http.client.Response response) throws IOException { + return getApi().getAccessTokenExtractor() + .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); + } + }, proxyServer); + } + + protected T createRefreshTokenRequest(String refreshToken, T request) { + if (refreshToken == null || refreshToken.isEmpty()) { + throw new IllegalArgumentException("The refreshToken cannot be null or empty"); + } + final OAuthConfig config = getConfig(); + request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); + request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + request.addParameter(OAuthConstants.REFRESH_TOKEN, refreshToken); + request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.REFRESH_TOKEN); + return request; + } + /** * {@inheritDoc} */ From 8c8d9b479c4cdc464c028b848a637035ac659102 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Feb 2016 18:04:30 +0300 Subject: [PATCH 008/250] prepare 2.3.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4004a29af..3323a9dc9 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.2.2 + 2.3.0 ``` @@ -87,7 +87,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.2.2 + 2.3.0 ``` diff --git a/changelog b/changelog index 1904d9081..75372e3b3 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). * Support response in gzip. * differentiate OAuth1 Access token, OAuth 1 Request Token and OAuth 2 Access token, make them conforms RFCs From 73b46fe1640b58c37c610670b406db481a547302 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Feb 2016 18:05:11 +0300 Subject: [PATCH 009/250] [maven-release-plugin] prepare release scribejava-2.3.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 2a2a7abfe..b47444554 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.2.3-SNAPSHOT + 2.3.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index f661a6b4c..64178f60a 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.2.3-SNAPSHOT + 2.3.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 08aa2ce57..80d68f0d2 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.2.3-SNAPSHOT + 2.3.0 ../pom.xml From 5a9ca46254426de46f33b03d1e1da6c351d5836c Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Feb 2016 18:05:16 +0300 Subject: [PATCH 010/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index b47444554..d34a6276f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.3.0 + 2.3.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 64178f60a..23e975072 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.3.0 + 2.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 80d68f0d2..b4730b400 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.3.0 + 2.3.1-SNAPSHOT ../pom.xml From 87779522b63690140a859f20b061cb01170e5c95 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 3 Mar 2016 12:41:14 +0300 Subject: [PATCH 011/250] fix typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3323a9dc9..871a543f8 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Hit ScribeJava as hard and with many threads as you like. ### Async -You can user ning async http client out-of-box, just use ServiceBuilderAsync +You can use ning async http client out-of-box, just use ServiceBuilderAsync ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box From 5593084434750aa24b949affd18bd94700105486 Mon Sep 17 00:00:00 2001 From: Maksim Likharev Date: Thu, 3 Mar 2016 14:45:28 -0800 Subject: [PATCH 012/250] resource owner password credentials grant --- pom.xml | 6 ++ .../scribejava/core/model/OAuthConstants.java | 3 + .../scribejava/core/oauth/OAuth20Service.java | 66 +++++++++++++++++-- .../core/utils/Uninterruptibles.java | 37 +++++++++++ .../core/oauth/CompletedFuture.java | 43 ++++++++++++ .../scribejava/core/oauth/OAuth20ApiUnit.java | 22 +++++++ .../core/oauth/OAuth20ServiceTest.java | 50 ++++++++++++++ .../core/oauth/OAuth20ServiceUnit.java | 57 ++++++++++++++++ 8 files changed, 277 insertions(+), 7 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java create mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java create mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java create mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java create mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java diff --git a/pom.xml b/pom.xml index d34a6276f..cca9d984b 100644 --- a/pom.xml +++ b/pom.xml @@ -80,6 +80,12 @@ 4.12 test + + com.google.code.gson + gson + 2.6.2 + test + commons-codec commons-codec diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java index 4648b24e1..687970171 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java @@ -21,6 +21,7 @@ public interface OAuthConstants { String VERIFIER = "oauth_verifier"; String HEADER = "Authorization"; String SCOPE = "scope"; + String BASIC = "Basic"; // OAuth 2.0 String ACCESS_TOKEN = "access_token"; @@ -32,4 +33,6 @@ public interface OAuthConstants { String GRANT_TYPE = "grant_type"; String AUTHORIZATION_CODE = "authorization_code"; String STATE = "state"; + String USERNAME = "username"; + String PASSWORD = "password"; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 76c680922..3e6e35088 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -1,7 +1,12 @@ package com.github.scribejava.core.oauth; +import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.services.Base64Encoder; +import com.github.scribejava.core.utils.Uninterruptibles; import com.ning.http.client.ProxyServer; import java.io.IOException; +import java.nio.charset.Charset; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.AbstractRequest; @@ -13,6 +18,8 @@ import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verifier; +import org.apache.commons.codec.binary.Base64; + import java.util.Map; public class OAuth20Service extends OAuthService { @@ -32,9 +39,11 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { } public final OAuth2AccessToken getAccessToken(Verifier verifier) { - final Response response = createAccessTokenRequest(verifier, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)).send(); - return api.getAccessTokenExtractor().extract(response.getBody()); + return Uninterruptibles.getUninterruptibly( getAccessTokenAsync(verifier, null) ); + } + + public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) { + return Uninterruptibles.getUninterruptibly( getAccessTokenPasswordGrantAsync(uname, password, null) ); } /** @@ -54,15 +63,60 @@ public final Future getAccessTokenAsync(Verifier verifier, OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthRequestAsync request = createAccessTokenRequest(verifier, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + + return getAccessTokenAsync(request, callback, proxyServer); + } + + public final Future getAccessTokenPasswordGrantAsync(String uname, String password, + OAuthAsyncRequestCallback callback) { + final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + + return getAccessTokenPasswordGrantAsync(uname, password, callback, null); + } + + public final Future getAccessTokenPasswordGrantAsync(String uname, String password, + OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + + return getAccessTokenAsync(request, callback, proxyServer); + } + + protected Future getAccessTokenAsync(OAuthRequestAsync request, + OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth2AccessToken convert(com.ning.http.client.Response response) throws IOException { return getApi().getAccessTokenExtractor() - .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); + .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); } }, proxyServer); } + protected T createAccessTokenPasswordGrantRequest(String username, String password, T request) { + final OAuthConfig config = getConfig(); + request.addParameter(OAuthConstants.USERNAME, username); + request.addParameter(OAuthConstants.PASSWORD, password); + + if (config.hasScope()) { + request.addParameter(OAuthConstants.SCOPE, config.getScope()); + } + + request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.PASSWORD); + + request.addHeader(OAuthConstants.HEADER, OAuthConstants.BASIC + " " + + Base64Encoder.getInstance().encode( + String.format("%s:%s", config.getApiKey(), config.getApiSecret()).getBytes( + Charset.forName("UTF-8") + ) + ) + ); + + return request; + } + protected T createAccessTokenRequest(Verifier verifier, T request) { final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); @@ -79,9 +133,7 @@ protected T createAccessTokenRequest(Verifier verifi } public final OAuth2AccessToken refreshAccessToken(String refreshToken) { - final Response response = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)).send(); - return api.getAccessTokenExtractor().extract(response.getBody()); + return Uninterruptibles.getUninterruptibly( refreshAccessTokenAsync(refreshToken, null) ); } public final Future refreshAccessTokenAsync(String refreshToken, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java new file mode 100644 index 000000000..c3ed57995 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java @@ -0,0 +1,37 @@ +package com.github.scribejava.core.utils; + +import com.github.scribejava.core.exceptions.OAuthException; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + +public final class Uninterruptibles { + /** + * + * This is part of the code from guava, copied here as the project doesn't include one. + * + * Invokes {@code future.}{@link Future#get() get()} uninterruptibly. + */ + public static V getUninterruptibly(Future future) { + boolean interrupted = false; + try { + while (true) { + try { + return future.get(); + } catch (InterruptedException e) { + interrupted = true; + } + } + } + catch( ExecutionException e ) { + throw new OAuthException( e ); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + +} diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java new file mode 100644 index 000000000..1c4a3f068 --- /dev/null +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java @@ -0,0 +1,43 @@ +package com.github.scribejava.core.oauth; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + */ +class CompletedFuture implements Future { + private final V result; + + public CompletedFuture( V result ) { + this.result = result; + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean isDone() { + return true; + } + + @Override + public V get() throws InterruptedException, ExecutionException { + return result; + } + + @Override + public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, + TimeoutException { + + return result; + } +} diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java new file mode 100644 index 000000000..398173d11 --- /dev/null +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java @@ -0,0 +1,22 @@ +package com.github.scribejava.core.oauth; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.model.OAuthConfig; + +/** + */ +class OAuth20ApiUnit extends DefaultApi20 { + @Override + public String getAccessTokenEndpoint() { + return "http://localhost:8080/token"; + } + + @Override + public String getAuthorizationUrl(OAuthConfig config) { + return "http://localhost:8080/authorize"; + } + + public OAuth20Service createService(OAuthConfig config) { + return new OAuth20ServiceUnit(this, config); + } +} diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java new file mode 100644 index 000000000..731eba951 --- /dev/null +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java @@ -0,0 +1,50 @@ +package com.github.scribejava.core.oauth; + +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.services.Base64Encoder; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import org.junit.Assert; +import org.junit.Test; + +import java.nio.charset.Charset; +import java.util.Map; + +/** + */ +public class OAuth20ServiceTest { + + @Test + public void shouldProduceCorrectRequest() { + final OAuth20Service service = new ServiceBuilder() + .apiKey("your_api_key") + .apiSecret("your_api_secret") + .build( new OAuth20ApiUnit() ); + + final OAuth2AccessToken token = service.getAccessTokenPasswordGrant("user1", "password1"); + final Gson json = new Gson(); + + Assert.assertNotNull(token); + + Map map = json.fromJson(token.getRawResponse(), + new TypeToken>(){}.getType()); + + Assert.assertEquals(OAuth20ServiceUnit.token, map.get(OAuthConstants.ACCESS_TOKEN)); + Assert.assertEquals(OAuth20ServiceUnit.state, map.get(OAuthConstants.STATE)); + Assert.assertEquals(OAuth20ServiceUnit.expires, map.get("expires_in")); + + final String authorize = Base64Encoder.getInstance().encode( + String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()).getBytes( + Charset.forName("UTF-8") + ) + ); + + Assert.assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); + + Assert.assertEquals("user1", map.get("query-username")); + Assert.assertEquals("password1", map.get("query-password")); + Assert.assertEquals("password", map.get("query-grant_type")); + } +} diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java new file mode 100644 index 000000000..32b358746 --- /dev/null +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java @@ -0,0 +1,57 @@ +package com.github.scribejava.core.oauth; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Parameter; +import com.google.gson.Gson; +import com.ning.http.client.ProxyServer; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Future; + +/** + */ +class OAuth20ServiceUnit extends OAuth20Service { + + final static String token = "ae82980abab675c646a070686d5558ad"; + final static String state = "123"; + final static String expires = "3600"; + + public OAuth20ServiceUnit(DefaultApi20 api, OAuthConfig config) { + super(api, config); + } + + protected Future getAccessTokenAsync(OAuthRequestAsync request, + OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + + final Gson json = new Gson(); + final Map response = new HashMap<>(); + + response.put(OAuthConstants.ACCESS_TOKEN, token); + response.put(OAuthConstants.STATE, state); + response.put("expires_in", expires); + + response.putAll( request.getHeaders() ); + response.putAll( request.getOauthParameters() ); + + for(Parameter p : request.getQueryStringParams().getParams()) { + response.put( "query-" + p.getKey(), p.getValue() ); + } + + final OAuth2AccessToken accessToken = new OAuth2AccessToken(token, json.toJson( response )); + + try { + return new CompletedFuture(accessToken); + } + finally { + if( callback != null ) { + callback.onCompleted(accessToken); + } + } + } +} From 4a2427d16b74d0b9544b3942717e14ff44b315eb Mon Sep 17 00:00:00 2001 From: Chris Wewerka Date: Wed, 9 Mar 2016 14:40:01 +0100 Subject: [PATCH 013/250] fixed issue 587: added headers to async request --- .../core/model/OAuthRequestAsync.java | 45 ++++++++++++++----- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index a7dd1dce5..42c825efb 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -1,16 +1,19 @@ package com.github.scribejava.core.model; +import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.oauth.OAuthService; import com.ning.http.client.AsyncCompletionHandler; import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.FluentCaseInsensitiveStringsMap; import com.ning.http.client.ProxyServer; + import java.io.IOException; +import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.ArrayList; import java.util.Map; import java.util.concurrent.Future; -import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.oauth.OAuthService; public class OAuthRequestAsync extends AbstractRequest { @@ -53,10 +56,16 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; switch (getVerb()) { case GET: - boundRequestBuilder = service.getAsyncHttpClient().prepareGet(completeUrl); + boundRequestBuilder = service.getAsyncHttpClient() + .prepareGet(completeUrl) + .setHeaders(mapHeaders()); + break; case POST: - boundRequestBuilder = service.getAsyncHttpClient().preparePost(completeUrl).setBody(getBodyContents()); + boundRequestBuilder = service.getAsyncHttpClient().preparePost(completeUrl) + .setBody(getBodyContents()) + .setHeaders(mapHeaders()); + break; default: throw new IllegalArgumentException("message build error: unknown verb type"); @@ -67,6 +76,26 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); } + public Future sendAsync(OAuthAsyncRequestCallback callback) { + return sendAsync(callback, RESPONSE_CONVERTER, null); + } + + public Future sendAsync(OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + return sendAsync(callback, RESPONSE_CONVERTER, proxyServer); + } + + private Map> mapHeaders() { + final Map headers = getHeaders(); + final Map> mapped = new HashMap<>(); + + for(Map.Entry entry: headers.entrySet()) { + final ArrayList list = new ArrayList<>(); + list.add(entry.getValue()); + mapped.put(entry.getKey(), list); + } + return mapped; + } + private static class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { private final OAuthAsyncRequestCallback callback; @@ -94,14 +123,6 @@ public void onThrowable(Throwable t) { } }; - public Future sendAsync(OAuthAsyncRequestCallback callback) { - return sendAsync(callback, RESPONSE_CONVERTER, null); - } - - public Future sendAsync(OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { - return sendAsync(callback, RESPONSE_CONVERTER, proxyServer); - } - public interface ResponseConverter { T convert(com.ning.http.client.Response response) throws IOException; From d91f6ee0dd58c09c899bfc82888b1add63905a09 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 15:31:43 +0300 Subject: [PATCH 014/250] APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) --- changelog | 3 +++ .../com/github/scribejava/core/builder/api/DefaultApi20.java | 4 ++++ .../java/com/github/scribejava/core/oauth/OAuth20Service.java | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/changelog b/changelog index 75372e3b3..5e315bad7 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) + [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). * Support response in gzip. diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index fe07dbf6c..2bc3ee47e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -49,6 +49,10 @@ public Verb getAccessTokenVerb() { */ public abstract String getAccessTokenEndpoint(); + public String getRefreshTokenEndpoint() { + return getAccessTokenEndpoint(); + } + /** * Returns the URL where you should redirect your users to authenticate your application. * diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 76c680922..57f8d09fd 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -80,7 +80,7 @@ protected T createAccessTokenRequest(Verifier verifi public final OAuth2AccessToken refreshAccessToken(String refreshToken) { final Response response = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)).send(); + new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)).send(); return api.getAccessTokenExtractor().extract(response.getBody()); } @@ -92,7 +92,7 @@ public final Future refreshAccessTokenAsync(String refreshTok public final Future refreshAccessTokenAsync(String refreshToken, OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthRequestAsync request = createRefreshTokenRequest(refreshToken, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)); return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth2AccessToken convert(com.ning.http.client.Response response) throws IOException { From b0300318eb3ce7eb540a4f49dd075d382c347cda Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 15:34:36 +0300 Subject: [PATCH 015/250] mark Facebook doesn't support refresh token by throwing UnsupportedOperationException --- changelog | 1 + .../main/java/com/github/scribejava/apis/FacebookApi.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/changelog b/changelog index 5e315bad7..de50fa652 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) + * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index c3f3bfcea..21df3bce2 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -39,6 +39,11 @@ public String getAccessTokenEndpoint() { return "https://graph.facebook.com/v2.5/oauth/access_token"; } + @Override + public String getRefreshTokenEndpoint() { + throw new UnsupportedOperationException("Facebook doesn't support refershing tokens"); + } + @Override public String getAuthorizationUrl(OAuthConfig config) { Preconditions.checkValidUrl(config.getCallback(), From 03b3820b24d646fb010ff5c5afcd76f689158cb5 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 15:46:26 +0300 Subject: [PATCH 016/250] make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) --- changelog | 1 + .../github/scribejava/apis/DoktornaraboteApi.java | 8 -------- .../java/com/github/scribejava/apis/FacebookApi.java | 8 -------- .../com/github/scribejava/apis/Foursquare2Api.java | 8 -------- .../java/com/github/scribejava/apis/GitHubApi.java | 8 ++++++++ .../main/java/com/github/scribejava/apis/HHApi.java | 8 -------- .../java/com/github/scribejava/apis/ImgurApi.java | 8 -------- .../java/com/github/scribejava/apis/KaixinApi20.java | 8 -------- .../com/github/scribejava/apis/LinkedInApi20.java | 8 -------- .../java/com/github/scribejava/apis/LiveApi.java | 8 -------- .../java/com/github/scribejava/apis/MailruApi.java | 8 -------- .../com/github/scribejava/apis/OdnoklassnikiApi.java | 8 -------- .../com/github/scribejava/apis/PinterestApi.java | 8 -------- .../java/com/github/scribejava/apis/RenrenApi.java | 8 -------- .../com/github/scribejava/apis/SinaWeiboApi20.java | 8 -------- .../com/github/scribejava/apis/StackExchangeApi.java | 8 ++++++++ .../java/com/github/scribejava/apis/TutByApi.java | 8 -------- .../java/com/github/scribejava/apis/ViadeoApi.java | 8 -------- .../com/github/scribejava/apis/VkontakteApi.java | 8 -------- .../scribejava/core/builder/api/DefaultApi20.java | 12 ++++++------ .../core/extractors/OAuth2AccessTokenExtractor.java | 2 +- .../extractors/OAuth2AccessTokenJsonExtractor.java | 2 +- 22 files changed, 25 insertions(+), 136 deletions(-) diff --git a/changelog b/changelog index de50fa652..dc7b1472c 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException + * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java index f937d62bd..41c67cc9c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java @@ -2,9 +2,6 @@ import com.github.scribejava.apis.service.DoktornaraboteOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; @@ -60,11 +57,6 @@ public String getAuthorizationUrl(OAuthConfig config) { return sb.toString(); } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public OAuth20Service createService(OAuthConfig config) { return new DoktornaraboteOAuthServiceImpl(this, config); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index 21df3bce2..3412967e9 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -29,11 +26,6 @@ public static FacebookApi instance() { return InstanceHolder.INSTANCE; } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public String getAccessTokenEndpoint() { return "https://graph.facebook.com/v2.5/oauth/access_token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java index d221dcbac..b8dc4f594 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -36,9 +33,4 @@ public String getAuthorizationUrl(OAuthConfig config) { "Must provide a valid url as callback. Foursquare2 does not support OOB"); return String.format(AUTHORIZATION_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java index 6d48a107f..9b3129af0 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java @@ -1,6 +1,9 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -41,4 +44,9 @@ public String getAuthorizationUrl(OAuthConfig config) { } return sb.toString(); } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return OAuth2AccessTokenExtractor.instance(); + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java index c0fd8f1e2..980bd1693 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java @@ -1,13 +1,10 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.apis.service.HHOAuthServiceImpl; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.utils.OAuthEncoder; @@ -44,11 +41,6 @@ public String getAuthorizationUrl(OAuthConfig config) { return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public OAuth20Service createService(OAuthConfig config) { return new HHOAuthServiceImpl(this, config); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java index bcb95cf17..c5ed43f73 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java @@ -2,9 +2,6 @@ import com.github.scribejava.apis.service.ImgurOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -30,11 +27,6 @@ public Verb getAccessTokenVerb() { return Verb.POST; } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public String getAccessTokenEndpoint() { return "https://api.imgur.com/oauth2/token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java index 1d6658f21..08062b828 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -28,11 +25,6 @@ public static KaixinApi20 instance() { return InstanceHolder.INSTANCE; } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public String getAccessTokenEndpoint() { return "https://api.kaixin001.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java index 7f829dd40..3043f2737 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java @@ -2,9 +2,6 @@ import com.github.scribejava.apis.service.LinkedIn20ServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; @@ -55,11 +52,6 @@ public String getAuthorizationUrl(OAuthConfig config) { } } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public OAuth20Service createService(OAuthConfig config) { return new LinkedIn20ServiceImpl(this, config); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java index a512318f5..d40d62cba 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -44,9 +41,4 @@ public String getAuthorizationUrl(OAuthConfig config) { return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); } } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java index 3f84704b6..e520309d8 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java @@ -1,14 +1,11 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; import com.github.scribejava.apis.service.MailruOAuthServiceImpl; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; public class MailruApi extends DefaultApi20 { @@ -54,9 +51,4 @@ public String getAuthorizationUrl(OAuthConfig config) { public OAuth20Service createService(OAuthConfig config) { return new MailruOAuthServiceImpl(this, config); } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java index 1842e9faa..42c15d31f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java @@ -2,9 +2,6 @@ import com.github.scribejava.apis.service.OdnoklassnikiServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -54,9 +51,4 @@ public String getAuthorizationUrl(OAuthConfig config) { public OAuth20Service createService(OAuthConfig config) { return new OdnoklassnikiServiceImpl(this, config); } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java index 6880cd938..d5a1fab76 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; @@ -50,9 +47,4 @@ public String getAuthorizationUrl(OAuthConfig config) { return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); } } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java index 4fd12b36b..d28f55c4d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -28,11 +25,6 @@ public static RenrenApi instance() { return InstanceHolder.INSTANCE; } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public String getAccessTokenEndpoint() { return "https://graph.renren.com/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java index a98493382..fe9fde760 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; @@ -34,11 +31,6 @@ public Verb getAccessTokenVerb() { return Verb.POST; } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public String getAccessTokenEndpoint() { return "https://api.weibo.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java index 77e257839..999fd5bea 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java @@ -1,6 +1,9 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; @@ -52,4 +55,9 @@ public String getAuthorizationUrl(OAuthConfig config) { } return sb.toString(); } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return OAuth2AccessTokenExtractor.instance(); + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java index fb1e10820..7e5324644 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java @@ -1,14 +1,11 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; import com.github.scribejava.apis.service.TutByOAuthServiceImpl; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; public class TutByApi extends DefaultApi20 { @@ -48,9 +45,4 @@ public String getAuthorizationUrl(OAuthConfig config) { public OAuth20Service createService(OAuthConfig config) { return new TutByOAuthServiceImpl(this, config); } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java index c4f718d81..abe864d9a 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; @@ -26,11 +23,6 @@ public static ViadeoApi instance() { return InstanceHolder.INSTANCE; } - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } - @Override public String getAccessTokenEndpoint() { return "https://secure.viadeo.com/oauth-provider/access_token2?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java index b0b4e345c..6ed78fc46 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -41,9 +38,4 @@ public String getAuthorizationUrl(OAuthConfig config) { return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); } } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index 2bc3ee47e..e70397465 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -1,6 +1,6 @@ package com.github.scribejava.core.builder.api; -import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; +import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; @@ -10,15 +10,15 @@ import java.util.Map; /** - * Default implementation of the OAuth protocol, version 2.0 (draft 11) + * Default implementation of the OAuth protocol, version 2.0 * * This class is meant to be extended by concrete implementations of the API, providing the endpoints and * endpoint-http-verbs. * - * If your Api adheres to the 2.0 (draft 11) protocol correctly, you just need to extend this class and define the - * getters for your endpoints. + * If your API adheres to the 2.0 protocol correctly, you just need to extend this class and define the getters for your + * endpoints. * - * If your Api does something a bit different, you can override the different extractors or services, in order to + * If your API does something a bit different, you can override the different extractors or services, in order to * fine-tune the process. Please read the javadocs of the interfaces to get an idea of what to do. * */ @@ -30,7 +30,7 @@ public abstract class DefaultApi20 { * @return access token extractor */ public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenExtractor.instance(); + return OAuth2AccessTokenJsonExtractor.instance(); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java index dd80c0012..251226338 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java @@ -8,7 +8,7 @@ import com.github.scribejava.core.utils.Preconditions; /** - * Default implementation of {@link TokenExtractor} for OAuth 2.0 + * Custom implementation of {@link TokenExtractor} for OAuth 2.0 */ public class OAuth2AccessTokenExtractor implements TokenExtractor { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java index 514f38610..f6250f9b2 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java @@ -7,7 +7,7 @@ import com.github.scribejava.core.utils.Preconditions; /** - * JSON implementation of {@link TokenExtractor} for OAuth 2.0 + * JSON (default) implementation of {@link TokenExtractor} for OAuth 2.0 */ public class OAuth2AccessTokenJsonExtractor implements TokenExtractor { From 75779efbca828542425944838a00b8c84cc339c1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 18:41:17 +0300 Subject: [PATCH 017/250] drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) --- changelog | 1 + .../com/github/scribejava/apis/GoogleApi.java | 47 ------------- .../apis/examples/GoogleExample.java | 69 ------------------- 3 files changed, 1 insertion(+), 116 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi.java delete mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java diff --git a/changelog b/changelog index dc7b1472c..658483c29 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) + * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi.java deleted file mode 100644 index af8448385..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Verb; - -public class GoogleApi extends DefaultApi10a { - - private static final String AUTHORIZATION_URL - = "https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=%s"; - - protected GoogleApi() { - } - - private static class InstanceHolder { - private static final GoogleApi INSTANCE = new GoogleApi(); - } - - public static GoogleApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return "https://www.google.com/accounts/OAuthGetAccessToken"; - } - - @Override - public String getRequestTokenEndpoint() { - return "https://www.google.com/accounts/OAuthGetRequestToken"; - } - - @Override - public Verb getAccessTokenVerb() { - return Verb.GET; - } - - @Override - public Verb getRequestTokenVerb() { - return Verb.GET; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } -} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java deleted file mode 100644 index 205cd37a8..000000000 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GoogleExample.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.github.scribejava.apis.examples; - -import java.util.Scanner; -import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.apis.GoogleApi; -import com.github.scribejava.core.model.OAuth1AccessToken; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; -import com.github.scribejava.core.oauth.OAuth10aService; - -public abstract class GoogleExample { - - private static final String NETWORK_NAME = "Google"; - private static final String AUTHORIZE_URL = "https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token="; - private static final String PROTECTED_RESOURCE_URL = "https://docs.google.com/feeds/default/private/full/"; - private static final String SCOPE = "https://docs.google.com/feeds/"; - - public static void main(String... args) { - final OAuth10aService service = new ServiceBuilder() - .apiKey("anonymous") - .apiSecret("anonymous") - .scope(SCOPE) - .build(GoogleApi.instance()); - final Scanner in = new Scanner(System.in); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); - System.out.println(); - - // Obtain the Request Token - System.out.println("Fetching the Request Token..."); - final OAuth1RequestToken requestToken = service.getRequestToken(); - System.out.println("Got the Request Token!"); - System.out.println("(if your curious it looks like this: " + requestToken + " )"); - System.out.println(); - - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(AUTHORIZE_URL + requestToken.getToken()); - System.out.println("And paste the verifier here"); - System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); - System.out.println(); - - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); - service.signRequest(accessToken, request); - request.addHeader("GData-Version", "3.0"); - final Response response = request.send(); - System.out.println("Got it! Lets see what we found..."); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - - System.out.println(); - System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); - - } -} From a3ff12d320b13ebfb64dff3ac406a07e9b21c34e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 19:03:48 +0300 Subject: [PATCH 018/250] add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code --- changelog | 1 + .../github/scribejava/apis/GoogleApi20.java | 6 ++--- .../core/builder/AbstractServiceBuilder.java | 12 ++++++++++ .../core/builder/ServiceBuilder.java | 4 ++-- .../core/builder/ServiceBuilderAsync.java | 4 ++-- .../scribejava/core/model/OAuthConfig.java | 22 +++++++++---------- .../core/model/OAuthConfigAsync.java | 5 +++-- 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/changelog b/changelog index 658483c29..f5324c442 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) + * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index 9e02c0cfa..b1abc4fe3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -14,7 +14,7 @@ public class GoogleApi20 extends DefaultApi20 { private static final String AUTHORIZE_URL - = "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=%s&redirect_uri=%s&scope=%s"; + = "https://accounts.google.com/o/oauth2/auth?response_type=%s&client_id=%s&redirect_uri=%s&scope=%s"; protected GoogleApi20() { } @@ -39,8 +39,8 @@ public String getAccessTokenEndpoint() { @Override public String getAuthorizationUrl(OAuthConfig config) { - final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode( - config.getCallback()), OAuthEncoder.encode(config.getScope()))); + final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getResponseType(), + config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()))); final String state = config.getState(); if (state != null) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java index 41468d1c1..7c34f0dae 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java @@ -20,6 +20,7 @@ abstract class AbstractServiceBuilder> { private SignatureType signatureType; private OutputStream debugStream; private String grantType; + private String responseType = "code"; AbstractServiceBuilder() { this.callback = OAuthConstants.OUT_OF_BAND; @@ -118,6 +119,13 @@ public T grantType(String grantType) { return (T) this; } + @SuppressWarnings("unchecked") + public T responseType(String responseType) { + Preconditions.checkEmptyString(responseType, "Invalid OAuth responseType"); + this.responseType = responseType; + return (T) this; + } + @SuppressWarnings("unchecked") public T debug() { debugStream(System.out); @@ -161,6 +169,10 @@ public String getGrantType() { return grantType; } + public String getResponseType() { + return responseType; + } + protected abstract OAuthConfig createConfig(); /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 02f7f3902..7d24dbec9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -28,8 +28,8 @@ public ServiceBuilder readTimeout(Integer readTimeout) { protected OAuthConfig createConfig() { super.checkPreconditions(); final OAuthConfig config = new OAuthConfig(getApiKey(), getApiSecret(), getCallback(), getSignatureType(), - getScope(), getDebugStream(), connectTimeout, readTimeout, getGrantType()); - config.setState(getState()); + getScope(), getDebugStream(), connectTimeout, readTimeout, getGrantType(), getState(), + getResponseType()); return config; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java index 6f5a218cb..192405b6a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java @@ -25,8 +25,8 @@ public void checkPreconditions() { protected OAuthConfigAsync createConfig() { checkPreconditions(); final OAuthConfigAsync configAsync = new OAuthConfigAsync(getApiKey(), getApiSecret(), getCallback(), - getSignatureType(), getScope(), getGrantType(), getDebugStream(), asyncHttpClientConfig); - configAsync.setState(getState()); + getSignatureType(), getScope(), getGrantType(), getState(), getResponseType(), getDebugStream(), + asyncHttpClientConfig); configAsync.setAsyncHttpProviderClassName(asyncHttpProviderClassName); return configAsync; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 92b8bbbbc..93231ddb8 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -17,14 +17,16 @@ public class OAuthConfig { private final OutputStream debugStream; private final Integer connectTimeout; private final Integer readTimeout; - private String state; + private final String state; + private final String responseType; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, - OutputStream stream, Integer connectTimeout, Integer readTimeout, String grantType) { + OutputStream stream, Integer connectTimeout, Integer readTimeout, String grantType, String state, + String responseType) { this.apiKey = key; this.apiSecret = secret; this.callback = callback; @@ -34,6 +36,8 @@ public OAuthConfig(String key, String secret, String callback, SignatureType typ this.connectTimeout = connectTimeout; this.readTimeout = readTimeout; this.grantType = grantType; + this.state = state; + this.responseType = responseType; } public String getApiKey() { @@ -87,17 +91,11 @@ public void log(String message) { } } - /** - * Sets optional value used by some provider implementations that is exchanged with provider to avoid CSRF attacks. - * - * @param state some secret key that client side shall never receive - */ - public void setState(String state) { - this.state = state; - } - public String getState() { return state; } + public String getResponseType() { + return responseType; + } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java index 1387a9b01..346993b21 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java @@ -13,8 +13,9 @@ public OAuthConfigAsync(String key, String secret) { } public OAuthConfigAsync(String key, String secret, String callback, SignatureType type, String scope, - String grantType, OutputStream stream, AsyncHttpClientConfig asyncHttpClientConfig) { - super(key, secret, callback, type, scope, stream, null, null, grantType); + String grantType, String state, String responseType, OutputStream stream, + AsyncHttpClientConfig asyncHttpClientConfig) { + super(key, secret, callback, type, scope, stream, null, null, grantType, state, responseType); this.asyncHttpClientConfig = asyncHttpClientConfig; } From e088788a982940f8f4ef7a2a41d8580eadcc3e19 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 19:34:15 +0300 Subject: [PATCH 019/250] remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 --- changelog | 1 + .../apis/service/GoogleOAuthServiceImpl.java | 5 ++-- .../apis/service/ImgurOAuthServiceImpl.java | 7 +++--- .../apis/service/LinkedIn20ServiceImpl.java | 5 ++-- .../apis/service/MailruOAuthServiceImpl.java | 5 ++-- .../apis/examples/AWeberExample.java | 5 ++-- .../scribejava/apis/examples/DiggExample.java | 5 ++-- .../apis/examples/FacebookAsyncExample.java | 5 ++-- .../apis/examples/FacebookExample.java | 5 ++-- .../apis/examples/FlickrExample.java | 5 ++-- .../apis/examples/Foursquare2Example.java | 5 ++-- .../apis/examples/FoursquareExample.java | 5 ++-- .../apis/examples/FreelancerExample.java | 5 ++-- .../apis/examples/GitHubExample.java | 5 ++-- .../apis/examples/Google20Example.java | 5 ++-- .../scribejava/apis/examples/HHExample.java | 5 ++-- .../apis/examples/ImgurExample.java | 5 ++-- .../apis/examples/Kaixin20Example.java | 5 ++-- .../apis/examples/LinkedIn20Example.java | 5 ++-- .../apis/examples/LinkedInExample.java | 5 ++-- .../examples/LinkedInExampleWithScopes.java | 5 ++-- .../scribejava/apis/examples/LiveExample.java | 5 ++-- .../apis/examples/LoveFilmExample.java | 5 ++-- .../apis/examples/MailruAsyncExample.java | 5 ++-- .../apis/examples/MailruExample.java | 5 ++-- .../apis/examples/MeetupExample.java | 5 ++-- .../apis/examples/NeteaseWeiboExample.java | 5 ++-- .../apis/examples/OdnoklassnikiExample.java | 5 ++-- .../apis/examples/PinterestExample.java | 5 ++-- .../apis/examples/Px500Example.java | 5 ++-- .../apis/examples/RenrenExample.java | 5 ++-- .../apis/examples/SinaWeibo2Example.java | 5 ++-- .../apis/examples/SinaWeiboExample.java | 5 ++-- .../apis/examples/SkyrockExample.java | 5 ++-- .../apis/examples/SohuWeiboExample.java | 5 ++-- .../apis/examples/StackExchangeExample.java | 5 ++-- .../apis/examples/TrelloExample.java | 5 ++-- .../apis/examples/TumblrExample.java | 5 ++-- .../apis/examples/TutByExample.java | 5 ++-- .../apis/examples/TwitterExample.java | 5 ++-- .../apis/examples/ViadeoExample.java | 5 ++-- .../apis/examples/VkontakteExample.java | 5 ++-- .../scribejava/apis/examples/XingExample.java | 5 ++-- .../apis/examples/YahooExample.java | 5 ++-- .../scribejava/core/model/Verifier.java | 25 ------------------- .../core/oauth/OAuth10aService.java | 21 ++++++++-------- .../scribejava/core/oauth/OAuth20Service.java | 19 +++++++------- 47 files changed, 107 insertions(+), 176 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/Verifier.java diff --git a/changelog b/changelog index f5324c442..fce98d4ac 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,7 @@ * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code + * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java index 300872853..015ce3677 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java @@ -4,7 +4,6 @@ import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public class GoogleOAuthServiceImpl extends OAuth20Service { @@ -14,8 +13,8 @@ public GoogleOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - protected T createAccessTokenRequest(Verifier verifier, T request) { - super.createAccessTokenRequest(verifier, request); + protected T createAccessTokenRequest(String code, T request) { + super.createAccessTokenRequest(code, request); if (!getConfig().hasGrantType()) { request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java index fcc791ac1..ac80b1df6 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public class ImgurOAuthServiceImpl extends OAuth20Service { @@ -16,17 +15,17 @@ public ImgurOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - protected T createAccessTokenRequest(Verifier verifier, T request) { + protected T createAccessTokenRequest(String oauthVerifier, T request) { final OAuthConfig config = getConfig(); request.addBodyParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addBodyParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); if (ImgurApi.isOob(config)) { request.addBodyParameter(OAuthConstants.GRANT_TYPE, "pin"); - request.addBodyParameter("pin", verifier.getValue()); + request.addBodyParameter("pin", oauthVerifier); } else { request.addBodyParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); - request.addBodyParameter(OAuthConstants.CODE, verifier.getValue()); + request.addBodyParameter(OAuthConstants.CODE, oauthVerifier); } return request; } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java index b1d61bb04..49bae5ecf 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java @@ -5,7 +5,6 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public class LinkedIn20ServiceImpl extends OAuth20Service { @@ -20,8 +19,8 @@ public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) } @Override - protected T createAccessTokenRequest(Verifier verifier, T request) { - super.createAccessTokenRequest(verifier, request); + protected T createAccessTokenRequest(String code, T request) { + super.createAccessTokenRequest(code, request); if (!getConfig().hasGrantType()) { request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java index 4b78fc6da..a6d4f9b3a 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java @@ -11,7 +11,6 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public class MailruOAuthServiceImpl extends OAuth20Service { @@ -52,8 +51,8 @@ public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) } @Override - protected T createAccessTokenRequest(Verifier verifier, T request) { - super.createAccessTokenRequest(verifier, request); + protected T createAccessTokenRequest(String code, T request) { + super.createAccessTokenRequest(code, request); if (!getConfig().hasGrantType()) { request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index 505f29e1d..233d3a984 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class AWeberExample { @@ -40,12 +39,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index f6ce3702e..690f95081 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class DiggExample { @@ -43,12 +42,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java index a8075e9a1..e95fe7ab2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java @@ -12,7 +12,6 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class FacebookAsyncExample { @@ -55,7 +54,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); @@ -72,7 +71,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(verifier, null).get(); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index a7d4a76f4..28740b43a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class FacebookExample { @@ -41,7 +40,7 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); @@ -58,7 +57,7 @@ public static void main(String... args) { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index 30a8d1a07..db08042ca 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class FlickrExample { @@ -39,12 +38,12 @@ public static void main(String... args) { System.out.println(authorizationUrl + "&perms=read"); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index 7f5e61a6b..c581aa484 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class Foursquare2Example { @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index 7c48e71d5..90fa38848 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class FoursquareExample { @@ -35,12 +34,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index 46224cb3c..c72f72de0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -9,7 +9,6 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class FreelancerExample { @@ -43,12 +42,12 @@ public static void main(String... args) { System.out.println(AUTHORIZE_URL + requestToken.getToken()); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index bbf78434c..fb12bf8f7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class GitHubExample { @@ -40,7 +39,7 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); @@ -57,7 +56,7 @@ public static void main(String... args) { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 964560044..50ec20a62 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; import java.util.HashMap; import java.util.Map; @@ -49,7 +48,7 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); @@ -66,7 +65,7 @@ public static void main(String... args) { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - OAuth2AccessToken accessToken = service.getAccessToken(verifier); + OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index 9477ea363..ad9d687d1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.apis.HHApi; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -40,12 +39,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index 01409fbb6..d25acaa86 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; import java.util.Scanner; @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verifier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 17f5ac0fb..0034f979a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class Kaixin20Example { @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verifier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index e4506b374..d308b7c5c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class LinkedIn20Example { @@ -38,12 +37,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 5489688c8..6a8e327ec 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class LinkedInExample { @@ -36,12 +35,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 17a0d6aaf..a0a925cb5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class LinkedInExampleWithScopes { @@ -40,12 +39,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index 47536186e..c86eaa793 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class LiveExample { @@ -38,12 +37,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java index 55a22b416..161278ad5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class LoveFilmExample { @@ -43,12 +42,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index 981690be6..10a787625 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -9,7 +9,6 @@ import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class MailruAsyncExample { @@ -51,12 +50,12 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(verifier, null).get(); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 4d25f14c2..45cdb9a80 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -5,7 +5,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.apis.MailruApi; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; @@ -39,12 +38,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index 3028349ce..8adf45a52 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class MeetupExample { @@ -35,12 +34,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index 60f8082e3..31a210612 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class NeteaseWeiboExample { @@ -43,12 +42,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 136b05774..88fb1ba93 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class OdnoklassnikiExample { @@ -44,13 +43,13 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index 3e0d1cb4b..13f7d77b4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; import java.util.Scanner; @@ -38,12 +37,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index 3e969fd06..458aea185 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class Px500Example { @@ -35,12 +34,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 392ff3881..75f132a4b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -16,7 +16,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class RenrenExample { @@ -47,12 +46,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 230f28875..1a67ad8ed 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class SinaWeibo2Example { @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verifier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index 42962c6ed..1d8625059 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class SinaWeiboExample { @@ -43,12 +42,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index c90e658d2..121a3da0f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class SkyrockExample { @@ -35,12 +34,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index 9bd89762d..c554208ab 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class SohuWeiboExample { @@ -43,12 +42,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index 47d43168e..affa6a812 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -9,7 +9,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class StackExchangeExample { @@ -45,7 +44,7 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); @@ -62,7 +61,7 @@ public static void main(String... args) { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index 1c274a060..bc3147b34 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class TrelloExample { @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index 413214eec..881cebd6d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class TumblrExample { @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 74ae83af9..4f201c85e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.apis.TutByApi; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -40,12 +39,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index 90446f8a6..4a46982aa 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class TwitterExample { @@ -35,12 +34,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index caffce403..3d8d12904 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class ViadeoExample { @@ -37,12 +36,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index d9be140d5..f026fbbc0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth20Service; public abstract class VkontakteExample { @@ -38,12 +37,12 @@ public static void main(String... args) { System.out.println(authorizationUrl); System.out.println("And paste the authorization code here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String code = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(verifier); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index c09b1ddc3..50ab3c6ba 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class XingExample { @@ -35,12 +34,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index d6f8e2e72..ee93da83a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuth10aService; public abstract class YahooExample { @@ -36,12 +35,12 @@ public static void main(String... args) { System.out.println(service.getAuthorizationUrl(requestToken)); System.out.println("And paste the verifier here"); System.out.print(">>"); - final Verifier verifier = new Verifier(in.nextLine()); + final String oauthVerifier = in.nextLine(); System.out.println(); // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, verifier); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Verifier.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Verifier.java deleted file mode 100644 index fc8a92195..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Verifier.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.scribejava.core.model; - -import com.github.scribejava.core.utils.Preconditions; - -/** - * Represents an OAuth verifier code. - */ -public class Verifier { - - private final String value; - - /** - * Default constructor. - * - * @param value verifier value - */ - public Verifier(String value) { - Preconditions.checkNotNull(value, "Must provide a valid string as verifier"); - this.value = value; - } - - public String getValue() { - return value; - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index b03001d77..c9c99a03f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -14,7 +14,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.services.Base64Encoder; import com.github.scribejava.core.utils.MapUtils; @@ -76,11 +75,11 @@ private void addOAuthParams(AbstractRequest request, String tokenSecret) { config.log("appended additional OAuth parameters: " + MapUtils.toString(request.getOauthParameters())); } - public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, Verifier verifier) { + public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, String oauthVerifier) { final OAuthConfig config = getConfig(); config.log("obtaining access token from " + api.getAccessTokenEndpoint()); final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this); - prepareAccessTokenRequest(request, requestToken, verifier); + prepareAccessTokenRequest(request, requestToken, oauthVerifier); final Response response = request.send(); return api.getAccessTokenExtractor().extract(response.getBody()); } @@ -90,22 +89,22 @@ public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, V * callback will be called with the Token when it is available. * * @param requestToken request token (obtained previously or null) - * @param verifier verifier code + * @param oauthVerifier oauth_verifier * @param callback optional callback * @return Future */ - public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, Verifier verifier, + public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, String oauthVerifier, OAuthAsyncRequestCallback callback) { - return getAccessTokenAsync(requestToken, verifier, callback, null); + return getAccessTokenAsync(requestToken, oauthVerifier, callback, null); } - public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, Verifier verifier, + public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, String oauthVerifier, OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthConfig config = getConfig(); config.log("async obtaining access token from " + api.getAccessTokenEndpoint()); final OAuthRequestAsync request = new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this); - prepareAccessTokenRequest(request, requestToken, verifier); + prepareAccessTokenRequest(request, requestToken, oauthVerifier); return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth1AccessToken convert(com.ning.http.client.Response response) throws IOException { @@ -116,11 +115,11 @@ public OAuth1AccessToken convert(com.ning.http.client.Response response) throws } protected void prepareAccessTokenRequest(AbstractRequest request, OAuth1RequestToken requestToken, - Verifier verifier) { + String oauthVerifier) { final OAuthConfig config = getConfig(); request.addOAuthParameter(OAuthConstants.TOKEN, requestToken.getToken()); - request.addOAuthParameter(OAuthConstants.VERIFIER, verifier.getValue()); - config.log("setting token to: " + requestToken + " and verifier to: " + verifier); + request.addOAuthParameter(OAuthConstants.VERIFIER, oauthVerifier); + config.log("setting token to: " + requestToken + " and verifier to: " + oauthVerifier); addOAuthParams(request, requestToken.getTokenSecret()); appendSignature(request); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 57f8d09fd..8f71c2ec4 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -12,7 +12,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verifier; import java.util.Map; public class OAuth20Service extends OAuthService { @@ -31,8 +30,8 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { this.api = api; } - public final OAuth2AccessToken getAccessToken(Verifier verifier) { - final Response response = createAccessTokenRequest(verifier, + public final OAuth2AccessToken getAccessToken(String code) { + final Response response = createAccessTokenRequest(code, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)).send(); return api.getAccessTokenExtractor().extract(response.getBody()); } @@ -41,18 +40,18 @@ public final OAuth2AccessToken getAccessToken(Verifier verifier) { * Start the request to retrieve the access token. The optionally provided callback will be called with the Token * when it is available. * - * @param verifier verifier code + * @param code code * @param callback optional callback * @return Future */ - public final Future getAccessTokenAsync(Verifier verifier, + public final Future getAccessTokenAsync(String code, OAuthAsyncRequestCallback callback) { - return getAccessTokenAsync(verifier, callback, null); + return getAccessTokenAsync(code, callback, null); } - public final Future getAccessTokenAsync(Verifier verifier, + public final Future getAccessTokenAsync(String code, OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { - final OAuthRequestAsync request = createAccessTokenRequest(verifier, + final OAuthRequestAsync request = createAccessTokenRequest(code, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override @@ -63,11 +62,11 @@ public OAuth2AccessToken convert(com.ning.http.client.Response response) throws }, proxyServer); } - protected T createAccessTokenRequest(Verifier verifier, T request) { + protected T createAccessTokenRequest(String code, T request) { final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); - request.addParameter(OAuthConstants.CODE, verifier.getValue()); + request.addParameter(OAuthConstants.CODE, code); request.addParameter(OAuthConstants.REDIRECT_URI, config.getCallback()); if (config.hasScope()) { request.addParameter(OAuthConstants.SCOPE, config.getScope()); From bbb2aaa020a2f6a12cc16b109838a097d423e8eb Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 19:52:43 +0300 Subject: [PATCH 020/250] default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) --- changelog | 1 + .../com/github/scribejava/apis/ConstantContactApi2.java | 6 ------ .../java/com/github/scribejava/apis/DoktornaraboteApi.java | 6 ------ .../main/java/com/github/scribejava/apis/FacebookApi.java | 6 ++++++ .../java/com/github/scribejava/apis/Foursquare2Api.java | 6 ++++++ .../src/main/java/com/github/scribejava/apis/GitHubApi.java | 6 ++++++ .../main/java/com/github/scribejava/apis/GoogleApi20.java | 6 ------ .../src/main/java/com/github/scribejava/apis/HHApi.java | 6 ------ .../src/main/java/com/github/scribejava/apis/ImgurApi.java | 6 ------ .../main/java/com/github/scribejava/apis/KaixinApi20.java | 6 ++++++ .../src/main/java/com/github/scribejava/apis/LiveApi.java | 6 ++++++ .../src/main/java/com/github/scribejava/apis/MailruApi.java | 6 ------ .../java/com/github/scribejava/apis/OdnoklassnikiApi.java | 6 ------ .../main/java/com/github/scribejava/apis/PinterestApi.java | 6 ------ .../src/main/java/com/github/scribejava/apis/RenrenApi.java | 6 ++++++ .../java/com/github/scribejava/apis/SinaWeiboApi20.java | 6 ------ .../java/com/github/scribejava/apis/StackExchangeApi.java | 6 ------ .../src/main/java/com/github/scribejava/apis/TutByApi.java | 6 ------ .../src/main/java/com/github/scribejava/apis/ViadeoApi.java | 6 ++++++ .../main/java/com/github/scribejava/apis/VkontakteApi.java | 6 ++++++ .../github/scribejava/core/builder/api/DefaultApi20.java | 4 ++-- 21 files changed, 51 insertions(+), 68 deletions(-) diff --git a/changelog b/changelog index fce98d4ac..92d93940c 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,7 @@ * drop Google OAuth 1.0 support (OAuth 1.0 was officially deprecated by Google) * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 + * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java index d910e73b9..3dd0af0a2 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; public class ConstantContactApi2 extends DefaultApi20 { @@ -37,11 +36,6 @@ public String getAuthorizationUrl(OAuthConfig config) { return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public TokenExtractor getAccessTokenExtractor() { return ConstantContactTokenExtractor.instance(); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java index 41c67cc9c..6332aa198 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java @@ -4,7 +4,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -26,11 +25,6 @@ public static DoktornaraboteApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return TOKEN_URL; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index 3412967e9..a2c18b2d6 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -26,6 +27,11 @@ public static FacebookApi instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://graph.facebook.com/v2.5/oauth/access_token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java index b8dc4f594..2e65672f0 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -22,6 +23,11 @@ public static Foursquare2Api instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://foursquare.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java index 9b3129af0..12ed978dd 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java @@ -6,6 +6,7 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -24,6 +25,11 @@ public static GitHubApi instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://github.com/login/oauth/access_token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index b1abc4fe3..26d003bdd 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.utils.OAuthEncoder; @@ -27,11 +26,6 @@ public static GoogleApi20 instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://www.googleapis.com/oauth2/v4/token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java index 980bd1693..ca67c8fca 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.apis.service.HHOAuthServiceImpl; import com.github.scribejava.core.oauth.OAuth20Service; @@ -26,11 +25,6 @@ public static HHApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return TOKEN_URL; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java index c5ed43f73..d55ad2d99 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java @@ -3,7 +3,6 @@ import com.github.scribejava.apis.service.ImgurOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; public class ImgurApi extends DefaultApi20 { @@ -22,11 +21,6 @@ public static ImgurApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://api.imgur.com/oauth2/token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java index 08062b828..979a4b5a4 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; /** @@ -25,6 +26,11 @@ public static KaixinApi20 instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://api.kaixin001.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java index d40d62cba..8d02a199c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -23,6 +24,11 @@ public static LiveApi instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://login.live.com/oauth20_token.srf?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java index e520309d8..a15b45634 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; import com.github.scribejava.apis.service.MailruOAuthServiceImpl; @@ -25,11 +24,6 @@ public static MailruApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://connect.mail.ru/oauth/token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java index 42c15d31f..de8fdfa8a 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java @@ -3,7 +3,6 @@ import com.github.scribejava.apis.service.OdnoklassnikiServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -30,11 +29,6 @@ public String getAccessTokenEndpoint() { return "http://api.odnoklassniki.ru/oauth/token.do"; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAuthorizationUrl(OAuthConfig config) { Preconditions.checkValidUrl(config.getCallback(), diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java index d5a1fab76..0e3f96c4d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java @@ -3,7 +3,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -29,11 +28,6 @@ public String getAccessTokenEndpoint() { return "https://api.pinterest.com/v1/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAuthorizationUrl(OAuthConfig config) { Preconditions.checkValidUrl(config.getCallback(), diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java index d28f55c4d..726baffd4 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; /** @@ -25,6 +26,11 @@ public static RenrenApi instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://graph.renren.com/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java index fe9fde760..b0edb459d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java @@ -3,7 +3,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; /** @@ -26,11 +25,6 @@ public static SinaWeiboApi20 instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://api.weibo.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java index 999fd5bea..e2e8c5b25 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -29,11 +28,6 @@ public static StackExchangeApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://stackexchange.com/oauth/access_token"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java index 7e5324644..72d3e13fd 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; import com.github.scribejava.apis.service.TutByOAuthServiceImpl; @@ -29,11 +28,6 @@ public String getAccessTokenEndpoint() { return "http://profile.tut.by/getToken"; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAuthorizationUrl(OAuthConfig config) { Preconditions.checkValidUrl(config.getCallback(), diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java index abe864d9a..a84c15195 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -23,6 +24,11 @@ public static ViadeoApi instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://secure.viadeo.com/oauth-provider/access_token2?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java index 6ed78fc46..5ee9a88fe 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java @@ -2,6 +2,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -22,6 +23,11 @@ public static VkontakteApi instance() { return InstanceHolder.INSTANCE; } + @Override + public Verb getAccessTokenVerb() { + return Verb.GET; + } + @Override public String getAccessTokenEndpoint() { return "https://oauth.vk.com/access_token"; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index e70397465..4e27aebb0 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -34,12 +34,12 @@ public TokenExtractor getAccessTokenExtractor() { } /** - * Returns the verb for the access token endpoint (defaults to GET) + * Returns the verb for the access token endpoint (defaults to POST) * * @return access token endpoint verb */ public Verb getAccessTokenVerb() { - return Verb.GET; + return Verb.POST; } /** From edec091016f149554b9defa5d35aada2bee6b185 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 10 Mar 2016 19:54:59 +0300 Subject: [PATCH 021/250] update maven dependencies --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index d34a6276f..c8145a713 100644 --- a/pom.xml +++ b/pom.xml @@ -90,7 +90,7 @@ com.ning async-http-client - 1.9.32 + 1.9.33 provided @@ -105,7 +105,7 @@ maven-compiler-plugin - 3.5 + 3.5.1 UTF-8 1.7 @@ -137,7 +137,7 @@ org.apache.maven.plugins maven-source-plugin - 2.4 + 3.0.0 attach-sources @@ -171,7 +171,7 @@ com.puppycrawl.tools checkstyle - 6.14.1 + 6.16.1 From 1d9553f3f9a4943956ee7370b03556749655d28e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 11 Mar 2016 12:41:03 +0300 Subject: [PATCH 022/250] send missed headers in async version (as in sync) --- changelog | 1 + .../core/model/OAuthRequestAsync.java | 57 ++++++++++--------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/changelog b/changelog index 92d93940c..efe3c7eba 100644 --- a/changelog +++ b/changelog @@ -6,6 +6,7 @@ * add response_type parameter to the ServiceBuilder/OAuthConfig to use not only "code" for authorization code * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) + * send missed headers in async version (as in sync) [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index 42c825efb..846320046 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -38,6 +38,21 @@ public OAuthRequestAsync(Verb verb, String url, OAuthService service) { super(verb, url, service); } + private Map> mapHeaders() { + final Map> mapped = new HashMap<>(); + + for (Map.Entry header : getHeaders().entrySet()) { + final String headerName = header.getKey(); + Collection headerValues = mapped.get(headerName); + if (headerValues == null) { + headerValues = new ArrayList<>(); + mapped.put(headerName, headerValues); + } + headerValues.add(header.getValue()); + } + return mapped; + } + public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseConverter converter) { return sendAsync(callback, converter, null); } @@ -54,48 +69,26 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo } final String completeUrl = getCompleteUrl(); final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + final AsyncHttpClient asyncHttpClient = service.getAsyncHttpClient(); switch (getVerb()) { case GET: - boundRequestBuilder = service.getAsyncHttpClient() - .prepareGet(completeUrl) - .setHeaders(mapHeaders()); - + boundRequestBuilder = asyncHttpClient.prepareGet(completeUrl); break; case POST: - boundRequestBuilder = service.getAsyncHttpClient().preparePost(completeUrl) - .setBody(getBodyContents()) - .setHeaders(mapHeaders()); - + boundRequestBuilder = asyncHttpClient.preparePost(completeUrl).setBody(getBodyContents()); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); } + + boundRequestBuilder.setHeaders(mapHeaders()); + if (proxyServer != null) { boundRequestBuilder.setProxyServer(proxyServer); } return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); } - public Future sendAsync(OAuthAsyncRequestCallback callback) { - return sendAsync(callback, RESPONSE_CONVERTER, null); - } - - public Future sendAsync(OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { - return sendAsync(callback, RESPONSE_CONVERTER, proxyServer); - } - - private Map> mapHeaders() { - final Map headers = getHeaders(); - final Map> mapped = new HashMap<>(); - - for(Map.Entry entry: headers.entrySet()) { - final ArrayList list = new ArrayList<>(); - list.add(entry.getValue()); - mapped.put(entry.getKey(), list); - } - return mapped; - } - private static class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { private final OAuthAsyncRequestCallback callback; @@ -123,6 +116,14 @@ public void onThrowable(Throwable t) { } }; + public Future sendAsync(OAuthAsyncRequestCallback callback) { + return sendAsync(callback, RESPONSE_CONVERTER, null); + } + + public Future sendAsync(OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + return sendAsync(callback, RESPONSE_CONVERTER, proxyServer); + } + public interface ResponseConverter { T convert(com.ning.http.client.Response response) throws IOException; From f0c92a3156897d0783f9ab5521205dd94b7bc785 Mon Sep 17 00:00:00 2001 From: Maksim Likharev Date: Fri, 11 Mar 2016 10:58:47 -0800 Subject: [PATCH 023/250] removal of dead code --- .../core/utils/Uninterruptibles.java | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java deleted file mode 100644 index c3ed57995..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Uninterruptibles.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.scribejava.core.utils; - -import com.github.scribejava.core.exceptions.OAuthException; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; - -public final class Uninterruptibles { - /** - * - * This is part of the code from guava, copied here as the project doesn't include one. - * - * Invokes {@code future.}{@link Future#get() get()} uninterruptibly. - */ - public static V getUninterruptibly(Future future) { - boolean interrupted = false; - try { - while (true) { - try { - return future.get(); - } catch (InterruptedException e) { - interrupted = true; - } - } - } - catch( ExecutionException e ) { - throw new OAuthException( e ); - } - finally { - if (interrupted) { - Thread.currentThread().interrupt(); - } - } - } - -} From 5e1827e8361ca47a03780b84b72d57f906b85d0d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 14 Mar 2016 17:57:40 +0300 Subject: [PATCH 024/250] support 'password' grant_type for OAuth 2.0 --- changelog | 1 + .../scribejava/core/oauth/OAuth20Service.java | 58 ++++++------- .../core/oauth/CompletedFuture.java | 12 +-- .../scribejava/core/oauth/OAuth20ApiUnit.java | 4 +- .../core/oauth/OAuth20ServiceTest.java | 54 ++++++------ .../core/oauth/OAuth20ServiceUnit.java | 84 ++++++++----------- 6 files changed, 94 insertions(+), 119 deletions(-) diff --git a/changelog b/changelog index efe3c7eba..453d50438 100644 --- a/changelog +++ b/changelog @@ -7,6 +7,7 @@ * remove Verifier object, we just need Strings, 'code' for OAuth2 and 'oauthVerifier' for OAuth1 * default HTTP verb for OAuth 2.0 Access Token EndPoint is POST (http://tools.ietf.org/html/rfc6749#section-3.2) * send missed headers in async version (as in sync) + * support 'password' grant_type for OAuth 2.0 [2.3.0] * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, askubuntu.com, etc.). diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 946048f5a..086423cbb 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -13,7 +13,6 @@ import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; -import com.github.scribejava.core.model.Response; import java.util.Map; public class OAuth20Service extends OAuthService { @@ -33,19 +32,19 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { } //sync version, protected to facilitate mocking - protected OAuth2AccessToken sendTokenSync(OAuthRequest request) { + protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) { return api.getAccessTokenExtractor().extract(request.send().getBody()); } //async version, protected to facilitate mocking - protected Future sendTokenAsync(OAuthRequestAsync request, + protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth2AccessToken convert(com.ning.http.client.Response response) throws IOException { return getApi().getAccessTokenExtractor() - .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); + .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); } }, proxyServer); } @@ -54,7 +53,7 @@ public final OAuth2AccessToken getAccessToken(String code) { final OAuthRequest request = createAccessTokenRequest(code, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendTokenSync(request); + return sendAccessTokenRequestSync(request); } /** @@ -75,7 +74,7 @@ public final Future getAccessTokenAsync(String code, final OAuthRequestAsync request = createAccessTokenRequest(code, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendTokenAsync(request, callback, proxyServer); + return sendAccessTokenRequestAsync(request, callback, proxyServer); } protected T createAccessTokenRequest(String code, T request) { @@ -95,9 +94,9 @@ protected T createAccessTokenRequest(String code, T public final OAuth2AccessToken refreshAccessToken(String refreshToken) { final OAuthRequest request = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendTokenSync(request); + return sendAccessTokenRequestSync(request); } public final Future refreshAccessTokenAsync(String refreshToken, @@ -110,7 +109,7 @@ public final Future refreshAccessTokenAsync(String refreshTok final OAuthRequestAsync request = createRefreshTokenRequest(refreshToken, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)); - return sendTokenAsync(request, callback, proxyServer); + return sendAccessTokenRequestAsync(request, callback, proxyServer); } protected T createRefreshTokenRequest(String refreshToken, T request) { @@ -132,39 +131,36 @@ protected T createRefreshTokenRequest(String refresh * @param password User password * @return OAuth2AccessToken */ - public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) { final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendTokenSync(request); + return sendAccessTokenRequestSync(request); } /** - * Request Access Token Password Grant async version - * - * @param uname User name - * @param password User password - * @param callback Optional callback - * @return Future - */ + * Request Access Token Password Grant async version + * + * @param uname User name + * @param password User password + * @param callback Optional callback + * @return Future + */ public final Future getAccessTokenPasswordGrantAsync(String uname, String password, OAuthAsyncRequestCallback callback) { - final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return getAccessTokenPasswordGrantAsync(uname, password, callback, null); } public final Future getAccessTokenPasswordGrantAsync(String uname, String password, OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendTokenAsync(request, callback, proxyServer); + return sendAccessTokenRequestAsync(request, callback, proxyServer); } - protected T createAccessTokenPasswordGrantRequest(String username, String password, T request) { + protected T createAccessTokenPasswordGrantRequest(String username, String password, + T request) { final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.USERNAME, username); request.addParameter(OAuthConstants.PASSWORD, password); @@ -175,12 +171,12 @@ protected T createAccessTokenPasswordGrantRequest(St request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.PASSWORD); - request.addHeader(OAuthConstants.HEADER, OAuthConstants.BASIC + " " + - Base64Encoder.getInstance().encode( - String.format("%s:%s", config.getApiKey(), config.getApiSecret()).getBytes( - Charset.forName("UTF-8") - ) - ) + request.addHeader(OAuthConstants.HEADER, OAuthConstants.BASIC + " " + + Base64Encoder.getInstance().encode( + String.format("%s:%s", config.getApiKey(), config.getApiSecret()).getBytes( + Charset.forName("UTF-8") + ) + ) ); return request; diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java index 1c4a3f068..33919d4bf 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/CompletedFuture.java @@ -1,16 +1,12 @@ package com.github.scribejava.core.oauth; -import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -/** - */ class CompletedFuture implements Future { private final V result; - public CompletedFuture( V result ) { + CompletedFuture(V result) { this.result = result; } @@ -30,14 +26,12 @@ public boolean isDone() { } @Override - public V get() throws InterruptedException, ExecutionException { + public V get() { return result; } @Override - public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, - TimeoutException { - + public V get(long timeout, TimeUnit unit) { return result; } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java index 398173d11..5d7391fb3 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java @@ -3,9 +3,8 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -/** - */ class OAuth20ApiUnit extends DefaultApi20 { + @Override public String getAccessTokenEndpoint() { return "http://localhost:8080/token"; @@ -16,6 +15,7 @@ public String getAuthorizationUrl(OAuthConfig config) { return "http://localhost:8080/authorize"; } + @Override public OAuth20Service createService(OAuthConfig config) { return new OAuth20ServiceUnit(this, config); } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java index 1d844423d..6b2b09f0b 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java @@ -13,34 +13,29 @@ import java.util.Map; import java.util.concurrent.ExecutionException; -/** - */ public class OAuth20ServiceTest { @Test public void shouldProduceCorrectRequestSync() { final OAuth20Service service = new ServiceBuilder() - .apiKey("your_api_key") - .apiSecret("your_api_secret") - .build( new OAuth20ApiUnit() ); + .apiKey("your_api_key") + .apiSecret("your_api_secret") + .build(new OAuth20ApiUnit()); final OAuth2AccessToken token = service.getAccessTokenPasswordGrant("user1", "password1"); final Gson json = new Gson(); Assert.assertNotNull(token); - Map map = json.fromJson(token.getRawResponse(), - new TypeToken>(){}.getType()); + final Map map = json.fromJson(token.getRawResponse(), new TypeTokenImpl().getType()); - Assert.assertEquals(OAuth20ServiceUnit.token, map.get(OAuthConstants.ACCESS_TOKEN)); - Assert.assertEquals(OAuth20ServiceUnit.state, map.get(OAuthConstants.STATE)); - Assert.assertEquals(OAuth20ServiceUnit.expires, map.get("expires_in")); + Assert.assertEquals(OAuth20ServiceUnit.TOKEN, map.get(OAuthConstants.ACCESS_TOKEN)); + Assert.assertEquals(OAuth20ServiceUnit.STATE, map.get(OAuthConstants.STATE)); + Assert.assertEquals(OAuth20ServiceUnit.EXPIRES, map.get("expires_in")); - final String authorize = Base64Encoder.getInstance().encode( - String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()).getBytes( - Charset.forName("UTF-8") - ) - ); + final String authorize = Base64Encoder.getInstance() + .encode(String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()) + .getBytes(Charset.forName("UTF-8"))); Assert.assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); @@ -52,27 +47,24 @@ public void shouldProduceCorrectRequestSync() { @Test public void shouldProduceCorrectRequestAsync() throws ExecutionException, InterruptedException { final OAuth20Service service = new ServiceBuilder() - .apiKey("your_api_key") - .apiSecret("your_api_secret") - .build( new OAuth20ApiUnit() ); + .apiKey("your_api_key") + .apiSecret("your_api_secret") + .build(new OAuth20ApiUnit()); final OAuth2AccessToken token = service.getAccessTokenPasswordGrantAsync("user1", "password1", null).get(); final Gson json = new Gson(); Assert.assertNotNull(token); - Map map = json.fromJson(token.getRawResponse(), - new TypeToken>(){}.getType()); + final Map map = json.fromJson(token.getRawResponse(), new TypeTokenImpl().getType()); - Assert.assertEquals(OAuth20ServiceUnit.token, map.get(OAuthConstants.ACCESS_TOKEN)); - Assert.assertEquals(OAuth20ServiceUnit.state, map.get(OAuthConstants.STATE)); - Assert.assertEquals(OAuth20ServiceUnit.expires, map.get("expires_in")); + Assert.assertEquals(OAuth20ServiceUnit.TOKEN, map.get(OAuthConstants.ACCESS_TOKEN)); + Assert.assertEquals(OAuth20ServiceUnit.STATE, map.get(OAuthConstants.STATE)); + Assert.assertEquals(OAuth20ServiceUnit.EXPIRES, map.get("expires_in")); - final String authorize = Base64Encoder.getInstance().encode( - String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()).getBytes( - Charset.forName("UTF-8") - ) - ); + final String authorize = Base64Encoder.getInstance() + .encode(String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()) + .getBytes(Charset.forName("UTF-8"))); Assert.assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); @@ -81,4 +73,10 @@ public void shouldProduceCorrectRequestAsync() throws ExecutionException, Interr Assert.assertEquals("password", map.get("query-grant_type")); } + private static class TypeTokenImpl extends TypeToken> { + + private TypeTokenImpl() { + } + } + } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java index 7db3177d5..07fc9680c 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java @@ -1,6 +1,7 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; @@ -15,65 +16,50 @@ import java.util.Map; import java.util.concurrent.Future; -/** - */ class OAuth20ServiceUnit extends OAuth20Service { - final static String token = "ae82980abab675c646a070686d5558ad"; - final static String state = "123"; - final static String expires = "3600"; + static final String TOKEN = "ae82980abab675c646a070686d5558ad"; + static final String STATE = "123"; + static final String EXPIRES = "3600"; - public OAuth20ServiceUnit(DefaultApi20 api, OAuthConfig config) { - super(api, config); - } - - @Override - protected OAuth2AccessToken sendTokenSync(OAuthRequest request) { - - final Gson json = new Gson(); - final Map response = new HashMap<>(); - - response.put(OAuthConstants.ACCESS_TOKEN, token); - response.put(OAuthConstants.STATE, state); - response.put("expires_in", expires); - - response.putAll( request.getHeaders() ); - response.putAll( request.getOauthParameters() ); - - for(Parameter p : request.getBodyParams().getParams()) { - response.put( "query-" + p.getKey(), p.getValue() ); + OAuth20ServiceUnit(DefaultApi20 api, OAuthConfig config) { + super(api, config); } - return new OAuth2AccessToken(token, json.toJson( response )); - } + @Override + protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) { + return new OAuth2AccessToken(TOKEN, prepareRawResponse(request)); + } - @Override - protected Future sendTokenAsync(OAuthRequestAsync request, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + private String prepareRawResponse(T request) { + final Gson json = new Gson(); + final Map response = new HashMap<>(); + response.put(OAuthConstants.ACCESS_TOKEN, TOKEN); + response.put(OAuthConstants.STATE, STATE); + response.put("expires_in", EXPIRES); - final Gson json = new Gson(); - final Map response = new HashMap<>(); + response.putAll(request.getHeaders()); + response.putAll(request.getOauthParameters()); - response.put(OAuthConstants.ACCESS_TOKEN, token); - response.put(OAuthConstants.STATE, state); - response.put("expires_in", expires); + for (Parameter p : request.getBodyParams().getParams()) { + response.put("query-" + p.getKey(), p.getValue()); + } - response.putAll( request.getHeaders() ); - response.putAll( request.getOauthParameters() ); + return json.toJson(response); + } - for(Parameter p : request.getBodyParams().getParams()) { - response.put( "query-" + p.getKey(), p.getValue() ); - } + @Override + protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, + OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { - final OAuth2AccessToken accessToken = new OAuth2AccessToken(token, json.toJson( response )); + final OAuth2AccessToken accessToken = new OAuth2AccessToken(TOKEN, prepareRawResponse(request)); - try { - return new CompletedFuture(accessToken); - } - finally { - if( callback != null ) { - callback.onCompleted(accessToken); - } - } - } + try { + return new CompletedFuture<>(accessToken); + } finally { + if (callback != null) { + callback.onCompleted(accessToken); + } + } + } } From 802a80e13a75e588e5070e15f22edee2a1a3d5fb Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 14 Mar 2016 18:10:33 +0300 Subject: [PATCH 025/250] prepare 2.4.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 871a543f8..0ca58eb3a 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.3.0 + 2.4.0 ``` @@ -87,7 +87,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.3.0 + 2.4.0 ``` diff --git a/changelog b/changelog index 453d50438..4902e8b71 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.4.0] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException * make JSON Access Token Extractor be the default for OAuth 2.0 (according to RFC 6749) From afc1e356d38b1e1fc02126bf4b358ec30cbf3e7e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 14 Mar 2016 18:11:56 +0300 Subject: [PATCH 026/250] [maven-release-plugin] prepare release scribejava-2.4.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d07fffb73..eb7122d95 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.3.1-SNAPSHOT + 2.4.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 23e975072..35ef519b2 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.3.1-SNAPSHOT + 2.4.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index b4730b400..8ca287fce 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.3.1-SNAPSHOT + 2.4.0 ../pom.xml From 139313108c181377e9aef84f2d681060762a74fd Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 14 Mar 2016 18:12:01 +0300 Subject: [PATCH 027/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index eb7122d95..b9a90a1c1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.4.0 + 2.4.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 35ef519b2..ff9faa8a3 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.4.0 + 2.4.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 8ca287fce..860b5ef20 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.4.0 + 2.4.1-SNAPSHOT ../pom.xml From 22f5c38e7b08af4fb805ae64ae9ac58d6dbb0599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Tietz?= Date: Fri, 18 Mar 2016 17:57:54 +0100 Subject: [PATCH 028/250] service builder more generic --- .../core/builder/AbstractServiceBuilder.java | 18 +++++------------- .../scribejava/core/builder/api/BaseApi.java | 9 +++++++++ .../core/builder/api/DefaultApi10a.java | 3 ++- .../core/builder/api/DefaultApi20.java | 3 ++- 4 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java index 7c34f0dae..cfe7f7a7a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java @@ -1,5 +1,6 @@ package com.github.scribejava.core.builder; +import com.github.scribejava.core.builder.api.BaseApi; import com.github.scribejava.core.builder.api.DefaultApi10a; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; @@ -8,6 +9,7 @@ import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.oauth.OAuth10aService; import com.github.scribejava.core.oauth.OAuth20Service; +import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; abstract class AbstractServiceBuilder> { @@ -176,22 +178,12 @@ public String getResponseType() { protected abstract OAuthConfig createConfig(); /** - * Returns the fully configured {@link OAuth10aService} + * Returns the fully configured {@link S} * * @param api will build Service for this API - * @return fully configured {@link OAuth10aService} + * @return fully configured {@link S} */ - public OAuth10aService build(DefaultApi10a api) { - return api.createService(createConfig()); - } - - /** - * Returns the fully configured {@link OAuth20Service} - * - * @param api will build Service for this API - * @return fully configured {@link OAuth20Service} - */ - public OAuth20Service build(DefaultApi20 api) { + public S build(BaseApi api) { return api.createService(createConfig()); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java new file mode 100644 index 000000000..742a92b09 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java @@ -0,0 +1,9 @@ +package com.github.scribejava.core.builder.api; + +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.oauth.OAuthService; + + +public interface BaseApi { + T createService(OAuthConfig config); +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java index f0920e103..3b4b148c6 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java @@ -30,7 +30,7 @@ * fine-tune the process. Please read the javadocs of the interfaces to get an idea of what to do. * */ -public abstract class DefaultApi10a { +public abstract class DefaultApi10a implements BaseApi { /** * Returns the access token extractor. @@ -126,6 +126,7 @@ public Verb getRequestTokenVerb() { */ public abstract String getAuthorizationUrl(OAuth1RequestToken requestToken); + @Override public OAuth10aService createService(OAuthConfig config) { return new OAuth10aService(this, config); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index 4e27aebb0..30095f134 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -22,7 +22,7 @@ * fine-tune the process. Please read the javadocs of the interfaces to get an idea of what to do. * */ -public abstract class DefaultApi20 { +public abstract class DefaultApi20 implements BaseApi { /** * Returns the access token extractor. @@ -88,6 +88,7 @@ public String getAuthorizationUrl(OAuthConfig config, Map additi return authUrl; } + @Override public OAuth20Service createService(OAuthConfig config) { return new OAuth20Service(this, config); } From 9c1bd235225bc158a1e9483f0c10f92ac400796c Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 21 Mar 2016 18:28:24 +0300 Subject: [PATCH 029/250] add Google Async Example --- changelog | 3 + .../apis/examples/Google20AsyncExample.java | 122 ++++++++++++++++++ .../core/model/OAuthRequestAsync.java | 25 +--- 3 files changed, 131 insertions(+), 19 deletions(-) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java diff --git a/changelog b/changelog index 4902e8b71..f68b67042 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * add Google Async Exmaple (with bugfix for it to work) + [2.4.0] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) * mark Facebook doesn't support refresh token by throwing UnsupportedOperationException diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java new file mode 100644 index 000000000..74e4ab708 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java @@ -0,0 +1,122 @@ +package com.github.scribejava.apis.examples; + +import java.util.Random; +import java.util.Scanner; +import com.github.scribejava.apis.GoogleApi20; +import com.github.scribejava.core.builder.ServiceBuilderAsync; +import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.ScribeJavaConfig; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.ning.http.client.AsyncHttpClientConfig; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +public abstract class Google20AsyncExample { + + private static final String NETWORK_NAME = "G+ Async"; + private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; + + public static void main(String... args) throws InterruptedException, ExecutionException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + final String secretState = "secret" + new Random().nextInt(999_999); + ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); + final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + .setMaxConnections(5) + .setRequestTimeout(10_000) + .setAllowPoolingConnections(false) + .setPooledConnectionIdleTimeout(1_000) + .setReadTimeout(1_000) + .build(); + + final OAuth20Service service = new ServiceBuilderAsync() + .apiKey(clientId) + .apiSecret(clientSecret) + .scope("profile") // replace with desired scope + .state(secretState) + .callback("http://example.com/callback") + .asyncHttpClientConfig(clientConfig) + .build(GoogleApi20.instance()); + final Scanner in = new Scanner(System.in, "UTF-8"); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + //pass access_type=offline to get refresh token + //https://developers.google.com/identity/protocols/OAuth2WebServer#preparing-to-start-the-oauth-20-flow + final Map additionalParams = new HashMap<>(); + additionalParams.put("access_type", "offline"); + //force to reget refresh token (if usera are asked not the first time) + additionalParams.put("prompt", "consent"); + final String authorizationUrl = service.getAuthorizationUrl(additionalParams); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + + System.out.println("Refreshing the Access Token..."); + accessToken = service.refreshAccessTokenAsync(accessToken.getRefreshToken(), null).get(); + System.out.println("Refreshed the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + while (true) { + System.out.println("Paste fieldnames to fetch (leave empty to get profile, 'exit' to stop example)"); + System.out.print(">>"); + final String query = in.nextLine(); + System.out.println(); + + final String requestUrl; + if ("exit".equals(query)) { + break; + } else if (query == null || query.isEmpty()) { + requestUrl = PROTECTED_RESOURCE_URL; + } else { + requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; + } + + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, requestUrl, service); + service.signRequest(accessToken, request); + final Response response = request.sendAsync(null).get(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + } + service.closeAsyncClient(); + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index 846320046..f01ff1776 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -8,10 +8,8 @@ import com.ning.http.client.ProxyServer; import java.io.IOException; -import java.util.Collection; import java.util.HashMap; import java.util.List; -import java.util.ArrayList; import java.util.Map; import java.util.concurrent.Future; @@ -38,21 +36,6 @@ public OAuthRequestAsync(Verb verb, String url, OAuthService service) { super(verb, url, service); } - private Map> mapHeaders() { - final Map> mapped = new HashMap<>(); - - for (Map.Entry header : getHeaders().entrySet()) { - final String headerName = header.getKey(); - Collection headerValues = mapped.get(headerName); - if (headerValues == null) { - headerValues = new ArrayList<>(); - mapped.put(headerName, headerValues); - } - headerValues.add(header.getValue()); - } - return mapped; - } - public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseConverter converter) { return sendAsync(callback, converter, null); } @@ -75,13 +58,17 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo boundRequestBuilder = asyncHttpClient.prepareGet(completeUrl); break; case POST: - boundRequestBuilder = asyncHttpClient.preparePost(completeUrl).setBody(getBodyContents()); + boundRequestBuilder = asyncHttpClient.preparePost(completeUrl) + .addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE) + .setBody(getBodyContents()); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); } - boundRequestBuilder.setHeaders(mapHeaders()); + for (Map.Entry header : getHeaders().entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } if (proxyServer != null) { boundRequestBuilder.setProxyServer(proxyServer); From 67972a3c24ccb4832c2d7f7838e3f954df81f70f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 21 Mar 2016 19:09:08 +0300 Subject: [PATCH 030/250] fix coding standards --- .../scribejava/core/builder/AbstractServiceBuilder.java | 4 ---- .../java/com/github/scribejava/core/builder/api/BaseApi.java | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java index cfe7f7a7a..8937afc0a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java @@ -1,14 +1,10 @@ package com.github.scribejava.core.builder; import com.github.scribejava.core.builder.api.BaseApi; -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import java.io.OutputStream; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.SignatureType; -import com.github.scribejava.core.oauth.OAuth10aService; -import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java index 742a92b09..a42fe35fa 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java @@ -3,7 +3,7 @@ import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuthService; - public interface BaseApi { - T createService(OAuthConfig config); + + T createService(OAuthConfig config); } From 1dc3923153be6395c146cd8a17ff8f556cdeb225 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 22 Mar 2016 11:57:28 +0300 Subject: [PATCH 031/250] add OSGI manifest metadata --- changelog | 1 + pom.xml | 34 +++++++++++++++++++++++++++++++--- scribejava-apis/pom.xml | 12 ++++++++++++ scribejava-core/pom.xml | 12 ++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/changelog b/changelog index f68b67042..a29f9d59f 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * add Google Async Exmaple (with bugfix for it to work) + * add OSGI manifest metadata [2.4.0] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) diff --git a/pom.xml b/pom.xml index b9a90a1c1..0454b8141 100644 --- a/pom.xml +++ b/pom.xml @@ -96,11 +96,39 @@ com.ning async-http-client - 1.9.33 + 1.9.36 provided + + + + org.apache.felix + maven-bundle-plugin + 3.0.1 + + + bundle-manifest + process-classes + + manifest + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + org.apache.maven.wagon @@ -198,7 +226,7 @@ - + release-sign-artifacts @@ -228,4 +256,4 @@ - + diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index ff9faa8a3..65b400b77 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -22,4 +22,16 @@ + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 860b5ef20..22d957e79 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -14,4 +14,16 @@ ScribeJava Core jar + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + From 62959e6c338bf607387f4380dc404e095484da4e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 22 Mar 2016 12:57:30 +0300 Subject: [PATCH 032/250] fix javadoc issue --- .../github/scribejava/core/builder/AbstractServiceBuilder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java index 8937afc0a..63ca9d816 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java @@ -176,6 +176,7 @@ public String getResponseType() { /** * Returns the fully configured {@link S} * + * @param OAuthService implementation (OAuth1/OAuth2/any API specific) * @param api will build Service for this API * @return fully configured {@link S} */ From c328d5db81d97dbffa395bf9fd376f75b52dc6d5 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 22 Mar 2016 15:05:37 +0300 Subject: [PATCH 033/250] apiSecret is not mandatory parameter in config (to use on client sides and other flows without need of the API secret) --- changelog | 1 + .../github/scribejava/core/builder/AbstractServiceBuilder.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog b/changelog index a29f9d59f..8edc13ab6 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * add Google Async Exmaple (with bugfix for it to work) * add OSGI manifest metadata + * apiSecret is not mandatory parameter in config (to use on client sides and other flows without need of the API secret) [2.4.0] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java index 63ca9d816..cd8fc487e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java @@ -132,7 +132,6 @@ public T debug() { public void checkPreconditions() { Preconditions.checkEmptyString(apiKey, "You must provide an api key"); - Preconditions.checkEmptyString(apiSecret, "You must provide an api secret"); } public String getCallback() { From aedc5890be77d2f50f1c2128bedb95516c397fcc Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 13:54:07 +0300 Subject: [PATCH 034/250] implement OAuth2 Authorization Response parsing --- .../core/model/OAuth2Authorization.java | 43 ++++++++++ .../scribejava/core/oauth/OAuth20Service.java | 20 +++++ .../core/oauth/OAuth20ServiceTest.java | 85 +++++++++++++++---- 3 files changed, 131 insertions(+), 17 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2Authorization.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2Authorization.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2Authorization.java new file mode 100644 index 000000000..8c99f395b --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2Authorization.java @@ -0,0 +1,43 @@ +package com.github.scribejava.core.model; + +/** + * represents Authorization Response http://tools.ietf.org/html/rfc6749#section-4.1.2 + * + * If the resource owner grants the access request, the authorization server issues an authorization code and delivers + * it to the client by adding the following parameters to the query component of the redirection URI using the + * "application/x-www-form-urlencoded" format. + * + */ +public class OAuth2Authorization { + + /** + * REQUIRED. The authorization code generated by the authorization server. The authorization code MUST expire + * shortly after it is issued to mitigate the risk of leaks. A maximum authorization code lifetime of 10 minutes is + * RECOMMENDED. The client MUST NOT use the authorization code more than once. If an authorization code is used more + * than once, the authorization server MUST deny the request and SHOULD revoke (when possible) all tokens previously + * issued based on that authorization code. The authorization code is bound to the client identifier and redirection + * URI. + */ + private String code; + /** + * REQUIRED if the "state" parameter was present in the client authorization request. The exact value received from + * the client. + */ + private String state; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 086423cbb..2c7f8306b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -8,6 +8,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuth2Authorization; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; @@ -216,4 +217,23 @@ public String getAuthorizationUrl(Map additionalParams) { public DefaultApi20 getApi() { return api; } + + public OAuth2Authorization extractAuthorization(String redirectLocation) { + final OAuth2Authorization authorization = new OAuth2Authorization(); + for (String param : redirectLocation.substring(redirectLocation.indexOf('?') + 1).split("&")) { + final String[] keyValue = param.split("="); + if (keyValue.length == 2) { + switch (keyValue[0]) { + case "code": + authorization.setCode(keyValue[1]); + break; + case "state": + authorization.setState(keyValue[1]); + break; + default: //just ignore any other param; + } + } + } + return authorization; + } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java index 6b2b09f0b..17c58087f 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java @@ -2,11 +2,13 @@ import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuth2Authorization; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.services.Base64Encoder; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import org.junit.Assert; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertEquals; import org.junit.Test; import java.nio.charset.Charset; @@ -25,23 +27,23 @@ public void shouldProduceCorrectRequestSync() { final OAuth2AccessToken token = service.getAccessTokenPasswordGrant("user1", "password1"); final Gson json = new Gson(); - Assert.assertNotNull(token); + assertNotNull(token); final Map map = json.fromJson(token.getRawResponse(), new TypeTokenImpl().getType()); - Assert.assertEquals(OAuth20ServiceUnit.TOKEN, map.get(OAuthConstants.ACCESS_TOKEN)); - Assert.assertEquals(OAuth20ServiceUnit.STATE, map.get(OAuthConstants.STATE)); - Assert.assertEquals(OAuth20ServiceUnit.EXPIRES, map.get("expires_in")); + assertEquals(OAuth20ServiceUnit.TOKEN, map.get(OAuthConstants.ACCESS_TOKEN)); + assertEquals(OAuth20ServiceUnit.STATE, map.get(OAuthConstants.STATE)); + assertEquals(OAuth20ServiceUnit.EXPIRES, map.get("expires_in")); final String authorize = Base64Encoder.getInstance() .encode(String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()) .getBytes(Charset.forName("UTF-8"))); - Assert.assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); + assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); - Assert.assertEquals("user1", map.get("query-username")); - Assert.assertEquals("password1", map.get("query-password")); - Assert.assertEquals("password", map.get("query-grant_type")); + assertEquals("user1", map.get("query-username")); + assertEquals("password1", map.get("query-password")); + assertEquals("password", map.get("query-grant_type")); } @Test @@ -54,23 +56,72 @@ public void shouldProduceCorrectRequestAsync() throws ExecutionException, Interr final OAuth2AccessToken token = service.getAccessTokenPasswordGrantAsync("user1", "password1", null).get(); final Gson json = new Gson(); - Assert.assertNotNull(token); + assertNotNull(token); final Map map = json.fromJson(token.getRawResponse(), new TypeTokenImpl().getType()); - Assert.assertEquals(OAuth20ServiceUnit.TOKEN, map.get(OAuthConstants.ACCESS_TOKEN)); - Assert.assertEquals(OAuth20ServiceUnit.STATE, map.get(OAuthConstants.STATE)); - Assert.assertEquals(OAuth20ServiceUnit.EXPIRES, map.get("expires_in")); + assertEquals(OAuth20ServiceUnit.TOKEN, map.get(OAuthConstants.ACCESS_TOKEN)); + assertEquals(OAuth20ServiceUnit.STATE, map.get(OAuthConstants.STATE)); + assertEquals(OAuth20ServiceUnit.EXPIRES, map.get("expires_in")); final String authorize = Base64Encoder.getInstance() .encode(String.format("%s:%s", service.getConfig().getApiKey(), service.getConfig().getApiSecret()) .getBytes(Charset.forName("UTF-8"))); - Assert.assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); + assertEquals(OAuthConstants.BASIC + " " + authorize, map.get(OAuthConstants.HEADER)); + + assertEquals("user1", map.get("query-username")); + assertEquals("password1", map.get("query-password")); + assertEquals("password", map.get("query-grant_type")); + } + + @Test + public void testOAuthExtractAuthorization() { + final OAuth20Service service = new ServiceBuilder() + .apiKey("your_api_key") + .apiSecret("your_api_secret") + .build(new OAuth20ApiUnit()); + + OAuth2Authorization authorization = service.extractAuthorization("https://cl.ex.com/cb?code=SplxlOB&state=xyz"); + assertEquals("SplxlOB", authorization.getCode()); + assertEquals("xyz", authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?state=xyz&code=SplxlOB"); + assertEquals("SplxlOB", authorization.getCode()); + assertEquals("xyz", authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?key=value&state=xyz&code=SplxlOB"); + assertEquals("SplxlOB", authorization.getCode()); + assertEquals("xyz", authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?state=xyz&code=SplxlOB&key=value&"); + assertEquals("SplxlOB", authorization.getCode()); + assertEquals("xyz", authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?code=SplxlOB&state="); + assertEquals("SplxlOB", authorization.getCode()); + assertEquals(null, authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?code=SplxlOB"); + assertEquals("SplxlOB", authorization.getCode()); + assertEquals(null, authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?code="); + assertEquals(null, authorization.getCode()); + assertEquals(null, authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?code"); + assertEquals(null, authorization.getCode()); + assertEquals(null, authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb?"); + assertEquals(null, authorization.getCode()); + assertEquals(null, authorization.getState()); + + authorization = service.extractAuthorization("https://cl.ex.com/cb"); + assertEquals(null, authorization.getCode()); + assertEquals(null, authorization.getState()); - Assert.assertEquals("user1", map.get("query-username")); - Assert.assertEquals("password1", map.get("query-password")); - Assert.assertEquals("password", map.get("query-grant_type")); } private static class TypeTokenImpl extends TypeToken> { From 9dfb671520966df479264f2466c7654eca9580b7 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:05:53 +0300 Subject: [PATCH 035/250] update changelog --- changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog b/changelog index 8edc13ab6..b8bf40849 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * add Google Async Exmaple (with bugfix for it to work) * add OSGI manifest metadata * apiSecret is not mandatory parameter in config (to use on client sides and other flows without need of the API secret) + * implement OAuth2 Authorization Response parsing in the OAuth20Service (to extract code and state from url, useful for Android) [2.4.0] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) From fbe4ffe953ab8784164b089c9c09ee26d565bbb9 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:18:09 +0300 Subject: [PATCH 036/250] update ok.ru API urls --- changelog | 1 + .../scribejava/apis/OdnoklassnikiApi.java | 20 ++++++++++++------- .../apis/examples/OdnoklassnikiExample.java | 11 ++++++++-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/changelog b/changelog index b8bf40849..512a4b3fe 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ * add OSGI manifest metadata * apiSecret is not mandatory parameter in config (to use on client sides and other flows without need of the API secret) * implement OAuth2 Authorization Response parsing in the OAuth20Service (to extract code and state from url, useful for Android) + * update ok.ru API urls, add 'state' support, add refresh token to the example [2.4.0] * APIs 2.0 can define different endpoints for access token and for refresh token (the same urls by default) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java index de8fdfa8a..0651fe108 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java @@ -10,8 +10,7 @@ public class OdnoklassnikiApi extends DefaultApi20 { private static final String AUTHORIZE_URL - = "http://www.odnoklassniki.ru/oauth/authorize?client_id=%s&response_type=code&redirect_uri=%s"; - private static final String SCOPED_AUTHORIZE_URL = String.format("%s&scope=%%s", AUTHORIZE_URL); + = "https://connect.ok.ru/oauth/authorize?client_id=%s&response_type=code&redirect_uri=%s"; protected OdnoklassnikiApi() { } @@ -26,19 +25,26 @@ public static OdnoklassnikiApi instance() { @Override public String getAccessTokenEndpoint() { - return "http://api.odnoklassniki.ru/oauth/token.do"; + return "https://api.ok.ru/oauth/token.do"; } @Override public String getAuthorizationUrl(OAuthConfig config) { Preconditions.checkValidUrl(config.getCallback(), "Valid url is required for a callback. Odnoklassniki does not support OOB"); + + final StringBuilder urlBuilder = new StringBuilder(String.format(AUTHORIZE_URL, + config.getApiKey(), OAuthEncoder.encode(config.getCallback()))); + if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); + urlBuilder.append("&scope=").append(OAuthEncoder.encode(config.getScope())); + } + + final String state = config.getState(); + if (state != null) { + urlBuilder.append("&state=").append(OAuthEncoder.encode(config.getState())); } + return urlBuilder.toString(); } @Override diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 88fb1ba93..ba88fe131 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -14,7 +14,7 @@ public abstract class OdnoklassnikiExample { private static final String NETWORK_NAME = "Odnoklassniki.ru"; private static final String PROTECTED_RESOURCE_URL - = "http://api.odnoklassniki.ru/api/users/getCurrentUser?application_key=%1$s&format=JSON"; + = "https://api.ok.ru/api/users/getCurrentUser?application_key=%1$s&format=JSON"; public static void main(String... args) { // Replace these with your client id and secret @@ -49,12 +49,19 @@ public static void main(String... args) { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessToken(code); + OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); + System.out.println("Refreshing the Access Token..."); + accessToken = service.refreshAccessToken(accessToken.getRefreshToken()); + System.out.println("Refreshed the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, publicKey), From 6b978a6a684904ab5be824435424ecaf19a53345 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:44:00 +0300 Subject: [PATCH 037/250] [maven-release-plugin] prepare release scribejava-2.5.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 0454b8141..9467288a1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.4.1-SNAPSHOT + 2.5.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 65b400b77..9f364ceb7 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.4.1-SNAPSHOT + 2.5.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 22d957e79..b1e96945d 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.4.1-SNAPSHOT + 2.5.0 ../pom.xml From 7c1f00a44f75bd07d5af79896e0dac05b7f19c59 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:44:07 +0300 Subject: [PATCH 038/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9467288a1..30308eadf 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.0 + 2.5.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 9f364ceb7..e50a60e51 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.0 + 2.5.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index b1e96945d..62353ec0e 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.0 + 2.5.1-SNAPSHOT ../pom.xml From 826be08321647c3feced154871db38dd00d0c055 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:48:47 +0300 Subject: [PATCH 039/250] Revert "[maven-release-plugin] prepare for next development iteration" This reverts commit 7c1f00a44f75bd07d5af79896e0dac05b7f19c59. --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 30308eadf..9467288a1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.1-SNAPSHOT + 2.5.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index e50a60e51..9f364ceb7 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.1-SNAPSHOT + 2.5.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 62353ec0e..b1e96945d 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.1-SNAPSHOT + 2.5.0 ../pom.xml From 852bc7efed6907cb04de559b863fd5ac7b5d240e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:48:54 +0300 Subject: [PATCH 040/250] Revert "[maven-release-plugin] prepare release scribejava-2.5.0" This reverts commit 6b978a6a684904ab5be824435424ecaf19a53345. --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9467288a1..0454b8141 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.0 + 2.4.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 9f364ceb7..65b400b77 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.0 + 2.4.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index b1e96945d..22d957e79 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.0 + 2.4.1-SNAPSHOT ../pom.xml From b73c42d4a335b99e280e7310172de0c0a00a4ef5 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:45:54 +0300 Subject: [PATCH 041/250] prepare 2.5.2 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0ca58eb3a..82cca0d59 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.4.0 + 2.5.2 ``` @@ -87,7 +87,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.4.0 + 2.5.2 ``` diff --git a/changelog b/changelog index 512a4b3fe..15e23875b 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.5.2] * add Google Async Exmaple (with bugfix for it to work) * add OSGI manifest metadata * apiSecret is not mandatory parameter in config (to use on client sides and other flows without need of the API secret) From af97361e4f9c26c9c3fba29e7328c25e9ef1e651 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:50:58 +0300 Subject: [PATCH 042/250] [maven-release-plugin] prepare release scribejava-2.5.2 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 0454b8141..780711e7c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.4.1-SNAPSHOT + 2.5.2 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 65b400b77..07c92418f 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.4.1-SNAPSHOT + 2.5.2 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 22d957e79..878655572 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.4.1-SNAPSHOT + 2.5.2 ../pom.xml From 312579950b88f8c1f9f1af74e54810952915ca87 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 28 Mar 2016 15:51:05 +0300 Subject: [PATCH 043/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 780711e7c..94d0f1345 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.2 + 2.5.3-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 07c92418f..9bdd90b82 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.2 + 2.5.3-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 878655572..bf13322cc 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.2 + 2.5.3-SNAPSHOT ../pom.xml From f8d32379e13e8e1c64e1280db5aa95fe473bad0c Mon Sep 17 00:00:00 2001 From: Ozhiganov Valery Date: Thu, 31 Mar 2016 11:10:58 +0300 Subject: [PATCH 044/250] Odnoklassniki Example improvements --- .../scribejava/apis/examples/OdnoklassnikiExample.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index ba88fe131..8f67a49ae 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -18,14 +18,14 @@ public abstract class OdnoklassnikiExample { public static void main(String... args) { // Replace these with your client id and secret - final String clientId = "your client id"; - final String publicKey = "your api secret"; - final String clientSecret = "your client secret"; + final String clientId = "your api client id"; + final String publicKey = "your api public key"; + final String secretKey = "your api secret key"; final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) - .apiSecret(clientSecret) - .scope("VALUABLE ACCESS") + .apiSecret(secretKey) + .scope("VALUABLE_ACCESS") .grantType(OAuthConstants.AUTHORIZATION_CODE) .callback("http://your.site.com/callback") .build(OdnoklassnikiApi.instance()); From 3a5f5034f1e6d0170ebb34f61d792b20a5b9b1b3 Mon Sep 17 00:00:00 2001 From: Ozhiganov Valery Date: Thu, 31 Mar 2016 11:40:22 +0300 Subject: [PATCH 045/250] fix --- .../github/scribejava/apis/examples/OdnoklassnikiExample.java | 1 - 1 file changed, 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 8f67a49ae..6cdc33e7c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -25,7 +25,6 @@ public static void main(String... args) { final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(secretKey) - .scope("VALUABLE_ACCESS") .grantType(OAuthConstants.AUTHORIZATION_CODE) .callback("http://your.site.com/callback") .build(OdnoklassnikiApi.instance()); From f2b1185edda92310a79b4edb5c3006f42329c875 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 13 Apr 2016 16:27:52 +0300 Subject: [PATCH 046/250] do not set Content-Type twice --- .../scribejava/core/model/OAuthRequestAsync.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index f01ff1776..1081f0b68 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -53,20 +53,23 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo final String completeUrl = getCompleteUrl(); final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; final AsyncHttpClient asyncHttpClient = service.getAsyncHttpClient(); + final Map headers = getHeaders(); switch (getVerb()) { case GET: boundRequestBuilder = asyncHttpClient.prepareGet(completeUrl); break; case POST: - boundRequestBuilder = asyncHttpClient.preparePost(completeUrl) - .addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE) - .setBody(getBodyContents()); + AsyncHttpClient.BoundRequestBuilder requestBuilder = asyncHttpClient.preparePost(completeUrl); + if (!headers.containsKey(CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(getBodyContents()); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); } - for (Map.Entry header : getHeaders().entrySet()) { + for (Map.Entry header : headers.entrySet()) { boundRequestBuilder.addHeader(header.getKey(), header.getValue()); } From 8753b67d0b45e466f25f6736f0126283b25f8e67 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 15 Apr 2016 10:59:32 +0300 Subject: [PATCH 047/250] prepare 2.5.3 release --- README.md | 4 ++-- changelog | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 82cca0d59..8f2bb934a 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.5.2 + 2.5.3 ``` @@ -87,7 +87,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.5.2 + 2.5.3 ``` diff --git a/changelog b/changelog index 15e23875b..eb854075a 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +[2.5.3] + * fix - do not send two Content-Type header in async requests + * improve OK example + [2.5.2] * add Google Async Exmaple (with bugfix for it to work) * add OSGI manifest metadata From d5f0dcef7c88c759c596e4d4d5e3e643682cb148 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 15 Apr 2016 11:03:11 +0300 Subject: [PATCH 048/250] [maven-release-plugin] prepare release scribejava-2.5.3 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 94d0f1345..f044a7c08 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.3-SNAPSHOT + 2.5.3 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 9bdd90b82..e547680be 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.3-SNAPSHOT + 2.5.3 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index bf13322cc..735bb1f0f 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.3-SNAPSHOT + 2.5.3 ../pom.xml From a74e9a78e402a8ca91148aee7f741efbb95cf277 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 15 Apr 2016 11:03:16 +0300 Subject: [PATCH 049/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index f044a7c08..be78f0cc2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.3 + 2.5.4-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index e547680be..958bf5563 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.3 + 2.5.4-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 735bb1f0f..50f5e9fc0 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.3 + 2.5.4-SNAPSHOT ../pom.xml From fe5f0f39c7427e6e07a032338ab7543f381d587a Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 15 Apr 2016 16:27:56 +0300 Subject: [PATCH 050/250] update ning and checkstyle --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index be78f0cc2..a87a5c4bf 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ com.ning async-http-client - 1.9.36 + 1.9.38 provided @@ -205,7 +205,7 @@ com.puppycrawl.tools checkstyle - 6.16.1 + 6.17 From 2751f5293b75a5f62e2265802508fb721e8d72d7 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 16 May 2016 17:53:45 +0300 Subject: [PATCH 051/250] simplify async/sync usages --- changelog | 3 + .../apis/examples/FacebookAsyncExample.java | 4 +- .../apis/examples/Google20AsyncExample.java | 4 +- .../apis/examples/MailruAsyncExample.java | 4 +- .../core/builder/AbstractServiceBuilder.java | 185 ------------------ .../core/builder/ServiceBuilder.java | 158 ++++++++++++++- .../core/builder/ServiceBuilderAsync.java | 38 ---- .../scribejava/core/model/OAuthConfig.java | 54 +++-- .../core/model/OAuthConfigAsync.java | 33 ---- .../scribejava/core/oauth/OAuthService.java | 30 +-- 10 files changed, 210 insertions(+), 303 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java diff --git a/changelog b/changelog index eb854075a..dad577932 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * simplify async/sync usages + [2.5.3] * fix - do not send two Content-Type header in async requests * improve OK example diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java index e95fe7ab2..3768394a7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java @@ -5,7 +5,7 @@ import java.util.Scanner; import java.util.concurrent.ExecutionException; import com.github.scribejava.apis.FacebookApi; -import com.github.scribejava.core.builder.ServiceBuilderAsync; +import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -33,7 +33,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(1_000) .build(); - final OAuth20Service service = new ServiceBuilderAsync() + final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .state(secretState) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java index 74e4ab708..f8b021041 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java @@ -3,7 +3,7 @@ import java.util.Random; import java.util.Scanner; import com.github.scribejava.apis.GoogleApi20; -import com.github.scribejava.core.builder.ServiceBuilderAsync; +import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -35,7 +35,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(1_000) .build(); - final OAuth20Service service = new ServiceBuilderAsync() + final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .scope("profile") // replace with desired scope diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index 10a787625..26a61a456 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -4,7 +4,7 @@ import java.util.Scanner; import java.util.concurrent.ExecutionException; import com.github.scribejava.apis.MailruApi; -import com.github.scribejava.core.builder.ServiceBuilderAsync; +import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; @@ -30,7 +30,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(10_000) .build(); - final OAuth20Service service = new ServiceBuilderAsync() + final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java deleted file mode 100644 index cd8fc487e..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/AbstractServiceBuilder.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.github.scribejava.core.builder; - -import com.github.scribejava.core.builder.api.BaseApi; -import com.github.scribejava.core.model.OAuthConfig; -import java.io.OutputStream; -import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.SignatureType; -import com.github.scribejava.core.oauth.OAuthService; -import com.github.scribejava.core.utils.Preconditions; - -abstract class AbstractServiceBuilder> { - - private String callback; - private String apiKey; - private String apiSecret; - private String scope; - private String state; - private SignatureType signatureType; - private OutputStream debugStream; - private String grantType; - private String responseType = "code"; - - AbstractServiceBuilder() { - this.callback = OAuthConstants.OUT_OF_BAND; - this.signatureType = SignatureType.Header; - } - - /** - * Adds an OAuth callback url - * - * @param callback callback url. Must be a valid url or 'oob' for out of band OAuth - * @return the {@link ServiceBuilder} instance for method chaining - */ - @SuppressWarnings("unchecked") - public T callback(String callback) { - Preconditions.checkNotNull(callback, "Callback can't be null"); - this.callback = callback; - return (T) this; - } - - /** - * Configures the api key - * - * @param apiKey The api key for your application - * @return the {@link ServiceBuilder} instance for method chaining - */ - @SuppressWarnings("unchecked") - public T apiKey(String apiKey) { - Preconditions.checkEmptyString(apiKey, "Invalid Api key"); - this.apiKey = apiKey; - return (T) this; - } - - /** - * Configures the api secret - * - * @param apiSecret The api secret for your application - * @return the {@link ServiceBuilder} instance for method chaining - */ - @SuppressWarnings("unchecked") - public T apiSecret(String apiSecret) { - Preconditions.checkEmptyString(apiSecret, "Invalid Api secret"); - this.apiSecret = apiSecret; - return (T) this; - } - - /** - * Configures the OAuth scope. This is only necessary in some APIs (like Google's). - * - * @param scope The OAuth scope - * @return the {@link ServiceBuilder} instance for method chaining - */ - @SuppressWarnings("unchecked") - public T scope(String scope) { - Preconditions.checkEmptyString(scope, "Invalid OAuth scope"); - this.scope = scope; - return (T) this; - } - - /** - * Configures the anti forgery session state. This is available in some APIs (like Google's). - * - * @param state The OAuth state - * @return the {@link ServiceBuilder} instance for method chaining - */ - @SuppressWarnings("unchecked") - public T state(String state) { - Preconditions.checkEmptyString(state, "Invalid OAuth state"); - this.state = state; - return (T) this; - } - - /** - * Configures the signature type, choose between header, querystring, etc. Defaults to Header - * - * @param type SignatureType - * @return the {@link ServiceBuilder} instance for method chaining - */ - @SuppressWarnings("unchecked") - public T signatureType(SignatureType type) { - Preconditions.checkNotNull(type, "Signature type can't be null"); - this.signatureType = type; - return (T) this; - } - - @SuppressWarnings("unchecked") - public T debugStream(OutputStream stream) { - Preconditions.checkNotNull(stream, "debug stream can't be null"); - this.debugStream = stream; - return (T) this; - } - - @SuppressWarnings("unchecked") - public T grantType(String grantType) { - Preconditions.checkEmptyString(grantType, "Invalid OAuth grantType"); - this.grantType = grantType; - return (T) this; - } - - @SuppressWarnings("unchecked") - public T responseType(String responseType) { - Preconditions.checkEmptyString(responseType, "Invalid OAuth responseType"); - this.responseType = responseType; - return (T) this; - } - - @SuppressWarnings("unchecked") - public T debug() { - debugStream(System.out); - return (T) this; - } - - public void checkPreconditions() { - Preconditions.checkEmptyString(apiKey, "You must provide an api key"); - } - - public String getCallback() { - return callback; - } - - public String getApiKey() { - return apiKey; - } - - public String getApiSecret() { - return apiSecret; - } - - public String getScope() { - return scope; - } - - public String getState() { - return state; - } - - public SignatureType getSignatureType() { - return signatureType; - } - - public OutputStream getDebugStream() { - return debugStream; - } - - public String getGrantType() { - return grantType; - } - - public String getResponseType() { - return responseType; - } - - protected abstract OAuthConfig createConfig(); - - /** - * Returns the fully configured {@link S} - * - * @param OAuthService implementation (OAuth1/OAuth2/any API specific) - * @param api will build Service for this API - * @return fully configured {@link S} - */ - public S build(BaseApi api) { - return api.createService(createConfig()); - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 7d24dbec9..93ee34526 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -1,17 +1,132 @@ package com.github.scribejava.core.builder; +import com.github.scribejava.core.builder.api.BaseApi; import com.github.scribejava.core.model.OAuthConfig; +import java.io.OutputStream; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; +import com.ning.http.client.AsyncHttpClientConfig; /** * Implementation of the Builder pattern, with a fluent interface that creates a {@link OAuthService} */ -public class ServiceBuilder extends AbstractServiceBuilder { +public class ServiceBuilder { + private String callback; + private String apiKey; + private String apiSecret; + private String scope; + private String state; + private SignatureType signatureType; + private OutputStream debugStream; + private String grantType; + private String responseType = "code"; + + //sync version only private Integer connectTimeout; private Integer readTimeout; + //async version only + private AsyncHttpClientConfig asyncHttpClientConfig; + private String asyncHttpProviderClassName; + + public ServiceBuilder() { + callback = OAuthConstants.OUT_OF_BAND; + signatureType = SignatureType.Header; + } + + /** + * Adds an OAuth callback url + * + * @param callback callback url. Must be a valid url or 'oob' for out of band OAuth + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder callback(String callback) { + Preconditions.checkNotNull(callback, "Callback can't be null"); + this.callback = callback; + return this; + } + + /** + * Configures the api key + * + * @param apiKey The api key for your application + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder apiKey(String apiKey) { + Preconditions.checkEmptyString(apiKey, "Invalid Api key"); + this.apiKey = apiKey; + return this; + } + + /** + * Configures the api secret + * + * @param apiSecret The api secret for your application + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder apiSecret(String apiSecret) { + Preconditions.checkEmptyString(apiSecret, "Invalid Api secret"); + this.apiSecret = apiSecret; + return this; + } + + /** + * Configures the OAuth scope. This is only necessary in some APIs (like Google's). + * + * @param scope The OAuth scope + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder scope(String scope) { + Preconditions.checkEmptyString(scope, "Invalid OAuth scope"); + this.scope = scope; + return this; + } + + /** + * Configures the anti forgery session state. This is available in some APIs (like Google's). + * + * @param state The OAuth state + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder state(String state) { + Preconditions.checkEmptyString(state, "Invalid OAuth state"); + this.state = state; + return this; + } + + /** + * Configures the signature type, choose between header, querystring, etc. Defaults to Header + * + * @param signatureType SignatureType + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder signatureType(SignatureType signatureType) { + Preconditions.checkNotNull(signatureType, "Signature type can't be null"); + this.signatureType = signatureType; + return this; + } + + public ServiceBuilder debugStream(OutputStream debugStream) { + Preconditions.checkNotNull(debugStream, "debug stream can't be null"); + this.debugStream = debugStream; + return this; + } + + public ServiceBuilder grantType(String grantType) { + Preconditions.checkEmptyString(grantType, "Invalid OAuth grantType"); + this.grantType = grantType; + return this; + } + + public ServiceBuilder responseType(String responseType) { + Preconditions.checkEmptyString(responseType, "Invalid OAuth responseType"); + this.responseType = responseType; + return this; + } + public ServiceBuilder connectTimeout(Integer connectTimeout) { Preconditions.checkNotNull(connectTimeout, "Connection timeout can't be null"); this.connectTimeout = connectTimeout; @@ -24,12 +139,39 @@ public ServiceBuilder readTimeout(Integer readTimeout) { return this; } - @Override - protected OAuthConfig createConfig() { - super.checkPreconditions(); - final OAuthConfig config = new OAuthConfig(getApiKey(), getApiSecret(), getCallback(), getSignatureType(), - getScope(), getDebugStream(), connectTimeout, readTimeout, getGrantType(), getState(), - getResponseType()); - return config; + public ServiceBuilder asyncHttpClientConfig(AsyncHttpClientConfig asyncHttpClientConfig) { + Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); + this.asyncHttpClientConfig = asyncHttpClientConfig; + return this; + } + + public ServiceBuilder asyncHttpProviderClassName(String asyncHttpProviderClassName) { + this.asyncHttpProviderClassName = asyncHttpProviderClassName; + return this; + } + + public ServiceBuilder debug() { + debugStream(System.out); + return this; + } + + public void checkPreconditions() { + Preconditions.checkEmptyString(apiKey, "You must provide an api key"); + } + private OAuthConfig createConfig() { + checkPreconditions(); + return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, grantType, state, + responseType, connectTimeout, readTimeout, asyncHttpClientConfig, asyncHttpProviderClassName); + } + + /** + * Returns the fully configured {@link S} + * + * @param OAuthService implementation (OAuth1/OAuth2/any API specific) + * @param api will build Service for this API + * @return fully configured {@link S} + */ + public S build(BaseApi api) { + return api.createService(createConfig()); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java deleted file mode 100644 index 192405b6a..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilderAsync.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.github.scribejava.core.builder; - -import com.ning.http.client.AsyncHttpClientConfig; -import com.github.scribejava.core.model.OAuthConfigAsync; -import com.github.scribejava.core.utils.Preconditions; - -public class ServiceBuilderAsync extends AbstractServiceBuilder { - - private AsyncHttpClientConfig asyncHttpClientConfig; - private String asyncHttpProviderClassName; - - public ServiceBuilderAsync asyncHttpClientConfig(AsyncHttpClientConfig asyncHttpClientConfig) { - Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); - this.asyncHttpClientConfig = asyncHttpClientConfig; - return this; - } - - @Override - public void checkPreconditions() { - super.checkPreconditions(); - Preconditions.checkNotNull(asyncHttpClientConfig, "You must provide an asyncHttpClientConfig"); - } - - @Override - protected OAuthConfigAsync createConfig() { - checkPreconditions(); - final OAuthConfigAsync configAsync = new OAuthConfigAsync(getApiKey(), getApiSecret(), getCallback(), - getSignatureType(), getScope(), getGrantType(), getState(), getResponseType(), getDebugStream(), - asyncHttpClientConfig); - configAsync.setAsyncHttpProviderClassName(asyncHttpProviderClassName); - return configAsync; - } - - public ServiceBuilderAsync asyncHttpProviderClassName(String asyncHttpProviderClassName) { - this.asyncHttpProviderClassName = asyncHttpProviderClassName; - return this; - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 93231ddb8..a363cf915 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -1,5 +1,6 @@ package com.github.scribejava.core.model; +import com.ning.http.client.AsyncHttpClientConfig; import java.io.IOException; import java.io.OutputStream; @@ -15,29 +16,37 @@ public class OAuthConfig { private final String scope; private final String grantType; private final OutputStream debugStream; - private final Integer connectTimeout; - private final Integer readTimeout; private final String state; private final String responseType; + //sync only version + private final Integer connectTimeout; + private final Integer readTimeout; + + //async only version + private final AsyncHttpClientConfig asyncHttpClientConfig; + private final String asyncHttpProviderClassName; + public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, null, null); } - public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, - OutputStream stream, Integer connectTimeout, Integer readTimeout, String grantType, String state, - String responseType) { - this.apiKey = key; - this.apiSecret = secret; + public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, + OutputStream debugStream, String grantType, String state, String responseType, Integer connectTimeout, + Integer readTimeout, AsyncHttpClientConfig asyncHttpClientConfig, String asyncHttpProviderClassName) { + this.apiKey = apiKey; + this.apiSecret = apiSecret; this.callback = callback; - this.signatureType = type; + this.signatureType = signatureType; this.scope = scope; - this.debugStream = stream; + this.debugStream = debugStream; this.connectTimeout = connectTimeout; this.readTimeout = readTimeout; this.grantType = grantType; this.state = state; this.responseType = responseType; + this.asyncHttpClientConfig = asyncHttpClientConfig; + this.asyncHttpProviderClassName = asyncHttpProviderClassName; } public String getApiKey() { @@ -72,12 +81,12 @@ public boolean hasGrantType() { return grantType != null; } - public Integer getConnectTimeout() { - return connectTimeout; + public String getState() { + return state; } - public Integer getReadTimeout() { - return readTimeout; + public String getResponseType() { + return responseType; } public void log(String message) { @@ -91,11 +100,20 @@ public void log(String message) { } } - public String getState() { - return state; + public Integer getConnectTimeout() { + return connectTimeout; } - public String getResponseType() { - return responseType; + public Integer getReadTimeout() { + return readTimeout; + } + + public AsyncHttpClientConfig getAsyncHttpClientConfig() { + return asyncHttpClientConfig; } + + public String getAsyncHttpProviderClassName() { + return asyncHttpProviderClassName; + } + } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java deleted file mode 100644 index 346993b21..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfigAsync.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.scribejava.core.model; - -import com.ning.http.client.AsyncHttpClientConfig; -import java.io.OutputStream; - -public class OAuthConfigAsync extends OAuthConfig { - - private AsyncHttpClientConfig asyncHttpClientConfig; - private String asyncHttpProviderClassName; - - public OAuthConfigAsync(String key, String secret) { - super(key, secret); - } - - public OAuthConfigAsync(String key, String secret, String callback, SignatureType type, String scope, - String grantType, String state, String responseType, OutputStream stream, - AsyncHttpClientConfig asyncHttpClientConfig) { - super(key, secret, callback, type, scope, stream, null, null, grantType, state, responseType); - this.asyncHttpClientConfig = asyncHttpClientConfig; - } - - public AsyncHttpClientConfig getAsyncHttpClientConfig() { - return asyncHttpClientConfig; - } - - public void setAsyncHttpProviderClassName(String asyncHttpProviderClassName) { - this.asyncHttpProviderClassName = asyncHttpProviderClassName; - } - - public String getAsyncHttpProviderClassName() { - return asyncHttpProviderClassName; - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index ad7c1d4b4..3b0e1870e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -4,8 +4,8 @@ import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConfigAsync; import com.github.scribejava.core.model.ScribeJavaConfig; +import com.ning.http.client.AsyncHttpClientConfig; /** * The main ScribeJava object. @@ -15,31 +15,31 @@ public abstract class OAuthService { private final OAuthConfig config; - private AsyncHttpClient asyncHttpClient; + private final AsyncHttpClient asyncHttpClient; public OAuthService(OAuthConfig config) { this.config = config; final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - if (config instanceof OAuthConfigAsync) { + final AsyncHttpClientConfig asyncHttpClientConfig = config.getAsyncHttpClientConfig(); + if (asyncHttpClientConfig == null) { + if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { + throw new OAuthException("Cannot use sync operations, only async"); + } + if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { + config.log("Cannot use sync operations, only async"); + } + asyncHttpClient = null; + } else { if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use async operations, only sync"); } if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { config.log("Cannot use async operations, only sync"); } - final OAuthConfigAsync asyncConfig = (OAuthConfigAsync) config; - final String asyncHttpProviderClassName = asyncConfig.getAsyncHttpProviderClassName(); + final String asyncHttpProviderClassName = config.getAsyncHttpProviderClassName(); - asyncHttpClient = asyncHttpProviderClassName == null - ? new AsyncHttpClient(asyncConfig.getAsyncHttpClientConfig()) - : new AsyncHttpClient(asyncHttpProviderClassName, asyncConfig.getAsyncHttpClientConfig()); - } else { - if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use sync operations, only async"); - } - if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use sync operations, only async"); - } + asyncHttpClient = asyncHttpProviderClassName == null ? new AsyncHttpClient(asyncHttpClientConfig) + : new AsyncHttpClient(asyncHttpProviderClassName, asyncHttpClientConfig); } } From c6d55483e117dfb8a5f8cc2353c5dec4d3c1cb00 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 16 May 2016 17:53:45 +0300 Subject: [PATCH 052/250] add optional "User-Agent" config option to use while making http calls --- changelog | 1 + .../core/builder/ServiceBuilder.java | 9 ++++++++- .../scribejava/core/model/OAuthConfig.java | 18 ++++++++++++------ .../scribejava/core/model/OAuthConstants.java | 4 ++++ .../scribejava/core/model/OAuthRequest.java | 4 ++++ .../core/model/OAuthRequestAsync.java | 7 ++++++- 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/changelog b/changelog index dad577932..b79af6899 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * simplify async/sync usages + * add optional "User-Agent" config option to use while making http calls [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 93ee34526..57bd54e96 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -23,6 +23,7 @@ public class ServiceBuilder { private OutputStream debugStream; private String grantType; private String responseType = "code"; + private String userAgent; //sync version only private Integer connectTimeout; @@ -150,6 +151,11 @@ public ServiceBuilder asyncHttpProviderClassName(String asyncHttpProviderClassNa return this; } + public ServiceBuilder userAgent(String userAgent) { + this.userAgent = userAgent; + return this; + } + public ServiceBuilder debug() { debugStream(System.out); return this; @@ -161,7 +167,8 @@ public void checkPreconditions() { private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, grantType, state, - responseType, connectTimeout, readTimeout, asyncHttpClientConfig, asyncHttpProviderClassName); + responseType, userAgent, connectTimeout, readTimeout, asyncHttpClientConfig, + asyncHttpProviderClassName); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index a363cf915..eba9ddeba 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -18,6 +18,7 @@ public class OAuthConfig { private final OutputStream debugStream; private final String state; private final String responseType; + private final String userAgent; //sync only version private final Integer connectTimeout; @@ -28,23 +29,25 @@ public class OAuthConfig { private final String asyncHttpProviderClassName; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, - OutputStream debugStream, String grantType, String state, String responseType, Integer connectTimeout, - Integer readTimeout, AsyncHttpClientConfig asyncHttpClientConfig, String asyncHttpProviderClassName) { + OutputStream debugStream, String grantType, String state, String responseType, String userAgent, + Integer connectTimeout, Integer readTimeout, AsyncHttpClientConfig asyncHttpClientConfig, + String asyncHttpProviderClassName) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; this.signatureType = signatureType; this.scope = scope; this.debugStream = debugStream; - this.connectTimeout = connectTimeout; - this.readTimeout = readTimeout; this.grantType = grantType; this.state = state; this.responseType = responseType; + this.userAgent = userAgent; + this.connectTimeout = connectTimeout; + this.readTimeout = readTimeout; this.asyncHttpClientConfig = asyncHttpClientConfig; this.asyncHttpProviderClassName = asyncHttpProviderClassName; } @@ -89,6 +92,10 @@ public String getResponseType() { return responseType; } + public String getUserAgent() { + return userAgent; + } + public void log(String message) { if (debugStream != null) { message += '\n'; @@ -115,5 +122,4 @@ public AsyncHttpClientConfig getAsyncHttpClientConfig() { public String getAsyncHttpProviderClassName() { return asyncHttpProviderClassName; } - } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java index 687970171..d328e2242 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java @@ -35,4 +35,8 @@ public interface OAuthConstants { String STATE = "state"; String USERNAME = "username"; String PASSWORD = "password"; + + //not OAuth specific + String USER_AGENT_HEADER_NAME = "User-Agent"; + } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index 66a36415a..230cd15b9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -70,6 +70,10 @@ void addHeaders() { for (Map.Entry entry : getHeaders().entrySet()) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } + final String userAgent = getService().getConfig().getUserAgent(); + if (userAgent != null) { + connection.setRequestProperty(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } } void addBody(byte[] content) throws IOException { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index 1081f0b68..fc422e8e6 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -47,8 +47,9 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo throw new OAuthException("Cannot use async operations, only sync"); } final OAuthService service = getService(); + final OAuthConfig config = service.getConfig(); if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - service.getConfig().log("Cannot use async operations, only sync"); + config.log("Cannot use async operations, only sync"); } final String completeUrl = getCompleteUrl(); final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; @@ -72,6 +73,10 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo for (Map.Entry header : headers.entrySet()) { boundRequestBuilder.addHeader(header.getKey(), header.getValue()); } + final String userAgent = config.getUserAgent(); + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } if (proxyServer != null) { boundRequestBuilder.setProxyServer(proxyServer); From 53fbad022a901425fb5de8d1bd65d3d7a7afa785 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 16 May 2016 19:04:07 +0300 Subject: [PATCH 053/250] refactor usage of grant_type [authorization_code|refresh_token|password|etc] --- changelog | 1 + .../scribejava/apis/ConstantContactApi2.java | 3 +-- .../scribejava/apis/Foursquare2Api.java | 3 +-- .../github/scribejava/apis/GoogleApi20.java | 7 ------ .../github/scribejava/apis/KaixinApi20.java | 3 +-- .../com/github/scribejava/apis/LiveApi.java | 3 +-- .../github/scribejava/apis/PinterestApi.java | 3 +-- .../com/github/scribejava/apis/RenrenApi.java | 3 +-- .../scribejava/apis/SinaWeiboApi20.java | 3 +-- .../com/github/scribejava/apis/ViadeoApi.java | 3 +-- .../apis/service/GoogleOAuthServiceImpl.java | 23 ------------------- .../apis/service/LinkedIn20ServiceImpl.java | 10 -------- .../apis/service/MailruOAuthServiceImpl.java | 10 -------- .../scribejava/apis/examples/HHExample.java | 1 - .../apis/examples/OdnoklassnikiExample.java | 2 -- .../apis/examples/TutByExample.java | 2 -- .../core/builder/ServiceBuilder.java | 12 ++-------- .../scribejava/core/model/OAuthConfig.java | 17 +++----------- .../scribejava/core/oauth/OAuth20Service.java | 4 +--- 19 files changed, 15 insertions(+), 98 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java diff --git a/changelog b/changelog index b79af6899..61683c6d3 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * simplify async/sync usages * add optional "User-Agent" config option to use while making http calls + * refactor usage of grant_type [authorization_code|refresh_token|password|etc] [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java index 3dd0af0a2..b0bbb59eb 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; public class ConstantContactApi2 extends DefaultApi20 { @@ -28,7 +27,7 @@ public static ConstantContactApi2 instance() { @Override public String getAccessTokenEndpoint() { - return "https://oauth2.constantcontact.com/oauth2/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://oauth2.constantcontact.com/oauth2/oauth/token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java index 2e65672f0..0fc29de2b 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -30,7 +29,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://foursquare.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://foursquare.com/oauth2/access_token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index 26d003bdd..c94c143c8 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -1,13 +1,11 @@ package com.github.scribejava.apis; import com.github.scribejava.apis.google.GoogleJsonTokenExtractor; -import com.github.scribejava.apis.service.GoogleOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.utils.OAuthEncoder; public class GoogleApi20 extends DefaultApi20 { @@ -47,9 +45,4 @@ public String getAuthorizationUrl(OAuthConfig config) { public TokenExtractor getAccessTokenExtractor() { return GoogleJsonTokenExtractor.instance(); } - - @Override - public OAuth20Service createService(OAuthConfig config) { - return new GoogleOAuthServiceImpl(this, config); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java index 979a4b5a4..383f1d20f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; @@ -33,7 +32,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://api.kaixin001.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://api.kaixin001.com/oauth2/access_token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java index 8d02a199c..96b742bc9 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -31,7 +30,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://login.live.com/oauth20_token.srf?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://login.live.com/oauth20_token.srf"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java index 0e3f96c4d..ad0151558 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -25,7 +24,7 @@ public static PinterestApi instance() { @Override public String getAccessTokenEndpoint() { - return "https://api.pinterest.com/v1/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://api.pinterest.com/v1/oauth/token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java index 726baffd4..25430ecd6 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; @@ -33,7 +32,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://graph.renren.com/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://graph.renren.com/oauth/token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java index b0edb459d..42860e655 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.utils.OAuthEncoder; /** @@ -27,7 +26,7 @@ public static SinaWeiboApi20 instance() { @Override public String getAccessTokenEndpoint() { - return "https://api.weibo.com/oauth2/access_token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://api.weibo.com/oauth2/access_token"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java index a84c15195..185d684af 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -31,7 +30,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://secure.viadeo.com/oauth-provider/access_token2?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + return "https://secure.viadeo.com/oauth-provider/access_token2"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java deleted file mode 100644 index 015ce3677..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GoogleOAuthServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.github.scribejava.apis.service; - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.oauth.OAuth20Service; - -public class GoogleOAuthServiceImpl extends OAuth20Service { - - public GoogleOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { - super(api, config); - } - - @Override - protected T createAccessTokenRequest(String code, T request) { - super.createAccessTokenRequest(code, request); - if (!getConfig().hasGrantType()) { - request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); - } - return request; - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java index 49bae5ecf..b0e6adf14 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java @@ -4,7 +4,6 @@ import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.oauth.OAuth20Service; public class LinkedIn20ServiceImpl extends OAuth20Service { @@ -17,13 +16,4 @@ public LinkedIn20ServiceImpl(DefaultApi20 api, OAuthConfig config) { public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { request.addQuerystringParameter("oauth2_access_token", accessToken.getAccessToken()); } - - @Override - protected T createAccessTokenRequest(String code, T request) { - super.createAccessTokenRequest(code, request); - if (!getConfig().hasGrantType()) { - request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); - } - return request; - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java index a6d4f9b3a..d436d8244 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java @@ -10,7 +10,6 @@ import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.oauth.OAuth20Service; public class MailruOAuthServiceImpl extends OAuth20Service { @@ -49,13 +48,4 @@ public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) throw new IllegalStateException(e); } } - - @Override - protected T createAccessTokenRequest(String code, T request) { - super.createAccessTokenRequest(code, request); - if (!getConfig().hasGrantType()) { - request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); - } - return request; - } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index ad9d687d1..0ca8052e0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -24,7 +24,6 @@ public static void main(String... args) { .apiKey(clientId) .apiSecret(clientSecret) .callback("http://your.site.com/callback") - .grantType("authorization_code") .build(HHApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 6cdc33e7c..1900e3f47 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -4,7 +4,6 @@ import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.apis.OdnoklassnikiApi; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; @@ -25,7 +24,6 @@ public static void main(String... args) { final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(secretKey) - .grantType(OAuthConstants.AUTHORIZATION_CODE) .callback("http://your.site.com/callback") .build(OdnoklassnikiApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 4f201c85e..e8d82d98b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -3,7 +3,6 @@ import java.util.Scanner; import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; @@ -24,7 +23,6 @@ public static void main(String... args) { final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) - .grantType(OAuthConstants.AUTHORIZATION_CODE) .callback("http://www.example.com/oauth_callback/") .build(TutByApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 57bd54e96..de5f51f03 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -21,7 +21,6 @@ public class ServiceBuilder { private String state; private SignatureType signatureType; private OutputStream debugStream; - private String grantType; private String responseType = "code"; private String userAgent; @@ -116,12 +115,6 @@ public ServiceBuilder debugStream(OutputStream debugStream) { return this; } - public ServiceBuilder grantType(String grantType) { - Preconditions.checkEmptyString(grantType, "Invalid OAuth grantType"); - this.grantType = grantType; - return this; - } - public ServiceBuilder responseType(String responseType) { Preconditions.checkEmptyString(responseType, "Invalid OAuth responseType"); this.responseType = responseType; @@ -166,9 +159,8 @@ public void checkPreconditions() { } private OAuthConfig createConfig() { checkPreconditions(); - return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, grantType, state, - responseType, userAgent, connectTimeout, readTimeout, asyncHttpClientConfig, - asyncHttpProviderClassName); + return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, + userAgent, connectTimeout, readTimeout, asyncHttpClientConfig, asyncHttpProviderClassName); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index eba9ddeba..aab9ac513 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -14,7 +14,6 @@ public class OAuthConfig { private final String callback; private final SignatureType signatureType; private final String scope; - private final String grantType; private final OutputStream debugStream; private final String state; private final String responseType; @@ -29,20 +28,18 @@ public class OAuthConfig { private final String asyncHttpProviderClassName; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, - OutputStream debugStream, String grantType, String state, String responseType, String userAgent, - Integer connectTimeout, Integer readTimeout, AsyncHttpClientConfig asyncHttpClientConfig, - String asyncHttpProviderClassName) { + OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, + Integer readTimeout, AsyncHttpClientConfig asyncHttpClientConfig, String asyncHttpProviderClassName) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; this.signatureType = signatureType; this.scope = scope; this.debugStream = debugStream; - this.grantType = grantType; this.state = state; this.responseType = responseType; this.userAgent = userAgent; @@ -76,14 +73,6 @@ public boolean hasScope() { return scope != null; } - public String getGrantType() { - return grantType; - } - - public boolean hasGrantType() { - return grantType != null; - } - public String getState() { return state; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 2c7f8306b..275a825b5 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -87,9 +87,7 @@ protected T createAccessTokenRequest(String code, T if (config.hasScope()) { request.addParameter(OAuthConstants.SCOPE, config.getScope()); } - if (config.hasGrantType()) { - request.addParameter(OAuthConstants.GRANT_TYPE, config.getGrantType()); - } + request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); return request; } From 338406dc2c716e15f96aae43614628f8b285502f Mon Sep 17 00:00:00 2001 From: Tomasz Szymaniec Date: Sat, 9 Apr 2016 22:30:01 +0100 Subject: [PATCH 054/250] add Genius.com API authentication (OAuth2) --- changelog | 1 + .../com/github/scribejava/apis/GeniusApi.java | 52 ++++++++++++ .../apis/service/GeniusOAuthServiceImpl.java | 19 +++++ .../apis/examples/GeniusExample.java | 85 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java diff --git a/changelog b/changelog index 61683c6d3..226303c8e 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * simplify async/sync usages * add optional "User-Agent" config option to use while making http calls * refactor usage of grant_type [authorization_code|refresh_token|password|etc] + * add Genius.com API authentication (OAuth2) [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java new file mode 100644 index 000000000..172138cb1 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java @@ -0,0 +1,52 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.apis.service.GeniusOAuthServiceImpl; +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.github.scribejava.core.utils.OAuthEncoder; + +public class GeniusApi extends DefaultApi20 { + + private static final String AUTHORIZE_URL = "https://api.genius.com/oauth/authorize" + + "?client_id=%s" + + "&redirect_uri=%s" + + "&scope=%s" + + "&state=%s" + + "&response_type=code"; + + private static final String TOKEN_ENDPOINT_URL = "https://api.genius.com/oauth/token"; + + protected GeniusApi() { + } + + private static class InstanceHolder { + + private static final GeniusApi INSTANCE = new GeniusApi(); + } + + public static GeniusApi instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public String getAccessTokenEndpoint() { + return TOKEN_ENDPOINT_URL; + } + + @Override + public String getAuthorizationUrl(OAuthConfig config) { + + // User must provide these 4 elements to the service builder + return String.format(AUTHORIZE_URL, + OAuthEncoder.encode(config.getApiKey()), + OAuthEncoder.encode(config.getCallback()), + OAuthEncoder.encode(config.getScope()), + OAuthEncoder.encode(config.getState())); + } + + @Override + public OAuth20Service createService(OAuthConfig config) { + return new GeniusOAuthServiceImpl(this, config); + } +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java new file mode 100644 index 000000000..4c2aa992c --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java @@ -0,0 +1,19 @@ +package com.github.scribejava.apis.service; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.oauth.OAuth20Service; + +public class GeniusOAuthServiceImpl extends OAuth20Service { + + public GeniusOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { + super(api, config); + } + + @Override + public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java new file mode 100644 index 000000000..141cc7ebf --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -0,0 +1,85 @@ +package com.github.scribejava.apis.examples; + +import java.util.Scanner; + +import com.github.scribejava.apis.GeniusApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; + +public abstract class GeniusExample { + + private static final String NETWORK_NAME = "Genius"; + private static final String PROTECTED_RESOURCE_URL = "https://api.genius.com/songs/378195"; + + public static void main(String... args) { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + final String secretState = "100"; + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .scope("me") + .state(secretState) + .callback("com.scribejavatest://callback") + .userAgent("ScribeJava") + .build(GeniusApi.instance()); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code; + final String value; + try (Scanner in = new Scanner(System.in, "UTF-8")) { + code = in.nextLine(); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + + "'."); + System.out.print(">>"); + value = in.nextLine(); + } + + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessToken(code); + System.out.println("Got the Access Token!"); + System.out.println("(View Access Token contents: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Accessing a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + service.signRequest(accessToken, request); + final Response response = request.send(); + System.out.println("Got it! Viewing contents..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } +} From ca335ad2c9b836c7d2ef9933e8bedb4d4bab3578 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 14:05:40 +0300 Subject: [PATCH 055/250] update maven dependencies --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index a87a5c4bf..83388dab5 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-jar-plugin - 2.6 + 3.0.0 ${project.build.outputDirectory}/META-INF/MANIFEST.MF @@ -163,7 +163,7 @@ org.apache.maven.plugins maven-resources-plugin - 2.7 + 3.0.0 UTF-8 @@ -205,7 +205,7 @@ com.puppycrawl.tools checkstyle - 6.17 + 6.18 From 8af489aff6504e24b05abe7cc329a2af9d03dcf6 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 17:39:23 +0300 Subject: [PATCH 056/250] fix GitHubAPI --- changelog | 1 + .../src/main/java/com/github/scribejava/apis/GitHubApi.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 226303c8e..714a3024e 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ * add optional "User-Agent" config option to use while making http calls * refactor usage of grant_type [authorization_code|refresh_token|password|etc] * add Genius.com API authentication (OAuth2) + * fix GitHub API [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java index 12ed978dd..ebacda46f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java @@ -27,7 +27,7 @@ public static GitHubApi instance() { @Override public Verb getAccessTokenVerb() { - return Verb.GET; + return Verb.POST; } @Override From 4e2a9a13b4fb601cbc2c99a9703f6147dd6a2529 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 17:26:40 +0300 Subject: [PATCH 057/250] standardize authorization url generation for OAuth2 --- changelog | 1 + .../scribejava/apis/ConstantContactApi2.java | 10 +---- .../scribejava/apis/DoktornaraboteApi.java | 29 ++------------ .../github/scribejava/apis/FacebookApi.java | 23 +---------- .../scribejava/apis/Foursquare2Api.java | 12 +----- .../com/github/scribejava/apis/GeniusApi.java | 22 ++--------- .../com/github/scribejava/apis/GitHubApi.java | 21 +--------- .../github/scribejava/apis/GoogleApi20.java | 17 +-------- .../com/github/scribejava/apis/HHApi.java | 12 ++---- .../com/github/scribejava/apis/ImgurApi.java | 34 ++++++++++++++--- .../github/scribejava/apis/KaixinApi20.java | 16 +------- .../github/scribejava/apis/LinkedInApi20.java | 22 +---------- .../com/github/scribejava/apis/LiveApi.java | 20 +--------- .../com/github/scribejava/apis/MailruApi.java | 17 +-------- .../scribejava/apis/OdnoklassnikiApi.java | 23 +---------- .../github/scribejava/apis/PinterestApi.java | 20 +--------- .../com/github/scribejava/apis/RenrenApi.java | 16 +------- .../scribejava/apis/SinaWeiboApi20.java | 16 +------- .../scribejava/apis/StackExchangeApi.java | 22 +---------- .../com/github/scribejava/apis/TutByApi.java | 11 +----- .../com/github/scribejava/apis/ViadeoApi.java | 20 +--------- .../github/scribejava/apis/VkontakteApi.java | 18 +-------- .../core/builder/ServiceBuilder.java | 1 + .../core/builder/api/DefaultApi20.java | 38 +++++++++---------- .../scribejava/core/model/OAuthConfig.java | 4 -- .../scribejava/core/model/OAuthConstants.java | 2 + .../scribejava/core/model/ParameterList.java | 18 +++++---- .../core/oauth/OAuth10aService.java | 5 ++- .../scribejava/core/oauth/OAuth20Service.java | 22 +++++------ .../core/builder/ServiceBuilderTest.java | 2 +- .../scribejava/core/oauth/OAuth20ApiUnit.java | 2 +- 31 files changed, 120 insertions(+), 376 deletions(-) diff --git a/changelog b/changelog index 714a3024e..117278137 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,7 @@ * refactor usage of grant_type [authorization_code|refresh_token|password|etc] * add Genius.com API authentication (OAuth2) * fix GitHub API + * standardize authorization url generation for OAuth2 [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java index b0bbb59eb..94cbde0c8 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java @@ -5,15 +5,9 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.utils.OAuthEncoder; public class ConstantContactApi2 extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://oauth2.constantcontact.com/oauth2/oauth/siteowner/authorize?client_id=%s&response_type=code" - + "&redirect_uri=%s"; - protected ConstantContactApi2() { } @@ -31,8 +25,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); + protected String getAuthorizationBaseUrl() { + return "https://oauth2.constantcontact.com/oauth2/oauth/siteowner/authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java index 6332aa198..8965ea07f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java @@ -3,17 +3,10 @@ import com.github.scribejava.apis.service.DoktornaraboteOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class DoktornaraboteApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "http://auth.doktornarabote.ru/OAuth/Authorize?response_type=code&client_id=%s&redirect_uri=%s&scope=%s"; - private static final String TOKEN_URL = "http://auth.doktornarabote.ru/OAuth/Token"; - protected DoktornaraboteApi() { } @@ -27,28 +20,12 @@ public static DoktornaraboteApi instance() { @Override public String getAccessTokenEndpoint() { - return TOKEN_URL; + return "http://auth.doktornarabote.ru/OAuth/Token"; } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl( - config.getCallback(), - "Must provide a valid url as callback. Doktornarabote does not support OOB"); - final StringBuilder sb = new StringBuilder( - String.format( - AUTHORIZE_URL, - config.getApiKey(), - OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope()) - ) - ); - - final String state = config.getState(); - if (state != null) { - sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state)); - } - return sb.toString(); + protected String getAuthorizationBaseUrl() { + return "http://auth.doktornarabote.ru/OAuth/Authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index a2c18b2d6..ffccdd73d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -1,20 +1,13 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; /** * Facebook v2.5 API */ public class FacebookApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://www.facebook.com/v2.5/dialog/oauth?client_id=%s&redirect_uri=%s"; - protected FacebookApi() { } @@ -43,19 +36,7 @@ public String getRefreshTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. Facebook does not support OOB"); - final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getApiKey(), - OAuthEncoder.encode(config.getCallback()))); - if (config.hasScope()) { - sb.append('&').append(OAuthConstants.SCOPE).append('=').append(OAuthEncoder.encode(config.getScope())); - } - - final String state = config.getState(); - if (state != null) { - sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state)); - } - return sb.toString(); + protected String getAuthorizationBaseUrl() { + return "https://www.facebook.com/v2.5/dialog/oauth"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java index 0fc29de2b..cb574618d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java @@ -1,16 +1,10 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class Foursquare2Api extends DefaultApi20 { - private static final String AUTHORIZATION_URL - = "https://foursquare.com/oauth2/authenticate?client_id=%s&response_type=code&redirect_uri=%s"; - protected Foursquare2Api() { } @@ -33,9 +27,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. Foursquare2 does not support OOB"); - return String.format(AUTHORIZATION_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); + protected String getAuthorizationBaseUrl() { + return "https://foursquare.com/oauth2/authenticate"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java index 172138cb1..14570697c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java @@ -4,19 +4,9 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.utils.OAuthEncoder; public class GeniusApi extends DefaultApi20 { - private static final String AUTHORIZE_URL = "https://api.genius.com/oauth/authorize" - + "?client_id=%s" - + "&redirect_uri=%s" - + "&scope=%s" - + "&state=%s" - + "&response_type=code"; - - private static final String TOKEN_ENDPOINT_URL = "https://api.genius.com/oauth/token"; - protected GeniusApi() { } @@ -31,18 +21,12 @@ public static GeniusApi instance() { @Override public String getAccessTokenEndpoint() { - return TOKEN_ENDPOINT_URL; + return "https://api.genius.com/oauth/token"; } @Override - public String getAuthorizationUrl(OAuthConfig config) { - - // User must provide these 4 elements to the service builder - return String.format(AUTHORIZE_URL, - OAuthEncoder.encode(config.getApiKey()), - OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope()), - OAuthEncoder.encode(config.getState())); + protected String getAuthorizationBaseUrl() { + return "https://api.genius.com/oauth/authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java index ebacda46f..ada35c1b3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java @@ -4,16 +4,10 @@ import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class GitHubApi extends DefaultApi20 { - private static final String AUTHORIZE_URL = "https://github.com/login/oauth/authorize?client_id=%s&redirect_uri=%s"; - protected GitHubApi() { } @@ -36,19 +30,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. GitHub does not support OOB"); - final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getApiKey(), - OAuthEncoder.encode(config.getCallback()))); - if (config.hasScope()) { - sb.append('&').append(OAuthConstants.SCOPE).append('=').append(OAuthEncoder.encode(config.getScope())); - } - final String state = config.getState(); - if (state != null) { - sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state)); - } - return sb.toString(); + protected String getAuthorizationBaseUrl() { + return "https://github.com/login/oauth/authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index c94c143c8..157753f6d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -4,15 +4,9 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.utils.OAuthEncoder; public class GoogleApi20 extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://accounts.google.com/o/oauth2/auth?response_type=%s&client_id=%s&redirect_uri=%s&scope=%s"; - protected GoogleApi20() { } @@ -30,15 +24,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getResponseType(), - config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config.getScope()))); - - final String state = config.getState(); - if (state != null) { - sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state)); - } - return sb.toString(); + protected String getAuthorizationBaseUrl() { + return "https://accounts.google.com/o/oauth2/auth"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java index ca67c8fca..acb239fa5 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java @@ -5,15 +5,9 @@ import com.github.scribejava.apis.service.HHOAuthServiceImpl; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.utils.OAuthEncoder; public class HHApi extends DefaultApi20 { - private static final String AUTHORIZE_URL = "https://hh.ru/oauth/authorize?response_type=code&" + - "client_id=%s&redirect_uri=%s"; - - private static final String TOKEN_URL = "https://hh.ru/oauth/token"; - protected HHApi() { } @@ -27,12 +21,12 @@ public static HHApi instance() { @Override public String getAccessTokenEndpoint() { - return TOKEN_URL; + return "https://hh.ru/oauth/token"; } @Override - public String getAuthorizationUrl(OAuthConfig config) { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); + protected String getAuthorizationBaseUrl() { + return "https://hh.ru/oauth/authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java index d55ad2d99..3b14473d1 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ImgurApi.java @@ -3,13 +3,13 @@ import com.github.scribejava.apis.service.ImgurOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.ParameterList; import com.github.scribejava.core.oauth.OAuth20Service; +import java.util.Map; public class ImgurApi extends DefaultApi20 { - private static final String AUTHORIZATION_URL = - "https://api.imgur.com/oauth2/authorize?client_id=%s&response_type=%s"; - protected ImgurApi() { } @@ -27,8 +27,32 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - return String.format(AUTHORIZATION_URL, config.getApiKey(), isOob(config) ? "pin" : "code"); + public String getAuthorizationUrl(OAuthConfig config, Map additionalParams) { + final ParameterList parameters = new ParameterList(additionalParams); + parameters.add(OAuthConstants.RESPONSE_TYPE, isOob(config) ? "pin" : "code"); + parameters.add(OAuthConstants.CLIENT_ID, config.getApiKey()); + + final String callback = config.getCallback(); + if (callback != null) { + parameters.add(OAuthConstants.REDIRECT_URI, callback); + } + + final String scope = config.getScope(); + if (scope != null) { + parameters.add(OAuthConstants.SCOPE, scope); + } + + final String state = config.getState(); + if (state != null) { + parameters.add(OAuthConstants.STATE, state); + } + + return parameters.appendTo("https://api.imgur.com/oauth2/authorize"); + } + + @Override + protected String getAuthorizationBaseUrl() { + throw new UnsupportedOperationException("use getAuthorizationUrl instead"); } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java index 383f1d20f..cd8917fd5 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java @@ -1,19 +1,13 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; /** * Kaixin(http://www.kaixin001.com/) open platform api based on OAuth 2.0. */ public class KaixinApi20 extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "http://api.kaixin001.com/oauth2/authorize?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected KaixinApi20() { } @@ -36,13 +30,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - // Append scope if present - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "http://api.kaixin001.com/oauth2/authorize"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java index 3043f2737..b39f4a33b 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java @@ -3,20 +3,11 @@ import com.github.scribejava.apis.service.LinkedIn20ServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class LinkedInApi20 extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=%s&redirect_uri=%s&" - + OAuthConstants.STATE + "=%s"; - - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected LinkedInApi20() { } @@ -39,17 +30,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. LinkedIn does not support OOB"); - - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - config.getState(), OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - config.getState()); - } + protected String getAuthorizationBaseUrl() { + return "https://www.linkedin.com/uas/oauth2/authorization"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java index 96b742bc9..ee6c6ba12 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java @@ -1,17 +1,10 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class LiveApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://oauth.live.com/authorize?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected LiveApi() { } @@ -34,16 +27,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. Live does not support OOB"); - - // Append scope if present - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://oauth.live.com/authorize"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java index a15b45634..a67e434c5 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MailruApi.java @@ -2,17 +2,11 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; import com.github.scribejava.apis.service.MailruOAuthServiceImpl; import com.github.scribejava.core.oauth.OAuth20Service; public class MailruApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://connect.mail.ru/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected MailruApi() { } @@ -30,15 +24,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Valid url is required for a callback. Mail.ru does not support OOB"); - if (config.hasScope()) { // Appending scope if present - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://connect.mail.ru/oauth/authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java index 0651fe108..3144a77e0 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java @@ -4,14 +4,9 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class OdnoklassnikiApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://connect.ok.ru/oauth/authorize?client_id=%s&response_type=code&redirect_uri=%s"; - protected OdnoklassnikiApi() { } @@ -29,22 +24,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Valid url is required for a callback. Odnoklassniki does not support OOB"); - - final StringBuilder urlBuilder = new StringBuilder(String.format(AUTHORIZE_URL, - config.getApiKey(), OAuthEncoder.encode(config.getCallback()))); - - if (config.hasScope()) { - urlBuilder.append("&scope=").append(OAuthEncoder.encode(config.getScope())); - } - - final String state = config.getState(); - if (state != null) { - urlBuilder.append("&state=").append(OAuthEncoder.encode(config.getState())); - } - return urlBuilder.toString(); + protected String getAuthorizationBaseUrl() { + return "https://connect.ok.ru/oauth/authorize"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java index ad0151558..0f44d7b12 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java @@ -1,16 +1,9 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class PinterestApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://api.pinterest.com/oauth?response_type=code&client_id=%s&redirect_uri=%s"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected PinterestApi() { } @@ -28,16 +21,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. Pinterest does not support OOB"); - - // Append scope if present - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://api.pinterest.com/oauth"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java index 25430ecd6..da10760c3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java @@ -1,19 +1,13 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; /** * Renren(http://www.renren.com/) OAuth 2.0 based api. */ public class RenrenApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://graph.renren.com/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected RenrenApi() { } @@ -36,13 +30,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - // Append scope if present - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://graph.renren.com/oauth/authorize"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java index 42860e655..1799806f1 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java @@ -1,18 +1,12 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.utils.OAuthEncoder; /** * SinaWeibo OAuth 2.0 api. */ public class SinaWeiboApi20 extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://api.weibo.com/oauth2/authorize?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected SinaWeiboApi20() { } @@ -30,13 +24,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - // Append scope if present - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://api.weibo.com/oauth2/authorize"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java index e2e8c5b25..c6dfcb101 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java @@ -4,10 +4,6 @@ import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; /** * Stack Exchange authentication via OAuth 2.0 (stackoverflow.com, @@ -15,8 +11,6 @@ */ public class StackExchangeApi extends DefaultApi20 { - private static final String AUTHORIZE_URL = "https://stackexchange.com/oauth?client_id=%s&redirect_uri=%s"; - protected StackExchangeApi() { } @@ -34,20 +28,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. StackExchange does not support OOB"); - final StringBuilder sb = new StringBuilder(String.format(AUTHORIZE_URL, config.getApiKey(), - OAuthEncoder.encode(config.getCallback()))); - if (config.hasScope()) { - sb.append('&').append(OAuthConstants.SCOPE).append('=').append(OAuthEncoder.encode(config.getScope())); - } - - final String state = config.getState(); - if (state != null) { - sb.append('&').append(OAuthConstants.STATE).append('=').append(OAuthEncoder.encode(state)); - } - return sb.toString(); + protected String getAuthorizationBaseUrl() { + return "https://stackexchange.com/oauth"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java index 72d3e13fd..6928ba70a 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TutByApi.java @@ -2,16 +2,11 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; import com.github.scribejava.apis.service.TutByOAuthServiceImpl; import com.github.scribejava.core.oauth.OAuth20Service; public class TutByApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "http://profile.tut.by/auth?client_id=%s&response_type=code&redirect_uri=%s"; - protected TutByApi() { } @@ -29,10 +24,8 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Valid url is required for a callback. Tut.by does not support OOB"); - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); + protected String getAuthorizationBaseUrl() { + return "http://profile.tut.by/auth"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java index 185d684af..e3143b5b4 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java @@ -1,17 +1,10 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class ViadeoApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://secure.viadeo.com/oauth-provider/authorize2?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - protected ViadeoApi() { } @@ -34,16 +27,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Must provide a valid url as callback. Viadeo does not support OOB"); - - // Append scope if present - if (config.hasScope()) { - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://secure.viadeo.com/oauth-provider/authorize2"; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java index 5ee9a88fe..7d440d275 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java @@ -1,17 +1,10 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; public class VkontakteApi extends DefaultApi20 { - private static final String AUTHORIZE_URL - = "https://oauth.vk.com/authorize?client_id=%s&redirect_uri=%s&response_type=code"; - private static final String SCOPED_AUTHORIZE_URL = String.format("%s&scope=%%s", AUTHORIZE_URL); - protected VkontakteApi() { } @@ -34,14 +27,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { - Preconditions.checkValidUrl(config.getCallback(), - "Valid url is required for a callback. Vkontakte does not support OOB"); - if (config.hasScope()) { // Appending scope if present - return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), - OAuthEncoder.encode(config.getScope())); - } else { - return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); - } + protected String getAuthorizationBaseUrl() { + return "https://oauth.vk.com/authorize"; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index de5f51f03..a6404043f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -157,6 +157,7 @@ public ServiceBuilder debug() { public void checkPreconditions() { Preconditions.checkEmptyString(apiKey, "You must provide an api key"); } + private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index 30095f134..480a7a34d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -4,9 +4,10 @@ import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.ParameterList; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.utils.OAuthEncoder; import java.util.Map; /** @@ -53,13 +54,7 @@ public String getRefreshTokenEndpoint() { return getAccessTokenEndpoint(); } - /** - * Returns the URL where you should redirect your users to authenticate your application. - * - * @param config OAuth 2.0 configuration param object - * @return the URL where you should redirect your users - */ - public abstract String getAuthorizationUrl(OAuthConfig config); + protected abstract String getAuthorizationBaseUrl(); /** * Returns the URL where you should redirect your users to authenticate your application. @@ -69,23 +64,26 @@ public String getRefreshTokenEndpoint() { * @return the URL where you should redirect your users */ public String getAuthorizationUrl(OAuthConfig config, Map additionalParams) { - String authUrl = getAuthorizationUrl(config); + final ParameterList parameters = new ParameterList(additionalParams); + parameters.add(OAuthConstants.RESPONSE_TYPE, config.getResponseType()); + parameters.add(OAuthConstants.CLIENT_ID, config.getApiKey()); - if (additionalParams != null && !additionalParams.isEmpty()) { - final StringBuilder authUrlWithParams = new StringBuilder(authUrl) - .append(authUrl.indexOf('?') == -1 ? '?' : '&'); + final String callback = config.getCallback(); + if (callback != null) { + parameters.add(OAuthConstants.REDIRECT_URI, callback); + } - for (Map.Entry param : additionalParams.entrySet()) { - authUrlWithParams.append(OAuthEncoder.encode(param.getKey())) - .append('=') - .append(OAuthEncoder.encode(param.getValue())) - .append('&'); - } + final String scope = config.getScope(); + if (scope != null) { + parameters.add(OAuthConstants.SCOPE, scope); + } - authUrl = authUrlWithParams.substring(0, authUrlWithParams.length() - 1); + final String state = config.getState(); + if (state != null) { + parameters.add(OAuthConstants.STATE, state); } - return authUrl; + return parameters.appendTo(getAuthorizationBaseUrl()); } @Override diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index aab9ac513..78358d2e3 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -69,10 +69,6 @@ public String getScope() { return scope; } - public boolean hasScope() { - return scope != null; - } - public String getState() { return state; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java index d328e2242..2cf8d236a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConstants.java @@ -35,6 +35,8 @@ public interface OAuthConstants { String STATE = "state"; String USERNAME = "username"; String PASSWORD = "password"; + String RESPONSE_TYPE = "response_type"; + String RESPONSE_TYPE_CODE = "code"; //not OAuth specific String USER_AGENT_HEADER_NAME = "User-Agent"; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/ParameterList.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/ParameterList.java index c04bca9cd..39d806652 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/ParameterList.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/ParameterList.java @@ -26,8 +26,10 @@ public ParameterList() { public ParameterList(Map map) { this(); - for (Map.Entry entry : map.entrySet()) { - params.add(new Parameter(entry.getKey(), entry.getValue())); + if (map != null && !map.isEmpty()) { + for (Map.Entry entry : map.entrySet()) { + params.add(new Parameter(entry.getKey(), entry.getValue())); + } } } @@ -41,9 +43,9 @@ public String appendTo(String url) { if (queryString.equals(EMPTY_STRING)) { return url; } else { - url += url.indexOf(QUERY_STRING_SEPARATOR) == -1 ? QUERY_STRING_SEPARATOR : PARAM_SEPARATOR; - url += queryString; - return url; + return url + + (url.indexOf(QUERY_STRING_SEPARATOR) == -1 ? QUERY_STRING_SEPARATOR : PARAM_SEPARATOR) + + queryString; } } @@ -58,9 +60,9 @@ public String asFormUrlEncodedString() { final StringBuilder builder = new StringBuilder(); for (Parameter p : params) { - builder.append('&').append(p.asUrlEncodedPair()); + builder.append(PARAM_SEPARATOR).append(p.asUrlEncodedPair()); } - return builder.toString().substring(1); + return builder.substring(1); } public void addAll(ParameterList other) { @@ -68,7 +70,7 @@ public void addAll(ParameterList other) { } public void addQuerystring(String queryString) { - if (queryString != null && queryString.length() > 0) { + if (queryString != null && !queryString.isEmpty()) { for (String param : queryString.split(PARAM_SEPARATOR)) { final String[] pair = param.split(PAIR_SEPARATOR); final String key = OAuthEncoder.decode(pair[0]); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index c9c99a03f..f2516d8c2 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -67,8 +67,9 @@ private void addOAuthParams(AbstractRequest request, String tokenSecret) { request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, config.getApiKey()); request.addOAuthParameter(OAuthConstants.SIGN_METHOD, api.getSignatureService().getSignatureMethod()); request.addOAuthParameter(OAuthConstants.VERSION, getVersion()); - if (config.hasScope()) { - request.addOAuthParameter(OAuthConstants.SCOPE, config.getScope()); + final String scope = config.getScope(); + if (scope != null) { + request.addOAuthParameter(OAuthConstants.SCOPE, scope); } request.addOAuthParameter(OAuthConstants.SIGNATURE, getSignature(request, tokenSecret)); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 275a825b5..ef5494eac 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -84,8 +84,9 @@ protected T createAccessTokenRequest(String code, T request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); request.addParameter(OAuthConstants.CODE, code); request.addParameter(OAuthConstants.REDIRECT_URI, config.getCallback()); - if (config.hasScope()) { - request.addParameter(OAuthConstants.SCOPE, config.getScope()); + final String scope = config.getScope(); + if (scope != null) { + request.addParameter(OAuthConstants.SCOPE, scope); } request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE); return request; @@ -164,19 +165,18 @@ protected T createAccessTokenPasswordGrantRequest(St request.addParameter(OAuthConstants.USERNAME, username); request.addParameter(OAuthConstants.PASSWORD, password); - if (config.hasScope()) { - request.addParameter(OAuthConstants.SCOPE, config.getScope()); + final String scope = config.getScope(); + if (scope != null) { + request.addParameter(OAuthConstants.SCOPE, scope); } request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.PASSWORD); - request.addHeader(OAuthConstants.HEADER, OAuthConstants.BASIC + " " - + Base64Encoder.getInstance().encode( - String.format("%s:%s", config.getApiKey(), config.getApiSecret()).getBytes( - Charset.forName("UTF-8") - ) - ) - ); + request.addHeader(OAuthConstants.HEADER, + OAuthConstants.BASIC + ' ' + + Base64Encoder.getInstance() + .encode(String.format("%s:%s", config.getApiKey(), config.getApiSecret()) + .getBytes(Charset.forName("UTF-8")))); return request; } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java index 9bf8f386f..57f7d62e2 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java @@ -90,7 +90,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { + protected String getAuthorizationBaseUrl() { throw new UnsupportedOperationException("Not supported yet."); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java index 5d7391fb3..7b23203ac 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java @@ -11,7 +11,7 @@ public String getAccessTokenEndpoint() { } @Override - public String getAuthorizationUrl(OAuthConfig config) { + protected String getAuthorizationBaseUrl() { return "http://localhost:8080/authorize"; } From a6e1cb9d3dd5c63a71e61a6e16bfad865a3172f3 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 17:58:25 +0300 Subject: [PATCH 058/250] update Facebook to v2.6 --- changelog | 1 + .../main/java/com/github/scribejava/apis/FacebookApi.java | 6 +++--- .../scribejava/apis/examples/FacebookAsyncExample.java | 2 +- .../github/scribejava/apis/examples/FacebookExample.java | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/changelog b/changelog index 117278137..39853250c 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,7 @@ * add Genius.com API authentication (OAuth2) * fix GitHub API * standardize authorization url generation for OAuth2 + * update Facebook to v2.6 [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index ffccdd73d..9bf5abfc0 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -4,7 +4,7 @@ import com.github.scribejava.core.model.Verb; /** - * Facebook v2.5 API + * Facebook v2.6 API */ public class FacebookApi extends DefaultApi20 { @@ -27,7 +27,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://graph.facebook.com/v2.5/oauth/access_token"; + return "https://graph.facebook.com/v2.6/oauth/access_token"; } @Override @@ -37,6 +37,6 @@ public String getRefreshTokenEndpoint() { @Override protected String getAuthorizationBaseUrl() { - return "https://www.facebook.com/v2.5/dialog/oauth"; + return "https://www.facebook.com/v2.6/dialog/oauth"; } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java index 3768394a7..65bee0cf9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java @@ -17,7 +17,7 @@ public abstract class FacebookAsyncExample { private static final String NETWORK_NAME = "Facebook"; - private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.5/me"; + private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; public static void main(String... args) throws InterruptedException, ExecutionException { // Replace these with your client id and secret diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 28740b43a..463729c17 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -13,7 +13,7 @@ public abstract class FacebookExample { private static final String NETWORK_NAME = "Facebook"; - private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.5/me"; + private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; public static void main(String... args) { // Replace these with your client id and secret From b7001c219a75da37efc422d6909ca1707d945366 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 18:32:34 +0300 Subject: [PATCH 059/250] cleanup: drop old APIs without exmaples --- changelog | 1 + .../scribejava/apis/ConstantContactApi.java | 36 --------- .../scribejava/apis/ConstantContactApi2.java | 36 --------- .../github/scribejava/apis/DropBoxApi.java | 34 -------- .../github/scribejava/apis/EvernoteApi.java | 81 ------------------- .../github/scribejava/apis/GetGlueApi.java | 38 --------- .../com/github/scribejava/apis/KaixinApi.java | 48 ----------- .../github/scribejava/apis/MendeleyApi.java | 49 ----------- .../com/github/scribejava/apis/MisoApi.java | 38 --------- .../github/scribejava/apis/NetProspexApi.java | 37 --------- .../com/github/scribejava/apis/PlurkApi.java | 58 ------------- .../com/github/scribejava/apis/QWeiboApi.java | 37 --------- .../com/github/scribejava/apis/SapoApi.java | 48 ----------- .../github/scribejava/apis/SimpleGeoApi.java | 35 -------- .../github/scribejava/apis/UbuntuOneApi.java | 43 ---------- .../com/github/scribejava/apis/VimeoApi.java | 35 -------- .../com/github/scribejava/apis/YammerApi.java | 42 ---------- .../ConstantContactTokenExtractor.java | 41 ---------- 18 files changed, 1 insertion(+), 736 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/DropBoxApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/EvernoteApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/GetGlueApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/MendeleyApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/MisoApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/NetProspexApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/PlurkApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/QWeiboApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/SapoApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/SimpleGeoApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/UbuntuOneApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/VimeoApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/YammerApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/constantcontact/ConstantContactTokenExtractor.java diff --git a/changelog b/changelog index 39853250c..b2d8c8a00 100644 --- a/changelog +++ b/changelog @@ -6,6 +6,7 @@ * fix GitHub API * standardize authorization url generation for OAuth2 * update Facebook to v2.6 + * cleanup: drop old APIs without Examples [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi.java deleted file mode 100644 index a9f0e196c..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class ConstantContactApi extends DefaultApi10a { - - private static final String AUTHORIZE_URL - = "https://oauth.constantcontact.com/ws/oauth/confirm_access?oauth_token=%s"; - - protected ConstantContactApi() { - } - - private static class InstanceHolder { - private static final ConstantContactApi INSTANCE = new ConstantContactApi(); - } - - public static ConstantContactApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return "https://oauth.constantcontact.com/ws/oauth/access_token"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - - @Override - public String getRequestTokenEndpoint() { - return "https://oauth.constantcontact.com/ws/oauth/request_token"; - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java deleted file mode 100644 index 94cbde0c8..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ConstantContactApi2.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.apis.constantcontact.ConstantContactTokenExtractor; - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; - -public class ConstantContactApi2 extends DefaultApi20 { - - protected ConstantContactApi2() { - } - - private static class InstanceHolder { - private static final ConstantContactApi2 INSTANCE = new ConstantContactApi2(); - } - - public static ConstantContactApi2 instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return "https://oauth2.constantcontact.com/oauth2/oauth/token"; - } - - @Override - protected String getAuthorizationBaseUrl() { - return "https://oauth2.constantcontact.com/oauth2/oauth/siteowner/authorize"; - } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return ConstantContactTokenExtractor.instance(); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/DropBoxApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/DropBoxApi.java deleted file mode 100644 index 99ae6f874..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/DropBoxApi.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class DropBoxApi extends DefaultApi10a { - - protected DropBoxApi() { - } - - private static class InstanceHolder { - private static final DropBoxApi INSTANCE = new DropBoxApi(); - } - - public static DropBoxApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return "https://api.dropbox.com/1/oauth/access_token"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return "https://www.dropbox.com/1/oauth/authorize?oauth_token=" + requestToken.getToken(); - } - - @Override - public String getRequestTokenEndpoint() { - return "https://api.dropbox.com/1/oauth/request_token"; - } - -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/EvernoteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/EvernoteApi.java deleted file mode 100644 index 0bbd2ac62..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/EvernoteApi.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class EvernoteApi extends DefaultApi10a { - - protected EvernoteApi() { - } - - private static class InstanceHolder { - private static final EvernoteApi INSTANCE = new EvernoteApi(); - } - - public static EvernoteApi instance() { - return InstanceHolder.INSTANCE; - } - - protected String serviceUrl() { - return "https://www.evernote.com"; - } - - @Override - public String getRequestTokenEndpoint() { - return serviceUrl() + "/oauth"; - } - - @Override - public String getAccessTokenEndpoint() { - return serviceUrl() + "/oauth"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(serviceUrl() + "/OAuth.action?oauth_token=%s", requestToken.getToken()); - } - - /** - * Sandbox endpoint - */ - public static class Sandbox extends EvernoteApi { - - private Sandbox() { - } - - private static class InstanceHolder { - private static final Sandbox INSTANCE = new Sandbox(); - } - - public static Sandbox instance() { - return InstanceHolder.INSTANCE; - } - - @Override - protected String serviceUrl() { - return "https://sandbox.evernote.com"; - } - } - - /** - * Yinxiang Biji endpoint - */ - public static class Yinxiang extends EvernoteApi { - - private Yinxiang() { - } - - private static class InstanceHolder { - private static final Yinxiang INSTANCE = new Yinxiang(); - } - - public static Yinxiang instance() { - return InstanceHolder.INSTANCE; - } - - @Override - protected String serviceUrl() { - return "https://app.yinxiang.com"; - } - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GetGlueApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GetGlueApi.java deleted file mode 100644 index 758214390..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GetGlueApi.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class GetGlueApi extends DefaultApi10a { - - private static final String AUTHORIZE_URL = "http://getglue.com/oauth/authorize?oauth_token=%s"; - private static final String REQUEST_TOKEN_RESOURCE = "https://api.getglue.com/oauth/request_token"; - private static final String ACCESS_TOKEN_RESOURCE = "https://api.getglue.com/oauth/access_token"; - - protected GetGlueApi() { - } - - private static class InstanceHolder { - private static final GetGlueApi INSTANCE = new GetGlueApi(); - } - - public static GetGlueApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi.java deleted file mode 100644 index e5698bdb6..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Verb; - -public class KaixinApi extends DefaultApi10a { - - private static final String REQUEST_TOKEN_URL = "http://api.kaixin001.com/oauth/request_token"; - private static final String ACCESS_TOKEN_URL = "http://api.kaixin001.com/oauth/access_token"; - private static final String AUTHORIZE_URL = "http://api.kaixin001.com/oauth/authorize?oauth_token=%s"; - - protected KaixinApi() { - } - - private static class InstanceHolder { - private static final KaixinApi INSTANCE = new KaixinApi(); - } - - public static KaixinApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - - @Override - public Verb getRequestTokenVerb() { - return Verb.GET; - } - - @Override - public Verb getAccessTokenVerb() { - return Verb.GET; - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MendeleyApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MendeleyApi.java deleted file mode 100644 index 9fab6e2ff..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MendeleyApi.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Verb; - -/** - * @see http://apidocs.mendeley.com/home/authentication - */ -public class MendeleyApi extends DefaultApi10a { - - private static final String AUTHORIZATION_URL = "http://api.mendeley.com/oauth/authorize?oauth_token=%s"; - - protected MendeleyApi() { - } - - private static class InstanceHolder { - private static final MendeleyApi INSTANCE = new MendeleyApi(); - } - - public static MendeleyApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return "http://api.mendeley.com/oauth/request_token/"; - } - - @Override - public String getAccessTokenEndpoint() { - return "http://api.mendeley.com/oauth/access_token/"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - @Override - public Verb getAccessTokenVerb() { - return Verb.GET; - } - - @Override - public Verb getRequestTokenVerb() { - return Verb.GET; - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisoApi.java deleted file mode 100644 index 4f0bb3bea..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisoApi.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class MisoApi extends DefaultApi10a { - - private static final String AUTHORIZE_URL = "http://gomiso.com/oauth/authorize?oauth_token=%s"; - private static final String REQUEST_TOKEN_RESOURCE = "http://gomiso.com/oauth/request_token"; - private static final String ACCESS_TOKEN_RESOURCE = "http://gomiso.com/oauth/access_token"; - - protected MisoApi() { - } - - private static class InstanceHolder { - private static final MisoApi INSTANCE = new MisoApi(); - } - - public static MisoApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/NetProspexApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/NetProspexApi.java deleted file mode 100644 index aa08abc4a..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/NetProspexApi.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class NetProspexApi extends DefaultApi10a { - - private static final String REQUEST_TOKEN_URL = "https://api.netprospex.com/1.0/oauth/request-token"; - private static final String ACCESS_TOKEN_URL = "https://api.netprospex.com/1.0/oauth/access-token"; - private static final String AUTHORIZE_URL = "https://api.netprospex.com/1.0/oauth/authorize?oauth_token=%s"; - - protected NetProspexApi() { - } - - private static class InstanceHolder { - private static final NetProspexApi INSTANCE = new NetProspexApi(); - } - - public static NetProspexApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PlurkApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PlurkApi.java deleted file mode 100644 index f2b9c5ed2..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PlurkApi.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class PlurkApi extends DefaultApi10a { - - private static final String REQUEST_TOKEN_URL = "http://www.plurk.com/OAuth/request_token"; - private static final String AUTHORIZATION_URL = "http://www.plurk.com/OAuth/authorize?oauth_token=%s"; - private static final String ACCESS_TOKEN_URL = "http://www.plurk.com/OAuth/access_token"; - - protected PlurkApi() { - } - - private static class InstanceHolder { - private static final PlurkApi INSTANCE = new PlurkApi(); - } - - public static PlurkApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_URL; - } - - public static class Mobile extends PlurkApi { - - private static final String AUTHORIZATION_URL = "http://www.plurk.com/m/authorize?oauth_token=%s"; - - private Mobile() { - } - - private static class InstanceHolder { - private static final Mobile INSTANCE = new Mobile(); - } - - public static Mobile instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/QWeiboApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/QWeiboApi.java deleted file mode 100644 index ed4bfdb6b..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/QWeiboApi.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class QWeiboApi extends DefaultApi10a { - - private static final String REQUEST_TOKEN_URL = "https://open.t.qq.com/cgi-bin/request_token"; - private static final String ACCESS_TOKEN_URL = "https://open.t.qq.com/cgi-bin/access_token"; - private static final String AUTHORIZE_URL = "https://open.t.qq.com/cgi-bin/authorize?oauth_token=%s"; - - protected QWeiboApi() { - } - - private static class InstanceHolder { - private static final QWeiboApi INSTANCE = new QWeiboApi(); - } - - public static QWeiboApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SapoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SapoApi.java deleted file mode 100644 index 524ddfcf7..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SapoApi.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.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"; - - protected SapoApi() { - } - - private static class InstanceHolder { - private static final SapoApi INSTANCE = new SapoApi(); - } - - public static SapoApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_URL; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_URL; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - - @Override - public Verb getRequestTokenVerb() { - return Verb.GET; - } - - @Override - public Verb getAccessTokenVerb() { - return Verb.GET; - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SimpleGeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SimpleGeoApi.java deleted file mode 100644 index c8264b19b..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SimpleGeoApi.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class SimpleGeoApi extends DefaultApi10a { - - private static final String ENDPOINT = "these are not used since SimpleGeo uses 2 legged OAuth"; - - protected SimpleGeoApi() { - } - - private static class InstanceHolder { - private static final SimpleGeoApi INSTANCE = new SimpleGeoApi(); - } - - public static SimpleGeoApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return ENDPOINT; - } - - @Override - public String getAccessTokenEndpoint() { - return ENDPOINT; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return ENDPOINT; - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/UbuntuOneApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/UbuntuOneApi.java deleted file mode 100644 index 867b7556a..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/UbuntuOneApi.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.services.PlaintextSignatureService; -import com.github.scribejava.core.services.SignatureService; - -public class UbuntuOneApi extends DefaultApi10a { - - private static final String AUTHORIZATION_URL = "https://one.ubuntu.com/oauth/authorize/?oauth_token=%s"; - - protected UbuntuOneApi() { - } - - private static class InstanceHolder { - private static final UbuntuOneApi INSTANCE = new UbuntuOneApi(); - } - - public static UbuntuOneApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return "https://one.ubuntu.com/oauth/access/"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - @Override - public String getRequestTokenEndpoint() { - return "https://one.ubuntu.com/oauth/request/"; - } - - @Override - public SignatureService getSignatureService() { - return new PlaintextSignatureService(); - } - -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/VimeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/VimeoApi.java deleted file mode 100644 index 63ecb844d..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/VimeoApi.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class VimeoApi extends DefaultApi10a { - - private static final String AUTHORIZATION_URL = "http://vimeo.com/oauth/authorize?oauth_token=%s"; - - protected VimeoApi() { - } - - private static class InstanceHolder { - private static final VimeoApi INSTANCE = new VimeoApi(); - } - - public static VimeoApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getAccessTokenEndpoint() { - return "http://vimeo.com/oauth/access_token"; - } - - @Override - public String getRequestTokenEndpoint() { - return "http://vimeo.com/oauth/request_token"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/YammerApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/YammerApi.java deleted file mode 100644 index 269e61395..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/YammerApi.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.services.PlaintextSignatureService; -import com.github.scribejava.core.services.SignatureService; - -public class YammerApi extends DefaultApi10a { - - private static final String AUTHORIZATION_URL = "https://www.yammer.com/oauth/authorize?oauth_token=%s"; - - protected YammerApi() { - } - - private static class InstanceHolder { - private static final YammerApi INSTANCE = new YammerApi(); - } - - public static YammerApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return "https://www.yammer.com/oauth/request_token"; - } - - @Override - public String getAccessTokenEndpoint() { - return "https://www.yammer.com/oauth/access_token"; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - @Override - public SignatureService getSignatureService() { - return new PlaintextSignatureService(); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/constantcontact/ConstantContactTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/constantcontact/ConstantContactTokenExtractor.java deleted file mode 100644 index f385eba1d..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/constantcontact/ConstantContactTokenExtractor.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.github.scribejava.apis.constantcontact; - -import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.utils.OAuthEncoder; -import com.github.scribejava.core.utils.Preconditions; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class ConstantContactTokenExtractor implements TokenExtractor { - - private static final String REGEXP = "\"access_token\"\\s*:\\s*\"([^&\"]+)\""; - - protected ConstantContactTokenExtractor() { - } - - private static class InstanceHolder { - - private static final ConstantContactTokenExtractor INSTANCE = new ConstantContactTokenExtractor(); - } - - public static ConstantContactTokenExtractor instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public OAuth2AccessToken extract(String response) { - Preconditions.checkEmptyString(response, - "Response body is incorrect. Can't extract a token from an empty string"); - - final Matcher matcher = Pattern.compile(REGEXP).matcher(response); - if (matcher.find()) { - final String token = OAuthEncoder.decode(matcher.group(1)); - return new OAuth2AccessToken(token, response); - } else { - throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" - + response + "'", null); - } - } -} From 1e21fd1e6ccca1f0cf4af7177bacc223a31d9eec Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 18:51:23 +0300 Subject: [PATCH 060/250] remove old APIs with outdated domains --- changelog | 2 +- .../github/scribejava/apis/LoveFilmApi.java | 37 ---------- .../apis/examples/LoveFilmExample.java | 70 ------------------- 3 files changed, 1 insertion(+), 108 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/LoveFilmApi.java delete mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java diff --git a/changelog b/changelog index b2d8c8a00..7a7c8540b 100644 --- a/changelog +++ b/changelog @@ -6,7 +6,7 @@ * fix GitHub API * standardize authorization url generation for OAuth2 * update Facebook to v2.6 - * cleanup: drop old APIs without Examples + * cleanup: drop old APIs without Examples and with outdated domains [2.5.3] * fix - do not send two Content-Type header in async requests diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LoveFilmApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LoveFilmApi.java deleted file mode 100644 index 3c43ac309..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LoveFilmApi.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.scribejava.apis; - -import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.OAuth1RequestToken; - -public class LoveFilmApi extends DefaultApi10a { - - private static final String REQUEST_TOKEN_URL = "http://openapi.lovefilm.com/oauth/request_token"; - private static final String ACCESS_TOKEN_URL = "http://openapi.lovefilm.com/oauth/access_token"; - private static final String AUTHORIZE_URL = "https://www.lovefilm.com/activate?oauth_token=%s"; - - protected LoveFilmApi() { - } - - private static class InstanceHolder { - private static final LoveFilmApi INSTANCE = new LoveFilmApi(); - } - - public static LoveFilmApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public String getRequestTokenEndpoint() { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } -} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java deleted file mode 100644 index 161278ad5..000000000 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LoveFilmExample.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.github.scribejava.apis.examples; - -import java.util.Scanner; -import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.apis.LoveFilmApi; -import com.github.scribejava.core.model.OAuth1AccessToken; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth10aService; - -public abstract class LoveFilmExample { - - private static final String NETWORK_NAME = "LoveFilm"; - private static final String PROTECTED_RESOURCE_URL = "https://api.lovefilm.com/users"; - - public static void main(String... args) { - // Replace these with your own api key and secret - final String apiKey = "your_key"; - final String apiSecret = "your_secret"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) - .apiSecret(apiSecret) - .build(LoveFilmApi.instance()); - final Scanner in = new Scanner(System.in); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); - System.out.println(); - - // Grab a request token. - System.out.println("Fetching request token."); - final OAuth1RequestToken requestToken = service.getRequestToken(); - System.out.println("Got it ... "); - System.out.println(requestToken.getToken()); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String oauthVerifier = in.nextLine(); - System.out.println(); - - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); - service.signRequest(accessToken, request); - final Response response = request.send(); - System.out.println("Got it! Lets see what we found..."); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - - System.out.println(); - System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); - - } -} From b279cf6d0bdd2c7d66be03cb220484650c01c696 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 19:07:37 +0300 Subject: [PATCH 061/250] update list of APIs in the Readme (on the main github page) --- README.md | 64 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 8f2bb934a..59121b5ad 100644 --- a/README.md +++ b/README.md @@ -25,35 +25,41 @@ You can use ning async http client out-of-box, just use ServiceBuilderAsync ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box -* Google - -* Facebook - -* Yahoo - -* LinkedIn - -* Twitter - -* Foursquare - -* Evernote - -* Vimeo - -* Windows Live - -* Odnoklassniki - -* Mail.ru - -* LinkedIn2.0 - -* Google2.0 - -* GitHub - -* and many more! check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) +* AWeber (http://www.aweber.com/) +* Digg (http://digg.com/) +* Доктор на работе (http://www.doktornarabote.ru/) +* Facebook (https://www.facebook.com/) +* Flickr (https://www.flickr.com/) +* Foursquare (https://foursquare.com/) +* Freelancer (https://www.freelancer.com/) +* Genius (http://genius.com/) +* GitHub (https://github.com/) +* Google (https://www.google.ru/) +* HeadHunter ХэдХантер (https://hh.ru/) +* Imgur (http://imgur.com/) +* Kaixin 开心网 (http://www.kaixin001.com/) +* LinkedIn (https://www.linkedin.com/) +* Microsoft Live (https://login.live.com/) +* Mail.Ru (https://mail.ru/) +* Meetup (http://www.meetup.com/) +* NetEase (http://www.163.com/) +* Odnoklassniki Одноклассники (http://ok.ru/) +* Pinterest (https://www.pinterest.com/) +* 500px (https://500px.com/) +* Renren (http://renren.com/) +* Sina (http://www.sina.com.cn/ http://weibo.com/login.php) +* Skyrock (http://skyrock.com/) +* sohu 搜狐 (http://www.sohu.com/) +* StackExchange (http://stackexchange.com/) +* Trello (https://trello.com/) +* Tumblr (https://www.tumblr.com/) +* TUT.BY (http://www.tut.by/) +* Twitter (https://twitter.com/) +* Viadeo (http://viadeo.com/) +* VK ВКонтакте (http://vk.com/) +* XING (https://www.xing.com/) +* Yahoo (https://www.yahoo.com/) +* check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) ### Small and modular From abc4b5bc554fc8ede2fd2dfcc8441d5cbeb78d65 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 19:29:55 +0300 Subject: [PATCH 062/250] send client credentials in grant_type=password optionally (in case they were issued and are not nulls) --- .../scribejava/core/oauth/OAuth20Service.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index ef5494eac..3813d28ba 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -172,11 +172,14 @@ protected T createAccessTokenPasswordGrantRequest(St request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.PASSWORD); - request.addHeader(OAuthConstants.HEADER, - OAuthConstants.BASIC + ' ' - + Base64Encoder.getInstance() - .encode(String.format("%s:%s", config.getApiKey(), config.getApiSecret()) - .getBytes(Charset.forName("UTF-8")))); + final String apiKey = config.getApiKey(); + final String apiSecret = config.getApiSecret(); + if (apiKey != null && apiSecret != null) { + request.addHeader(OAuthConstants.HEADER, + OAuthConstants.BASIC + ' ' + + Base64Encoder.getInstance() + .encode(String.format("%s:%s", apiKey, apiSecret).getBytes(Charset.forName("UTF-8")))); + } return request; } From ceb06d1491b63b2d150f06e613e26d4960b62d5c Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 19:41:48 +0300 Subject: [PATCH 063/250] prepare 2.6.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 59121b5ad..031c4dd53 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.5.3 + 2.6.0 ``` @@ -93,7 +93,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.5.3 + 2.6.0 ``` diff --git a/changelog b/changelog index 7a7c8540b..0540b4dd9 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.6.0] * simplify async/sync usages * add optional "User-Agent" config option to use while making http calls * refactor usage of grant_type [authorization_code|refresh_token|password|etc] From 3ca5c9f2df3c89d8eaefb8d0fc22b147f8eaec98 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 19:42:41 +0300 Subject: [PATCH 064/250] [maven-release-plugin] prepare release scribejava-2.6.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 83388dab5..c1d553280 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.5.4-SNAPSHOT + 2.6.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 958bf5563..a9da5b88e 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.4-SNAPSHOT + 2.6.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 50f5e9fc0..c9a743078 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.5.4-SNAPSHOT + 2.6.0 ../pom.xml From 9a83b6cfeb7f2245a10ac579563c73c2c4024f7d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 23 May 2016 19:42:46 +0300 Subject: [PATCH 065/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index c1d553280..a5a66b89f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.6.0 + 2.6.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index a9da5b88e..6a8f03dfc 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.6.0 + 2.6.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index c9a743078..b4a2894c9 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.6.0 + 2.6.1-SNAPSHOT ../pom.xml From 010b37a4e0f3f3b8e8207a110b879943e6096694 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 25 May 2016 16:55:18 +0300 Subject: [PATCH 066/250] make http async client implementation be more pluggable --- changelog | 3 + .../ning/OAuthAsyncCompletionHandler.java | 52 ++++++++++ .../core/model/AbstractRequest.java | 2 +- .../core/model/OAuthRequestAsync.java | 96 +------------------ .../core/oauth/OAuth10aService.java | 13 +-- .../scribejava/core/oauth/OAuth20Service.java | 32 ++----- .../scribejava/core/oauth/OAuthService.java | 43 ++++++++- .../core/oauth/OAuth20ServiceUnit.java | 3 +- 8 files changed, 110 insertions(+), 134 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java diff --git a/changelog b/changelog index 0540b4dd9..6d1d5fea4 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * make http async client implementation be more pluggable + [2.6.0] * simplify async/sync usages * add optional "User-Agent" config option to use while making http calls diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java b/scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java new file mode 100644 index 000000000..adbcf10bb --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java @@ -0,0 +1,52 @@ +package com.github.scribejava.core.async.ning; + +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.ning.http.client.AsyncCompletionHandler; +import com.ning.http.client.FluentCaseInsensitiveStringsMap; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { + + private final OAuthAsyncRequestCallback callback; + private final OAuthRequestAsync.ResponseConverter converter; + + public OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + this.callback = callback; + this.converter = converter; + } + + @Override + public T onCompleted(com.ning.http.client.Response ningResponse) throws IOException { + final FluentCaseInsensitiveStringsMap map = ningResponse.getHeaders(); + final Map headersMap = new HashMap<>(); + for (FluentCaseInsensitiveStringsMap.Entry> header : map) { + final StringBuilder value = new StringBuilder(); + for (String str : header.getValue()) { + value.append(str); + } + headersMap.put(header.getKey(), value.toString()); + } + final Response response = new Response(ningResponse.getStatusCode(), ningResponse.getStatusText(), headersMap, + ningResponse.getResponseBody(), ningResponse.getResponseBodyAsStream()); + + @SuppressWarnings("unchecked") + final T t = converter == null ? (T) response : converter.convert(response); + if (callback != null) { + callback.onCompleted(t); + } + return t; + } + + @Override + public void onThrowable(Throwable t) { + if (callback != null) { + callback.onThrowable(t); + } + } +}; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index c48f83c74..4db6ccec7 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -15,8 +15,8 @@ public abstract class AbstractRequest { public static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded"; + public static final String CONTENT_TYPE = "Content-Type"; protected static final String CONTENT_LENGTH = "Content-Length"; - protected static final String CONTENT_TYPE = "Content-Type"; private static final String OAUTH_PREFIX = "oauth_"; private final String url; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index fc422e8e6..1a92f0699 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -2,46 +2,17 @@ import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.AsyncHttpClient; -import com.ning.http.client.FluentCaseInsensitiveStringsMap; -import com.ning.http.client.ProxyServer; import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.concurrent.Future; public class OAuthRequestAsync extends AbstractRequest { - public static final ResponseConverter RESPONSE_CONVERTER = new ResponseConverter() { - @Override - public Response convert(com.ning.http.client.Response response) throws IOException { - final FluentCaseInsensitiveStringsMap map = response.getHeaders(); - final Map headersMap = new HashMap<>(); - for (FluentCaseInsensitiveStringsMap.Entry> header : map) { - final StringBuilder value = new StringBuilder(); - for (String str : header.getValue()) { - value.append(str); - } - headersMap.put(header.getKey(), value.toString()); - } - return new Response(response.getStatusCode(), response.getStatusText(), headersMap, - response.getResponseBody(), response.getResponseBodyAsStream()); - } - }; - public OAuthRequestAsync(Verb verb, String url, OAuthService service) { super(verb, url, service); } public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseConverter converter) { - return sendAsync(callback, converter, null); - } - - public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseConverter converter, - ProxyServer proxyServer) { final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use async operations, only sync"); @@ -51,76 +22,15 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { config.log("Cannot use async operations, only sync"); } - final String completeUrl = getCompleteUrl(); - final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; - final AsyncHttpClient asyncHttpClient = service.getAsyncHttpClient(); - final Map headers = getHeaders(); - switch (getVerb()) { - case GET: - boundRequestBuilder = asyncHttpClient.prepareGet(completeUrl); - break; - case POST: - AsyncHttpClient.BoundRequestBuilder requestBuilder = asyncHttpClient.preparePost(completeUrl); - if (!headers.containsKey(CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = requestBuilder.setBody(getBodyContents()); - break; - default: - throw new IllegalArgumentException("message build error: unknown verb type"); - } - - for (Map.Entry header : headers.entrySet()) { - boundRequestBuilder.addHeader(header.getKey(), header.getValue()); - } - final String userAgent = config.getUserAgent(); - if (userAgent != null) { - boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); - } - - if (proxyServer != null) { - boundRequestBuilder.setProxyServer(proxyServer); - } - return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); + return service.executeAsync(getHeaders(), getVerb(), getCompleteUrl(), getBodyContents(), callback, converter); } - private static class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { - - private final OAuthAsyncRequestCallback callback; - private final ResponseConverter converter; - - OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, ResponseConverter converter) { - this.callback = callback; - this.converter = converter; - } - - @Override - public T onCompleted(com.ning.http.client.Response response) throws IOException { - final T t = converter.convert(response); - if (callback != null) { - callback.onCompleted(t); - } - return t; - } - - @Override - public void onThrowable(Throwable t) { - if (callback != null) { - callback.onThrowable(t); - } - } - }; - public Future sendAsync(OAuthAsyncRequestCallback callback) { - return sendAsync(callback, RESPONSE_CONVERTER, null); - } - - public Future sendAsync(OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { - return sendAsync(callback, RESPONSE_CONVERTER, proxyServer); + return sendAsync(callback, null); } public interface ResponseConverter { - T convert(com.ning.http.client.Response response) throws IOException; + T convert(Response response) throws IOException; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index f2516d8c2..a93c4c3ec 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -1,6 +1,5 @@ package com.github.scribejava.core.oauth; -import com.ning.http.client.ProxyServer; import java.io.IOException; import java.util.Map; import java.util.concurrent.Future; @@ -96,11 +95,6 @@ public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, S */ public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, String oauthVerifier, OAuthAsyncRequestCallback callback) { - return getAccessTokenAsync(requestToken, oauthVerifier, callback, null); - } - - public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, String oauthVerifier, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthConfig config = getConfig(); config.log("async obtaining access token from " + api.getAccessTokenEndpoint()); final OAuthRequestAsync request @@ -108,11 +102,10 @@ public final Future getAccessTokenAsync(OAuth1RequestToken re prepareAccessTokenRequest(request, requestToken, oauthVerifier); return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override - public OAuth1AccessToken convert(com.ning.http.client.Response response) throws IOException { - return getApi().getAccessTokenExtractor() - .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); + public OAuth1AccessToken convert(Response response) throws IOException { + return getApi().getAccessTokenExtractor().extract(response.getBody()); } - }, proxyServer); + }); } protected void prepareAccessTokenRequest(AbstractRequest request, OAuth1RequestToken requestToken, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 3813d28ba..b9efbf0f3 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -1,7 +1,6 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.services.Base64Encoder; -import com.ning.http.client.ProxyServer; import java.io.IOException; import java.nio.charset.Charset; import java.util.concurrent.Future; @@ -14,6 +13,7 @@ import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; import java.util.Map; public class OAuth20Service extends OAuthService { @@ -39,15 +39,14 @@ protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) { //async version, protected to facilitate mocking protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + OAuthAsyncRequestCallback callback) { return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override - public OAuth2AccessToken convert(com.ning.http.client.Response response) throws IOException { - return getApi().getAccessTokenExtractor() - .extract(OAuthRequestAsync.RESPONSE_CONVERTER.convert(response).getBody()); + public OAuth2AccessToken convert(Response response) throws IOException { + return getApi().getAccessTokenExtractor().extract(response.getBody()); } - }, proxyServer); + }); } public final OAuth2AccessToken getAccessToken(String code) { @@ -67,15 +66,10 @@ public final OAuth2AccessToken getAccessToken(String code) { */ public final Future getAccessTokenAsync(String code, OAuthAsyncRequestCallback callback) { - return getAccessTokenAsync(code, callback, null); - } - - public final Future getAccessTokenAsync(String code, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthRequestAsync request = createAccessTokenRequest(code, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendAccessTokenRequestAsync(request, callback, proxyServer); + return sendAccessTokenRequestAsync(request, callback); } protected T createAccessTokenRequest(String code, T request) { @@ -101,15 +95,10 @@ public final OAuth2AccessToken refreshAccessToken(String refreshToken) { public final Future refreshAccessTokenAsync(String refreshToken, OAuthAsyncRequestCallback callback) { - return refreshAccessTokenAsync(refreshToken, callback, null); - } - - public final Future refreshAccessTokenAsync(String refreshToken, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthRequestAsync request = createRefreshTokenRequest(refreshToken, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)); - return sendAccessTokenRequestAsync(request, callback, proxyServer); + return sendAccessTokenRequestAsync(request, callback); } protected T createRefreshTokenRequest(String refreshToken, T request) { @@ -148,15 +137,10 @@ public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String */ public final Future getAccessTokenPasswordGrantAsync(String uname, String password, OAuthAsyncRequestCallback callback) { - return getAccessTokenPasswordGrantAsync(uname, password, callback, null); - } - - public final Future getAccessTokenPasswordGrantAsync(String uname, String password, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); - return sendAccessTokenRequestAsync(request, callback, proxyServer); + return sendAccessTokenRequestAsync(request, callback); } protected T createAccessTokenPasswordGrantRequest(String username, String password, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 3b0e1870e..b1d8c8eee 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -1,11 +1,20 @@ package com.github.scribejava.core.oauth; +import com.github.scribejava.core.async.ning.OAuthAsyncCompletionHandler; import com.ning.http.client.AsyncHttpClient; import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.model.AbstractRequest; +import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.ScribeJavaConfig; +import com.github.scribejava.core.model.Verb; import com.ning.http.client.AsyncHttpClientConfig; +import java.util.Map; +import java.util.concurrent.Future; /** * The main ScribeJava object. @@ -43,10 +52,6 @@ public OAuthService(OAuthConfig config) { } } - public AsyncHttpClient getAsyncHttpClient() { - return asyncHttpClient; - } - public void closeAsyncClient() { asyncHttpClient.close(); } @@ -61,4 +66,34 @@ public OAuthConfig getConfig() { * @return OAuth version as string */ public abstract String getVersion(); + + public Future executeAsync(Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + switch (httpVerb) { + case GET: + boundRequestBuilder = asyncHttpClient.prepareGet(completeUrl); + break; + case POST: + AsyncHttpClient.BoundRequestBuilder requestBuilder = asyncHttpClient.preparePost(completeUrl); + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(bodyContents); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } + + for (Map.Entry header : headers.entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } + final String userAgent = config.getUserAgent(); + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); + } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java index 07fc9680c..4d75c5ece 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java @@ -10,7 +10,6 @@ import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Parameter; import com.google.gson.Gson; -import com.ning.http.client.ProxyServer; import java.util.HashMap; import java.util.Map; @@ -50,7 +49,7 @@ private String prepareRawResponse(T request) { @Override protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, - OAuthAsyncRequestCallback callback, ProxyServer proxyServer) { + OAuthAsyncRequestCallback callback) { final OAuth2AccessToken accessToken = new OAuth2AccessToken(TOKEN, prepareRawResponse(request)); From 34b33ecac84da4dbab8dc71593d314c3bc9cb790 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 25 May 2016 16:55:18 +0300 Subject: [PATCH 067/250] add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) --- changelog | 1 + pom.xml | 6 ++ ...ple.java => FacebookAsyncNingExample.java} | 5 +- ...mple.java => Google20AsyncAHCExample.java} | 11 +-- .../apis/examples/MailruAsyncExample.java | 3 +- .../ahc/OAuthAsyncCompletionHandler.java | 47 ++++++++++ .../core/builder/ServiceBuilder.java | 27 ++++-- .../scribejava/core/model/OAuthConfig.java | 32 ++++--- .../scribejava/core/oauth/OAuthService.java | 88 +++++++++++++++---- 9 files changed, 177 insertions(+), 43 deletions(-) rename scribejava-apis/src/test/java/com/github/scribejava/apis/examples/{FacebookAsyncExample.java => FacebookAsyncNingExample.java} (97%) rename scribejava-apis/src/test/java/com/github/scribejava/apis/examples/{Google20AsyncExample.java => Google20AsyncAHCExample.java} (94%) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java diff --git a/changelog b/changelog index 6d1d5fea4..2080cb59f 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * make http async client implementation be more pluggable + * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) [2.6.0] * simplify async/sync usages diff --git a/pom.xml b/pom.xml index a5a66b89f..e72fe52e7 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,12 @@ 1.9.38 provided + + org.asynchttpclient + async-http-client + 2.0.3 + provided + diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java similarity index 97% rename from scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java rename to scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index 65bee0cf9..ae0d1d09a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -13,13 +13,14 @@ import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; -public abstract class FacebookAsyncExample { +public abstract class FacebookAsyncNingExample { private static final String NETWORK_NAME = "Facebook"; private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; - public static void main(String... args) throws InterruptedException, ExecutionException { + public static void main(String... args) throws InterruptedException, ExecutionException, IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java similarity index 94% rename from scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java rename to scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index f8b021041..bfd88430a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -11,26 +11,27 @@ import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; -import com.ning.http.client.AsyncHttpClientConfig; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; +import org.asynchttpclient.AsyncHttpClientConfig; +import org.asynchttpclient.DefaultAsyncHttpClientConfig; -public abstract class Google20AsyncExample { +public abstract class Google20AsyncAHCExample { private static final String NETWORK_NAME = "G+ Async"; private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; - public static void main(String... args) throws InterruptedException, ExecutionException { + public static void main(String... args) throws InterruptedException, ExecutionException, IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + final AsyncHttpClientConfig clientConfig = new DefaultAsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) - .setAllowPoolingConnections(false) .setPooledConnectionIdleTimeout(1_000) .setReadTimeout(1_000) .build(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index 26a61a456..c53e5d856 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class MailruAsyncExample { @@ -17,7 +18,7 @@ public abstract class MailruAsyncExample { private static final String PROTECTED_RESOURCE_URL = "http://www.appsmail.ru/platform/api?method=users.getInfo&secure=1"; - public static void main(String... args) throws InterruptedException, ExecutionException { + public static void main(String... args) throws InterruptedException, ExecutionException, IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java b/scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java new file mode 100644 index 000000000..b556fb6ad --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java @@ -0,0 +1,47 @@ +package com.github.scribejava.core.async.ahc; + +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import io.netty.handler.codec.http.HttpHeaders; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import org.asynchttpclient.AsyncCompletionHandler; + +public class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { + + private final OAuthAsyncRequestCallback callback; + private final OAuthRequestAsync.ResponseConverter converter; + + public OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + this.callback = callback; + this.converter = converter; + } + + @Override + public T onCompleted(org.asynchttpclient.Response ahcResponse) throws IOException { + final HttpHeaders map = ahcResponse.getHeaders(); + final Map headersMap = new HashMap<>(); + for (Map.Entry header : map) { + headersMap.put(header.getKey(), header.getValue()); + } + final Response response = new Response(ahcResponse.getStatusCode(), ahcResponse.getStatusText(), headersMap, + ahcResponse.getResponseBody(), ahcResponse.getResponseBodyAsStream()); + + @SuppressWarnings("unchecked") + final T t = converter == null ? (T) response : converter.convert(response); + if (callback != null) { + callback.onCompleted(t); + } + return t; + } + + @Override + public void onThrowable(Throwable t) { + if (callback != null) { + callback.onThrowable(t); + } + } +}; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index a6404043f..57f99cc0a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; -import com.ning.http.client.AsyncHttpClientConfig; /** * Implementation of the Builder pattern, with a fluent interface that creates a {@link OAuthService} @@ -29,8 +28,11 @@ public class ServiceBuilder { private Integer readTimeout; //async version only - private AsyncHttpClientConfig asyncHttpClientConfig; - private String asyncHttpProviderClassName; + //ning 1.9 + private com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig; + private String ningAsyncHttpProviderClassName; + //AHC 2.0 + private org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig; public ServiceBuilder() { callback = OAuthConstants.OUT_OF_BAND; @@ -133,14 +135,24 @@ public ServiceBuilder readTimeout(Integer readTimeout) { return this; } - public ServiceBuilder asyncHttpClientConfig(AsyncHttpClientConfig asyncHttpClientConfig) { + public ServiceBuilder asyncHttpClientConfig(com.ning.http.client.AsyncHttpClientConfig asyncHttpClientConfig) { Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); - this.asyncHttpClientConfig = asyncHttpClientConfig; + ningAsyncHttpClientConfig = asyncHttpClientConfig; + ahcAsyncHttpClientConfig = null; + return this; + } + + public ServiceBuilder asyncHttpClientConfig(org.asynchttpclient.AsyncHttpClientConfig asyncHttpClientConfig) { + Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); + ahcAsyncHttpClientConfig = asyncHttpClientConfig; + ningAsyncHttpClientConfig = null; + ningAsyncHttpProviderClassName = null; return this; } public ServiceBuilder asyncHttpProviderClassName(String asyncHttpProviderClassName) { - this.asyncHttpProviderClassName = asyncHttpProviderClassName; + this.ningAsyncHttpProviderClassName = asyncHttpProviderClassName; + ahcAsyncHttpClientConfig = null; return this; } @@ -161,7 +173,8 @@ public void checkPreconditions() { private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, - userAgent, connectTimeout, readTimeout, asyncHttpClientConfig, asyncHttpProviderClassName); + userAgent, connectTimeout, readTimeout, ningAsyncHttpClientConfig, ningAsyncHttpProviderClassName, + ahcAsyncHttpClientConfig); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 78358d2e3..d5bba4899 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -1,6 +1,5 @@ package com.github.scribejava.core.model; -import com.ning.http.client.AsyncHttpClientConfig; import java.io.IOException; import java.io.OutputStream; @@ -23,17 +22,21 @@ public class OAuthConfig { private final Integer connectTimeout; private final Integer readTimeout; - //async only version - private final AsyncHttpClientConfig asyncHttpClientConfig; - private final String asyncHttpProviderClassName; + //async version only + //ning 1.9 + private com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig; + private String ningAsyncHttpProviderClassName; + //AHC 2.0 + private org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, - Integer readTimeout, AsyncHttpClientConfig asyncHttpClientConfig, String asyncHttpProviderClassName) { + Integer readTimeout, com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig, + String ningAsyncHttpProviderClassName, org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; @@ -45,8 +48,9 @@ public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureTy this.userAgent = userAgent; this.connectTimeout = connectTimeout; this.readTimeout = readTimeout; - this.asyncHttpClientConfig = asyncHttpClientConfig; - this.asyncHttpProviderClassName = asyncHttpProviderClassName; + this.ningAsyncHttpClientConfig = ningAsyncHttpClientConfig; + this.ningAsyncHttpProviderClassName = ningAsyncHttpProviderClassName; + this.ahcAsyncHttpClientConfig = ahcAsyncHttpClientConfig; } public String getApiKey() { @@ -100,11 +104,15 @@ public Integer getReadTimeout() { return readTimeout; } - public AsyncHttpClientConfig getAsyncHttpClientConfig() { - return asyncHttpClientConfig; + public com.ning.http.client.AsyncHttpClientConfig getNingAsyncHttpClientConfig() { + return ningAsyncHttpClientConfig; } - public String getAsyncHttpProviderClassName() { - return asyncHttpProviderClassName; + public String getNingAsyncHttpProviderClassName() { + return ningAsyncHttpProviderClassName; + } + + public org.asynchttpclient.AsyncHttpClientConfig getAhcAsyncHttpClientConfig() { + return ahcAsyncHttpClientConfig; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index b1d8c8eee..f6922224e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -1,7 +1,5 @@ package com.github.scribejava.core.oauth; -import com.github.scribejava.core.async.ning.OAuthAsyncCompletionHandler; -import com.ning.http.client.AsyncHttpClient; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.AbstractRequest; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; @@ -12,7 +10,7 @@ import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; -import com.ning.http.client.AsyncHttpClientConfig; +import java.io.IOException; import java.util.Map; import java.util.concurrent.Future; @@ -24,20 +22,24 @@ public abstract class OAuthService { private final OAuthConfig config; - private final AsyncHttpClient asyncHttpClient; + private final com.ning.http.client.AsyncHttpClient ningAsyncHttpClient; + private final org.asynchttpclient.AsyncHttpClient ahcAsyncHttpClient; public OAuthService(OAuthConfig config) { this.config = config; final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - final AsyncHttpClientConfig asyncHttpClientConfig = config.getAsyncHttpClientConfig(); - if (asyncHttpClientConfig == null) { + final com.ning.http.client.AsyncHttpClientConfig ningConfig = config.getNingAsyncHttpClientConfig(); + final org.asynchttpclient.AsyncHttpClientConfig ahcConfig = config.getAhcAsyncHttpClientConfig(); + + if (ningConfig == null && ahcConfig == null) { if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use sync operations, only async"); } if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { config.log("Cannot use sync operations, only async"); } - asyncHttpClient = null; + ningAsyncHttpClient = null; + ahcAsyncHttpClient = null; } else { if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use async operations, only sync"); @@ -45,15 +47,26 @@ public OAuthService(OAuthConfig config) { if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { config.log("Cannot use async operations, only sync"); } - final String asyncHttpProviderClassName = config.getAsyncHttpProviderClassName(); - asyncHttpClient = asyncHttpProviderClassName == null ? new AsyncHttpClient(asyncHttpClientConfig) - : new AsyncHttpClient(asyncHttpProviderClassName, asyncHttpClientConfig); + if (ahcConfig == null) { + final String ningAsyncHttpProviderClassName = config.getNingAsyncHttpProviderClassName(); + ningAsyncHttpClient = ningAsyncHttpProviderClassName == null + ? new com.ning.http.client.AsyncHttpClient(ningConfig) + : new com.ning.http.client.AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig); + ahcAsyncHttpClient = null; + } else { + ahcAsyncHttpClient = new org.asynchttpclient.DefaultAsyncHttpClient(ahcConfig); + ningAsyncHttpClient = null; + } } } - public void closeAsyncClient() { - asyncHttpClient.close(); + public void closeAsyncClient() throws IOException { + if (ahcAsyncHttpClient == null) { + ningAsyncHttpClient.close(); + } else { + ahcAsyncHttpClient.close(); + } } public OAuthConfig getConfig() { @@ -70,13 +83,55 @@ public OAuthConfig getConfig() { public Future executeAsync(Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + if (ahcAsyncHttpClient == null) { + return ningExecuteAsync(headers, httpVerb, completeUrl, bodyContents, callback, converter); + } else { + return ahcExecuteAsync(headers, httpVerb, completeUrl, bodyContents, callback, converter); + } + } + + private Future ningExecuteAsync(Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + final com.ning.http.client.AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + switch (httpVerb) { + case GET: + boundRequestBuilder = ningAsyncHttpClient.prepareGet(completeUrl); + break; + case POST: + com.ning.http.client.AsyncHttpClient.BoundRequestBuilder requestBuilder + = ningAsyncHttpClient.preparePost(completeUrl); + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(bodyContents); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } + + for (Map.Entry header : headers.entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } + final String userAgent = config.getUserAgent(); + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + return boundRequestBuilder + .execute(new com.github.scribejava.core.async.ning.OAuthAsyncCompletionHandler<>(callback, converter)); + } + + private Future ahcExecuteAsync(Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + final org.asynchttpclient.BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: - boundRequestBuilder = asyncHttpClient.prepareGet(completeUrl); + boundRequestBuilder = ahcAsyncHttpClient.prepareGet(completeUrl); break; case POST: - AsyncHttpClient.BoundRequestBuilder requestBuilder = asyncHttpClient.preparePost(completeUrl); + org.asynchttpclient.BoundRequestBuilder requestBuilder = ahcAsyncHttpClient.preparePost(completeUrl); if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } @@ -94,6 +149,7 @@ public Future executeAsync(Map headers, Verb httpVerb, St boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); } - return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); + return boundRequestBuilder + .execute(new com.github.scribejava.core.async.ahc.OAuthAsyncCompletionHandler<>(callback, converter)); } } From d5582f28091fd6f3dd7a1ef7f04d6e06e70a8092 Mon Sep 17 00:00:00 2001 From: Arto Toppi Date: Mon, 30 May 2016 10:20:17 +0800 Subject: [PATCH 068/250] Add Misfit API Add support for Misfit API. See https://build.misfit.com for details --- .../com/github/scribejava/apis/MisfitApi.java | 56 ++++++++++++++++ .../apis/examples/MisfitExample.java | 65 +++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java new file mode 100644 index 000000000..8ef6d6224 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java @@ -0,0 +1,56 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.ParameterList; +import com.github.scribejava.core.oauth.OAuth20Service; +import java.util.Map; + +public class MisfitApi extends DefaultApi20 { + + protected MisfitApi() { + } + + private static class InstanceHolder { + private static final MisfitApi INSTANCE = new MisfitApi(); + } + + public static MisfitApi instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public String getAccessTokenEndpoint() { + return "https://api.misfitwearables.com/auth/tokens/exchange"; + } + + @Override + public String getAuthorizationUrl(OAuthConfig config, Map additionalParams) { + final ParameterList parameters = new ParameterList(additionalParams); + parameters.add(OAuthConstants.RESPONSE_TYPE, "code"); + parameters.add(OAuthConstants.CLIENT_ID, config.getApiKey()); + + final String callback = config.getCallback(); + if (callback != null) { + parameters.add(OAuthConstants.REDIRECT_URI, callback); + } + + final String scope = config.getScope(); + if (scope != null) { + parameters.add(OAuthConstants.SCOPE, scope); + } + + final String state = config.getState(); + if (state != null) { + parameters.add(OAuthConstants.STATE, state); + } + + return parameters.appendTo("https://api.misfitwearables.com/auth/dialog/authorize"); + } + + @Override + protected String getAuthorizationBaseUrl() { + throw new UnsupportedOperationException("use getAuthorizationUrl instead"); + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java new file mode 100644 index 000000000..15feb6aee --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -0,0 +1,65 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.MisfitApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; + +import java.util.Scanner; + +public abstract class MisfitExample { + + private static final String NETWORK_NAME = "Misfit"; + private static final String PROTECTED_RESOURCE_URL = "https://api.misfitwearables.com/move/resource/v1/user/me/profile"; + + public static void main(String... args) { + // Replace these with your own api key and secret + final String apiKey = "your client id"; + final String apiSecret = "your client secret"; + final OAuth20Service service = new ServiceBuilder() + .apiKey(apiKey) + .apiSecret(apiSecret) + .callback("http://example.com/callback/") + .scope("public,birthday,email,tracking,session,sleep") + .build(MisfitApi.instance()); + final Scanner in = new Scanner(System.in); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessToken(code); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + service.signRequest(accessToken, request); + final Response response = request.send(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } +} From dd300b14eeca046deabb7eb9b467084600371ed4 Mon Sep 17 00:00:00 2001 From: Arto Toppi Date: Mon, 30 May 2016 10:56:44 +0800 Subject: [PATCH 069/250] Update indenting on the MisfitExample Tabs to spaces on two lines --- .../com/github/scribejava/apis/examples/MisfitExample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index 15feb6aee..ef07f8460 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -22,8 +22,8 @@ public static void main(String... args) { final OAuth20Service service = new ServiceBuilder() .apiKey(apiKey) .apiSecret(apiSecret) - .callback("http://example.com/callback/") - .scope("public,birthday,email,tracking,session,sleep") + .callback("http://example.com/callback/") + .scope("public,birthday,email,tracking,session,sleep") .build(MisfitApi.instance()); final Scanner in = new Scanner(System.in); From d014b52252a3c6d44ea64200f72d508a935f6867 Mon Sep 17 00:00:00 2001 From: Arto Toppi Date: Tue, 31 May 2016 13:41:50 +0800 Subject: [PATCH 070/250] MisfitApi - Implement getAuthorizationBaseUrl Updates based on the code review: Removed unnecessary override for getAuthorizationUrl Implement method getAuthorizationBaseUrl --- .../com/github/scribejava/apis/MisfitApi.java | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java index 8ef6d6224..b8761373c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java @@ -25,32 +25,8 @@ public String getAccessTokenEndpoint() { return "https://api.misfitwearables.com/auth/tokens/exchange"; } - @Override - public String getAuthorizationUrl(OAuthConfig config, Map additionalParams) { - final ParameterList parameters = new ParameterList(additionalParams); - parameters.add(OAuthConstants.RESPONSE_TYPE, "code"); - parameters.add(OAuthConstants.CLIENT_ID, config.getApiKey()); - - final String callback = config.getCallback(); - if (callback != null) { - parameters.add(OAuthConstants.REDIRECT_URI, callback); - } - - final String scope = config.getScope(); - if (scope != null) { - parameters.add(OAuthConstants.SCOPE, scope); - } - - final String state = config.getState(); - if (state != null) { - parameters.add(OAuthConstants.STATE, state); - } - - return parameters.appendTo("https://api.misfitwearables.com/auth/dialog/authorize"); - } - @Override protected String getAuthorizationBaseUrl() { - throw new UnsupportedOperationException("use getAuthorizationUrl instead"); + return "https://api.misfitwearables.com/auth/dialog/authorize"; } } From 3e3e6c746db33e69cdb876a7238d675b24fc8a68 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 6 Jun 2016 15:35:43 +0300 Subject: [PATCH 071/250] add Misfit (http://misfit.com/) API --- README.md | 1 + changelog | 1 + .../main/java/com/github/scribejava/apis/MisfitApi.java | 8 ++------ .../github/scribejava/apis/examples/MisfitExample.java | 5 +++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 031c4dd53..157d9202c 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ You can use ning async http client out-of-box, just use ServiceBuilderAsync * VK ВКонтакте (http://vk.com/) * XING (https://www.xing.com/) * Yahoo (https://www.yahoo.com/) +* Misfit (http://misfit.com/) * check the [examples folder](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) ### Small and modular diff --git a/changelog b/changelog index 2080cb59f..486f5372d 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * make http async client implementation be more pluggable * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) + * add Misfit (http://misfit.com/) API [2.6.0] * simplify async/sync usages diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java index b8761373c..f6d2fc706 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java @@ -1,11 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.ParameterList; -import com.github.scribejava.core.oauth.OAuth20Service; -import java.util.Map; public class MisfitApi extends DefaultApi20 { @@ -13,6 +8,7 @@ protected MisfitApi() { } private static class InstanceHolder { + private static final MisfitApi INSTANCE = new MisfitApi(); } @@ -22,7 +18,7 @@ public static MisfitApi instance() { @Override public String getAccessTokenEndpoint() { - return "https://api.misfitwearables.com/auth/tokens/exchange"; + return "https://api.misfitwearables.com/auth/tokens/exchange"; } @Override diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index ef07f8460..edb362fd2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -12,8 +12,9 @@ public abstract class MisfitExample { - private static final String NETWORK_NAME = "Misfit"; - private static final String PROTECTED_RESOURCE_URL = "https://api.misfitwearables.com/move/resource/v1/user/me/profile"; + private static final String NETWORK_NAME = "Misfit"; + private static final String PROTECTED_RESOURCE_URL + = "https://api.misfitwearables.com/move/resource/v1/user/me/profile"; public static void main(String... args) { // Replace these with your own api key and secret From 545f2d55288c31941a01b2b8daef27dad1206b9b Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 6 Jun 2016 15:52:52 +0300 Subject: [PATCH 072/250] implement async version getting Request Token for OAuth 1.0a --- changelog | 1 + .../core/oauth/OAuth10aService.java | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/changelog b/changelog index 486f5372d..6c05721b2 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * make http async client implementation be more pluggable * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) * add Misfit (http://misfit.com/) API + * implement async version getting Request Token for OAuth 1.0a [2.6.0] * simplify async/sync usages diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index a93c4c3ec..186541c39 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -40,15 +40,12 @@ public OAuth10aService(DefaultApi10a api, OAuthConfig config) { * * @return request token */ - public OAuth1RequestToken getRequestToken() { + public final OAuth1RequestToken getRequestToken() { final OAuthConfig config = getConfig(); config.log("obtaining request token from " + api.getRequestTokenEndpoint()); final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), this); - config.log("setting oauth_callback to " + config.getCallback()); - request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback()); - addOAuthParams(request, ""); - appendSignature(request); + prepareRequestTokenRequest(request); config.log("sending request..."); final Response response = request.send(); @@ -59,6 +56,29 @@ public OAuth1RequestToken getRequestToken() { return api.getRequestTokenExtractor().extract(body); } + public final Future getRequestTokenAsync( + OAuthAsyncRequestCallback callback) { + final OAuthConfig config = getConfig(); + config.log("async obtaining request token from " + api.getRequestTokenEndpoint()); + final OAuthRequestAsync request + = new OAuthRequestAsync(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), this); + prepareRequestTokenRequest(request); + return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { + @Override + public OAuth1RequestToken convert(Response response) throws IOException { + return getApi().getRequestTokenExtractor().extract(response.getBody()); + } + }); + } + + protected void prepareRequestTokenRequest(AbstractRequest request) { + final OAuthConfig config = getConfig(); + config.log("setting oauth_callback to " + config.getCallback()); + request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback()); + addOAuthParams(request, ""); + appendSignature(request); + } + private void addOAuthParams(AbstractRequest request, String tokenSecret) { final OAuthConfig config = getConfig(); request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); From 2a1671c1a8cad2b9a9e9bd463b34dc11bbbddb95 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 6 Jun 2016 15:59:03 +0300 Subject: [PATCH 073/250] prepare 2.7.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 157d9202c..6fac2c8ce 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.6.0 + 2.7.0 ``` @@ -94,7 +94,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.6.0 + 2.7.0 ``` diff --git a/changelog b/changelog index 6c05721b2..cc207737e 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.7.0] * make http async client implementation be more pluggable * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) * add Misfit (http://misfit.com/) API From 9ab3986f1b101659f4e5a83b48a657f0711af1aa Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 6 Jun 2016 17:53:39 +0300 Subject: [PATCH 074/250] [maven-release-plugin] prepare release scribejava-2.7.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index e72fe52e7..8a4640ce0 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.6.1-SNAPSHOT + 2.7.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 6a8f03dfc..08295e37b 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.6.1-SNAPSHOT + 2.7.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index b4a2894c9..c2230b028 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.6.1-SNAPSHOT + 2.7.0 ../pom.xml From 832ebd3e351edc3b07e55f3a347e3018b18448f7 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 6 Jun 2016 17:53:44 +0300 Subject: [PATCH 075/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 8a4640ce0..e4aa054f5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.0 + 2.7.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 08295e37b..c2de94306 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.0 + 2.7.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index c2230b028..c6b9b52ca 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.0 + 2.7.1-SNAPSHOT ../pom.xml From 1f6d1da303c502061269b8b29a463818830a594e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 15:40:30 +0300 Subject: [PATCH 076/250] do not hide checked IOException in unchecked IllegalArgumentException --- changelog | 3 ++ .../apis/examples/AWeberExample.java | 3 +- .../scribejava/apis/examples/DiggExample.java | 3 +- .../apis/examples/FacebookExample.java | 3 +- .../apis/examples/FlickrExample.java | 3 +- .../apis/examples/Foursquare2Example.java | 3 +- .../apis/examples/FoursquareExample.java | 3 +- .../apis/examples/FreelancerExample.java | 3 +- .../apis/examples/GeniusExample.java | 3 +- .../apis/examples/GitHubExample.java | 3 +- .../apis/examples/Google20Example.java | 3 +- .../scribejava/apis/examples/HHExample.java | 3 +- .../apis/examples/ImgurExample.java | 3 +- .../apis/examples/Kaixin20Example.java | 3 +- .../apis/examples/LinkedIn20Example.java | 3 +- .../apis/examples/LinkedInExample.java | 3 +- .../examples/LinkedInExampleWithScopes.java | 3 +- .../scribejava/apis/examples/LiveExample.java | 3 +- .../apis/examples/MailruExample.java | 3 +- .../apis/examples/MeetupExample.java | 3 +- .../apis/examples/MisfitExample.java | 3 +- .../apis/examples/NeteaseWeiboExample.java | 3 +- .../apis/examples/OdnoklassnikiExample.java | 3 +- .../apis/examples/PinterestExample.java | 3 +- .../apis/examples/Px500Example.java | 3 +- .../apis/examples/RenrenExample.java | 3 +- .../apis/examples/SinaWeibo2Example.java | 3 +- .../apis/examples/SinaWeiboExample.java | 3 +- .../apis/examples/SkyrockExample.java | 3 +- .../apis/examples/SohuWeiboExample.java | 3 +- .../apis/examples/StackExchangeExample.java | 3 +- .../apis/examples/TrelloExample.java | 3 +- .../apis/examples/TumblrExample.java | 3 +- .../apis/examples/TutByExample.java | 3 +- .../apis/examples/TwitterExample.java | 3 +- .../apis/examples/ViadeoExample.java | 3 +- .../apis/examples/VkontakteExample.java | 3 +- .../scribejava/apis/examples/XingExample.java | 3 +- .../apis/examples/YahooExample.java | 3 +- .../scribejava/core/model/Response.java | 9 +---- .../core/oauth/OAuth10aService.java | 10 ++--- .../scribejava/core/oauth/OAuth20Service.java | 15 ++----- .../scribejava/core/utils/StreamUtils.java | 40 ++++++++----------- .../scribejava/core/model/ResponseTest.java | 4 +- .../core/oauth/OAuth20ServiceTest.java | 3 +- .../core/utils/StreamUtilsTest.java | 8 ++-- 46 files changed, 113 insertions(+), 93 deletions(-) diff --git a/changelog b/changelog index cc207737e..cbf92b6da 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * do not hide checked IOException in unchecked IllegalArgumentException + [2.7.0] * make http async client implementation be more pluggable * add async-http-client 2.0 support (thanks to Sai Chandrasekharan https://github.com/saichand) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index 233d3a984..b17637c13 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class AWeberExample { @@ -18,7 +19,7 @@ public abstract class AWeberExample { private static final String CONSUMER_KEY = ""; private static final String CONSUMER_SECRET = ""; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey(CONSUMER_KEY) .apiSecret(CONSUMER_SECRET) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index 690f95081..f55c105a0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class DiggExample { private static final String NETWORK_NAME = "Digg"; private static final String PROTECTED_RESOURCE_URL = "http://services.digg.com/2.0/comment.digg"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "myKey"; final String apiSecret = "mySecret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 463729c17..7a1772aec 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class FacebookExample { private static final String NETWORK_NAME = "Facebook"; private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index db08042ca..ed03b906d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class FlickrExample { private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index c581aa484..c9b317911 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class Foursquare2Example { private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index 90fa38848..639aaec0a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class FoursquareExample { private static final String PROTECTED_RESOURCE_URL = "http://api.foursquare.com/v1/user"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index c72f72de0..54e0a7d8d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class FreelancerExample { @@ -19,7 +20,7 @@ public abstract class FreelancerExample { private static final String PROTECTED_RESOURCE_URL = "http://api.sandbox.freelancer.com/Job/getJobList.json"; private static final String SCOPE = "http://api.sandbox.freelancer.com"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .signatureType(SignatureType.QueryString) .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java index 141cc7ebf..0db6ddc05 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class GeniusExample { private static final String NETWORK_NAME = "Genius"; private static final String PROTECTED_RESOURCE_URL = "https://api.genius.com/songs/378195"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index fb12bf8f7..0a07c9709 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class GitHubExample { private static final String NETWORK_NAME = "GitHub"; private static final String PROTECTED_RESOURCE_URL = "https://api.github.com/user"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 50ec20a62..2e6800c19 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -17,7 +18,7 @@ public abstract class Google20Example { private static final String NETWORK_NAME = "G+"; private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index 0ca8052e0..add150d1f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -10,13 +10,14 @@ import com.github.scribejava.apis.HHApi; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class HHExample { private static final String NETWORK_NAME = "hh.ru"; private static final String PROTECTED_RESOURCE_URL = "https://api.hh.ru/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index d25acaa86..1d3f24a44 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -7,6 +7,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; import java.util.Scanner; @@ -15,7 +16,7 @@ public abstract class ImgurExample { private static final String NETWORK_NAME = "Imgur"; private static final String PROTECTED_RESOURCE_URL = "https://api.imgur.com/3/account/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 0034f979a..4551370d6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class Kaixin20Example { private static final String NETWORK_NAME = "Kaixin"; private static final String PROTECTED_RESOURCE_URL = "https://api.kaixin001.com/users/me.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your api key"; final String apiSecret = "your api secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index d308b7c5c..a39c79890 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class LinkedIn20Example { private static final String NETWORK_NAME = "LinkedIn"; private static final String PROTECTED_RESOURCE_URL = "https://api.linkedin.com/v1/people/~:(%s)"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 6a8e327ec..81324377b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class LinkedInExample { private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index a0a925cb5..2e951fa5f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class LinkedInExampleWithScopes { private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index c86eaa793..0540a26db 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class LiveExample { private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = ""; final String apiSecret = ""; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 45cdb9a80..ae4ad4856 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -8,6 +8,7 @@ import com.github.scribejava.apis.MailruApi; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class MailruExample { @@ -15,7 +16,7 @@ public abstract class MailruExample { private static final String PROTECTED_RESOURCE_URL = "http://www.appsmail.ru/platform/api?method=users.getInfo&secure=1"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index 8adf45a52..64180b980 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class MeetupExample { private static final String PROTECTED_RESOURCE_URL = "http://api.meetup.com/2/member/self"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index edb362fd2..66e5901c9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -7,6 +7,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; import java.util.Scanner; @@ -16,7 +17,7 @@ public abstract class MisfitExample { private static final String PROTECTED_RESOURCE_URL = "https://api.misfitwearables.com/move/resource/v1/user/me/profile"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index 31a210612..08f782b13 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class NeteaseWeiboExample { private static final String NETWORK_NAME = "NetEase(163.com) Weibo"; private static final String PROTECTED_RESOURCE_URL = "http://api.t.163.com/account/verify_credentials.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your key"; final String apiSecret = "your secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 1900e3f47..9996484a4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -8,6 +8,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class OdnoklassnikiExample { @@ -15,7 +16,7 @@ public abstract class OdnoklassnikiExample { private static final String PROTECTED_RESOURCE_URL = "https://api.ok.ru/api/users/getCurrentUser?application_key=%1$s&format=JSON"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your api client id"; final String publicKey = "your api public key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index 13f7d77b4..ca0359611 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -7,6 +7,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; import java.util.Scanner; @@ -14,7 +15,7 @@ public abstract class PinterestExample { private static final String PROTECTED_RESOURCE_URL = "https://api.pinterest.com/v1/me/?access_token?access_token="; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_app_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index 458aea185..4fbda56ff 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class Px500Example { private static final String PROTECTED_RESOURCE_URL = "https://api.500px.com/v1/"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your-api-key") .apiSecret("your-api-secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 75f132a4b..42f99eb6d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -17,13 +17,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class RenrenExample { private static final String NETWORK_NAME = "Renren"; private static final String PROTECTED_RESOURCE_URL = "http://api.renren.com/restserver.do"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your api key"; final String apiSecret = "your api secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 1a67ad8ed..815f19ba2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class SinaWeibo2Example { private static final String NETWORK_NAME = "SinaWeibo"; private static final String PROTECTED_RESOURCE_URL = "https://api.weibo.com/2/account/get_uid.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_api_key"; final String apiSecret = "your_api_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index 1d8625059..8c3fccbd7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class SinaWeiboExample { private static final String NETWORK_NAME = "SinaWeibo"; private static final String PROTECTED_RESOURCE_URL = "http://api.t.sina.com.cn/account/verify_credentials.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your key"; final String apiSecret = "your secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index 121a3da0f..440058d57 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class SkyrockExample { private static final String PROTECTED_RESOURCE_URL = "https://api.skyrock.com/v2/user/get.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your-api-key") .apiSecret("your-api-secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index c554208ab..d91829387 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class SohuWeiboExample { private static final String NETWORK_NAME = "SohuWeibo"; private static final String PROTECTED_RESOURCE_URL = "http://api.t.sohu.com/account/verify_credentials.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_key"; final String apiSecret = "your_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index affa6a812..d7d2341a2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -10,13 +10,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class StackExchangeExample { private static final String NETWORK_NAME = "Stack Exchange"; private static final String PROTECTED_RESOURCE_URL = "https://api.stackexchange.com/2.2/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id, secret, application key and // optionally site name final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index bc3147b34..a72821cb2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class TrelloExample { @@ -16,7 +17,7 @@ public abstract class TrelloExample { private static final String API_SECRET = "your_api_secret"; private static final String PROTECTED_RESOURCE_URL = "https://trello.com/1/members/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey(API_KEY) .apiSecret(API_SECRET) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index 881cebd6d..10ae13e71 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class TumblrExample { private static final String PROTECTED_RESOURCE_URL = "http://api.tumblr.com/v2/user/info"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("MY_CONSUMER_KEY") .apiSecret("MY_CONSUMER_SECRET") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index e8d82d98b..769270d37 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -10,13 +10,14 @@ import com.github.scribejava.apis.TutByApi; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class TutByExample { private static final String NETWORK_NAME = "Tut.by"; private static final String PROTECTED_RESOURCE_URL = "http://profile.tut.by/getInfo"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index 4a46982aa..66d8cefae 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class TwitterExample { private static final String PROTECTED_RESOURCE_URL = "https://api.twitter.com/1.1/account/verify_credentials.json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index 3d8d12904..1a9887217 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class ViadeoExample { private static final String NETWORK_NAME = "Viadeo"; private static final String PROTECTED_RESOURCE_URL = "https://api.viadeo.com/me?user_detail=full"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index f026fbbc0..5e50158bd 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -8,13 +8,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; public abstract class VkontakteExample { private static final String NETWORK_NAME = "Vkontakte.ru"; private static final String PROTECTED_RESOURCE_URL = "https://api.vk.com/method/users.get"; - public static void main(String... args) { + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 50ab3c6ba..04a3668fd 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -9,12 +9,13 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class XingExample { private static final String PROTECTED_RESOURCE_URL = "https://api.xing.com/v1/users/me"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index ee93da83a..3d020d59d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -9,13 +9,14 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; +import java.io.IOException; public abstract class YahooExample { private static final String PROTECTED_RESOURCE_URL = "http://social.yahooapis.com/v1/user/A6ROU63MXWDCW3Y5MGCYWVHDJI/profile/status?format=json"; - public static void main(String... args) { + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java index bce6e584a..869066788 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java @@ -37,7 +37,7 @@ public Response(int code, String message, Map headers, String bo } } - private String parseBodyContents() { + private String parseBodyContents() throws IOException { if ("gzip".equals(getHeader("Content-Encoding"))) { body = StreamUtils.getGzipStreamContents(getStream()); } else { @@ -58,12 +58,7 @@ public final boolean isSuccessful() { return getCode() >= 200 && getCode() < 400; } - /** - * Obtains the HTTP Response body - * - * @return response body - */ - public String getBody() { + public String getBody() throws IOException { return body == null ? parseBodyContents() : body; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index 186541c39..e707486bc 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -35,12 +35,7 @@ public OAuth10aService(DefaultApi10a api, OAuthConfig config) { this.api = api; } - /** - * Retrieve the request token. - * - * @return request token - */ - public final OAuth1RequestToken getRequestToken() { + public final OAuth1RequestToken getRequestToken() throws IOException { final OAuthConfig config = getConfig(); config.log("obtaining request token from " + api.getRequestTokenEndpoint()); final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), this); @@ -95,7 +90,8 @@ private void addOAuthParams(AbstractRequest request, String tokenSecret) { config.log("appended additional OAuth parameters: " + MapUtils.toString(request.getOauthParameters())); } - public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, String oauthVerifier) { + public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, String oauthVerifier) + throws IOException { final OAuthConfig config = getConfig(); config.log("obtaining access token from " + api.getAccessTokenEndpoint()); final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index b9efbf0f3..43bf4c7fa 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -33,7 +33,7 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { } //sync version, protected to facilitate mocking - protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) { + protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) throws IOException { return api.getAccessTokenExtractor().extract(request.send().getBody()); } @@ -49,7 +49,7 @@ public OAuth2AccessToken convert(Response response) throws IOException { }); } - public final OAuth2AccessToken getAccessToken(String code) { + public final OAuth2AccessToken getAccessToken(String code) throws IOException { final OAuthRequest request = createAccessTokenRequest(code, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); @@ -86,7 +86,7 @@ protected T createAccessTokenRequest(String code, T return request; } - public final OAuth2AccessToken refreshAccessToken(String refreshToken) { + public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException { final OAuthRequest request = createRefreshTokenRequest(refreshToken, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); @@ -113,14 +113,7 @@ protected T createRefreshTokenRequest(String refresh return request; } - /** - * Request Access Token Password Grant sync version - * - * @param uname User name - * @param password User password - * @return OAuth2AccessToken - */ - public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) { + public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) throws IOException { final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java index 93d089489..65cea62ee 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java @@ -16,25 +16,22 @@ public abstract class StreamUtils { * * @param is input stream * @return string contents + * @throws java.io.IOException */ - public static String getStreamContents(InputStream is) { + public static String getStreamContents(InputStream is) throws IOException { Preconditions.checkNotNull(is, "Cannot get String from a null object"); - try { - final char[] buffer = new char[0x10000]; - final StringBuilder out = new StringBuilder(); - try (Reader in = new InputStreamReader(is, "UTF-8")) { - int read; - do { - read = in.read(buffer, 0, buffer.length); - if (read > 0) { - out.append(buffer, 0, read); - } - } while (read >= 0); - } - return out.toString(); - } catch (IOException ioe) { - throw new IllegalStateException("Error while reading response body", ioe); + final char[] buffer = new char[0x10000]; + final StringBuilder out = new StringBuilder(); + try (Reader in = new InputStreamReader(is, "UTF-8")) { + int read; + do { + read = in.read(buffer, 0, buffer.length); + if (read > 0) { + out.append(buffer, 0, read); + } + } while (read >= 0); } + return out.toString(); } /** @@ -42,14 +39,11 @@ public static String getStreamContents(InputStream is) { * * @param is input stream * @return string contents + * @throws java.io.IOException */ - public static String getGzipStreamContents(InputStream is) { + public static String getGzipStreamContents(InputStream is) throws IOException { Preconditions.checkNotNull(is, "Cannot get String from a null object"); - try { - final GZIPInputStream gis = new GZIPInputStream(is); - return getStreamContents(gis); - } catch (IOException ioe) { - throw new IllegalStateException("Error while reading response body", ioe); - } + final GZIPInputStream gis = new GZIPInputStream(is); + return getStreamContents(gis); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java index c4fe5712f..1f7b0a4fe 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java @@ -28,13 +28,13 @@ public void shouldPopulateResponseHeaders() { } @Test - public void shouldParseBodyContents() { + public void shouldParseBodyContents() throws IOException { assertEquals("contents", response.getBody()); assertEquals(1, connection.getTimesCalledInpuStream()); } @Test - public void shouldParseBodyContentsOnlyOnce() { + public void shouldParseBodyContentsOnlyOnce() throws IOException { assertEquals("contents", response.getBody()); assertEquals("contents", response.getBody()); assertEquals("contents", response.getBody()); diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java index 17c58087f..050b0ae4d 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java @@ -7,6 +7,7 @@ import com.github.scribejava.core.services.Base64Encoder; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import java.io.IOException; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import org.junit.Test; @@ -18,7 +19,7 @@ public class OAuth20ServiceTest { @Test - public void shouldProduceCorrectRequestSync() { + public void shouldProduceCorrectRequestSync() throws IOException { final OAuth20Service service = new ServiceBuilder() .apiKey("your_api_key") .apiSecret("your_api_secret") diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/utils/StreamUtilsTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/utils/StreamUtilsTest.java index 322283d23..cb5c6c7c9 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/utils/StreamUtilsTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/utils/StreamUtilsTest.java @@ -20,7 +20,7 @@ public int read() throws IOException { } @Test - public void shouldCorrectlyDecodeAStream() { + public void shouldCorrectlyDecodeAStream() throws IOException { final String value = "expected"; final InputStream is = new ByteArrayInputStream(value.getBytes()); final String decoded = StreamUtils.getStreamContents(is); @@ -28,13 +28,13 @@ public void shouldCorrectlyDecodeAStream() { } @Test(expected = IllegalArgumentException.class) - public void shouldFailForNullParameter() { + public void shouldFailForNullParameter() throws IOException { StreamUtils.getStreamContents(null); fail("Must throw exception before getting here"); } - @Test(expected = IllegalStateException.class) - public void shouldFailWithBrokenStream() { + @Test(expected = IOException.class) + public void shouldFailWithBrokenStream() throws IOException { // This object simulates problems with input stream. StreamUtils.getStreamContents(ALLWAYS_ERROR_INPUT_STREAM); fail("Must throw exception before getting here"); From 36dc0f663558541102011908e8b878bed1582d6d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 15:47:00 +0300 Subject: [PATCH 077/250] update some dependencies --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e4aa054f5..1b3bde7d0 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ org.asynchttpclient async-http-client - 2.0.3 + 2.0.4 provided @@ -211,7 +211,7 @@ com.puppycrawl.tools checkstyle - 6.18 + 6.19 From 86d59c209e8fddd006e4a75a99e81e822e2d44b2 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 15:53:54 +0300 Subject: [PATCH 078/250] prepare 2.7.1 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6fac2c8ce..a75bb1a9b 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.7.0 + 2.7.1 ``` @@ -94,7 +94,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.7.0 + 2.7.1 ``` diff --git a/changelog b/changelog index cbf92b6da..70d1a8b87 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.7.1] * do not hide checked IOException in unchecked IllegalArgumentException [2.7.0] From de5fef31ec803abc4684b2e91554c774d44fe976 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 15:54:50 +0300 Subject: [PATCH 079/250] [maven-release-plugin] prepare release scribejava-2.7.1 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 1b3bde7d0..dc799268f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.1-SNAPSHOT + 2.7.1 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index c2de94306..370dea0a8 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.1-SNAPSHOT + 2.7.1 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index c6b9b52ca..03d7552e8 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.1-SNAPSHOT + 2.7.1 ../pom.xml From 42deb8da74e8ae321be4c070cac1c823e7edff0c Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 15:54:55 +0300 Subject: [PATCH 080/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index dc799268f..465f2c181 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.1 + 2.7.2-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 370dea0a8..81a290229 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.1 + 2.7.2-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 03d7552e8..ba553129a 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.1 + 2.7.2-SNAPSHOT ../pom.xml From d34c3b0d457f9d8278cd4b7c26a3c7f35ef655e3 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 19:42:04 +0300 Subject: [PATCH 081/250] ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) --- changelog | 3 + .../scribejava/core/oauth/OAuthService.java | 138 ++++++++++-------- .../scribejava/core/utils/StreamUtils.java | 4 +- 3 files changed, 83 insertions(+), 62 deletions(-) diff --git a/changelog b/changelog index 70d1a8b87..0140e0565 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) + [2.7.1] * do not hide checked IOException in unchecked IllegalArgumentException diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index f6922224e..47b40b497 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -49,13 +49,10 @@ public OAuthService(OAuthConfig config) { } if (ahcConfig == null) { - final String ningAsyncHttpProviderClassName = config.getNingAsyncHttpProviderClassName(); - ningAsyncHttpClient = ningAsyncHttpProviderClassName == null - ? new com.ning.http.client.AsyncHttpClient(ningConfig) - : new com.ning.http.client.AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig); + ningAsyncHttpClient = NingProvider.createClient(config.getNingAsyncHttpProviderClassName(), ningConfig); ahcAsyncHttpClient = null; } else { - ahcAsyncHttpClient = new org.asynchttpclient.DefaultAsyncHttpClient(ahcConfig); + ahcAsyncHttpClient = AHCProvider.createClient(ahcConfig); ningAsyncHttpClient = null; } } @@ -84,72 +81,93 @@ public Future executeAsync(Map headers, Verb httpVerb, St String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { if (ahcAsyncHttpClient == null) { - return ningExecuteAsync(headers, httpVerb, completeUrl, bodyContents, callback, converter); + return NingProvider.ningExecuteAsync(ningAsyncHttpClient, config.getUserAgent(), headers, httpVerb, + completeUrl, bodyContents, callback, converter); } else { - return ahcExecuteAsync(headers, httpVerb, completeUrl, bodyContents, callback, converter); + return AHCProvider.ahcExecuteAsync(ahcAsyncHttpClient, config.getUserAgent(), headers, httpVerb, + completeUrl, bodyContents, callback, converter); } } - private Future ningExecuteAsync(Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { - final com.ning.http.client.AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; - switch (httpVerb) { - case GET: - boundRequestBuilder = ningAsyncHttpClient.prepareGet(completeUrl); - break; - case POST: - com.ning.http.client.AsyncHttpClient.BoundRequestBuilder requestBuilder - = ningAsyncHttpClient.preparePost(completeUrl); - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = requestBuilder.setBody(bodyContents); - break; - default: - throw new IllegalArgumentException("message build error: unknown verb type"); - } + private static class NingProvider { - for (Map.Entry header : headers.entrySet()) { - boundRequestBuilder.addHeader(header.getKey(), header.getValue()); - } - final String userAgent = config.getUserAgent(); - if (userAgent != null) { - boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + private static com.ning.http.client.AsyncHttpClient createClient(String ningAsyncHttpProviderClassName, + com.ning.http.client.AsyncHttpClientConfig ningConfig) { + return ningAsyncHttpProviderClassName == null + ? new com.ning.http.client.AsyncHttpClient(ningConfig) + : new com.ning.http.client.AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig); } - return boundRequestBuilder - .execute(new com.github.scribejava.core.async.ning.OAuthAsyncCompletionHandler<>(callback, converter)); - } + private static Future ningExecuteAsync(com.ning.http.client.AsyncHttpClient ningAsyncHttpClient, + String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, + OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { + final com.ning.http.client.AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + switch (httpVerb) { + case GET: + boundRequestBuilder = ningAsyncHttpClient.prepareGet(completeUrl); + break; + case POST: + com.ning.http.client.AsyncHttpClient.BoundRequestBuilder requestBuilder + = ningAsyncHttpClient.preparePost(completeUrl); + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(bodyContents); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } - private Future ahcExecuteAsync(Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { - final org.asynchttpclient.BoundRequestBuilder boundRequestBuilder; - switch (httpVerb) { - case GET: - boundRequestBuilder = ahcAsyncHttpClient.prepareGet(completeUrl); - break; - case POST: - org.asynchttpclient.BoundRequestBuilder requestBuilder = ahcAsyncHttpClient.preparePost(completeUrl); - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = requestBuilder.setBody(bodyContents); - break; - default: - throw new IllegalArgumentException("message build error: unknown verb type"); - } + for (Map.Entry header : headers.entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } - for (Map.Entry header : headers.entrySet()) { - boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + return boundRequestBuilder + .execute(new com.github.scribejava.core.async.ning.OAuthAsyncCompletionHandler<>( + callback, converter)); } - final String userAgent = config.getUserAgent(); - if (userAgent != null) { - boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + private static class AHCProvider { + + private static org.asynchttpclient.AsyncHttpClient createClient( + org.asynchttpclient.AsyncHttpClientConfig ahcConfig) { + return new org.asynchttpclient.DefaultAsyncHttpClient(ahcConfig); } - return boundRequestBuilder - .execute(new com.github.scribejava.core.async.ahc.OAuthAsyncCompletionHandler<>(callback, converter)); + private static Future ahcExecuteAsync(org.asynchttpclient.AsyncHttpClient ahcAsyncHttpClient, + String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, + OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { + final org.asynchttpclient.BoundRequestBuilder boundRequestBuilder; + switch (httpVerb) { + case GET: + boundRequestBuilder = ahcAsyncHttpClient.prepareGet(completeUrl); + break; + case POST: + org.asynchttpclient.BoundRequestBuilder requestBuilder + = ahcAsyncHttpClient.preparePost(completeUrl); + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(bodyContents); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } + + for (Map.Entry header : headers.entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + return boundRequestBuilder + .execute(new com.github.scribejava.core.async.ahc.OAuthAsyncCompletionHandler<>( + callback, converter)); + } } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java index 65cea62ee..7a86318d2 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/utils/StreamUtils.java @@ -16,7 +16,7 @@ public abstract class StreamUtils { * * @param is input stream * @return string contents - * @throws java.io.IOException + * @throws java.io.IOException in any. SocketTimeout in example */ public static String getStreamContents(InputStream is) throws IOException { Preconditions.checkNotNull(is, "Cannot get String from a null object"); @@ -39,7 +39,7 @@ public static String getStreamContents(InputStream is) throws IOException { * * @param is input stream * @return string contents - * @throws java.io.IOException + * @throws java.io.IOException in any. SocketTimeout in example */ public static String getGzipStreamContents(InputStream is) throws IOException { Preconditions.checkNotNull(is, "Cannot get String from a null object"); From f04b458b38200eed3a88a39d851464874fdecb40 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 19:50:34 +0300 Subject: [PATCH 082/250] prepare 2.7.2 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a75bb1a9b..9e8c0ba2d 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.7.1 + 2.7.2 ``` @@ -94,7 +94,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.7.1 + 2.7.2 ``` diff --git a/changelog b/changelog index 0140e0565..8dcb9f891 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.7.2] * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) [2.7.1] From 7b7aedf586d131d88ac0d50d14390314bc386ae1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 19:51:19 +0300 Subject: [PATCH 083/250] [maven-release-plugin] prepare release scribejava-2.7.2 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 465f2c181..cd6670a82 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.2-SNAPSHOT + 2.7.2 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 81a290229..93923ad1f 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.2-SNAPSHOT + 2.7.2 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index ba553129a..2ca766e51 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.2-SNAPSHOT + 2.7.2 ../pom.xml From 11b76c4fcec553f0452e288bf807af53ac599d3a Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 8 Jun 2016 19:51:25 +0300 Subject: [PATCH 084/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index cd6670a82..d7e832f02 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.2 + 2.7.3-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 93923ad1f..15b9fd5e6 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.2 + 2.7.3-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 2ca766e51..a84868b76 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.2 + 2.7.3-SNAPSHOT ../pom.xml From 96217e534a46926e7e6f00dceb1ed4512c795699 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 9 Jun 2016 18:06:04 +0300 Subject: [PATCH 085/250] FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them --- changelog | 3 +++ .../apis/examples/FacebookAsyncNingExample.java | 2 +- .../apis/examples/Google20AsyncAHCExample.java | 2 +- .../apis/examples/MailruAsyncExample.java | 2 +- .../scribejava/core/builder/ServiceBuilder.java | 16 ++++++++-------- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/changelog b/changelog index 8dcb9f891..2f776a80f 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them + [2.7.2] * FIX: ScribeJava shouldn't require any async http client provider to be on the classpath (neither ning neither AHC) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index ae0d1d09a..373759c35 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -39,7 +39,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") - .asyncHttpClientConfig(clientConfig) + .asyncNingHttpClientConfig(clientConfig) .build(FacebookApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index bfd88430a..6ad067acf 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -42,7 +42,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .scope("profile") // replace with desired scope .state(secretState) .callback("http://example.com/callback") - .asyncHttpClientConfig(clientConfig) + .asyncAHCHttpClientConfig(clientConfig) .build(GoogleApi20.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index c53e5d856..6ca98d697 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -35,7 +35,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .apiKey(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") - .asyncHttpClientConfig(clientConfig) + .asyncNingHttpClientConfig(clientConfig) .build(MailruApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 57f99cc0a..12195ab56 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -135,14 +135,20 @@ public ServiceBuilder readTimeout(Integer readTimeout) { return this; } - public ServiceBuilder asyncHttpClientConfig(com.ning.http.client.AsyncHttpClientConfig asyncHttpClientConfig) { + public ServiceBuilder asyncNingHttpClientConfig(com.ning.http.client.AsyncHttpClientConfig asyncHttpClientConfig) { Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); ningAsyncHttpClientConfig = asyncHttpClientConfig; ahcAsyncHttpClientConfig = null; return this; } - public ServiceBuilder asyncHttpClientConfig(org.asynchttpclient.AsyncHttpClientConfig asyncHttpClientConfig) { + public ServiceBuilder asyncNingHttpProviderClassName(String asyncHttpProviderClassName) { + this.ningAsyncHttpProviderClassName = asyncHttpProviderClassName; + ahcAsyncHttpClientConfig = null; + return this; + } + + public ServiceBuilder asyncAHCHttpClientConfig(org.asynchttpclient.AsyncHttpClientConfig asyncHttpClientConfig) { Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); ahcAsyncHttpClientConfig = asyncHttpClientConfig; ningAsyncHttpClientConfig = null; @@ -150,12 +156,6 @@ public ServiceBuilder asyncHttpClientConfig(org.asynchttpclient.AsyncHttpClientC return this; } - public ServiceBuilder asyncHttpProviderClassName(String asyncHttpProviderClassName) { - this.ningAsyncHttpProviderClassName = asyncHttpProviderClassName; - ahcAsyncHttpClientConfig = null; - return this; - } - public ServiceBuilder userAgent(String userAgent) { this.userAgent = userAgent; return this; From 7830badc8780793be0f3e87983f7c82881da0c48 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 9 Jun 2016 18:11:23 +0300 Subject: [PATCH 086/250] prepare 2.7.3 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9e8c0ba2d..f1706f4cb 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.7.2 + 2.7.3 ``` @@ -94,7 +94,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.7.2 + 2.7.3 ``` diff --git a/changelog b/changelog index 2f776a80f..43f21ea34 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.7.3] * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them [2.7.2] From d9554a6492b0039f37265420c0be5724f805f91c Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 9 Jun 2016 18:12:04 +0300 Subject: [PATCH 087/250] [maven-release-plugin] prepare release scribejava-2.7.3 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d7e832f02..ba96fe26f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.3-SNAPSHOT + 2.7.3 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 15b9fd5e6..385bebf7f 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.3-SNAPSHOT + 2.7.3 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index a84868b76..c466b1e37 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.3-SNAPSHOT + 2.7.3 ../pom.xml From 8865ea15c1edf9e5a9fa196e3e54c5ac01543b8e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 9 Jun 2016 18:12:11 +0300 Subject: [PATCH 088/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index ba96fe26f..723b1b5e1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.3 + 2.7.4-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 385bebf7f..465b17303 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.3 + 2.7.4-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index c466b1e37..50e937547 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.3 + 2.7.4-SNAPSHOT ../pom.xml From 36940c4eae90c51cd25c398422a576a64e1cff75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Fri, 10 Jun 2016 11:22:23 -0700 Subject: [PATCH 089/250] Addes API provider for Salesforce --- .../github/scribejava/apis/SalesforceApi.java | 72 ++++++++++++++ .../SalesforceJsonTokenExtractor.java | 31 ++++++ .../apis/salesforce/SalesforceToken.java | 81 ++++++++++++++++ .../apis/examples/SalesforceExample.java | 95 +++++++++++++++++++ 4 files changed, 279 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java new file mode 100644 index 000000000..08f814c92 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -0,0 +1,72 @@ +package com.github.scribejava.apis; + +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; + +import com.github.scribejava.apis.salesforce.SalesforceJsonTokenExtractor; + +/** + * This class is an implementation of the Salesforce OAuth2 API. + */ + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.Verb; + +public class SalesforceApi extends DefaultApi20 { + + // Constants + private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; + private static final String ACCESS_URL = BASE_URL + "/token?grant_type=authorization_code"; + private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; + + protected SalesforceApi() { + SSLContext sc; + try { + String protocol = SSLContext.getDefault().getProtocol(); + if (!protocol.equals("TLSv1.2") || !protocol.equals("TLSv1.1")) { // This is important! + sc = SSLContext.getInstance("TLSv1.2"); + sc.init(null, null, null); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + catch (KeyManagementException e) { + e.printStackTrace(); + } + } + + private static class InstanceHolder { + private static final SalesforceApi INSTANCE = new SalesforceApi(); + } + + public static SalesforceApi instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public Verb getAccessTokenVerb(){ + return Verb.POST; + } + + @Override + public String getAccessTokenEndpoint() { + return ACCESS_URL; + } + + @Override + protected String getAuthorizationBaseUrl() { + return AUTHORIZE_URL; + } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return SalesforceJsonTokenExtractor.instance(); + } + +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java new file mode 100644 index 000000000..6b5f612c1 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java @@ -0,0 +1,31 @@ +package com.github.scribejava.apis.salesforce; + +import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; + +/** + * This extractor parses in addition to the standard Extractor the instance_url of the used Salesforce organization. + */ +public class SalesforceJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { + + private static final String INSTANCE_URL_REGEX = "\"instance_url\"\\s*:\\s*\"(\\S*?)\""; + + protected SalesforceJsonTokenExtractor() { + } + + private static class InstanceHolder { + + private static final SalesforceJsonTokenExtractor INSTANCE = new SalesforceJsonTokenExtractor(); + } + + public static SalesforceJsonTokenExtractor instance() { + return InstanceHolder.INSTANCE; + } + + @Override + protected OAuth2AccessToken createToken(String accessToken, String tokenType, Integer expiresIn, + String refreshToken, String scope, String response) { + return new SalesforceToken(accessToken, tokenType, expiresIn, refreshToken, scope, + extractParameter(response, INSTANCE_URL_REGEX, true), response); + } +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java new file mode 100644 index 000000000..ae9e84b24 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java @@ -0,0 +1,81 @@ +package com.github.scribejava.apis.salesforce; + +import com.github.scribejava.core.model.OAuth2AccessToken; +import java.util.Objects; + +public class SalesforceToken extends OAuth2AccessToken { + + private static final long serialVersionUID = 7845679917727899612L; + + /** + * This token model includes the instance_url to address the needed Salesforce organization instance. + */ + private final String instanceUrl; + + public SalesforceToken(String accessToken, String instanceUrl, String rawResponse) { + this(accessToken, null, null, null, null, instanceUrl, rawResponse); + } + + public SalesforceToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, + String instanceUrl, String rawResponse) { + super(accessToken, tokenType, expiresIn, refreshToken, scope, rawResponse); + this.instanceUrl = instanceUrl; + } + + public String getInstanceUrl() { + return instanceUrl; + } + + @Override + public int hashCode() { + int hash = 5; + hash = 37 * hash + Objects.hashCode(getAccessToken()); + hash = 37 * hash + Objects.hashCode(getTokenType()); + hash = 37 * hash + Objects.hashCode(getExpiresIn()); + hash = 37 * hash + Objects.hashCode(getRefreshToken()); + hash = 37 * hash + Objects.hashCode(getScope()); + hash = 37 * hash + Objects.hashCode(getInstanceUrl()); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final SalesforceToken other = (SalesforceToken) obj; + if (!Objects.equals(getAccessToken(), other.getAccessToken())) { + return false; + } + if (!Objects.equals(getTokenType(), other.getTokenType())) { + return false; + } + if (!Objects.equals(getRefreshToken(), other.getRefreshToken())) { + return false; + } + if (!Objects.equals(getScope(), other.getScope())) { + return false; + } + if (!Objects.equals(instanceUrl, other.getInstanceUrl())) { + return false; + } + return Objects.equals(getExpiresIn(), other.getExpiresIn()); + } + + @Override + public String toString() { + return "SalesforceToken{" + + "access_token=" + getAccessToken() + + ", token_type=" + getTokenType() + + ", expires_in=" + getExpiresIn() + + ", refresh_token=" + getRefreshToken() + + ", scope=" + getScope() + + ", instance_url=" + instanceUrl + '}'; + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java new file mode 100644 index 000000000..56e818294 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -0,0 +1,95 @@ +package com.github.scribejava.apis.examples; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Scanner; + +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.apis.SalesforceApi; +import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; + +public class SalesforceExample { + + private static final String NETWORK_NAME = "Salesforce"; + + public static void main(String[] args) { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .callback("https://www.example.com/callback") // Salesforce only accepts secured callbacks + .build(SalesforceApi.instance()); + final Scanner in = new Scanner(System.in); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + in.close(); + + String codeEncoded = code; + + // The code needs to be URL decoded + try { + codeEncoded = URLDecoder.decode(code, "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + System.out.println("Instance is: " + accessToken.getInstanceUrl()); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + + // Sample SOQL statement + String queryEncoded = "Select Id, Name from Account LIMIT 10"; + + try { + queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + queryEncoded = ""; + } + + if (!queryEncoded.isEmpty()) { + // Building the query URI. We've parsed the instance URL from the accessToken request. + String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + + System.out.println(); + System.out.println("Full URL: " + url); + + final OAuthRequest request = new OAuthRequest(Verb.GET, url, service); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + final Response response = request.send(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + } + + + } +} From d27b48ebbd83b0474b307d0964f1d966e27247a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Tue, 14 Jun 2016 11:57:08 +0200 Subject: [PATCH 090/250] Changed variable calls to getters --- .../github/scribejava/apis/salesforce/SalesforceToken.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java index ae9e84b24..6f6961e83 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java @@ -62,7 +62,7 @@ public boolean equals(Object obj) { if (!Objects.equals(getScope(), other.getScope())) { return false; } - if (!Objects.equals(instanceUrl, other.getInstanceUrl())) { + if (!Objects.equals(getInstanceUrl(), other.getInstanceUrl())) { return false; } return Objects.equals(getExpiresIn(), other.getExpiresIn()); @@ -76,6 +76,6 @@ public String toString() { + ", expires_in=" + getExpiresIn() + ", refresh_token=" + getRefreshToken() + ", scope=" + getScope() - + ", instance_url=" + instanceUrl + '}'; + + ", instance_url=" + getInstanceUrl() + '}'; } } From e173b649d653d518b37a38e8cc64a302480f425a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Tue, 14 Jun 2016 11:57:34 +0200 Subject: [PATCH 091/250] Throws new exception / removed tabs --- .../com/github/scribejava/apis/SalesforceApi.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java index 08f814c92..83075f67b 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -20,9 +20,9 @@ public class SalesforceApi extends DefaultApi20 { // Constants - private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; - private static final String ACCESS_URL = BASE_URL + "/token?grant_type=authorization_code"; - private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; + private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; + private static final String ACCESS_URL = BASE_URL + "/token?grant_type=authorization_code"; + private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; protected SalesforceApi() { SSLContext sc; @@ -33,12 +33,9 @@ protected SalesforceApi() { sc.init(null, null, null); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); + } catch (Exception e) { + throw new IllegalStateException("Unexpected JVM without TLS 1.2 support", e); } - catch (KeyManagementException e) { - e.printStackTrace(); - } } private static class InstanceHolder { From bdca89680d0ff6d919e3ff1f1f072069f9356904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Tue, 14 Jun 2016 12:00:15 +0200 Subject: [PATCH 092/250] Set required TLS protocol to TLS v1.2 --- .../src/main/java/com/github/scribejava/apis/SalesforceApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java index 83075f67b..a40fea3dc 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -28,7 +28,7 @@ protected SalesforceApi() { SSLContext sc; try { String protocol = SSLContext.getDefault().getProtocol(); - if (!protocol.equals("TLSv1.2") || !protocol.equals("TLSv1.1")) { // This is important! + if (!protocol.equals("TLSv1.2")) { // This is important! sc = SSLContext.getInstance("TLSv1.2"); sc.init(null, null, null); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); From 97c8ea456b687b9ff39b62dd98e834548b35c986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Tue, 14 Jun 2016 12:07:03 +0200 Subject: [PATCH 093/250] Removed not needed imports --- .../main/java/com/github/scribejava/apis/SalesforceApi.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java index a40fea3dc..71f7e2206 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -1,8 +1,5 @@ package com.github.scribejava.apis; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; - import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; From 7b60d77a8d79a62b923aab175be7e55800939bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Tue, 14 Jun 2016 17:22:16 +0200 Subject: [PATCH 094/250] Added example of Async Salesforce usage --- .../apis/examples/SalesforceAsyncExample.java | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java new file mode 100644 index 000000000..6175fdca1 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java @@ -0,0 +1,124 @@ +package com.github.scribejava.apis.examples; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Scanner; +import java.util.concurrent.ExecutionException; + +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.apis.SalesforceApi; +import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.ScribeJavaConfig; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.ning.http.client.AsyncHttpClientConfig; + +public class SalesforceAsyncExample { + + private static final String NETWORK_NAME = "Salesforce"; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static void main(String[] args) throws InterruptedException, ExecutionException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + + ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); + final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + .setMaxConnections(5) + .setRequestTimeout(10_000) + .setAllowPoolingConnections(false) + .setPooledConnectionIdleTimeout(1_000) + .setReadTimeout(10_000) + .build(); + + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .asyncHttpClientConfig(clientConfig) + .callback("https://www.example.com/callback") // Salesforce only accepts secured callbacks + .build(SalesforceApi.instance()); + final Scanner in = new Scanner(System.in); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + in.close(); + + String codeEncoded = code; + + // The code needs to be URL decoded + try { + codeEncoded = URLDecoder.decode(code, "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + System.out.println("Instance is: " + accessToken.getInstanceUrl()); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + + // Sample SOQL statement + String queryEncoded = "Select Id, Name from Account LIMIT 10"; + + try { + queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + queryEncoded = ""; + } + + if (!queryEncoded.isEmpty()) { + // Building the query URI. We've parsed the instance URL from the accessToken request. + String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + + System.out.println(); + System.out.println("Full URL: " + url); + + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url, service); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + request.sendAsync(new OAuthAsyncRequestCallback() { + + @Override + public void onThrowable(Throwable t) { + // TODO Auto-generated method stub + + } + + @Override + public void onCompleted(Object response) { + System.out.println(); + System.out.println(((Response)response).getCode()); + System.out.println(((Response)response).getBody()); + } + }); + } + + + } +} From 0383fe40bd56815723ebd0b30b1d41b9a26540ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Tue, 14 Jun 2016 17:23:34 +0200 Subject: [PATCH 095/250] Addes Salesforce to API provider list --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 031c4dd53..1027f8a3a 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ You can use ning async http client out-of-box, just use ServiceBuilderAsync * Pinterest (https://www.pinterest.com/) * 500px (https://500px.com/) * Renren (http://renren.com/) +* Salesforce (https://www.salesforce.com/) * Sina (http://www.sina.com.cn/ http://weibo.com/login.php) * Skyrock (http://skyrock.com/) * sohu 搜狐 (http://www.sohu.com/) From 23166418bc6b760c59b173856dc5259aacb9f114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Wed, 15 Jun 2016 13:21:45 +0200 Subject: [PATCH 096/250] Applied checkstyle rules --- .../github/scribejava/apis/SalesforceApi.java | 52 ++--- .../SalesforceJsonTokenExtractor.java | 3 +- .../apis/salesforce/SalesforceToken.java | 6 +- .../apis/examples/SalesforceAsyncExample.java | 187 +++++++++--------- .../apis/examples/SalesforceExample.java | 160 +++++++-------- 5 files changed, 205 insertions(+), 203 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java index 71f7e2206..fff03defc 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -6,7 +6,7 @@ import com.github.scribejava.apis.salesforce.SalesforceJsonTokenExtractor; /** - * This class is an implementation of the Salesforce OAuth2 API. + * This class is an implementation of the Salesforce OAuth2 API. */ import com.github.scribejava.core.builder.api.DefaultApi20; @@ -15,24 +15,24 @@ import com.github.scribejava.core.model.Verb; public class SalesforceApi extends DefaultApi20 { - - // Constants + + // Constants private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; private static final String ACCESS_URL = BASE_URL + "/token?grant_type=authorization_code"; private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; protected SalesforceApi() { - SSLContext sc; - try { - String protocol = SSLContext.getDefault().getProtocol(); - if (!protocol.equals("TLSv1.2")) { // This is important! - sc = SSLContext.getInstance("TLSv1.2"); - sc.init(null, null, null); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } - } catch (Exception e) { - throw new IllegalStateException("Unexpected JVM without TLS 1.2 support", e); - } + final SSLContext sc; + try { + final String protocol = SSLContext.getDefault().getProtocol(); + if (!"TLSv1.2".equals(protocol)) { // This is important! + sc = SSLContext.getInstance("TLSv1.2"); + sc.init(null, null, null); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } + } catch (Exception e) { + throw new IllegalStateException("Unexpected JVM without TLS 1.2 support", e); + } } private static class InstanceHolder { @@ -42,22 +42,22 @@ private static class InstanceHolder { public static SalesforceApi instance() { return InstanceHolder.INSTANCE; } - + @Override - public Verb getAccessTokenVerb(){ - return Verb.POST; + public Verb getAccessTokenVerb() { + return Verb.POST; } - @Override - public String getAccessTokenEndpoint() { - return ACCESS_URL; - } + @Override + public String getAccessTokenEndpoint() { + return ACCESS_URL; + } + + @Override + protected String getAuthorizationBaseUrl() { + return AUTHORIZE_URL; + } - @Override - protected String getAuthorizationBaseUrl() { - return AUTHORIZE_URL; - } - @Override public TokenExtractor getAccessTokenExtractor() { return SalesforceJsonTokenExtractor.instance(); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java index 6b5f612c1..c3915470f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java @@ -4,7 +4,8 @@ import com.github.scribejava.core.model.OAuth2AccessToken; /** - * This extractor parses in addition to the standard Extractor the instance_url of the used Salesforce organization. + * This extractor parses in addition to the standard Extractor the instance_url + * of the used Salesforce organization. */ public class SalesforceJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java index 6f6961e83..f558ace0b 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java @@ -1,14 +1,16 @@ package com.github.scribejava.apis.salesforce; -import com.github.scribejava.core.model.OAuth2AccessToken; import java.util.Objects; +import com.github.scribejava.core.model.OAuth2AccessToken; + public class SalesforceToken extends OAuth2AccessToken { private static final long serialVersionUID = 7845679917727899612L; /** - * This token model includes the instance_url to address the needed Salesforce organization instance. + * This token model includes the instance_url to address the needed + * Salesforce organization instance. */ private final String instanceUrl; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java index 6175fdca1..2bff9ce64 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java @@ -6,12 +6,11 @@ import java.util.Scanner; import java.util.concurrent.ExecutionException; -import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.apis.SalesforceApi; import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; -import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.ScribeJavaConfig; @@ -19,16 +18,16 @@ import com.github.scribejava.core.oauth.OAuth20Service; import com.ning.http.client.AsyncHttpClientConfig; -public class SalesforceAsyncExample { +public abstract class SalesforceAsyncExample { - private static final String NETWORK_NAME = "Salesforce"; + private static final String NETWORK_NAME = "Salesforce"; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static void main(String[] args) throws InterruptedException, ExecutionException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static void main(String[] args) throws InterruptedException, ExecutionException { - // Replace these with your client id and secret - final String clientId = "your client id"; - final String clientSecret = "your client secret"; - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() .setMaxConnections(5) @@ -37,88 +36,88 @@ public static void main(String[] args) throws InterruptedException, ExecutionExc .setPooledConnectionIdleTimeout(1_000) .setReadTimeout(10_000) .build(); - - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) - .apiSecret(clientSecret) - .asyncHttpClientConfig(clientConfig) - .callback("https://www.example.com/callback") // Salesforce only accepts secured callbacks - .build(SalesforceApi.instance()); - final Scanner in = new Scanner(System.in); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); - in.close(); - - String codeEncoded = code; - - // The code needs to be URL decoded - try { - codeEncoded = URLDecoder.decode(code, "UTF-8"); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - - // Trade the Request Token and Verifier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - System.out.println("Instance is: " + accessToken.getInstanceUrl()); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); - - // Sample SOQL statement - String queryEncoded = "Select Id, Name from Account LIMIT 10"; - - try { - queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - queryEncoded = ""; - } - - if (!queryEncoded.isEmpty()) { - // Building the query URI. We've parsed the instance URL from the accessToken request. - String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; - - System.out.println(); - System.out.println("Full URL: " + url); - - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url, service); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - request.sendAsync(new OAuthAsyncRequestCallback() { - - @Override - public void onThrowable(Throwable t) { - // TODO Auto-generated method stub - - } - - @Override - public void onCompleted(Object response) { - System.out.println(); - System.out.println(((Response)response).getCode()); - System.out.println(((Response)response).getBody()); - } - }); - } - - - } + + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .asyncHttpClientConfig(clientConfig) + .callback("https://www.example.com/callback") + .build(SalesforceApi.instance()); + final Scanner in = new Scanner(System.in); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + in.close(); + + String codeEncoded = code; + + // The code needs to be URL decoded + try { + codeEncoded = URLDecoder.decode(code, "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + System.out.println("Instance is: " + accessToken.getInstanceUrl()); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + + // Sample SOQL statement + String queryEncoded = "Select Id, Name from Account LIMIT 10"; + + try { + queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + queryEncoded = ""; + } + + if (!queryEncoded.isEmpty()) { + // Building the query URI. We've parsed the instance URL from the + // accessToken request. + final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + + System.out.println(); + System.out.println("Full URL: " + url); + + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url, service); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + request.sendAsync(new OAuthAsyncRequestCallback() { + + @Override + public void onThrowable(Throwable t) { + // TODO Auto-generated method stub + + } + + @Override + public void onCompleted(Object response) { + System.out.println(); + System.out.println(((Response) response).getCode()); + System.out.println(((Response) response).getBody()); + } + }); + } + + } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 56e818294..58e4c2262 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -5,91 +5,91 @@ import java.net.URLEncoder; import java.util.Scanner; -import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.apis.SalesforceApi; import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; -public class SalesforceExample { - - private static final String NETWORK_NAME = "Salesforce"; - - public static void main(String[] args) { - // Replace these with your client id and secret - final String clientId = "your client id"; - final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) - .apiSecret(clientSecret) - .callback("https://www.example.com/callback") // Salesforce only accepts secured callbacks - .build(SalesforceApi.instance()); - final Scanner in = new Scanner(System.in); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); - in.close(); - - String codeEncoded = code; - - // The code needs to be URL decoded - try { - codeEncoded = URLDecoder.decode(code, "UTF-8"); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - - // Trade the Request Token and Verifier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - System.out.println("Instance is: " + accessToken.getInstanceUrl()); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); - - // Sample SOQL statement - String queryEncoded = "Select Id, Name from Account LIMIT 10"; - - try { - queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - queryEncoded = ""; - } - - if (!queryEncoded.isEmpty()) { - // Building the query URI. We've parsed the instance URL from the accessToken request. - String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; - - System.out.println(); - System.out.println("Full URL: " + url); - - final OAuthRequest request = new OAuthRequest(Verb.GET, url, service); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - final Response response = request.send(); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - } - - - } +public abstract class SalesforceExample { + + private static final String NETWORK_NAME = "Salesforce"; + + public static void main(String[] args) { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .callback("https://www.example.com/callback") + .build(SalesforceApi.instance()); + final Scanner in = new Scanner(System.in); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + in.close(); + + String codeEncoded = code; + + // The code needs to be URL decoded + try { + codeEncoded = URLDecoder.decode(code, "UTF-8"); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + + accessToken.getRawResponse() + "')"); + System.out.println(); + + System.out.println("Instance is: " + accessToken.getInstanceUrl()); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + + // Sample SOQL statement + String queryEncoded = "Select Id, Name from Account LIMIT 10"; + + try { + queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + queryEncoded = ""; + } + + if (!queryEncoded.isEmpty()) { + // Building the query URI. We've parsed the instance URL from the + // accessToken request. + final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + + System.out.println(); + System.out.println("Full URL: " + url); + + final OAuthRequest request = new OAuthRequest(Verb.GET, url, service); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + final Response response = request.send(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + } + + } } From 7a445e16a8641771fd1d1e1a35e9d7f19f65141d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Wed, 15 Jun 2016 14:58:45 +0200 Subject: [PATCH 097/250] Changed examples to conform with current master --- .../apis/examples/SalesforceAsyncExample.java | 10 ++++++++-- .../scribejava/apis/examples/SalesforceExample.java | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java index 2bff9ce64..09f5a0569 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java @@ -1,5 +1,6 @@ package com.github.scribejava.apis.examples; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; @@ -40,7 +41,7 @@ public static void main(String[] args) throws InterruptedException, ExecutionExc final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) - .asyncHttpClientConfig(clientConfig) + .asyncNingHttpClientConfig(clientConfig) .callback("https://www.example.com/callback") .build(SalesforceApi.instance()); final Scanner in = new Scanner(System.in); @@ -114,7 +115,12 @@ public void onThrowable(Throwable t) { public void onCompleted(Object response) { System.out.println(); System.out.println(((Response) response).getCode()); - System.out.println(((Response) response).getBody()); + try { + System.out.println(((Response) response).getBody()); + } catch (IOException e) { + System.out.println("Error on reading body from async response."); + e.printStackTrace(); + } } }); } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 58e4c2262..1b2ebf695 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -1,5 +1,6 @@ package com.github.scribejava.apis.examples; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; @@ -17,7 +18,7 @@ public abstract class SalesforceExample { private static final String NETWORK_NAME = "Salesforce"; - public static void main(String[] args) { + public static void main(String[] args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; From 821bc7ce67ccddc240642a496a6cb469ceac4761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Fri, 10 Jun 2016 11:22:23 -0700 Subject: [PATCH 098/250] Add Salesforce API --- README.md | 1 + changelog | 3 + .../github/scribejava/apis/SalesforceApi.java | 115 ++++++++++++++++++ .../apis/google/GoogleJsonTokenExtractor.java | 3 +- .../scribejava/apis/google/GoogleToken.java | 25 +--- .../SalesforceJsonTokenExtractor.java | 31 +++++ .../apis/salesforce/SalesforceToken.java | 65 ++++++++++ .../apis/examples/SalesforceExample.java | 83 +++++++++++++ .../examples/SalesforceNingAsyncExample.java | 103 ++++++++++++++++ 9 files changed, 406 insertions(+), 23 deletions(-) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java diff --git a/README.md b/README.md index f1706f4cb..a521eb3e9 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ You can use ning async http client out-of-box, just use ServiceBuilderAsync * Pinterest (https://www.pinterest.com/) * 500px (https://500px.com/) * Renren (http://renren.com/) +* Salesforce (https://www.salesforce.com/) * Sina (http://www.sina.com.cn/ http://weibo.com/login.php) * Skyrock (http://skyrock.com/) * sohu 搜狐 (http://www.sohu.com/) diff --git a/changelog b/changelog index 43f21ea34..93e37cba1 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * add Salesforce API + [2.7.3] * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java new file mode 100644 index 000000000..49c5f7ec6 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -0,0 +1,115 @@ +package com.github.scribejava.apis; + +import javax.net.ssl.SSLContext; + +import com.github.scribejava.apis.salesforce.SalesforceJsonTokenExtractor; +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.Verb; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import javax.net.ssl.SSLSocket; + +/** + * This class is an implementation of the Salesforce OAuth2 API. + */ +public class SalesforceApi extends DefaultApi20 { + + private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; + private static final String ACCESS_URL = BASE_URL + "/token"; + private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; + + protected SalesforceApi() { + + try { + final SSLSocket socket = (SSLSocket) SSLContext.getDefault().getSocketFactory().createSocket(); + if (!isTLSv11orUpperEnabled(socket)) { + throw new IllegalStateException("Salesforce API required to use TLSv1.1 or upper. " + + "Enabled it by invoking method initTLSv11orUpper or somehow else"); + } + } catch (NoSuchAlgorithmException | IOException ex) { + throw new IllegalStateException("Salesforce API required to use TLSv1.1 or upper. " + + "Enabled it by invoking method initTLSv11orUpper or somehow else"); + } + } + + private static class InstanceHolder { + + private static final SalesforceApi INSTANCE = new SalesforceApi(); + } + + public static SalesforceApi instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public Verb getAccessTokenVerb() { + return Verb.POST; + } + + @Override + public String getAccessTokenEndpoint() { + return ACCESS_URL; + } + + @Override + protected String getAuthorizationBaseUrl() { + return AUTHORIZE_URL; + } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return SalesforceJsonTokenExtractor.instance(); + } + + private static boolean isTLSv11orUpperEnabled(final SSLSocket socket) { + for (String protocol : socket.getEnabledProtocols()) { + if ("TLSv1.2".equals(protocol) || "TLSv1.1".equals(protocol)) { + return true; + } + } + return false; + } + + /** + * Salesforce API required to use TLSv1.1 or upper. + *

+ * Java 8 have TLS 1.2 enabled by default. java 7 - no, you should invoke this method or turn TLS>=1.1 somehow + * else

+ * + * @throws java.security.NoSuchAlgorithmException in case your jvm doesn't support TLSv1.1 and TLSv1.2 + * @throws java.security.KeyManagementException + * @throws java.io.IOException + */ + public static void initTLSv11orUpper() throws NoSuchAlgorithmException, KeyManagementException, IOException { + final SSLSocket socket = (SSLSocket) SSLContext.getDefault().getSocketFactory().createSocket(); + if (isTLSv11orUpperEnabled(socket)) { + return; + } + boolean supportTLSv11 = false; + boolean supportTLSv12 = false; + for (String protocol : socket.getSupportedProtocols()) { + if ("TLSv1.2".equals(protocol)) { + supportTLSv12 = true; + break; + } + if ("TLSv1.1".equals(protocol)) { + supportTLSv11 = true; + } + } + + final SSLContext context; + if (supportTLSv12) { + context = SSLContext.getInstance("TLSv1.2"); + } else if (supportTLSv11) { + context = SSLContext.getInstance("TLSv1.1"); + } else { + throw new NoSuchAlgorithmException("for Salesforce API to work you need jvm with TLS 1.1 or 1.2 support"); + } + + context.init(null, null, null); + SSLContext.setDefault(context); + } +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java index 9cac46623..8295ddc3f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java @@ -1,7 +1,6 @@ package com.github.scribejava.apis.google; import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; /** * additionally parses OpenID id_token @@ -23,7 +22,7 @@ public static GoogleJsonTokenExtractor instance() { } @Override - protected OAuth2AccessToken createToken(String accessToken, String tokenType, Integer expiresIn, + protected GoogleToken createToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, String response) { return new GoogleToken(accessToken, tokenType, expiresIn, refreshToken, scope, extractParameter(response, ID_TOKEN_REGEX, false), response); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java index a47395571..68ec31f82 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleToken.java @@ -34,12 +34,7 @@ public String getOpenIdToken() { @Override public int hashCode() { - int hash = 5; - hash = 37 * hash + Objects.hashCode(getAccessToken()); - hash = 37 * hash + Objects.hashCode(getTokenType()); - hash = 37 * hash + Objects.hashCode(getExpiresIn()); - hash = 37 * hash + Objects.hashCode(getRefreshToken()); - hash = 37 * hash + Objects.hashCode(getScope()); + int hash = super.hashCode(); hash = 37 * hash + Objects.hashCode(openIdToken); return hash; } @@ -55,23 +50,11 @@ public boolean equals(Object obj) { if (getClass() != obj.getClass()) { return false; } - final GoogleToken other = (GoogleToken) obj; - if (!Objects.equals(getAccessToken(), other.getAccessToken())) { + if (!super.equals(obj)) { return false; } - if (!Objects.equals(getTokenType(), other.getTokenType())) { - return false; - } - if (!Objects.equals(getRefreshToken(), other.getRefreshToken())) { - return false; - } - if (!Objects.equals(getScope(), other.getScope())) { - return false; - } - if (!Objects.equals(openIdToken, other.getOpenIdToken())) { - return false; - } - return Objects.equals(getExpiresIn(), other.getExpiresIn()); + + return Objects.equals(openIdToken, ((GoogleToken) obj).getOpenIdToken()); } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java new file mode 100644 index 000000000..2f219163a --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java @@ -0,0 +1,31 @@ +package com.github.scribejava.apis.salesforce; + +import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; + +/** + * This extractor parses in addition to the standard Extractor the instance_url + * of the used Salesforce organization. + */ +public class SalesforceJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { + + private static final String INSTANCE_URL_REGEX = "\"instance_url\"\\s*:\\s*\"(\\S*?)\""; + + protected SalesforceJsonTokenExtractor() { + } + + private static class InstanceHolder { + + private static final SalesforceJsonTokenExtractor INSTANCE = new SalesforceJsonTokenExtractor(); + } + + public static SalesforceJsonTokenExtractor instance() { + return InstanceHolder.INSTANCE; + } + + @Override + protected SalesforceToken createToken(String accessToken, String tokenType, Integer expiresIn, + String refreshToken, String scope, String response) { + return new SalesforceToken(accessToken, tokenType, expiresIn, refreshToken, scope, + extractParameter(response, INSTANCE_URL_REGEX, true), response); + } +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java new file mode 100644 index 000000000..548e374ab --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java @@ -0,0 +1,65 @@ +package com.github.scribejava.apis.salesforce; + +import java.util.Objects; + +import com.github.scribejava.core.model.OAuth2AccessToken; + +public class SalesforceToken extends OAuth2AccessToken { + + private static final long serialVersionUID = 7845679917727899612L; + + /** + * This token model includes the instance_url to address the needed + * Salesforce organization instance. + */ + private final String instanceUrl; + + public SalesforceToken(String accessToken, String instanceUrl, String rawResponse) { + this(accessToken, null, null, null, null, instanceUrl, rawResponse); + } + + public SalesforceToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, + String instanceUrl, String rawResponse) { + super(accessToken, tokenType, expiresIn, refreshToken, scope, rawResponse); + this.instanceUrl = instanceUrl; + } + + public String getInstanceUrl() { + return instanceUrl; + } + + @Override + public int hashCode() { + int hash = super.hashCode(); + hash = 37 * hash + Objects.hashCode(instanceUrl); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + if (!super.equals(obj)) { + return false; + } + return Objects.equals(instanceUrl, ((SalesforceToken) obj).getInstanceUrl()); + } + + @Override + public String toString() { + return "SalesforceToken{" + + "access_token=" + getAccessToken() + + ", token_type=" + getTokenType() + + ", expires_in=" + getExpiresIn() + + ", refresh_token=" + getRefreshToken() + + ", scope=" + getScope() + + ", instance_url=" + instanceUrl + '}'; + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java new file mode 100644 index 000000000..3d89c23fb --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -0,0 +1,83 @@ +package com.github.scribejava.apis.examples; + +import java.io.IOException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Scanner; + +import com.github.scribejava.apis.SalesforceApi; +import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; + +public abstract class SalesforceExample { + + private static final String NETWORK_NAME = "Salesforce"; + + public static void main(String... args) throws IOException, NoSuchAlgorithmException, KeyManagementException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + //IT's important! Salesforce upper require TLS v1.1 or 1.2 + SalesforceApi.initTLSv11orUpper(); + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .callback("https://www.example.com/callback") + .build(SalesforceApi.instance()); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code; + try (Scanner in = new Scanner(System.in)) { + code = in.nextLine(); + } + System.out.println(); + + // The code needs to be URL decoded + final String codeEncoded = URLDecoder.decode(code, "UTF-8"); + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + + accessToken.getRawResponse() + "')"); + System.out.println(); + + System.out.println("instance_url is: " + accessToken.getInstanceUrl()); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + + // Sample SOQL statement + final String queryEncoded = URLEncoder.encode("Select Id, Name from Account LIMIT 10", "UTF-8"); + + // Building the query URI. We've parsed the instance URL from the accessToken request. + final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + + System.out.println(); + System.out.println("Full URL: " + url); + + final OAuthRequest request = new OAuthRequest(Verb.GET, url, service); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + final Response response = request.send(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java new file mode 100644 index 000000000..40d72f9da --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -0,0 +1,103 @@ +package com.github.scribejava.apis.examples; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Scanner; +import java.util.concurrent.ExecutionException; + +import com.github.scribejava.apis.SalesforceApi; +import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.ScribeJavaConfig; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.ning.http.client.AsyncHttpClientConfig; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; + +public abstract class SalesforceNingAsyncExample { + + private static final String NETWORK_NAME = "Salesforce"; + + @SuppressWarnings({"unchecked", "rawtypes"}) + public static void main(String... args) throws InterruptedException, ExecutionException, + UnsupportedEncodingException, IOException, NoSuchAlgorithmException, KeyManagementException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + + ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); + final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + .setMaxConnections(5) + .setRequestTimeout(10_000) + .setAllowPoolingConnections(false) + .setPooledConnectionIdleTimeout(1_000) + .setReadTimeout(10_000) + .build(); + + //IT's important! Salesforce upper require TLS v1.1 or 1.2 + SalesforceApi.initTLSv11orUpper(); + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .asyncNingHttpClientConfig(clientConfig) + .callback("https://www.example.com/callback") + .build(SalesforceApi.instance()); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code; + try (Scanner in = new Scanner(System.in)) { + code = in.nextLine(); + } + System.out.println(); + + final String codeEncoded = URLDecoder.decode(code, "UTF-8"); + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + System.out.println("Instance is: " + accessToken.getInstanceUrl()); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + + // Sample SOQL statement + final String queryEncoded = URLEncoder.encode("Select Id, Name from Account LIMIT 10", "UTF-8"); + + // Building the query URI. We've parsed the instance URL from the + // accessToken request. + final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + + System.out.println(); + System.out.println("Full URL: " + url); + + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url, service); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + final Response response = request.sendAsync(null).get(); + + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + service.closeAsyncClient(); + } +} From 8dc38d9f0435375de0b47781a1723265cc8e48dd Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 16 Jun 2016 13:51:55 +0400 Subject: [PATCH 099/250] Revert "Adds API provider for Salesforce" --- README.md | 1 - .../github/scribejava/apis/SalesforceApi.java | 66 --------- .../SalesforceJsonTokenExtractor.java | 32 ----- .../apis/salesforce/SalesforceToken.java | 83 ----------- .../apis/examples/SalesforceAsyncExample.java | 129 ------------------ .../apis/examples/SalesforceExample.java | 96 ------------- 6 files changed, 407 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java delete mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java delete mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java diff --git a/README.md b/README.md index a521eb3e9..f1706f4cb 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,6 @@ You can use ning async http client out-of-box, just use ServiceBuilderAsync * Pinterest (https://www.pinterest.com/) * 500px (https://500px.com/) * Renren (http://renren.com/) -* Salesforce (https://www.salesforce.com/) * Sina (http://www.sina.com.cn/ http://weibo.com/login.php) * Skyrock (http://skyrock.com/) * sohu 搜狐 (http://www.sohu.com/) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java deleted file mode 100644 index fff03defc..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.github.scribejava.apis; - -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; - -import com.github.scribejava.apis.salesforce.SalesforceJsonTokenExtractor; - -/** - * This class is an implementation of the Salesforce OAuth2 API. - */ - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.Verb; - -public class SalesforceApi extends DefaultApi20 { - - // Constants - private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; - private static final String ACCESS_URL = BASE_URL + "/token?grant_type=authorization_code"; - private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; - - protected SalesforceApi() { - final SSLContext sc; - try { - final String protocol = SSLContext.getDefault().getProtocol(); - if (!"TLSv1.2".equals(protocol)) { // This is important! - sc = SSLContext.getInstance("TLSv1.2"); - sc.init(null, null, null); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } - } catch (Exception e) { - throw new IllegalStateException("Unexpected JVM without TLS 1.2 support", e); - } - } - - private static class InstanceHolder { - private static final SalesforceApi INSTANCE = new SalesforceApi(); - } - - public static SalesforceApi instance() { - return InstanceHolder.INSTANCE; - } - - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - - @Override - public String getAccessTokenEndpoint() { - return ACCESS_URL; - } - - @Override - protected String getAuthorizationBaseUrl() { - return AUTHORIZE_URL; - } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return SalesforceJsonTokenExtractor.instance(); - } - -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java deleted file mode 100644 index c3915470f..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.github.scribejava.apis.salesforce; - -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; - -/** - * This extractor parses in addition to the standard Extractor the instance_url - * of the used Salesforce organization. - */ -public class SalesforceJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { - - private static final String INSTANCE_URL_REGEX = "\"instance_url\"\\s*:\\s*\"(\\S*?)\""; - - protected SalesforceJsonTokenExtractor() { - } - - private static class InstanceHolder { - - private static final SalesforceJsonTokenExtractor INSTANCE = new SalesforceJsonTokenExtractor(); - } - - public static SalesforceJsonTokenExtractor instance() { - return InstanceHolder.INSTANCE; - } - - @Override - protected OAuth2AccessToken createToken(String accessToken, String tokenType, Integer expiresIn, - String refreshToken, String scope, String response) { - return new SalesforceToken(accessToken, tokenType, expiresIn, refreshToken, scope, - extractParameter(response, INSTANCE_URL_REGEX, true), response); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java deleted file mode 100644 index f558ace0b..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.github.scribejava.apis.salesforce; - -import java.util.Objects; - -import com.github.scribejava.core.model.OAuth2AccessToken; - -public class SalesforceToken extends OAuth2AccessToken { - - private static final long serialVersionUID = 7845679917727899612L; - - /** - * This token model includes the instance_url to address the needed - * Salesforce organization instance. - */ - private final String instanceUrl; - - public SalesforceToken(String accessToken, String instanceUrl, String rawResponse) { - this(accessToken, null, null, null, null, instanceUrl, rawResponse); - } - - public SalesforceToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, - String instanceUrl, String rawResponse) { - super(accessToken, tokenType, expiresIn, refreshToken, scope, rawResponse); - this.instanceUrl = instanceUrl; - } - - public String getInstanceUrl() { - return instanceUrl; - } - - @Override - public int hashCode() { - int hash = 5; - hash = 37 * hash + Objects.hashCode(getAccessToken()); - hash = 37 * hash + Objects.hashCode(getTokenType()); - hash = 37 * hash + Objects.hashCode(getExpiresIn()); - hash = 37 * hash + Objects.hashCode(getRefreshToken()); - hash = 37 * hash + Objects.hashCode(getScope()); - hash = 37 * hash + Objects.hashCode(getInstanceUrl()); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final SalesforceToken other = (SalesforceToken) obj; - if (!Objects.equals(getAccessToken(), other.getAccessToken())) { - return false; - } - if (!Objects.equals(getTokenType(), other.getTokenType())) { - return false; - } - if (!Objects.equals(getRefreshToken(), other.getRefreshToken())) { - return false; - } - if (!Objects.equals(getScope(), other.getScope())) { - return false; - } - if (!Objects.equals(getInstanceUrl(), other.getInstanceUrl())) { - return false; - } - return Objects.equals(getExpiresIn(), other.getExpiresIn()); - } - - @Override - public String toString() { - return "SalesforceToken{" - + "access_token=" + getAccessToken() - + ", token_type=" + getTokenType() - + ", expires_in=" + getExpiresIn() - + ", refresh_token=" + getRefreshToken() - + ", scope=" + getScope() - + ", instance_url=" + getInstanceUrl() + '}'; - } -} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java deleted file mode 100644 index 09f5a0569..000000000 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceAsyncExample.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.github.scribejava.apis.examples; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.Scanner; -import java.util.concurrent.ExecutionException; - -import com.github.scribejava.apis.SalesforceApi; -import com.github.scribejava.apis.salesforce.SalesforceToken; -import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.ForceTypeOfHttpRequest; -import com.github.scribejava.core.model.OAuthAsyncRequestCallback; -import com.github.scribejava.core.model.OAuthRequestAsync; -import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.ScribeJavaConfig; -import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth20Service; -import com.ning.http.client.AsyncHttpClientConfig; - -public abstract class SalesforceAsyncExample { - - private static final String NETWORK_NAME = "Salesforce"; - - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static void main(String[] args) throws InterruptedException, ExecutionException { - // Replace these with your client id and secret - final String clientId = "your client id"; - final String clientSecret = "your client secret"; - - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() - .setMaxConnections(5) - .setRequestTimeout(10_000) - .setAllowPoolingConnections(false) - .setPooledConnectionIdleTimeout(1_000) - .setReadTimeout(10_000) - .build(); - - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) - .apiSecret(clientSecret) - .asyncNingHttpClientConfig(clientConfig) - .callback("https://www.example.com/callback") - .build(SalesforceApi.instance()); - final Scanner in = new Scanner(System.in); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); - in.close(); - - String codeEncoded = code; - - // The code needs to be URL decoded - try { - codeEncoded = URLDecoder.decode(code, "UTF-8"); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - - // Trade the Request Token and Verifier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - System.out.println("Instance is: " + accessToken.getInstanceUrl()); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); - - // Sample SOQL statement - String queryEncoded = "Select Id, Name from Account LIMIT 10"; - - try { - queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - queryEncoded = ""; - } - - if (!queryEncoded.isEmpty()) { - // Building the query URI. We've parsed the instance URL from the - // accessToken request. - final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; - - System.out.println(); - System.out.println("Full URL: " + url); - - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url, service); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - request.sendAsync(new OAuthAsyncRequestCallback() { - - @Override - public void onThrowable(Throwable t) { - // TODO Auto-generated method stub - - } - - @Override - public void onCompleted(Object response) { - System.out.println(); - System.out.println(((Response) response).getCode()); - try { - System.out.println(((Response) response).getBody()); - } catch (IOException e) { - System.out.println("Error on reading body from async response."); - e.printStackTrace(); - } - } - }); - } - - } -} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java deleted file mode 100644 index 1b2ebf695..000000000 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.github.scribejava.apis.examples; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.Scanner; - -import com.github.scribejava.apis.SalesforceApi; -import com.github.scribejava.apis.salesforce.SalesforceToken; -import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth20Service; - -public abstract class SalesforceExample { - - private static final String NETWORK_NAME = "Salesforce"; - - public static void main(String[] args) throws IOException { - // Replace these with your client id and secret - final String clientId = "your client id"; - final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) - .apiSecret(clientSecret) - .callback("https://www.example.com/callback") - .build(SalesforceApi.instance()); - final Scanner in = new Scanner(System.in); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); - in.close(); - - String codeEncoded = code; - - // The code needs to be URL decoded - try { - codeEncoded = URLDecoder.decode(code, "UTF-8"); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - - // Trade the Request Token and Verifier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" - + accessToken.getRawResponse() + "')"); - System.out.println(); - - System.out.println("Instance is: " + accessToken.getInstanceUrl()); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); - - // Sample SOQL statement - String queryEncoded = "Select Id, Name from Account LIMIT 10"; - - try { - queryEncoded = URLEncoder.encode(queryEncoded, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - queryEncoded = ""; - } - - if (!queryEncoded.isEmpty()) { - // Building the query URI. We've parsed the instance URL from the - // accessToken request. - final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; - - System.out.println(); - System.out.println("Full URL: " + url); - - final OAuthRequest request = new OAuthRequest(Verb.GET, url, service); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - final Response response = request.send(); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - } - - } -} From 8aa7913a5dcf859dbd0585750cc43a56a5ba167c Mon Sep 17 00:00:00 2001 From: Alex Gyori Date: Mon, 20 Jun 2016 16:57:13 -0500 Subject: [PATCH 100/250] Fixed shouldExtractStandardHeader to not rely on the unguaranteed order of HashMap and make it work cross platform. --- .../core/extractors/HeaderExtractorTest.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java index 8de9d5c50..abad45f7e 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java @@ -1,6 +1,7 @@ package com.github.scribejava.core.extractors; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import com.github.scribejava.core.exceptions.OAuthParametersMissingException; @@ -24,16 +25,24 @@ public void setUp() { @Test public void shouldExtractStandardHeader() { final String header = extractor.extract(request); - try { - assertEquals("OAuth oauth_callback=\"http%3A%2F%2Fexample%2Fcallback\", " - + "oauth_signature=\"OAuth-Signature\", oauth_consumer_key=\"AS%23%24%5E%2A%40%26\", " - + "oauth_timestamp=\"123456\"", header); - } catch (AssertionError ae) { - //maybe this is OpenJDK 8? Different order of elements in HashMap while iterating'em. - assertEquals("OAuth oauth_signature=\"OAuth-Signature\", " - + "oauth_callback=\"http%3A%2F%2Fexample%2Fcallback\", " - + "oauth_consumer_key=\"AS%23%24%5E%2A%40%26\", oauth_timestamp=\"123456\"", header); - } + final String oauth = "OAuth "; + final String callback = "oauth_callback=\"http%3A%2F%2Fexample%2Fcallback\""; + final String signature = "oauth_signature=\"OAuth-Signature\""; + final String key = "oauth_consumer_key=\"AS%23%24%5E%2A%40%26\""; + final String timestamp = "oauth_timestamp=\"123456\""; + + assertTrue(header.contains(oauth)); + assertTrue(header.contains(callback)); + assertTrue(header.contains(signature)); + assertTrue(header.contains(key)); + assertTrue(header.contains(timestamp)); + // Assert that header only contains the checked elements above and nothing else + assertEquals(", , , ", + header.replaceFirst(oauth, "") + .replaceFirst(callback, "") + .replaceFirst(signature, "") + .replaceFirst(key, "") + .replaceFirst(timestamp, "")); } @Test(expected = IllegalArgumentException.class) From a0ea48fea9da283d5c0525601793957856c3d095 Mon Sep 17 00:00:00 2001 From: Alex Gyori Date: Mon, 20 Jun 2016 17:27:50 -0500 Subject: [PATCH 101/250] the string should start with oauth --- .../github/scribejava/core/extractors/HeaderExtractorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java index abad45f7e..356a1fbba 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java @@ -31,7 +31,7 @@ public void shouldExtractStandardHeader() { final String key = "oauth_consumer_key=\"AS%23%24%5E%2A%40%26\""; final String timestamp = "oauth_timestamp=\"123456\""; - assertTrue(header.contains(oauth)); + assertTrue(header.startsWith(oauth)); assertTrue(header.contains(callback)); assertTrue(header.contains(signature)); assertTrue(header.contains(key)); From b4aa3c4355fa9bee04e713581a4d5fc24cc98435 Mon Sep 17 00:00:00 2001 From: Alex Gyori Date: Tue, 21 Jun 2016 11:44:27 -0500 Subject: [PATCH 102/250] fixed test to not rely on HashMap's internal ordering --- .../java/com/github/scribejava/core/utils/MapUtilsTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/utils/MapUtilsTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/utils/MapUtilsTest.java index dc6bd38d5..9ce36c76f 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/utils/MapUtilsTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/utils/MapUtilsTest.java @@ -1,5 +1,6 @@ package com.github.scribejava.core.utils; +import java.util.LinkedHashMap; import java.util.HashMap; import java.util.Map; import org.junit.Assert; @@ -9,7 +10,7 @@ public class MapUtilsTest { @Test public void shouldPrettyPrintMap() { - final Map map = new HashMap<>(); + final Map map = new LinkedHashMap<>(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); From f4cf3049a0cec179660df7d0189599c081a0c690 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 22 Jun 2016 11:40:07 +0300 Subject: [PATCH 103/250] small performance boost in MapUtils --- .../java/com/github/scribejava/core/utils/MapUtils.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/MapUtils.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/MapUtils.java index bf48341fb..9cb217cb9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/utils/MapUtils.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/utils/MapUtils.java @@ -14,8 +14,12 @@ public static String toString(Map map) { final StringBuilder result = new StringBuilder(); for (Map.Entry entry : map.entrySet()) { - result.append(String.format(", %s -> %s ", entry.getKey().toString(), entry.getValue().toString())); + result.append(", ") + .append(entry.getKey().toString()) + .append(" -> ") + .append(entry.getValue().toString()) + .append(' '); } - return "{" + result.substring(1) + "}"; + return "{" + result.append('}').substring(1); } } From 9b7751af9954a7e8f89e77f5d19a8ba618fc35cb Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 22 Jun 2016 12:16:46 +0300 Subject: [PATCH 104/250] update LinkedIn API --- changelog | 1 + .../java/com/github/scribejava/apis/LinkedInApi20.java | 10 ++-------- .../scribejava/apis/salesforce/SalesforceToken.java | 2 +- .../scribejava/apis/examples/LinkedIn20Example.java | 2 +- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/changelog b/changelog index 93e37cba1..a1ec2596f 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * add Salesforce API + * update Linked In API [2.7.3] * FIX: ScribeJava shouldn't require all async http client provider to be on the classpath if using only one of them diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java index b39f4a33b..88dc30e7f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java @@ -3,7 +3,6 @@ import com.github.scribejava.apis.service.LinkedIn20ServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; public class LinkedInApi20 extends DefaultApi20 { @@ -19,19 +18,14 @@ public static LinkedInApi20 instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.GET; - } - @Override public String getAccessTokenEndpoint() { - return "https://www.linkedin.com/uas/oauth2/accessToken"; + return "https://www.linkedin.com/oauth/v2/accessToken"; } @Override protected String getAuthorizationBaseUrl() { - return "https://www.linkedin.com/uas/oauth2/authorization"; + return "https://www.linkedin.com/oauth/v2/authorization"; } @Override diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java index 548e374ab..14a0911cd 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceToken.java @@ -6,7 +6,7 @@ public class SalesforceToken extends OAuth2AccessToken { - private static final long serialVersionUID = 7845679917727899612L; + private static final long serialVersionUID = 7496092256264195577L; /** * This token model includes the instance_url to address the needed diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index a39c79890..f29d1907b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -21,7 +21,7 @@ public static void main(String... args) throws IOException { final String clientSecret = "your client secret"; final OAuth20Service service = new ServiceBuilder() .apiKey(clientId).apiSecret(clientSecret) - .scope("r_basicprofile,r_emailaddress") // replace with desired scope + .scope("r_basicprofile r_emailaddress") // replace with desired scope .callback("http://example.com/callback") .state("some_params") .build(LinkedInApi20.instance()); From f3feb933e76079639bdf21d2ceaa95c046c59da7 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 23 Jun 2016 10:24:45 +0300 Subject: [PATCH 105/250] prepare 2.8.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a521eb3e9..2c7e892eb 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.7.3 + 2.8.0 ``` @@ -95,7 +95,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.7.3 + 2.8.0 ``` diff --git a/changelog b/changelog index a1ec2596f..b510e4e8c 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[2.8.0] * add Salesforce API * update Linked In API From 8b9365c91a9c4ff543cf9ec87c785efe93e5c9f1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 23 Jun 2016 10:25:43 +0300 Subject: [PATCH 106/250] [maven-release-plugin] prepare release scribejava-2.8.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 723b1b5e1..31c270adf 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.7.4-SNAPSHOT + 2.8.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 465b17303..484a798a8 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.4-SNAPSHOT + 2.8.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 50e937547..87e01242a 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.7.4-SNAPSHOT + 2.8.0 ../pom.xml From 9d93c5b0e2e12ad7926c959cd48ec10b9e258a25 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 23 Jun 2016 10:25:47 +0300 Subject: [PATCH 107/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 31c270adf..225b9e8c2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.8.0 + 2.8.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 484a798a8..5f91a25f1 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.0 + 2.8.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 87e01242a..ee3233c85 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.0 + 2.8.1-SNAPSHOT ../pom.xml From 4bc60b0b7a9f874dfc2bd18b8f592a95794f0e7b Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 29 Jun 2016 12:44:43 +0300 Subject: [PATCH 108/250] improve comment verbosity a bit for SalesForce and TLS (java7 vs java8) --- .../com/github/scribejava/apis/examples/SalesforceExample.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 3d89c23fb..e17615c99 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -23,7 +23,8 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - //IT's important! Salesforce upper require TLS v1.1 or 1.2 + //IT's important! Salesforce upper require TLS v1.1 or 1.2. + //They are enabled in Java 8 by default, but not in Java 7 SalesforceApi.initTLSv11orUpper(); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) From 2a94b585835e4f1b1eafea93e988837496f80cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Winkelmeyer?= Date: Fri, 1 Jul 2016 16:32:42 +0200 Subject: [PATCH 109/250] Added Salesforce Sandbox support Salesforce differences between access to production systems and sandbox (testing) systems. For that another login/API url must be used. --- .../github/scribejava/apis/SalesforceApi.java | 39 +++++++++++++------ .../apis/examples/SalesforceExample.java | 7 ++++ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java index 49c5f7ec6..95e5e2816 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SalesforceApi.java @@ -14,15 +14,28 @@ /** * This class is an implementation of the Salesforce OAuth2 API. + * The default implementation connects to the Salesforce + * production environment. + * If you want to connect to a Sandbox environment you've to use {@link #sandbox()} method to + * get sandbox instance of this API */ public class SalesforceApi extends DefaultApi20 { - private static final String BASE_URL = "https://login.salesforce.com/services/oauth2"; - private static final String ACCESS_URL = BASE_URL + "/token"; - private static final String AUTHORIZE_URL = BASE_URL + "/authorize"; + private static final String PRODUCTION_HOST = "login.salesforce.com"; + private static final String SANDBOX_HOST = "test.salesforce.com"; + private static final String PROTOCOL = "https://"; + private static final String ACCESS_PATH = "/services/oauth2/token"; + private static final String AUTHORIZE_PATH = "/services/oauth2/authorize"; - protected SalesforceApi() { + private final String accessTokenUrl; + private final String authorizationBaseUrl; + /** + * @param hostName The hostname to be used, which is either {@link #PRODUCTION_HOST} or {@link #SANDBOX_HOST}. + */ + protected SalesforceApi(String hostName) { + accessTokenUrl = PROTOCOL + hostName + ACCESS_PATH; + authorizationBaseUrl = PROTOCOL + hostName + AUTHORIZE_PATH; try { final SSLSocket socket = (SSLSocket) SSLContext.getDefault().getSocketFactory().createSocket(); if (!isTLSv11orUpperEnabled(socket)) { @@ -36,14 +49,17 @@ protected SalesforceApi() { } private static class InstanceHolder { - - private static final SalesforceApi INSTANCE = new SalesforceApi(); + private static final SalesforceApi INSTANCE = new SalesforceApi(PRODUCTION_HOST); } public static SalesforceApi instance() { return InstanceHolder.INSTANCE; } + public static SalesforceApi sandbox() { + return new SalesforceApi(SANDBOX_HOST); + } + @Override public Verb getAccessTokenVerb() { return Verb.POST; @@ -51,12 +67,12 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return ACCESS_URL; + return accessTokenUrl; } @Override protected String getAuthorizationBaseUrl() { - return AUTHORIZE_URL; + return authorizationBaseUrl; } @Override @@ -74,14 +90,15 @@ private static boolean isTLSv11orUpperEnabled(final SSLSocket socket) { } /** - * Salesforce API required to use TLSv1.1 or upper. + * Salesforce API requires to use TLSv1.1 or upper. *

* Java 8 have TLS 1.2 enabled by default. java 7 - no, you should invoke this method or turn TLS>=1.1 somehow * else

* * @throws java.security.NoSuchAlgorithmException in case your jvm doesn't support TLSv1.1 and TLSv1.2 - * @throws java.security.KeyManagementException - * @throws java.io.IOException + * @throws java.security.KeyManagementException unexpected Exception from + * {@link SSLContext#init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom)} + * @throws java.io.IOException unexpected Exception from {@link javax.net.ssl.SSLSocketFactory#createSocket()} */ public static void initTLSv11orUpper() throws NoSuchAlgorithmException, KeyManagementException, IOException { final SSLSocket socket = (SSLSocket) SSLContext.getDefault().getSocketFactory().createSocket(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index e17615c99..1189fa30c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -26,6 +26,13 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep //IT's important! Salesforce upper require TLS v1.1 or 1.2. //They are enabled in Java 8 by default, but not in Java 7 SalesforceApi.initTLSv11orUpper(); + + // The below used ServiceBuilder connects to login.salesforce.com + // (production environment). + // + // When you plan to connect to a Sandbox environment you've to use SalesforceApi.sandbox() API instance + // new ServiceBuilder.....build(SalesforceApi.sandbox()); + final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) From b1ccc51c0f3f9a3d08c5894430b101f4f2ad8120 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 4 Jul 2016 19:19:39 +0300 Subject: [PATCH 110/250] update POM dependency versions and remove unused wagon webdav extension --- pom.xml | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 225b9e8c2..99b2c216f 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ com.google.code.gson gson - 2.6.2 + 2.7 test @@ -102,7 +102,7 @@ org.asynchttpclient async-http-client - 2.0.4 + 2.0.9 provided @@ -126,7 +126,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.0.0 + 3.0.2 ${project.build.outputDirectory}/META-INF/MANIFEST.MF @@ -135,13 +135,6 @@
- - - org.apache.maven.wagon - wagon-webdav - 1.0-beta-2 - - maven-compiler-plugin @@ -169,7 +162,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.0.0 + 3.0.1 UTF-8 @@ -177,7 +170,7 @@ org.apache.maven.plugins maven-source-plugin - 3.0.0 + 3.0.1 attach-sources @@ -190,7 +183,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.10.3 + 2.10.4 UTF-8 @@ -211,7 +204,7 @@ com.puppycrawl.tools checkstyle - 6.19 + 7.0 From 3e4f2ea2bba53c247f7d9062e500873cc2a0d345 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 4 Jul 2016 19:20:44 +0300 Subject: [PATCH 111/250] prepare 2.8.1 release --- README.md | 4 ++-- changelog | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2c7e892eb..993ff954a 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.8.0 + 2.8.1 ``` @@ -95,7 +95,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.8.0 + 2.8.1 ``` diff --git a/changelog b/changelog index b510e4e8c..eee7f1cad 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[2.8.1] + * add Salesforce sandbox API support + [2.8.0] * add Salesforce API * update Linked In API From 7783dc8333bdfb27ae408f13fe6be7a96e78beaf Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 4 Jul 2016 19:22:33 +0300 Subject: [PATCH 112/250] [maven-release-plugin] prepare release scribejava-2.8.1 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 99b2c216f..a269e17be 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.8.1-SNAPSHOT + 2.8.1 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 5f91a25f1..f3703d59f 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.1-SNAPSHOT + 2.8.1 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index ee3233c85..a276d26ac 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.1-SNAPSHOT + 2.8.1 ../pom.xml From ce8bc70c75bb9bfac33514c90ee402f4bdd4d7c2 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 4 Jul 2016 19:22:38 +0300 Subject: [PATCH 113/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index a269e17be..7eeeecff9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.8.1 + 2.8.2-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index f3703d59f..095ecbd2d 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.1 + 2.8.2-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index a276d26ac..62e072945 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.1 + 2.8.2-SNAPSHOT ../pom.xml From fd632097101f105c8b8d95a4d5c14725fbb03c0f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 5 Jul 2016 16:22:35 +0300 Subject: [PATCH 114/250] drop unused Jabber contact --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7eeeecff9..68bf28a27 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,6 @@ +3 - kullfar@jabber.ru kullfar@gmail.com +7-909-677-11-16 From c9464faaa18160152848f823eacdb1c732a990a6 Mon Sep 17 00:00:00 2001 From: Julien Herr Date: Tue, 12 Jul 2016 16:38:48 +0200 Subject: [PATCH 115/250] Fix #683 - Extract HTTP client logic into providers --- pom.xml | 14 +- scribejava-apis/pom.xml | 12 ++ .../examples/FacebookAsyncNingExample.java | 7 +- .../examples/Google20AsyncAHCExample.java | 9 +- .../apis/examples/MailruAsyncExample.java | 7 +- .../examples/SalesforceNingAsyncExample.java | 7 +- .../core/builder/ServiceBuilder.java | 36 ++--- .../core/httpclient/HttpClientProvider.java | 8 ++ .../scribejava/core/model/HttpClient.java | 16 +++ .../scribejava/core/model/OAuthConfig.java | 27 +--- .../scribejava/core/oauth/OAuthService.java | 129 +++--------------- scribejava-httpclient-ahc/pom.xml | 42 ++++++ .../httpclient/ahc/AhcHttpClient.java | 63 +++++++++ .../httpclient/ahc/AhcHttpClientConfig.java | 17 +++ .../httpclient/ahc/AhcProvider.java | 15 ++ .../ahc/OAuthAsyncCompletionHandler.java | 2 +- ...ibejava.core.httpclient.HttpClientProvider | 1 + scribejava-httpclient-ning/pom.xml | 42 ++++++ .../httpclient/ning/NingHttpClient.java | 64 +++++++++ .../httpclient/ning/NingHttpClientConfig.java | 26 ++++ .../httpclient/ning/NingProvider.java | 15 ++ .../ning/OAuthAsyncCompletionHandler.java | 2 +- ...ibejava.core.httpclient.HttpClientProvider | 1 + 23 files changed, 378 insertions(+), 184 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java create mode 100644 scribejava-httpclient-ahc/pom.xml create mode 100644 scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java create mode 100644 scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java create mode 100644 scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java rename {scribejava-core/src/main/java/com/github/scribejava/core/async => scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient}/ahc/OAuthAsyncCompletionHandler.java (97%) create mode 100644 scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider create mode 100644 scribejava-httpclient-ning/pom.xml create mode 100644 scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java create mode 100644 scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java create mode 100644 scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java rename {scribejava-core/src/main/java/com/github/scribejava/core/async => scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient}/ning/OAuthAsyncCompletionHandler.java (97%) create mode 100644 scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider diff --git a/pom.xml b/pom.xml index 68bf28a27..f14895e91 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,8 @@ scribejava-core scribejava-apis + scribejava-httpclient-ahc + scribejava-httpclient-ning @@ -92,18 +94,6 @@ compile true - - com.ning - async-http-client - 1.9.38 - provided - - - org.asynchttpclient - async-http-client - 2.0.9 - provided - diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 095ecbd2d..703c30f30 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -20,6 +20,18 @@ scribejava-core ${project.version} + + com.github.scribejava + scribejava-ahc + ${project.version} + test + + + com.github.scribejava + scribejava-ning + ${project.version} + test + diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index 373759c35..a3c99e114 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -1,5 +1,6 @@ package com.github.scribejava.apis.examples; +import com.github.scribejava.httpclient.ning.NingHttpClientConfig; import com.ning.http.client.AsyncHttpClientConfig; import java.util.Random; import java.util.Scanner; @@ -26,20 +27,20 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) .setAllowPoolingConnections(false) .setPooledConnectionIdleTimeout(1_000) .setReadTimeout(1_000) - .build(); + .build()); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") - .asyncNingHttpClientConfig(clientConfig) + .httpClientConfig(clientConfig) .build(FacebookApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index 6ad067acf..abe2fc789 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -3,8 +3,10 @@ import java.util.Random; import java.util.Scanner; import com.github.scribejava.apis.GoogleApi20; +import com.github.scribejava.httpclient.ahc.AhcHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.HttpClient; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; @@ -15,7 +17,6 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; -import org.asynchttpclient.AsyncHttpClientConfig; import org.asynchttpclient.DefaultAsyncHttpClientConfig; public abstract class Google20AsyncAHCExample { @@ -29,12 +30,12 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - final AsyncHttpClientConfig clientConfig = new DefaultAsyncHttpClientConfig.Builder() + final HttpClient.Config clientConfig = new AhcHttpClientConfig(new DefaultAsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) .setPooledConnectionIdleTimeout(1_000) .setReadTimeout(1_000) - .build(); + .build()); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) @@ -42,7 +43,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .scope("profile") // replace with desired scope .state(secretState) .callback("http://example.com/callback") - .asyncAHCHttpClientConfig(clientConfig) + .httpClientConfig(clientConfig) .build(GoogleApi20.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index 6ca98d697..a32946ba5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -1,5 +1,6 @@ package com.github.scribejava.apis.examples; +import com.github.scribejava.httpclient.ning.NingHttpClientConfig; import com.ning.http.client.AsyncHttpClientConfig; import java.util.Scanner; import java.util.concurrent.ExecutionException; @@ -23,19 +24,19 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientId = "your client id"; final String clientSecret = "your client secret"; - final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) .setAllowPoolingConnections(false) .setPooledConnectionIdleTimeout(1_000) .setReadTimeout(10_000) - .build(); + .build()); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") - .asyncNingHttpClientConfig(clientConfig) + .httpClientConfig(clientConfig) .build(MailruApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 40d72f9da..8b113c399 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.apis.SalesforceApi; import com.github.scribejava.apis.salesforce.SalesforceToken; +import com.github.scribejava.httpclient.ning.NingHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -32,20 +33,20 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientSecret = "your client secret"; ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - final AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder() + final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) .setAllowPoolingConnections(false) .setPooledConnectionIdleTimeout(1_000) .setReadTimeout(10_000) - .build(); + .build()); //IT's important! Salesforce upper require TLS v1.1 or 1.2 SalesforceApi.initTLSv11orUpper(); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) - .asyncNingHttpClientConfig(clientConfig) + .httpClientConfig(clientConfig) .callback("https://www.example.com/callback") .build(SalesforceApi.instance()); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 12195ab56..143487b1a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -1,13 +1,15 @@ package com.github.scribejava.core.builder; import com.github.scribejava.core.builder.api.BaseApi; +import com.github.scribejava.core.model.HttpClient; import com.github.scribejava.core.model.OAuthConfig; -import java.io.OutputStream; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; +import java.io.OutputStream; + /** * Implementation of the Builder pattern, with a fluent interface that creates a {@link OAuthService} */ @@ -27,12 +29,8 @@ public class ServiceBuilder { private Integer connectTimeout; private Integer readTimeout; - //async version only - //ning 1.9 - private com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig; - private String ningAsyncHttpProviderClassName; - //AHC 2.0 - private org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig; + //not-default httpclient only + private HttpClient.Config httpClientConfig; public ServiceBuilder() { callback = OAuthConstants.OUT_OF_BAND; @@ -135,24 +133,9 @@ public ServiceBuilder readTimeout(Integer readTimeout) { return this; } - public ServiceBuilder asyncNingHttpClientConfig(com.ning.http.client.AsyncHttpClientConfig asyncHttpClientConfig) { - Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); - ningAsyncHttpClientConfig = asyncHttpClientConfig; - ahcAsyncHttpClientConfig = null; - return this; - } - - public ServiceBuilder asyncNingHttpProviderClassName(String asyncHttpProviderClassName) { - this.ningAsyncHttpProviderClassName = asyncHttpProviderClassName; - ahcAsyncHttpClientConfig = null; - return this; - } - - public ServiceBuilder asyncAHCHttpClientConfig(org.asynchttpclient.AsyncHttpClientConfig asyncHttpClientConfig) { - Preconditions.checkNotNull(asyncHttpClientConfig, "asyncHttpClientConfig can't be null"); - ahcAsyncHttpClientConfig = asyncHttpClientConfig; - ningAsyncHttpClientConfig = null; - ningAsyncHttpProviderClassName = null; + public ServiceBuilder httpClientConfig(HttpClient.Config httpClientConfig) { + Preconditions.checkNotNull(httpClientConfig, "httpClientConfig can't be null"); + this.httpClientConfig = httpClientConfig; return this; } @@ -173,8 +156,7 @@ public void checkPreconditions() { private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, - userAgent, connectTimeout, readTimeout, ningAsyncHttpClientConfig, ningAsyncHttpProviderClassName, - ahcAsyncHttpClientConfig); + userAgent, connectTimeout, readTimeout, httpClientConfig); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java new file mode 100644 index 000000000..d7667ee20 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java @@ -0,0 +1,8 @@ +package com.github.scribejava.core.httpclient; + +import com.github.scribejava.core.model.HttpClient; + +public interface HttpClientProvider { + + HttpClient createClient(HttpClient.Config httpClientConfig); +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java new file mode 100644 index 000000000..3762f7083 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java @@ -0,0 +1,16 @@ +package com.github.scribejava.core.model; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.Future; + +public interface HttpClient { + void close() throws IOException; + + Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter); + + interface Config { + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index d5bba4899..43c23826b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -23,20 +23,15 @@ public class OAuthConfig { private final Integer readTimeout; //async version only - //ning 1.9 - private com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig; - private String ningAsyncHttpProviderClassName; - //AHC 2.0 - private org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig; + private HttpClient.Config httpClientConfig; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, - Integer readTimeout, com.ning.http.client.AsyncHttpClientConfig ningAsyncHttpClientConfig, - String ningAsyncHttpProviderClassName, org.asynchttpclient.AsyncHttpClientConfig ahcAsyncHttpClientConfig) { + Integer readTimeout, HttpClient.Config httpClientConfig) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; @@ -48,9 +43,7 @@ public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureTy this.userAgent = userAgent; this.connectTimeout = connectTimeout; this.readTimeout = readTimeout; - this.ningAsyncHttpClientConfig = ningAsyncHttpClientConfig; - this.ningAsyncHttpProviderClassName = ningAsyncHttpProviderClassName; - this.ahcAsyncHttpClientConfig = ahcAsyncHttpClientConfig; + this.httpClientConfig = httpClientConfig; } public String getApiKey() { @@ -104,15 +97,7 @@ public Integer getReadTimeout() { return readTimeout; } - public com.ning.http.client.AsyncHttpClientConfig getNingAsyncHttpClientConfig() { - return ningAsyncHttpClientConfig; - } - - public String getNingAsyncHttpProviderClassName() { - return ningAsyncHttpProviderClassName; - } - - public org.asynchttpclient.AsyncHttpClientConfig getAhcAsyncHttpClientConfig() { - return ahcAsyncHttpClientConfig; + public HttpClient.Config getHttpClientConfig() { + return httpClientConfig; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 47b40b497..3d8850cde 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -1,17 +1,18 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.model.AbstractRequest; -import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import com.github.scribejava.core.httpclient.HttpClientProvider; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; + import java.io.IOException; import java.util.Map; +import java.util.ServiceLoader; import java.util.concurrent.Future; /** @@ -22,24 +23,21 @@ public abstract class OAuthService { private final OAuthConfig config; - private final com.ning.http.client.AsyncHttpClient ningAsyncHttpClient; - private final org.asynchttpclient.AsyncHttpClient ahcAsyncHttpClient; + private final HttpClient httpClient; public OAuthService(OAuthConfig config) { this.config = config; final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - final com.ning.http.client.AsyncHttpClientConfig ningConfig = config.getNingAsyncHttpClientConfig(); - final org.asynchttpclient.AsyncHttpClientConfig ahcConfig = config.getAhcAsyncHttpClientConfig(); + final HttpClient.Config httpClientConfig = config.getHttpClientConfig(); - if (ningConfig == null && ahcConfig == null) { + if (httpClientConfig == null) { if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use sync operations, only async"); } if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { config.log("Cannot use sync operations, only async"); } - ningAsyncHttpClient = null; - ahcAsyncHttpClient = null; + httpClient = null; } else { if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use async operations, only sync"); @@ -48,22 +46,22 @@ public OAuthService(OAuthConfig config) { config.log("Cannot use async operations, only sync"); } - if (ahcConfig == null) { - ningAsyncHttpClient = NingProvider.createClient(config.getNingAsyncHttpProviderClassName(), ningConfig); - ahcAsyncHttpClient = null; - } else { - ahcAsyncHttpClient = AHCProvider.createClient(ahcConfig); - ningAsyncHttpClient = null; + httpClient = getClient(httpClientConfig); + } + } + + private static HttpClient getClient(HttpClient.Config config) { + for (HttpClientProvider provider : ServiceLoader.load(HttpClientProvider.class)) { + final HttpClient client = provider.createClient(config); + if (client != null) { + return client; } } + return null; } public void closeAsyncClient() throws IOException { - if (ahcAsyncHttpClient == null) { - ningAsyncHttpClient.close(); - } else { - ahcAsyncHttpClient.close(); - } + httpClient.close(); } public OAuthConfig getConfig() { @@ -80,94 +78,7 @@ public OAuthConfig getConfig() { public Future executeAsync(Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - if (ahcAsyncHttpClient == null) { - return NingProvider.ningExecuteAsync(ningAsyncHttpClient, config.getUserAgent(), headers, httpVerb, - completeUrl, bodyContents, callback, converter); - } else { - return AHCProvider.ahcExecuteAsync(ahcAsyncHttpClient, config.getUserAgent(), headers, httpVerb, + return httpClient.executeAsync(config.getUserAgent(), headers, httpVerb, completeUrl, bodyContents, callback, converter); - } - } - - private static class NingProvider { - - private static com.ning.http.client.AsyncHttpClient createClient(String ningAsyncHttpProviderClassName, - com.ning.http.client.AsyncHttpClientConfig ningConfig) { - return ningAsyncHttpProviderClassName == null - ? new com.ning.http.client.AsyncHttpClient(ningConfig) - : new com.ning.http.client.AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig); - } - - private static Future ningExecuteAsync(com.ning.http.client.AsyncHttpClient ningAsyncHttpClient, - String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, - OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final com.ning.http.client.AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; - switch (httpVerb) { - case GET: - boundRequestBuilder = ningAsyncHttpClient.prepareGet(completeUrl); - break; - case POST: - com.ning.http.client.AsyncHttpClient.BoundRequestBuilder requestBuilder - = ningAsyncHttpClient.preparePost(completeUrl); - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = requestBuilder.setBody(bodyContents); - break; - default: - throw new IllegalArgumentException("message build error: unknown verb type"); - } - - for (Map.Entry header : headers.entrySet()) { - boundRequestBuilder.addHeader(header.getKey(), header.getValue()); - } - if (userAgent != null) { - boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); - } - - return boundRequestBuilder - .execute(new com.github.scribejava.core.async.ning.OAuthAsyncCompletionHandler<>( - callback, converter)); - } - } - - private static class AHCProvider { - - private static org.asynchttpclient.AsyncHttpClient createClient( - org.asynchttpclient.AsyncHttpClientConfig ahcConfig) { - return new org.asynchttpclient.DefaultAsyncHttpClient(ahcConfig); - } - - private static Future ahcExecuteAsync(org.asynchttpclient.AsyncHttpClient ahcAsyncHttpClient, - String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, - OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final org.asynchttpclient.BoundRequestBuilder boundRequestBuilder; - switch (httpVerb) { - case GET: - boundRequestBuilder = ahcAsyncHttpClient.prepareGet(completeUrl); - break; - case POST: - org.asynchttpclient.BoundRequestBuilder requestBuilder - = ahcAsyncHttpClient.preparePost(completeUrl); - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = requestBuilder.setBody(bodyContents); - break; - default: - throw new IllegalArgumentException("message build error: unknown verb type"); - } - - for (Map.Entry header : headers.entrySet()) { - boundRequestBuilder.addHeader(header.getKey(), header.getValue()); - } - if (userAgent != null) { - boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); - } - - return boundRequestBuilder - .execute(new com.github.scribejava.core.async.ahc.OAuthAsyncCompletionHandler<>( - callback, converter)); - } } } diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml new file mode 100644 index 000000000..46c56143a --- /dev/null +++ b/scribejava-httpclient-ahc/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + com.github.scribejava + scribejava + 2.8.2-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-ahc + ScribeJava Async Http Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + org.asynchttpclient + async-http-client + 2.0.9 + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java new file mode 100644 index 000000000..69913ac18 --- /dev/null +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -0,0 +1,63 @@ +package com.github.scribejava.httpclient.ahc; + +import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Verb; +import org.asynchttpclient.AsyncHttpClient; +import org.asynchttpclient.DefaultAsyncHttpClient; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.Future; + +import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; + +public class AhcHttpClient implements HttpClient { + + private final AsyncHttpClient client; + + public AhcHttpClient(AhcHttpClientConfig ahcConfig) { + client = new DefaultAsyncHttpClient(ahcConfig.getClientConfig()); + } + + @Override + public void close() throws IOException { + client.close(); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + final org.asynchttpclient.BoundRequestBuilder boundRequestBuilder; + switch (httpVerb) { + case GET: + boundRequestBuilder = client.prepareGet(completeUrl); + break; + case POST: + org.asynchttpclient.BoundRequestBuilder requestBuilder + = client.preparePost(completeUrl); + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(bodyContents); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } + + for (Map.Entry header : headers.entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + return boundRequestBuilder + .execute(new OAuthAsyncCompletionHandler<>( + callback, converter)); + } +} diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java new file mode 100644 index 000000000..bc6820281 --- /dev/null +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java @@ -0,0 +1,17 @@ +package com.github.scribejava.httpclient.ahc; + +import com.github.scribejava.core.model.HttpClient; +import org.asynchttpclient.AsyncHttpClientConfig; + +public class AhcHttpClientConfig implements HttpClient.Config { + + private final AsyncHttpClientConfig clientConfig; + + public AhcHttpClientConfig(AsyncHttpClientConfig clientConfig) { + this.clientConfig = clientConfig; + } + + public AsyncHttpClientConfig getClientConfig() { + return clientConfig; + } +} diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java new file mode 100644 index 000000000..835ba5f03 --- /dev/null +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java @@ -0,0 +1,15 @@ +package com.github.scribejava.httpclient.ahc; + +import com.github.scribejava.core.httpclient.HttpClientProvider; +import com.github.scribejava.core.model.HttpClient; + +public class AhcProvider implements HttpClientProvider { + + @Override + public HttpClient createClient(HttpClient.Config config) { + if (config instanceof AhcHttpClientConfig) { + return new AhcHttpClient((AhcHttpClientConfig) config); + } + return null; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java similarity index 97% rename from scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java rename to scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java index b556fb6ad..b19e3c3a7 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/async/ahc/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java @@ -1,4 +1,4 @@ -package com.github.scribejava.core.async.ahc; +package com.github.scribejava.httpclient.ahc; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthRequestAsync; diff --git a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider new file mode 100644 index 000000000..5de919067 --- /dev/null +++ b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -0,0 +1 @@ +com.github.scribejava.httpclient.ahc.AhcProvider \ No newline at end of file diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml new file mode 100644 index 000000000..b5690232d --- /dev/null +++ b/scribejava-httpclient-ning/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + com.github.scribejava + scribejava + 2.8.2-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-ning + ScribeJava Ning Async client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + com.ning + async-http-client + 1.9.38 + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java new file mode 100644 index 000000000..6916315fc --- /dev/null +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -0,0 +1,64 @@ +package com.github.scribejava.httpclient.ning; + +import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Verb; +import com.ning.http.client.AsyncHttpClient; + +import java.util.Map; +import java.util.concurrent.Future; + +import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; + +public class NingHttpClient implements HttpClient { + + private final AsyncHttpClient client; + + public NingHttpClient(NingHttpClientConfig ningConfig) { + final String ningAsyncHttpProviderClassName = ningConfig.getNingAsyncHttpProviderClassName(); + client = ningAsyncHttpProviderClassName == null + ? new com.ning.http.client.AsyncHttpClient(ningConfig.getConfig()) + : new com.ning.http.client.AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig.getConfig()); + } + + @Override + public void close() { + client.close(); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + final com.ning.http.client.AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + switch (httpVerb) { + case GET: + boundRequestBuilder = client.prepareGet(completeUrl); + break; + case POST: + com.ning.http.client.AsyncHttpClient.BoundRequestBuilder requestBuilder + = client.preparePost(completeUrl); + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = requestBuilder.setBody(bodyContents); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } + + for (Map.Entry header : headers.entrySet()) { + boundRequestBuilder.addHeader(header.getKey(), header.getValue()); + } + if (userAgent != null) { + boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + return boundRequestBuilder + .execute(new OAuthAsyncCompletionHandler<>( + callback, converter)); + } +} diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java new file mode 100644 index 000000000..f25d91e54 --- /dev/null +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java @@ -0,0 +1,26 @@ +package com.github.scribejava.httpclient.ning; + +import com.github.scribejava.core.model.HttpClient; +import com.ning.http.client.AsyncHttpClientConfig; + +public class NingHttpClientConfig implements HttpClient.Config { + + private final AsyncHttpClientConfig config; + private String ningAsyncHttpProviderClassName; + + public NingHttpClientConfig(AsyncHttpClientConfig config) { + this.config = config; + } + + public String getNingAsyncHttpProviderClassName() { + return ningAsyncHttpProviderClassName; + } + + public void setNingAsyncHttpProviderClassName(String ningAsyncHttpProviderClassName) { + this.ningAsyncHttpProviderClassName = ningAsyncHttpProviderClassName; + } + + public AsyncHttpClientConfig getConfig() { + return config; + } +} diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java new file mode 100644 index 000000000..bfd4bce96 --- /dev/null +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java @@ -0,0 +1,15 @@ +package com.github.scribejava.httpclient.ning; + +import com.github.scribejava.core.httpclient.HttpClientProvider; +import com.github.scribejava.core.model.HttpClient; + +public class NingProvider implements HttpClientProvider { + + @Override + public HttpClient createClient(HttpClient.Config httpClientConfig) { + if (httpClientConfig instanceof NingHttpClientConfig) { + return new NingHttpClient((NingHttpClientConfig) httpClientConfig); + } + return null; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java similarity index 97% rename from scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java rename to scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java index adbcf10bb..2f176e6b0 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/async/ning/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java @@ -1,4 +1,4 @@ -package com.github.scribejava.core.async.ning; +package com.github.scribejava.httpclient.ning; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthRequestAsync; diff --git a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider new file mode 100644 index 000000000..7d8903d80 --- /dev/null +++ b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -0,0 +1 @@ +com.github.scribejava.httpclient.ning.NingProvider \ No newline at end of file From 8c2f85bcc269e85c9609ad78a65bf5ebcc7d4ebe Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 13 Jul 2016 14:50:10 +0300 Subject: [PATCH 116/250] improve some small issues in prev. commit --- README.md | 4 ++-- changelog | 3 +++ scribejava-apis/pom.xml | 4 ++-- scribejava-httpclient-ahc/pom.xml | 4 ++-- .../scribejava/httpclient/ahc/AhcHttpClient.java | 6 +++--- ...ithub.scribejava.core.httpclient.HttpClientProvider | 2 +- scribejava-httpclient-ning/pom.xml | 4 ++-- .../scribejava/httpclient/ning/NingHttpClient.java | 10 ++++------ ...ithub.scribejava.core.httpclient.HttpClientProvider | 2 +- 9 files changed, 20 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 993ff954a..8324bfd87 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,9 @@ That **single line** (added newlines for readability) is the only thing you need Hit ScribeJava as hard and with many threads as you like. -### Async +### Async and other HTTP clients -You can use ning async http client out-of-box, just use ServiceBuilderAsync +You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box diff --git a/changelog b/changelog index eee7f1cad..9cb5fda5f 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * create abstract HTTP Client layer to support different HTTP clients as plugins (AHC and Ning support becames maven submodules) + [2.8.1] * add Salesforce sandbox API support diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 703c30f30..c466847e6 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -22,13 +22,13 @@ com.github.scribejava - scribejava-ahc + scribejava-httpclient-ahc ${project.version} test com.github.scribejava - scribejava-ning + scribejava-httpclient-ning ${project.version} test diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 46c56143a..d47cc3c1c 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -10,8 +10,8 @@ com.github.scribejava - scribejava-ahc - ScribeJava Async Http Client support + scribejava-httpclient-ahc + ScribeJava Async Http Http Client support jar diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 69913ac18..a6950b51e 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -14,6 +14,7 @@ import java.util.concurrent.Future; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import org.asynchttpclient.BoundRequestBuilder; public class AhcHttpClient implements HttpClient { @@ -32,14 +33,13 @@ public void close() throws IOException { public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final org.asynchttpclient.BoundRequestBuilder boundRequestBuilder; + final BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: boundRequestBuilder = client.prepareGet(completeUrl); break; case POST: - org.asynchttpclient.BoundRequestBuilder requestBuilder - = client.preparePost(completeUrl); + BoundRequestBuilder requestBuilder = client.preparePost(completeUrl); if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } diff --git a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 5de919067..bbe752ff6 100644 --- a/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-ahc/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.ahc.AhcProvider \ No newline at end of file +com.github.scribejava.httpclient.ahc.AhcProvider diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index b5690232d..b286741ac 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -10,8 +10,8 @@ com.github.scribejava - scribejava-ning - ScribeJava Ning Async client support + scribejava-httpclient-ning + ScribeJava Ning Async Http Client support jar diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index 6916315fc..62c56be81 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -19,9 +19,8 @@ public class NingHttpClient implements HttpClient { public NingHttpClient(NingHttpClientConfig ningConfig) { final String ningAsyncHttpProviderClassName = ningConfig.getNingAsyncHttpProviderClassName(); - client = ningAsyncHttpProviderClassName == null - ? new com.ning.http.client.AsyncHttpClient(ningConfig.getConfig()) - : new com.ning.http.client.AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig.getConfig()); + client = ningAsyncHttpProviderClassName == null ? new AsyncHttpClient(ningConfig.getConfig()) + : new AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig.getConfig()); } @Override @@ -33,14 +32,13 @@ public void close() { public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final com.ning.http.client.AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: boundRequestBuilder = client.prepareGet(completeUrl); break; case POST: - com.ning.http.client.AsyncHttpClient.BoundRequestBuilder requestBuilder - = client.preparePost(completeUrl); + AsyncHttpClient.BoundRequestBuilder requestBuilder = client.preparePost(completeUrl); if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } diff --git a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider index 7d8903d80..9f6843994 100644 --- a/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider +++ b/scribejava-httpclient-ning/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -1 +1 @@ -com.github.scribejava.httpclient.ning.NingProvider \ No newline at end of file +com.github.scribejava.httpclient.ning.NingProvider From 12d7a0d209d53dc21050e0bc32a8472eb2799645 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 13 Jul 2016 17:30:26 +0300 Subject: [PATCH 117/250] fix README (info about artifacts not released to the maven central yet) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8324bfd87..8471ae9a7 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Hit ScribeJava as hard and with many threads as you like. ### Async and other HTTP clients -You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom +You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom (not in maven central yet, wait for next relase after 2.8.1) ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box From 7ece09d891cbd7f2eef3a162b9a9846ad389d326 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 22 Jul 2016 12:39:12 +0300 Subject: [PATCH 118/250] remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava (thanks to wldaunfr and rockihack) --- changelog | 1 + .../github/scribejava/core/model/AbstractRequest.java | 9 +++------ .../com/github/scribejava/core/model/OAuthRequest.java | 1 - 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/changelog b/changelog index 9cb5fda5f..b22949039 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * create abstract HTTP Client layer to support different HTTP clients as plugins (AHC and Ning support becames maven submodules) + * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava (thanks to wldaunfr and rockihack) [2.8.1] * add Salesforce sandbox API support diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 4db6ccec7..3c994c1d9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -24,7 +24,6 @@ public abstract class AbstractRequest { private final ParameterList querystringParams = new ParameterList(); private final ParameterList bodyParams = new ParameterList(); private final Map headers = new HashMap<>(); - private boolean connectionKeepAlive; private boolean followRedirects = true; private final OAuthService service; @@ -262,9 +261,11 @@ public void setCharset(String charsetName) { * * @see http://download.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html + * @deprecated does nothing - JVM default is left untouched. Set {@code http.keepAlive} system property to + * {@code false} for pre-deprecation behavior. */ + @Deprecated public void setConnectionKeepAlive(boolean connectionKeepAlive) { - this.connectionKeepAlive = connectionKeepAlive; } /** @@ -280,10 +281,6 @@ public void setFollowRedirects(boolean followRedirects) { this.followRedirects = followRedirects; } - public boolean isConnectionKeepAlive() { - return connectionKeepAlive; - } - public boolean isFollowRedirects() { return followRedirects; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index 230cd15b9..fa7212a9e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -60,7 +60,6 @@ Response doSend() throws IOException { private void createConnection() throws IOException { final String completeUrl = getCompleteUrl(); if (connection == null) { - System.setProperty("http.keepAlive", isConnectionKeepAlive() ? "true" : "false"); connection = (HttpURLConnection) new URL(completeUrl).openConnection(); connection.setInstanceFollowRedirects(isFollowRedirects()); } From 6b19f7ba1bb3c034a61ffa755689d3fc5fd040f2 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 22 Jul 2016 12:42:49 +0300 Subject: [PATCH 119/250] update AHC http client --- scribejava-httpclient-ahc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index d47cc3c1c..3528e59c1 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.9 + 2.0.10 From eea19428964a17a792fecdc0b11a9d0fcc6b9929 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 22 Jul 2016 12:49:11 +0300 Subject: [PATCH 120/250] prepare to release 3.0.0 --- README.md | 6 +++--- changelog | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8471ae9a7..c790a7e9e 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Hit ScribeJava as hard and with many threads as you like. ### Async and other HTTP clients -You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom (not in maven central yet, wait for next relase after 2.8.1) +You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box @@ -86,7 +86,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 2.8.1 + 3.0.0 ``` @@ -95,7 +95,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 2.8.1 + 3.0.0 ``` diff --git a/changelog b/changelog index b22949039..3a6b7b42c 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[3.0.0] * create abstract HTTP Client layer to support different HTTP clients as plugins (AHC and Ning support becames maven submodules) * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava (thanks to wldaunfr and rockihack) From 81b68520e3455e347cf7e2fbe2f7c156c20e56a8 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 22 Jul 2016 12:50:21 +0300 Subject: [PATCH 121/250] [maven-release-plugin] prepare release scribejava-3.0.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index f14895e91..08d5b34b1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 2.8.2-SNAPSHOT + 3.0.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index c466847e6..7d1de1f45 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.2-SNAPSHOT + 3.0.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 62e072945..4caa80b69 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.2-SNAPSHOT + 3.0.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 3528e59c1..019190a60 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.2-SNAPSHOT + 3.0.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index b286741ac..53ec3aba0 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 2.8.2-SNAPSHOT + 3.0.0 ../pom.xml From 196ef1d6397e1c6dfa8149ce0d73735dd1df70a0 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 22 Jul 2016 12:50:26 +0300 Subject: [PATCH 122/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 08d5b34b1..96d232e96 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.0.0 + 3.0.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 7d1de1f45..9d8462956 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.0 + 3.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 4caa80b69..26857c334 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.0 + 3.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 019190a60..ca25a40d0 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.0 + 3.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 53ec3aba0..16f10c65b 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.0 + 3.0.1-SNAPSHOT ../pom.xml From c5885c498b358bf091eb8815fdf2c848c9de49b9 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 25 Jul 2016 17:06:33 +0300 Subject: [PATCH 123/250] fix google url in the README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c790a7e9e..c4cb8862b 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just * Freelancer (https://www.freelancer.com/) * Genius (http://genius.com/) * GitHub (https://github.com/) -* Google (https://www.google.ru/) +* Google (https://www.google.com/) * HeadHunter ХэдХантер (https://hh.ru/) * Imgur (http://imgur.com/) * Kaixin 开心网 (http://www.kaixin001.com/) From 15d4bf38c7b4d2750cd6bcacf336c5e4a51f788a Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 12 Aug 2016 17:08:54 +0300 Subject: [PATCH 124/250] make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) --- pom.xml | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 96d232e96..14244c926 100644 --- a/pom.xml +++ b/pom.xml @@ -122,6 +122,18 @@
+ + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + + com.puppycrawl.tools + checkstyle + 7.1 + + + @@ -188,14 +200,6 @@ org.apache.maven.plugins maven-checkstyle-plugin - 2.17 - - - com.puppycrawl.tools - checkstyle - 7.0 - - validate @@ -216,6 +220,30 @@ + + jdk-1.7 + + 1.7 + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + + com.puppycrawl.tools + checkstyle + 6.19 + + + + + + + release-sign-artifacts From 74ce58569678927dded44f772449207a5364c890 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 12 Aug 2016 17:12:15 +0300 Subject: [PATCH 125/250] update maven deps --- pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 14244c926..6f09b33da 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,7 @@ org.apache.felix maven-bundle-plugin - 3.0.1 + 3.2.0 bundle-manifest diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index ca25a40d0..2a9ec4778 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.10 + 2.0.11 diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 16f10c65b..da076a3e5 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -23,7 +23,7 @@ com.ning async-http-client - 1.9.38 + 1.9.39 From 7a24f820bae63e2baadebc26723fa69133c2bba1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 12 Aug 2016 17:51:45 +0300 Subject: [PATCH 126/250] add travis CI (check [oracle|open]jdk7 oraclejdk8) --- .travis.yml | 8 ++++++++ README.md | 4 ++++ changelog | 4 ++++ 3 files changed, 16 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..a79954ad5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: java +script: mvn clean package +jdk: + - oraclejdk8 + - oraclejdk7 + - openjdk7 +os: + - linux diff --git a/README.md b/README.md index c4cb8862b..7327d33e8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Welcome to the home of ScribeJava, the simple OAuth Java lib! +[![Build Status](https://travis-ci.org/scribejava/scribejava.svg?branch=master)](https://travis-ci.org/scribejava/scribejava) +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) + + # Why use ScribeJava? ### Dead Simple diff --git a/changelog b/changelog index 3a6b7b42c..e46cced96 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +[SNAPSHOT] + * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) + * add travis CI (check [oracle|open]jdk7 oraclejdk8) + [3.0.0] * create abstract HTTP Client layer to support different HTTP clients as plugins (AHC and Ning support becames maven submodules) * remove changing global JVM property http.keepAlive, deprecate controlling this property inside of ScribeJava (thanks to wldaunfr and rockihack) From 5aea73380a13ab740211184e313c05a89d7188f8 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 18:56:52 +0300 Subject: [PATCH 127/250] update async-http-client --- scribejava-httpclient-ahc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 2a9ec4778..dfc65bd97 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.11 + 2.0.12 From 33deb8d9fd7f49bd33224a517c234b4e081027f4 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 18:59:34 +0300 Subject: [PATCH 128/250] improve main README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7327d33e8..11155e6cf 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Welcome to the home of ScribeJava, the simple OAuth Java lib! +# Welcome to the home of ScribeJava, the simple OAuth client Java lib! [![Build Status](https://travis-ci.org/scribejava/scribejava.svg?branch=master)](https://travis-ci.org/scribejava/scribejava) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.scribejava/scribejava) @@ -19,6 +19,8 @@ OAuthService service = new ServiceBuilder() That **single line** (added newlines for readability) is the only thing you need to configure ScribeJava with LinkedIn's OAuth API for example. +Working runnable examples are [here](https://github.com/scribejava/scribejava/tree/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples) + ### Threadsafe Hit ScribeJava as hard and with many threads as you like. From 56029523e7853764560a113ca4ee67e356d2443a Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 19:37:13 +0300 Subject: [PATCH 129/250] do not misuse abstract keyword --- .../com/github/scribejava/apis/examples/AWeberExample.java | 5 ++++- .../com/github/scribejava/apis/examples/DiggExample.java | 5 ++++- .../scribejava/apis/examples/FacebookAsyncNingExample.java | 5 ++++- .../com/github/scribejava/apis/examples/FacebookExample.java | 5 ++++- .../com/github/scribejava/apis/examples/FlickrExample.java | 5 ++++- .../github/scribejava/apis/examples/Foursquare2Example.java | 5 ++++- .../github/scribejava/apis/examples/FoursquareExample.java | 5 ++++- .../github/scribejava/apis/examples/FreelancerExample.java | 5 ++++- .../com/github/scribejava/apis/examples/GeniusExample.java | 5 ++++- .../com/github/scribejava/apis/examples/GitHubExample.java | 5 ++++- .../scribejava/apis/examples/Google20AsyncAHCExample.java | 5 ++++- .../com/github/scribejava/apis/examples/Google20Example.java | 5 ++++- .../java/com/github/scribejava/apis/examples/HHExample.java | 5 ++++- .../com/github/scribejava/apis/examples/ImgurExample.java | 5 ++++- .../com/github/scribejava/apis/examples/Kaixin20Example.java | 5 ++++- .../github/scribejava/apis/examples/LinkedIn20Example.java | 5 ++++- .../com/github/scribejava/apis/examples/LinkedInExample.java | 5 ++++- .../scribejava/apis/examples/LinkedInExampleWithScopes.java | 5 ++++- .../com/github/scribejava/apis/examples/LiveExample.java | 5 ++++- .../github/scribejava/apis/examples/MailruAsyncExample.java | 5 ++++- .../com/github/scribejava/apis/examples/MailruExample.java | 5 ++++- .../com/github/scribejava/apis/examples/MeetupExample.java | 5 ++++- .../com/github/scribejava/apis/examples/MisfitExample.java | 5 ++++- .../github/scribejava/apis/examples/NeteaseWeiboExample.java | 5 ++++- .../scribejava/apis/examples/OdnoklassnikiExample.java | 5 ++++- .../github/scribejava/apis/examples/PinterestExample.java | 5 ++++- .../com/github/scribejava/apis/examples/Px500Example.java | 5 ++++- .../com/github/scribejava/apis/examples/RenrenExample.java | 5 ++++- .../github/scribejava/apis/examples/SalesforceExample.java | 5 ++++- .../scribejava/apis/examples/SalesforceNingAsyncExample.java | 5 ++++- .../github/scribejava/apis/examples/SinaWeibo2Example.java | 5 ++++- .../github/scribejava/apis/examples/SinaWeiboExample.java | 5 ++++- .../com/github/scribejava/apis/examples/SkyrockExample.java | 5 ++++- .../github/scribejava/apis/examples/SohuWeiboExample.java | 5 ++++- .../scribejava/apis/examples/StackExchangeExample.java | 5 ++++- .../com/github/scribejava/apis/examples/TrelloExample.java | 5 ++++- .../com/github/scribejava/apis/examples/TumblrExample.java | 5 ++++- .../com/github/scribejava/apis/examples/TutByExample.java | 5 ++++- .../com/github/scribejava/apis/examples/TwitterExample.java | 5 ++++- .../com/github/scribejava/apis/examples/ViadeoExample.java | 5 ++++- .../github/scribejava/apis/examples/VkontakteExample.java | 5 ++++- .../com/github/scribejava/apis/examples/XingExample.java | 5 ++++- .../com/github/scribejava/apis/examples/YahooExample.java | 5 ++++- 43 files changed, 172 insertions(+), 43 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index b17637c13..19a5f5b1f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -11,7 +11,7 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class AWeberExample { +public final class AWeberExample { //To get your consumer key/secret, and view API docs, see https://labs.aweber.com/docs private static final String ACCOUNT_RESOURCE_URL = "https://api.aweber.com/1.0/accounts/"; @@ -19,6 +19,9 @@ public abstract class AWeberExample { private static final String CONSUMER_KEY = ""; private static final String CONSUMER_SECRET = ""; + private AWeberExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey(CONSUMER_KEY) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index f55c105a0..0e81446bb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class DiggExample { +public final class DiggExample { private static final String NETWORK_NAME = "Digg"; private static final String PROTECTED_RESOURCE_URL = "http://services.digg.com/2.0/comment.digg"; + private DiggExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "myKey"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index a3c99e114..9cddb3b85 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -16,11 +16,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class FacebookAsyncNingExample { +public final class FacebookAsyncNingExample { private static final String NETWORK_NAME = "Facebook"; private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; + private FacebookAsyncNingExample() { + } + public static void main(String... args) throws InterruptedException, ExecutionException, IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 7a1772aec..9da9c874b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class FacebookExample { +public final class FacebookExample { private static final String NETWORK_NAME = "Facebook"; private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; + private FacebookExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index ed03b906d..b3fd7912a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class FlickrExample { +public final class FlickrExample { private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/"; + private FlickrExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index c9b317911..44d471537 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class Foursquare2Example { +public final class Foursquare2Example { private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; + private Foursquare2Example() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index 639aaec0a..645985c75 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class FoursquareExample { +public final class FoursquareExample { private static final String PROTECTED_RESOURCE_URL = "http://api.foursquare.com/v1/user"; + private FoursquareExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index 54e0a7d8d..a4c843ea4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -12,7 +12,7 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class FreelancerExample { +public final class FreelancerExample { private static final String NETWORK_NAME = "Freelancer"; private static final String AUTHORIZE_URL @@ -20,6 +20,9 @@ public abstract class FreelancerExample { private static final String PROTECTED_RESOURCE_URL = "http://api.sandbox.freelancer.com/Job/getJobList.json"; private static final String SCOPE = "http://api.sandbox.freelancer.com"; + private FreelancerExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .signatureType(SignatureType.QueryString) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java index 0db6ddc05..04cf9f1d4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class GeniusExample { +public final class GeniusExample { private static final String NETWORK_NAME = "Genius"; private static final String PROTECTED_RESOURCE_URL = "https://api.genius.com/songs/378195"; + private GeniusExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index 0a07c9709..88adcd597 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class GitHubExample { +public final class GitHubExample { private static final String NETWORK_NAME = "GitHub"; private static final String PROTECTED_RESOURCE_URL = "https://api.github.com/user"; + private GitHubExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index abe2fc789..855cf6e50 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -19,11 +19,14 @@ import java.util.concurrent.ExecutionException; import org.asynchttpclient.DefaultAsyncHttpClientConfig; -public abstract class Google20AsyncAHCExample { +public final class Google20AsyncAHCExample { private static final String NETWORK_NAME = "G+ Async"; private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; + private Google20AsyncAHCExample() { + } + public static void main(String... args) throws InterruptedException, ExecutionException, IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 2e6800c19..530de206d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -13,11 +13,14 @@ import java.util.HashMap; import java.util.Map; -public abstract class Google20Example { +public final class Google20Example { private static final String NETWORK_NAME = "G+"; private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; + private Google20Example() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index add150d1f..91bd52966 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -12,11 +12,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class HHExample { +public final class HHExample { private static final String NETWORK_NAME = "hh.ru"; private static final String PROTECTED_RESOURCE_URL = "https://api.hh.ru/me"; + private HHExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index 1d3f24a44..484142322 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -11,11 +11,14 @@ import java.util.Scanner; -public abstract class ImgurExample { +public final class ImgurExample { private static final String NETWORK_NAME = "Imgur"; private static final String PROTECTED_RESOURCE_URL = "https://api.imgur.com/3/account/me"; + private ImgurExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 4551370d6..50fa30139 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class Kaixin20Example { +public final class Kaixin20Example { private static final String NETWORK_NAME = "Kaixin"; private static final String PROTECTED_RESOURCE_URL = "https://api.kaixin001.com/users/me.json"; + private Kaixin20Example() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your api key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index f29d1907b..95b2c5118 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class LinkedIn20Example { +public final class LinkedIn20Example { private static final String NETWORK_NAME = "LinkedIn"; private static final String PROTECTED_RESOURCE_URL = "https://api.linkedin.com/v1/people/~:(%s)"; + private LinkedIn20Example() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 81324377b..927d89524 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class LinkedInExample { +public final class LinkedInExample { private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)"; + private LinkedInExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 2e951fa5f..0888cab5e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class LinkedInExampleWithScopes { +public final class LinkedInExampleWithScopes { private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)"; + private LinkedInExampleWithScopes() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index 0540a26db..d449355b4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class LiveExample { +public final class LiveExample { private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; + private LiveExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = ""; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index a32946ba5..547a8bd57 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -13,12 +13,15 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class MailruAsyncExample { +public final class MailruAsyncExample { private static final String NETWORK_NAME = "Mail.ru"; private static final String PROTECTED_RESOURCE_URL = "http://www.appsmail.ru/platform/api?method=users.getInfo&secure=1"; + private MailruAsyncExample() { + } + public static void main(String... args) throws InterruptedException, ExecutionException, IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index ae4ad4856..391adcd25 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -10,12 +10,15 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class MailruExample { +public final class MailruExample { private static final String NETWORK_NAME = "Mail.ru"; private static final String PROTECTED_RESOURCE_URL = "http://www.appsmail.ru/platform/api?method=users.getInfo&secure=1"; + private MailruExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index 64180b980..9b3efce58 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class MeetupExample { +public final class MeetupExample { private static final String PROTECTED_RESOURCE_URL = "http://api.meetup.com/2/member/self"; + private MeetupExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index 66e5901c9..451d55539 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -11,12 +11,15 @@ import java.util.Scanner; -public abstract class MisfitExample { +public final class MisfitExample { private static final String NETWORK_NAME = "Misfit"; private static final String PROTECTED_RESOURCE_URL = "https://api.misfitwearables.com/move/resource/v1/user/me/profile"; + private MisfitExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index 08f782b13..e40715ae9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class NeteaseWeiboExample { +public final class NeteaseWeiboExample { private static final String NETWORK_NAME = "NetEase(163.com) Weibo"; private static final String PROTECTED_RESOURCE_URL = "http://api.t.163.com/account/verify_credentials.json"; + private NeteaseWeiboExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 9996484a4..6180595d7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -10,12 +10,15 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class OdnoklassnikiExample { +public final class OdnoklassnikiExample { private static final String NETWORK_NAME = "Odnoklassniki.ru"; private static final String PROTECTED_RESOURCE_URL = "https://api.ok.ru/api/users/getCurrentUser?application_key=%1$s&format=JSON"; + private OdnoklassnikiExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your api client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index ca0359611..b49f1d451 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -11,10 +11,13 @@ import java.util.Scanner; -public abstract class PinterestExample { +public final class PinterestExample { private static final String PROTECTED_RESOURCE_URL = "https://api.pinterest.com/v1/me/?access_token?access_token="; + private PinterestExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index 4fbda56ff..fa84b773e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class Px500Example { +public final class Px500Example { private static final String PROTECTED_RESOURCE_URL = "https://api.500px.com/v1/"; + private Px500Example() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your-api-key") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 42f99eb6d..0a22eba37 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -19,11 +19,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class RenrenExample { +public final class RenrenExample { private static final String NETWORK_NAME = "Renren"; private static final String PROTECTED_RESOURCE_URL = "http://api.renren.com/restserver.do"; + private RenrenExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your api key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 1189fa30c..71cc8b0f8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -15,10 +15,13 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; -public abstract class SalesforceExample { +public final class SalesforceExample { private static final String NETWORK_NAME = "Salesforce"; + private SalesforceExample() { + } + public static void main(String... args) throws IOException, NoSuchAlgorithmException, KeyManagementException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 8b113c399..09f8e8dd0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -21,10 +21,13 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; -public abstract class SalesforceNingAsyncExample { +public final class SalesforceNingAsyncExample { private static final String NETWORK_NAME = "Salesforce"; + private SalesforceNingAsyncExample() { + } + @SuppressWarnings({"unchecked", "rawtypes"}) public static void main(String... args) throws InterruptedException, ExecutionException, UnsupportedEncodingException, IOException, NoSuchAlgorithmException, KeyManagementException { diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 815f19ba2..5a720717a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class SinaWeibo2Example { +public final class SinaWeibo2Example { private static final String NETWORK_NAME = "SinaWeibo"; private static final String PROTECTED_RESOURCE_URL = "https://api.weibo.com/2/account/get_uid.json"; + private SinaWeibo2Example() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_api_key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index 8c3fccbd7..3a2ea9249 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class SinaWeiboExample { +public final class SinaWeiboExample { private static final String NETWORK_NAME = "SinaWeibo"; private static final String PROTECTED_RESOURCE_URL = "http://api.t.sina.com.cn/account/verify_credentials.json"; + private SinaWeiboExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index 440058d57..a1c0fa6dc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class SkyrockExample { +public final class SkyrockExample { private static final String PROTECTED_RESOURCE_URL = "https://api.skyrock.com/v2/user/get.json"; + private SkyrockExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your-api-key") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index d91829387..1333fb0bb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class SohuWeiboExample { +public final class SohuWeiboExample { private static final String NETWORK_NAME = "SohuWeibo"; private static final String PROTECTED_RESOURCE_URL = "http://api.t.sohu.com/account/verify_credentials.json"; + private SohuWeiboExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index d7d2341a2..c4c1b2f46 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -12,11 +12,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class StackExchangeExample { +public final class StackExchangeExample { private static final String NETWORK_NAME = "Stack Exchange"; private static final String PROTECTED_RESOURCE_URL = "https://api.stackexchange.com/2.2/me"; + private StackExchangeExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id, secret, application key and // optionally site name diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index a72821cb2..80094c46c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -11,12 +11,15 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class TrelloExample { +public final class TrelloExample { private static final String API_KEY = "your_api_key"; private static final String API_SECRET = "your_api_secret"; private static final String PROTECTED_RESOURCE_URL = "https://trello.com/1/members/me"; + private TrelloExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey(API_KEY) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index 10ae13e71..9dde7b284 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class TumblrExample { +public final class TumblrExample { private static final String PROTECTED_RESOURCE_URL = "http://api.tumblr.com/v2/user/info"; + private TumblrExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("MY_CONSUMER_KEY") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 769270d37..74b867939 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -12,11 +12,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class TutByExample { +public final class TutByExample { private static final String NETWORK_NAME = "Tut.by"; private static final String PROTECTED_RESOURCE_URL = "http://profile.tut.by/getInfo"; + private TutByExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index 66d8cefae..bae89f34a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class TwitterExample { +public final class TwitterExample { private static final String PROTECTED_RESOURCE_URL = "https://api.twitter.com/1.1/account/verify_credentials.json"; + private TwitterExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index 1a9887217..c27cb7458 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class ViadeoExample { +public final class ViadeoExample { private static final String NETWORK_NAME = "Viadeo"; private static final String PROTECTED_RESOURCE_URL = "https://api.viadeo.com/me?user_detail=full"; + private ViadeoExample() { + } + public static void main(String... args) throws IOException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index 5e50158bd..703e580fc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -10,11 +10,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -public abstract class VkontakteExample { +public final class VkontakteExample { private static final String NETWORK_NAME = "Vkontakte.ru"; private static final String PROTECTED_RESOURCE_URL = "https://api.vk.com/method/users.get"; + private VkontakteExample() { + } + public static void main(String... args) throws IOException { // Replace these with your client id and secret final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 04a3668fd..6133f80cb 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -11,10 +11,13 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class XingExample { +public final class XingExample { private static final String PROTECTED_RESOURCE_URL = "https://api.xing.com/v1/users/me"; + private XingExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index 3d020d59d..3779ed782 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -11,11 +11,14 @@ import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; -public abstract class YahooExample { +public final class YahooExample { private static final String PROTECTED_RESOURCE_URL = "http://social.yahooapis.com/v1/user/A6ROU63MXWDCW3Y5MGCYWVHDJI/profile/status?format=json"; + private YahooExample() { + } + public static void main(String... args) throws IOException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") From 1433630ce9cd7a5c0c2a0d57eb8370ec564f75b3 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 19:24:47 +0300 Subject: [PATCH 130/250] add posibility to use externally created http client --- changelog | 1 + .../VkontakteExternalHttpExample.java | 90 +++++++++++++++++++ .../core/builder/ServiceBuilder.java | 14 ++- .../scribejava/core/model/OAuthConfig.java | 10 ++- .../scribejava/core/oauth/OAuthService.java | 5 +- .../httpclient/ahc/AhcHttpClient.java | 4 + .../httpclient/ning/NingHttpClient.java | 4 + 7 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java diff --git a/changelog b/changelog index e46cced96..bce9f079e 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,5 @@ [SNAPSHOT] + * add posibility to use externally created http client * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) * add travis CI (check [oracle|open]jdk7 oraclejdk8) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java new file mode 100644 index 000000000..9221fae44 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -0,0 +1,90 @@ +package com.github.scribejava.apis.examples; + +import java.util.Scanner; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.apis.VkontakteApi; +import com.github.scribejava.core.model.ForceTypeOfHttpRequest; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.ScribeJavaConfig; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.github.scribejava.httpclient.ahc.AhcHttpClient; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import org.asynchttpclient.DefaultAsyncHttpClient; +import org.asynchttpclient.DefaultAsyncHttpClientConfig; + +public final class VkontakteExternalHttpExample { + + private static final String NETWORK_NAME = "Vkontakte.ru"; + private static final String PROTECTED_RESOURCE_URL = "https://api.vk.com/method/users.get"; + + private VkontakteExternalHttpExample() { + } + + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); + + //create any http cleint externally + final DefaultAsyncHttpClientConfig httpClientConfig = new DefaultAsyncHttpClientConfig.Builder() + .setMaxConnections(5) + .setRequestTimeout(10_000) + .setPooledConnectionIdleTimeout(1_000) + .setReadTimeout(1_000) + .build(); + //wrap it + try (DefaultAsyncHttpClient ahcHttpClient = new DefaultAsyncHttpClient(httpClientConfig)) { + //wrap it + final AhcHttpClient wrappedAHCHttpClient = new AhcHttpClient(ahcHttpClient); + + final OAuth20Service service = new ServiceBuilder() + .httpClient(wrappedAHCHttpClient) + .apiKey(clientId) + .apiSecret(clientSecret) + .scope("wall,offline") // replace with desired scope + .callback("http://your.site.com/callback") + .build(VkontakteApi.instance()); + final Scanner in = new Scanner(System.in); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service); + service.signRequest(accessToken, request); + final Response response = request.sendAsync(null).get(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 143487b1a..aa994d0a1 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -31,6 +31,7 @@ public class ServiceBuilder { //not-default httpclient only private HttpClient.Config httpClientConfig; + private HttpClient httpClient; public ServiceBuilder() { callback = OAuthConstants.OUT_OF_BAND; @@ -139,6 +140,17 @@ public ServiceBuilder httpClientConfig(HttpClient.Config httpClientConfig) { return this; } + /** + * takes precedence over httpClientConfig + * + * @param httpClient externally created HTTP client + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder httpClient(HttpClient httpClient) { + this.httpClient = httpClient; + return this; + } + public ServiceBuilder userAgent(String userAgent) { this.userAgent = userAgent; return this; @@ -156,7 +168,7 @@ public void checkPreconditions() { private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, - userAgent, connectTimeout, readTimeout, httpClientConfig); + userAgent, connectTimeout, readTimeout, httpClientConfig, httpClient); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 43c23826b..0a6e44894 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -24,14 +24,15 @@ public class OAuthConfig { //async version only private HttpClient.Config httpClientConfig; + private HttpClient httpClient; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, - Integer readTimeout, HttpClient.Config httpClientConfig) { + Integer readTimeout, HttpClient.Config httpClientConfig, HttpClient httpClient) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; @@ -44,6 +45,7 @@ public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureTy this.connectTimeout = connectTimeout; this.readTimeout = readTimeout; this.httpClientConfig = httpClientConfig; + this.httpClient = httpClient; } public String getApiKey() { @@ -100,4 +102,8 @@ public Integer getReadTimeout() { public HttpClient.Config getHttpClientConfig() { return httpClientConfig; } + + public HttpClient getHttpClient() { + return httpClient; + } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 3d8850cde..172ed26ff 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -29,8 +29,9 @@ public OAuthService(OAuthConfig config) { this.config = config; final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); final HttpClient.Config httpClientConfig = config.getHttpClientConfig(); + final HttpClient externalHttpClient = config.getHttpClient(); - if (httpClientConfig == null) { + if (httpClientConfig == null && externalHttpClient == null) { if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use sync operations, only async"); } @@ -46,7 +47,7 @@ public OAuthService(OAuthConfig config) { config.log("Cannot use async operations, only sync"); } - httpClient = getClient(httpClientConfig); + httpClient = externalHttpClient == null ? getClient(httpClientConfig) : externalHttpClient; } } diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index a6950b51e..14d88ea31 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -24,6 +24,10 @@ public AhcHttpClient(AhcHttpClientConfig ahcConfig) { client = new DefaultAsyncHttpClient(ahcConfig.getClientConfig()); } + public AhcHttpClient(DefaultAsyncHttpClient ahcClient) { + client = ahcClient; + } + @Override public void close() throws IOException { client.close(); diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index 62c56be81..9d4bccffd 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -23,6 +23,10 @@ public NingHttpClient(NingHttpClientConfig ningConfig) { : new AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig.getConfig()); } + public NingHttpClient(AsyncHttpClient client) { + this.client = client; + } + @Override public void close() { client.close(); From 33cf3f5f15215429883bdcac596f9f47e2091c8d Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 22 Aug 2016 22:52:33 +0300 Subject: [PATCH 131/250] fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, see http://new.apiok.ru/dev/methods/ --- changelog | 1 + .../service/OdnoklassnikiServiceImpl.java | 16 ++++--- .../service/OdnoklassnikiServiceTest.java | 43 +++++++++++++++++++ 3 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java diff --git a/changelog b/changelog index bce9f079e..8ab8158d2 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,5 @@ [SNAPSHOT] + * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, see http://new.apiok.ru/dev/methods/ * add posibility to use externally created http client * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) * add travis CI (check [oracle|open]jdk7 oraclejdk8) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java index baca34604..2a6e01339 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; +import java.util.Arrays; public class OdnoklassnikiServiceImpl extends OAuth20Service { @@ -18,17 +19,22 @@ public OdnoklassnikiServiceImpl(DefaultApi20 api, OAuthConfig config) { @Override public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { - // sig = md5( request_params_composed_string+ md5(access_token + application_secret_key) ) + //sig = lower(md5( sorted_request_params_composed_string + md5(access_token + application_secret_key))) try { final String tokenDigest = md5Hex(accessToken.getAccessToken() + getConfig().getApiSecret()); final String completeUrl = request.getCompleteUrl(); final int queryIndex = completeUrl.indexOf('?'); if (queryIndex != -1) { - final String sigSource - = URLDecoder.decode(completeUrl.substring(queryIndex + 1).replace("&", ""), CharEncoding.UTF_8) - + tokenDigest; - request.addQuerystringParameter("sig", md5Hex(sigSource)); + final String[] params = completeUrl.substring(queryIndex + 1).split("&"); + Arrays.sort(params); + final StringBuilder builder = new StringBuilder(); + for (String param : params) { + builder.append(param); + } + + final String sigSource = URLDecoder.decode(builder.toString(), CharEncoding.UTF_8) + tokenDigest; + request.addQuerystringParameter("sig", md5Hex(sigSource).toLowerCase()); } super.signRequest(accessToken, request); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java new file mode 100644 index 000000000..3adbafd02 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java @@ -0,0 +1,43 @@ +package com.github.scribejava.apis.service; + +import com.github.scribejava.apis.OdnoklassnikiApi; +import com.github.scribejava.core.builder.ServiceBuilder; + +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.ParameterList; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.model.Parameter; +import com.github.scribejava.core.oauth.OAuth20Service; +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class OdnoklassnikiServiceTest { + + private static final String URL = "https://api.ok.ru/fb.do?method=friends.get&fields=uid%2C" + + "first_name%2Clast_name%2Cpic_2&application_key=AAAAAAAAAAAAAAAA&format=json"; + + private final OAuth20Service service = new ServiceBuilder() + .apiKey("0000000000") + .apiSecret("CCCCCCCCCCCCCCCCCCCCCCCC") + .scope("VALUABLE_ACCESS") + .callback("http://your.site.com/callback") + .build(OdnoklassnikiApi.instance()); + + @Test + public void testSigGeneration() { + final OAuth2AccessToken accessToken = new OAuth2AccessToken("d3iwa.403gvrs194740652m1k4w2a503k3c"); + final OAuthRequest request = new OAuthRequest(Verb.GET, URL, service); + service.signRequest(accessToken, request); + assertEquals("96127f5ca29a8351399e94bbd284ab16", findParam(request.getQueryStringParams(), "sig")); + } + + private static String findParam(ParameterList list, String key) { + for (Parameter param : list.getParams()) { + if (param.getKey().equals(key)) { + return param.getValue(); + } + } + return null; + } +} From 623b0ec9df21f988942b30608846c2cdf1aad8a4 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 20:21:03 +0300 Subject: [PATCH 132/250] prepare to release 3.1.0 --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 11155e6cf..50e37cffe 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 3.0.0 + 3.1.0 ``` @@ -101,7 +101,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 3.0.0 + 3.1.0 ``` diff --git a/changelog b/changelog index 8ab8158d2..4f2d28b7c 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[3.1.0] * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, see http://new.apiok.ru/dev/methods/ * add posibility to use externally created http client * make ScribeJava compilable under jdk7 (checkstyle downgraded for jdk 1.7) From efca28b5c4f623e32d35257461fc6f8ce8a24101 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 20:22:13 +0300 Subject: [PATCH 133/250] [maven-release-plugin] prepare release scribejava-3.1.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 6f09b33da..4707744f1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.0.1-SNAPSHOT + 3.1.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 9d8462956..e63c8a636 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.1-SNAPSHOT + 3.1.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 26857c334..e8df520d8 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.1-SNAPSHOT + 3.1.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index dfc65bd97..eeb83a9c7 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.1-SNAPSHOT + 3.1.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index da076a3e5..7dd4c3ca8 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.0.1-SNAPSHOT + 3.1.0 ../pom.xml From 96c1ea78ebbb334ce838729880f2a4b7f47f47a1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 26 Aug 2016 20:22:18 +0300 Subject: [PATCH 134/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 4707744f1..226256246 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.1.0 + 3.1.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index e63c8a636..0fc7155a3 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.0 + 3.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index e8df520d8..ceabc6b76 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.0 + 3.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index eeb83a9c7..1161c406d 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.0 + 3.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 7dd4c3ca8..af7aa4794 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.0 + 3.1.1-SNAPSHOT ../pom.xml From 1fcff0e41ed25cd6de431e4723a318542ec3ad63 Mon Sep 17 00:00:00 2001 From: chooco Date: Thu, 8 Sep 2016 21:49:42 +0900 Subject: [PATCH 135/250] Add Naver API (#701) Add Naver API --- .../com/github/scribejava/apis/NaverApi.java | 27 ++++++ .../apis/examples/NaverExample.java | 85 +++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java new file mode 100644 index 000000000..1f021fe03 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java @@ -0,0 +1,27 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.core.builder.api.DefaultApi20; + +public class NaverApi extends DefaultApi20 { + protected NaverApi() { + } + + private static class InstanceHolder { + private static final NaverApi INSTANCE = new NaverApi(); + + private InstanceHolder() { + } + } + + public static NaverApi instance() { + return NaverApi.InstanceHolder.INSTANCE; + } + + public String getAccessTokenEndpoint() { + return "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code"; + } + + protected String getAuthorizationBaseUrl() { + return "https://nid.naver.com/oauth2.0/authorize"; + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java new file mode 100644 index 000000000..98eab65df --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java @@ -0,0 +1,85 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.NaverApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; + +import java.io.IOException; +import java.util.Random; +import java.util.Scanner; + +public final class NaverExample { + + private static final String NETWORK_NAME = "Naver"; + private static final String PROTECTED_RESOURCE_URL = "https://openapi.naver.com/v1/nid/me"; + + private NaverExample() { + } + + public static void main(String... args) throws IOException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + final String secretState = "secret" + new Random().nextInt(999_999); + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .state(secretState) + .callback("http://www.example.com/oauth_callback/") + .build(NaverApi.instance()); + + final Scanner in = new Scanner(System.in, "UTF-8"); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessToken(code); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + service.signRequest(accessToken, request); + final Response response = request.send(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + + } +} From 9fd62eaaaf9c2f5d382e27bf59a399c6d96c675e Mon Sep 17 00:00:00 2001 From: choo_co Date: Thu, 8 Sep 2016 12:16:37 +0900 Subject: [PATCH 136/250] Add Naver API --- README.md | 1 + changelog | 3 +++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 50e37cffe..0e74d2d6b 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just * Microsoft Live (https://login.live.com/) * Mail.Ru (https://mail.ru/) * Meetup (http://www.meetup.com/) +* NAVER (http://www.naver.com/) * NetEase (http://www.163.com/) * Odnoklassniki Одноклассники (http://ok.ru/) * Pinterest (https://www.pinterest.com/) diff --git a/changelog b/changelog index 4f2d28b7c..4b6fc922d 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * Add Naver API + [3.1.0] * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, see http://new.apiok.ru/dev/methods/ * add posibility to use externally created http client From e01064d909e962d6d80905d077258c6e9ed9da70 Mon Sep 17 00:00:00 2001 From: Julien Herr Date: Thu, 8 Sep 2016 16:07:13 +0200 Subject: [PATCH 137/250] Manage OAuth2 error response for access token request (#696) --- .../exceptions/OAuthRequestException.java | 17 +++++++ .../AbstractOAuth1TokenExtractor.java | 13 +++-- .../OAuth2AccessTokenExtractor.java | 19 ++++--- .../OAuth2AccessTokenJsonExtractor.java | 35 ++++++++++++- .../core/extractors/TokenExtractor.java | 6 ++- .../core/model/OAuth2ErrorResponse.java | 51 +++++++++++++++++++ .../core/oauth/OAuth10aService.java | 8 +-- .../scribejava/core/oauth/OAuth20Service.java | 4 +- .../OAuth1AccessTokenExtractorTest.java | 42 +++++++++------ .../OAuth2AccessTokenExtractorTest.java | 38 +++++++++----- .../OAuth2AccessTokenJsonExtractorTest.java | 46 ++++++++++++++--- 11 files changed, 221 insertions(+), 58 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java b/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java new file mode 100644 index 000000000..409a51501 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java @@ -0,0 +1,17 @@ +package com.github.scribejava.core.exceptions; + +import com.github.scribejava.core.model.OAuth2ErrorResponse; + +public class OAuthRequestException extends OAuthException { + + private final OAuth2ErrorResponse error; + + public OAuthRequestException(String message, OAuth2ErrorResponse error) { + super(message); + this.error = error; + } + + public OAuth2ErrorResponse getError() { + return error; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java index 4d968d83c..36285c2c1 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java @@ -1,9 +1,11 @@ package com.github.scribejava.core.extractors; +import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth1Token; +import com.github.scribejava.core.model.Response; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -23,12 +25,13 @@ public abstract class AbstractOAuth1TokenExtractor implem * {@inheritDoc} */ @Override - public T extract(String response) { - Preconditions.checkEmptyString(response, + public T extract(Response response) throws IOException { + final String body = response.getBody(); + Preconditions.checkEmptyString(body, "Response body is incorrect. Can't extract a token from an empty string"); - final String token = extract(response, Pattern.compile(OAUTH_TOKEN_REGEXP)); - final String secret = extract(response, Pattern.compile(OAUTH_TOKEN_SECRET_REGEXP)); - return createToken(token, secret, response); + final String token = extract(body, Pattern.compile(OAUTH_TOKEN_REGEXP)); + final String secret = extract(body, Pattern.compile(OAUTH_TOKEN_SECRET_REGEXP)); + return createToken(token, secret, body); } private String extract(String response, Pattern p) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java index 251226338..67de27299 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java @@ -1,9 +1,11 @@ package com.github.scribejava.core.extractors; +import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.Response; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -34,23 +36,24 @@ public static OAuth2AccessTokenExtractor instance() { * {@inheritDoc} */ @Override - public OAuth2AccessToken extract(String response) { - Preconditions.checkEmptyString(response, + public OAuth2AccessToken extract(Response response) throws IOException { + final String body = response.getBody(); + Preconditions.checkEmptyString(body, "Response body is incorrect. Can't extract a token from an empty string"); - final String accessToken = extractParameter(response, ACCESS_TOKEN_REGEX, true); - final String tokenType = extractParameter(response, TOKEN_TYPE_REGEX, false); - final String expiresInString = extractParameter(response, EXPIRES_IN_REGEX, false); + final String accessToken = extractParameter(body, ACCESS_TOKEN_REGEX, true); + final String tokenType = extractParameter(body, TOKEN_TYPE_REGEX, false); + final String expiresInString = extractParameter(body, EXPIRES_IN_REGEX, false); Integer expiresIn; try { expiresIn = expiresInString == null ? null : Integer.valueOf(expiresInString); } catch (NumberFormatException nfe) { expiresIn = null; } - final String refreshToken = extractParameter(response, REFRESH_TOKEN_REGEX, false); - final String scope = extractParameter(response, SCOPE_REGEX, false); + final String refreshToken = extractParameter(body, REFRESH_TOKEN_REGEX, false); + final String scope = extractParameter(body, SCOPE_REGEX, false); - return new OAuth2AccessToken(accessToken, tokenType, expiresIn, refreshToken, scope, response); + return new OAuth2AccessToken(accessToken, tokenType, expiresIn, refreshToken, scope, body); } private static String extractParameter(String response, String regex, boolean required) throws OAuthException { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java index f6250f9b2..465b31c04 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java @@ -1,9 +1,13 @@ package com.github.scribejava.core.extractors; +import java.io.IOException; +import java.net.URI; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuth2ErrorResponse; +import com.github.scribejava.core.model.Response; import com.github.scribejava.core.utils.Preconditions; /** @@ -16,6 +20,9 @@ public class OAuth2AccessTokenJsonExtractor implements TokenExtractor concrete type of Token @@ -14,5 +18,5 @@ public interface TokenExtractor { * @param response the contents of the response * @return OAuth access token */ - T extract(String response); + T extract(Response response) throws IOException, OAuthException; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java new file mode 100644 index 000000000..d39ffa55b --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java @@ -0,0 +1,51 @@ +package com.github.scribejava.core.model; + +import com.github.scribejava.core.exceptions.OAuthException; + +import java.net.URI; + +/** + * Representing "5.2. Error Response" + */ +public class OAuth2ErrorResponse extends OAuthException { + + public enum OAuthError { + invalid_request, invalid_client, invalid_grant, unauthorized_client, unsupported_grant_type, invalid_scope + } + + private final OAuthError error; + private final String errorDescription; + private final URI errorUri; + private final String rawResponse; + + public OAuth2ErrorResponse(OAuthError error, String errorDescription, URI errorUri, String rawResponse) { + super(generateMessage(error, errorDescription, errorUri, rawResponse)); + if (error == null) { + throw new IllegalArgumentException("error must not be null"); + } + this.error = error; + this.errorDescription = errorDescription; + this.errorUri = errorUri; + this.rawResponse = rawResponse; + } + + private static String generateMessage(OAuthError error, String errorDescription, URI errorUri, String rawResponse) { + return rawResponse; + } + + public OAuthError getError() { + return error; + } + + public String getErrorDescription() { + return errorDescription; + } + + public URI getErrorUri() { + return errorUri; + } + + public String getRawResponse() { + return rawResponse; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index e707486bc..e1cc5bf5d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -48,7 +48,7 @@ public final OAuth1RequestToken getRequestToken() throws IOException { config.log("response status code: " + response.getCode()); config.log("response body: " + body); - return api.getRequestTokenExtractor().extract(body); + return api.getRequestTokenExtractor().extract(response); } public final Future getRequestTokenAsync( @@ -61,7 +61,7 @@ public final Future getRequestTokenAsync( return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth1RequestToken convert(Response response) throws IOException { - return getApi().getRequestTokenExtractor().extract(response.getBody()); + return getApi().getRequestTokenExtractor().extract(response); } }); } @@ -97,7 +97,7 @@ public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, S final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this); prepareAccessTokenRequest(request, requestToken, oauthVerifier); final Response response = request.send(); - return api.getAccessTokenExtractor().extract(response.getBody()); + return api.getAccessTokenExtractor().extract(response); } /** @@ -119,7 +119,7 @@ public final Future getAccessTokenAsync(OAuth1RequestToken re return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth1AccessToken convert(Response response) throws IOException { - return getApi().getAccessTokenExtractor().extract(response.getBody()); + return getApi().getAccessTokenExtractor().extract(response); } }); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 43bf4c7fa..a6ecc0019 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -34,7 +34,7 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { //sync version, protected to facilitate mocking protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) throws IOException { - return api.getAccessTokenExtractor().extract(request.send().getBody()); + return api.getAccessTokenExtractor().extract(request.send()); } //async version, protected to facilitate mocking @@ -44,7 +44,7 @@ protected Future sendAccessTokenRequestAsync(OAuthRequestAsyn return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth2AccessToken convert(Response response) throws IOException { - return getApi().getAccessTokenExtractor().extract(response.getBody()); + return getApi().getAccessTokenExtractor().extract(response); } }); } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java index 7cf3feb95..b810d25b3 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java @@ -1,9 +1,14 @@ package com.github.scribejava.core.extractors; +import com.github.scribejava.core.model.Response; import org.junit.Before; import org.junit.Test; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth1Token; + +import java.io.IOException; +import java.util.Collections; + import static org.junit.Assert.assertEquals; public class OAuth1AccessTokenExtractorTest { @@ -16,58 +21,63 @@ public void setUp() { } @Test - public void shouldExtractTokenFromOAuthStandardResponse() { + public void shouldExtractTokenFromOAuthStandardResponse() throws IOException { final String response = "oauth_token=hh5s93j4hdidpola&oauth_token_secret=hdhd0244k9j7ao03"; - final OAuth1Token extracted = extractor.extract(response); + final OAuth1Token extracted = extractor.extract(ok(response)); assertEquals("hh5s93j4hdidpola", extracted.getToken()); assertEquals("hdhd0244k9j7ao03", extracted.getTokenSecret()); } @Test - public void shouldExtractTokenFromInvertedOAuthStandardResponse() { + public void shouldExtractTokenFromInvertedOAuthStandardResponse() throws IOException { final String response = "oauth_token_secret=hh5s93j4hdidpola&oauth_token=hdhd0244k9j7ao03"; - final OAuth1Token extracted = extractor.extract(response); + final OAuth1Token extracted = extractor.extract(ok(response)); assertEquals("hh5s93j4hdidpola", extracted.getTokenSecret()); assertEquals("hdhd0244k9j7ao03", extracted.getToken()); } @Test - public void shouldExtractTokenFromResponseWithCallbackConfirmed() { + public void shouldExtractTokenFromResponseWithCallbackConfirmed() throws IOException { final String response = "oauth_token=hh5s93j4hdidpola&oauth_token_secret=hdhd0244k9j7ao03" + "&callback_confirmed=true"; - final OAuth1Token extracted = extractor.extract(response); + final OAuth1Token extracted = extractor.extract(ok(response)); assertEquals("hh5s93j4hdidpola", extracted.getToken()); assertEquals("hdhd0244k9j7ao03", extracted.getTokenSecret()); } @Test - public void shouldExtractTokenWithEmptySecret() { + public void shouldExtractTokenWithEmptySecret() throws IOException { final String response = "oauth_token=hh5s93j4hdidpola&oauth_token_secret="; - final OAuth1Token extracted = extractor.extract(response); + final OAuth1Token extracted = extractor.extract(ok(response)); assertEquals("hh5s93j4hdidpola", extracted.getToken()); assertEquals("", extracted.getTokenSecret()); } @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfTokenIsAbsent() { + public void shouldThrowExceptionIfTokenIsAbsent() throws IOException { final String response = "oauth_secret=hh5s93j4hdidpola&callback_confirmed=true"; - extractor.extract(response); + extractor.extract(ok(response)); } @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfSecretIsAbsent() { + public void shouldThrowExceptionIfSecretIsAbsent() throws IOException { final String response = "oauth_token=hh5s93j4hdidpola&callback_confirmed=true"; - extractor.extract(response); + extractor.extract(ok(response)); } @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfResponseIsNull() { - extractor.extract(null); + public void shouldThrowExceptionIfResponseIsNull() throws IOException { + extractor.extract(ok(null)); } @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfResponseIsEmptyString() { + public void shouldThrowExceptionIfResponseIsEmptyString() throws IOException { final String response = ""; - extractor.extract(response); + extractor.extract(ok(response)); + } + + private static Response ok(String body) { + return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), + body, /* stream */ null); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java index fa66956d5..eb88b583f 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java @@ -1,9 +1,14 @@ package com.github.scribejava.core.extractors; +import com.github.scribejava.core.model.Response; import org.junit.Before; import org.junit.Test; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth2AccessToken; + +import java.io.IOException; +import java.util.Collections; + import static org.junit.Assert.assertEquals; public class OAuth2AccessTokenExtractorTest { @@ -16,29 +21,29 @@ public void setUp() { } @Test - public void shouldExtractTokenFromOAuthStandardResponse() { + public void shouldExtractTokenFromOAuthStandardResponse() throws IOException { final String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159" + "|RsXNdKrpxg8L6QNLWcs2TVTmcaE"; - final OAuth2AccessToken extracted = extractor.extract(response); + final OAuth2AccessToken extracted = extractor.extract(ok(response)); assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", extracted.getAccessToken()); } @Test - public void shouldExtractTokenFromResponseWithExpiresParam() { + public void shouldExtractTokenFromResponseWithExpiresParam() throws IOException { final String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159" + "|RsXNdKrpxg8L6QNLWcs2TVTmcaE&expires_in=5108"; - final OAuth2AccessToken extracted = extractor.extract(response); + final OAuth2AccessToken extracted = extractor.extract(ok(response)); assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", extracted.getAccessToken()); assertEquals(Integer.valueOf(5108), extracted.getExpiresIn()); } @Test - public void shouldExtractTokenFromResponseWithExpiresAndRefreshParam() { + public void shouldExtractTokenFromResponseWithExpiresAndRefreshParam() throws IOException { final String response = "access_token=166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159" + "|RsXNdKrpxg8L6QNLWcs2TVTmcaE&expires_in=5108&token_type=bearer&refresh_token=166942940015970"; - final OAuth2AccessToken extracted = extractor.extract(response); + final OAuth2AccessToken extracted = extractor.extract(ok(response)); assertEquals("166942940015970|2.2ltzWXYNDjCtg5ZDVVJJeg__.3600.1295816400-548517159|RsXNdKrpxg8L6QNLWcs2TVTmcaE", extracted.getAccessToken()); assertEquals(Integer.valueOf(5108), extracted.getExpiresIn()); @@ -47,26 +52,31 @@ public void shouldExtractTokenFromResponseWithExpiresAndRefreshParam() { } @Test - public void shouldExtractTokenFromResponseWithManyParameters() { + public void shouldExtractTokenFromResponseWithManyParameters() throws IOException { final String response = "access_token=foo1234&other_stuff=yeah_we_have_this_too&number=42"; - final OAuth2AccessToken extracted = extractor.extract(response); + final OAuth2AccessToken extracted = extractor.extract(ok(response)); assertEquals("foo1234", extracted.getAccessToken()); } @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfTokenIsAbsent() { + public void shouldThrowExceptionIfTokenIsAbsent() throws IOException { final String response = "&expires=5108"; - extractor.extract(response); + extractor.extract(ok(response)); } @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfResponseIsNull() { - extractor.extract(null); + public void shouldThrowExceptionIfResponseIsNull() throws IOException { + extractor.extract(ok(null)); } @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfResponseIsEmptyString() { + public void shouldThrowExceptionIfResponseIsEmptyString() throws IOException { final String response = ""; - extractor.extract(response); + extractor.extract(ok(response)); + } + + private static Response ok(String body) { + return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), + body, /* stream */ null); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java index 9b2098e6c..a92c9ba1d 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java @@ -1,8 +1,15 @@ package com.github.scribejava.core.extractors; import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuth2ErrorResponse; +import com.github.scribejava.core.model.Response; import org.junit.Test; + +import java.io.IOException; +import java.util.Collections; + import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class OAuth2AccessTokenJsonExtractorTest { @@ -10,18 +17,45 @@ public class OAuth2AccessTokenJsonExtractorTest { private final OAuth2AccessTokenJsonExtractor extractor = OAuth2AccessTokenJsonExtractor.instance(); @Test - public void shouldParseResponse() { - final OAuth2AccessToken token = extractor.extract(RESPONSE); + public void shouldParseResponse() throws IOException { + final OAuth2AccessToken token = extractor.extract(ok(RESPONSE)); assertEquals(token.getAccessToken(), "I0122HHJKLEM21F3WLPYHDKGKZULAUO4SGMV3ABKFTDT3T3X"); } @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfForNullParameters() { - extractor.extract(null); + public void shouldThrowExceptionIfForNullParameters() throws IOException { + extractor.extract(ok(null)); } @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfForEmptyStrings() { - extractor.extract(""); + public void shouldThrowExceptionIfForEmptyStrings() throws IOException { + extractor.extract(ok("")); + } + + @Test + public void shouldThrowExceptionIfResponseIsError() throws IOException { + final String body = "{" + + "\"error_description\":\"unknown, invalid, or expired refresh token\"," + + "\"error\":\"invalid_grant\"" + + "}"; + boolean hadException = false; + try { + extractor.extract(error(body)); + } catch (OAuth2ErrorResponse oaer) { + hadException = true; + assertEquals(OAuth2ErrorResponse.OAuthError.invalid_grant, oaer.getError()); + assertEquals("unknown, invalid, or expired refresh token", oaer.getErrorDescription()); + } + assertTrue(hadException); + } + + private static Response ok(String body) { + return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), + body, /* stream */ null); + } + + private static Response error(String body) { + return new Response(400, /* message */ null, /* headers */ Collections.emptyMap(), + body, /* stream */ null); } } From aa4e6188b07a814b006a03ab3cdc0cdddfb061aa Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Sep 2016 17:43:01 +0300 Subject: [PATCH 138/250] some fixes --- changelog | 3 ++- .../com/github/scribejava/apis/NaverApi.java | 2 ++ .../exceptions/OAuthRequestException.java | 17 ------------ .../OAuth2AccessTokenJsonExtractor.java | 10 ++++--- .../core/extractors/TokenExtractor.java | 3 ++- ...va => OAuth2AccessTokenErrorResponse.java} | 27 +++++++++---------- .../OAuth2AccessTokenJsonExtractorTest.java | 12 ++++----- 7 files changed, 30 insertions(+), 44 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java rename scribejava-core/src/main/java/com/github/scribejava/core/model/{OAuth2ErrorResponse.java => OAuth2AccessTokenErrorResponse.java} (56%) diff --git a/changelog b/changelog index 4b6fc922d..cd7edebaa 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] - * Add Naver API + * Add Naver API (thanks to chooco) + * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) [3.1.0] * fix OdnoklassnikiServiceImpl signature, params for hash must be sorted in lexicographic order, see http://new.apiok.ru/dev/methods/ diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java index 1f021fe03..514b17b96 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java @@ -17,10 +17,12 @@ public static NaverApi instance() { return NaverApi.InstanceHolder.INSTANCE; } + @Override public String getAccessTokenEndpoint() { return "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code"; } + @Override protected String getAuthorizationBaseUrl() { return "https://nid.naver.com/oauth2.0/authorize"; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java b/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java deleted file mode 100644 index 409a51501..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthRequestException.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.github.scribejava.core.exceptions; - -import com.github.scribejava.core.model.OAuth2ErrorResponse; - -public class OAuthRequestException extends OAuthException { - - private final OAuth2ErrorResponse error; - - public OAuthRequestException(String message, OAuth2ErrorResponse error) { - super(message); - this.error = error; - } - - public OAuth2ErrorResponse getError() { - return error; - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java index 465b31c04..feeed66a7 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java @@ -6,7 +6,7 @@ import java.util.regex.Pattern; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuth2ErrorResponse; +import com.github.scribejava.core.model.OAuth2AccessTokenErrorResponse; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.utils.Preconditions; @@ -48,7 +48,9 @@ public OAuth2AccessToken extract(Response response) throws IOException { return createToken(body); } - // Related documentation: https://tools.ietf.org/html/rfc6749#section-5.2 + /** + * Related documentation: https://tools.ietf.org/html/rfc6749#section-5.2 + */ private static void generateError(String response) { final String errorInString = extractParameter(response, ERROR_REGEX, true); final String errorDescription = extractParameter(response, ERROR_DESCRIPTION_REGEX, false); @@ -60,8 +62,8 @@ private static void generateError(String response) { errorUri = null; } - throw new OAuth2ErrorResponse(OAuth2ErrorResponse.OAuthError.valueOf(errorInString), errorDescription, - errorUri, response); + throw new OAuth2AccessTokenErrorResponse(OAuth2AccessTokenErrorResponse.ErrorCode.valueOf(errorInString), + errorDescription, errorUri, response); } private OAuth2AccessToken createToken(String response) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/TokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/TokenExtractor.java index 0e1a1cfa8..00c662d81 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/TokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/TokenExtractor.java @@ -15,8 +15,9 @@ public interface TokenExtractor { /** * Extracts the concrete type of token from the contents of an Http Response * - * @param response the contents of the response + * @param response the whole response * @return OAuth access token + * @throws java.io.IOException in case of troubles while getting body from the response */ T extract(Response response) throws IOException, OAuthException; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessTokenErrorResponse.java similarity index 56% rename from scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java rename to scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessTokenErrorResponse.java index d39ffa55b..eba31404e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2ErrorResponse.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuth2AccessTokenErrorResponse.java @@ -7,34 +7,33 @@ /** * Representing "5.2. Error Response" */ -public class OAuth2ErrorResponse extends OAuthException { +public class OAuth2AccessTokenErrorResponse extends OAuthException { - public enum OAuthError { + private static final long serialVersionUID = 2309424849700276816L; + + public enum ErrorCode { invalid_request, invalid_client, invalid_grant, unauthorized_client, unsupported_grant_type, invalid_scope } - private final OAuthError error; + private final ErrorCode errorCode; private final String errorDescription; private final URI errorUri; private final String rawResponse; - public OAuth2ErrorResponse(OAuthError error, String errorDescription, URI errorUri, String rawResponse) { - super(generateMessage(error, errorDescription, errorUri, rawResponse)); - if (error == null) { - throw new IllegalArgumentException("error must not be null"); + public OAuth2AccessTokenErrorResponse(ErrorCode errorCode, String errorDescription, URI errorUri, + String rawResponse) { + super(rawResponse); + if (errorCode == null) { + throw new IllegalArgumentException("errorCode must not be null"); } - this.error = error; + this.errorCode = errorCode; this.errorDescription = errorDescription; this.errorUri = errorUri; this.rawResponse = rawResponse; } - private static String generateMessage(OAuthError error, String errorDescription, URI errorUri, String rawResponse) { - return rawResponse; - } - - public OAuthError getError() { - return error; + public ErrorCode getErrorCode() { + return errorCode; } public String getErrorDescription() { diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java index a92c9ba1d..026885dcf 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java @@ -1,7 +1,7 @@ package com.github.scribejava.core.extractors; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuth2ErrorResponse; +import com.github.scribejava.core.model.OAuth2AccessTokenErrorResponse; import com.github.scribejava.core.model.Response; import org.junit.Test; @@ -9,7 +9,7 @@ import java.util.Collections; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; public class OAuth2AccessTokenJsonExtractorTest { @@ -38,15 +38,13 @@ public void shouldThrowExceptionIfResponseIsError() throws IOException { "\"error_description\":\"unknown, invalid, or expired refresh token\"," + "\"error\":\"invalid_grant\"" + "}"; - boolean hadException = false; try { extractor.extract(error(body)); - } catch (OAuth2ErrorResponse oaer) { - hadException = true; - assertEquals(OAuth2ErrorResponse.OAuthError.invalid_grant, oaer.getError()); + fail(); + } catch (OAuth2AccessTokenErrorResponse oaer) { + assertEquals(OAuth2AccessTokenErrorResponse.ErrorCode.invalid_grant, oaer.getErrorCode()); assertEquals("unknown, invalid, or expired refresh token", oaer.getErrorDescription()); } - assertTrue(hadException); } private static Response ok(String body) { From 018398ae5b08c03a12f2e40319fbc9445da8cfca Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Sep 2016 17:51:55 +0300 Subject: [PATCH 139/250] update AHC http client --- scribejava-httpclient-ahc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 1161c406d..e8c45940f 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.12 + 2.0.14 From ef017161b5b3844ad433912529980314d3df594f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Sep 2016 17:58:10 +0300 Subject: [PATCH 140/250] prepare to release 3.2.0 --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0e74d2d6b..81e365476 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 3.1.0 + 3.2.0 ``` @@ -102,7 +102,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 3.1.0 + 3.2.0 ``` diff --git a/changelog b/changelog index cd7edebaa..2acf8c641 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[3.2.0] * Add Naver API (thanks to chooco) * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) From 4cd60c183162cc7f96ffa12aaac0755469c21f62 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Sep 2016 17:59:07 +0300 Subject: [PATCH 141/250] [maven-release-plugin] prepare release scribejava-3.2.0 --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 226256246..ac936e8a9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.1.1-SNAPSHOT + 3.2.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 0fc7155a3..dc8968df6 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.1-SNAPSHOT + 3.2.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index ceabc6b76..3faf98da7 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.1-SNAPSHOT + 3.2.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index e8c45940f..c061a3fe9 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.1-SNAPSHOT + 3.2.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index af7aa4794..38bbb6217 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.1.1-SNAPSHOT + 3.2.0 ../pom.xml From c9ac8639566a67502fcfca52f3b6aac3d1df96f7 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Sep 2016 17:59:13 +0300 Subject: [PATCH 142/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index ac936e8a9..11e7535e2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.2.0 + 3.2.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index dc8968df6..8a95b9739 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.0 + 3.2.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 3faf98da7..b8774fd58 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.0 + 3.2.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index c061a3fe9..6d76e6ebf 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.0 + 3.2.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 38bbb6217..c0d6d44e3 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.0 + 3.2.1-SNAPSHOT ../pom.xml From aef1632ddf93479fb719f1ef0a4c3bbc7d642a5c Mon Sep 17 00:00:00 2001 From: Ray Vanderborght Date: Sat, 1 Oct 2016 15:59:03 -0700 Subject: [PATCH 143/250] Ensure consistent Content-Encoding header name in Response Support HttpURLConnection implementations such as the one google appengine uses, which normalizes header names to lower case in the implementation of getHeaderFields(). --- .../com/github/scribejava/core/model/Response.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java index 869066788..f52eb77df 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java @@ -5,7 +5,9 @@ import java.net.HttpURLConnection; import java.net.UnknownHostException; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.utils.StreamUtils; @@ -48,8 +50,13 @@ private String parseBodyContents() throws IOException { private Map parseHeaders(HttpURLConnection conn) { final Map headers = new HashMap<>(); - for (String key : conn.getHeaderFields().keySet()) { - headers.put(key, conn.getHeaderFields().get(key).get(0)); + for (final Entry> entry : conn.getHeaderFields().entrySet()) { + final String key = entry.getKey(); + if ("Content-Encoding".equalsIgnoreCase(key)) { + headers.put("Content-Encoding", entry.getValue().get(0)); + } else { + headers.put(key, entry.getValue().get(0)); + } } return headers; } From d5ce425921f2866e0b08ec23a4d9b146da639aae Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 6 Oct 2016 16:36:38 +0300 Subject: [PATCH 144/250] update maven deps, cleanup redundant 'final' --- pom.xml | 2 +- .../main/java/com/github/scribejava/core/model/Response.java | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 11e7535e2..cff41d24c 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,7 @@ com.puppycrawl.tools checkstyle - 7.1 + 7.1.2 diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java index f52eb77df..e57f39c44 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java @@ -50,7 +50,7 @@ private String parseBodyContents() throws IOException { private Map parseHeaders(HttpURLConnection conn) { final Map headers = new HashMap<>(); - for (final Entry> entry : conn.getHeaderFields().entrySet()) { + for (Entry> entry : conn.getHeaderFields().entrySet()) { final String key = entry.getKey(); if ("Content-Encoding".equalsIgnoreCase(key)) { headers.put("Content-Encoding", entry.getValue().get(0)); diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 6d76e6ebf..ee1bc2b17 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.14 + 2.0.15 From d9c8a0f356494cf1b38c4f8fec27414379f1d8ef Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 12 Oct 2016 12:58:47 +0300 Subject: [PATCH 145/250] update Facebook v2.6 -> v2.8 --- changelog | 3 +++ .../main/java/com/github/scribejava/apis/FacebookApi.java | 6 +++--- .../scribejava/apis/examples/FacebookAsyncNingExample.java | 2 +- .../github/scribejava/apis/examples/FacebookExample.java | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/changelog b/changelog index 2acf8c641..8220f8a2b 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * update Facebook v2.6 -> v2.8 + [3.2.0] * Add Naver API (thanks to chooco) * handle OAuth2 error response for Issuing an Access Token (thanks to juherr) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index 9bf5abfc0..1f00e931c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -4,7 +4,7 @@ import com.github.scribejava.core.model.Verb; /** - * Facebook v2.6 API + * Facebook v2.8 API */ public class FacebookApi extends DefaultApi20 { @@ -27,7 +27,7 @@ public Verb getAccessTokenVerb() { @Override public String getAccessTokenEndpoint() { - return "https://graph.facebook.com/v2.6/oauth/access_token"; + return "https://graph.facebook.com/v2.8/oauth/access_token"; } @Override @@ -37,6 +37,6 @@ public String getRefreshTokenEndpoint() { @Override protected String getAuthorizationBaseUrl() { - return "https://www.facebook.com/v2.6/dialog/oauth"; + return "https://www.facebook.com/v2.8/dialog/oauth"; } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index 9cddb3b85..ce0aab781 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -19,7 +19,7 @@ public final class FacebookAsyncNingExample { private static final String NETWORK_NAME = "Facebook"; - private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; + private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.8/me"; private FacebookAsyncNingExample() { } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 9da9c874b..d955c1f85 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -14,7 +14,7 @@ public final class FacebookExample { private static final String NETWORK_NAME = "Facebook"; - private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.6/me"; + private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/v2.8/me"; private FacebookExample() { } From e6f305d3de95f9786f20fdd92a3bafec6e32d92f Mon Sep 17 00:00:00 2001 From: jpmeijers Date: Wed, 2 Nov 2016 12:35:39 +0100 Subject: [PATCH 146/250] Added API and tests for The Things Network. Both for v1-staging and v2-preview. You need to register your own client_id with TTN to use this library. --- .../apis/TheThingsNetworkV1StagingApi.java | 41 +++++++ .../apis/TheThingsNetworkV2PreviewApi.java | 41 +++++++ .../apis/examples/TTNV1Example.java | 105 ++++++++++++++++++ .../apis/examples/TTNV2Example.java | 101 +++++++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java new file mode 100644 index 000000000..4b97b50c5 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java @@ -0,0 +1,41 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.Verb; + +public class TheThingsNetworkV1StagingApi extends DefaultApi20 { + + protected TheThingsNetworkV1StagingApi() { + } + + private static class InstanceHolder { + private static final TheThingsNetworkV1StagingApi INSTANCE = new TheThingsNetworkV1StagingApi(); + } + + public static TheThingsNetworkV1StagingApi instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public Verb getAccessTokenVerb() { + return Verb.POST; + } + + @Override + public String getAccessTokenEndpoint() { + return "https://account.thethingsnetwork.org/users/token"; + } + + @Override + protected String getAuthorizationBaseUrl() { + return "https://account.thethingsnetwork.org/users/authorize"; + } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return OAuth2AccessTokenJsonExtractor.instance(); + } +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java new file mode 100644 index 000000000..c649e2298 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java @@ -0,0 +1,41 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.Verb; + +public class TheThingsNetworkV2PreviewApi extends DefaultApi20 { + + protected TheThingsNetworkV2PreviewApi() { + } + + private static class InstanceHolder { + private static final TheThingsNetworkV2PreviewApi INSTANCE = new TheThingsNetworkV2PreviewApi(); + } + + public static TheThingsNetworkV2PreviewApi instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public Verb getAccessTokenVerb() { + return Verb.POST; + } + + @Override + public String getAccessTokenEndpoint() { + return "https://preview.account.thethingsnetwork.org/users/token"; + } + + @Override + protected String getAuthorizationBaseUrl() { + return "https://preview.account.thethingsnetwork.org/users/authorize"; + } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return OAuth2AccessTokenJsonExtractor.instance(); + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java new file mode 100644 index 000000000..d9652405c --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java @@ -0,0 +1,105 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.TheThingsNetworkV1StagingApi; +import com.github.scribejava.apis.TheThingsNetworkV2PreviewApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; + +import java.io.IOException; +import java.net.URLDecoder; +import java.util.Random; +import java.util.Scanner; + +public final class TTNV1Example { + + private static final String NETWORK_NAME = "TTNv1staging"; + private static final String PROTECTED_RESOURCE_URL = "https://account.thethingsnetwork.org/applications"; + + private TTNV1Example() { + } + + public static void main(String... args) throws IOException { + // Replace these with your client id and secret + final String clientId = "your_client_id"; + final String clientSecret = "your_client_secret"; + final String secretState = "secret" + new Random().nextInt(999_999); + final String redirectURI = "https://your_redirect_uri"; + + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .state(secretState) + .callback(redirectURI) + .build(TheThingsNetworkV1StagingApi.instance()); + final Scanner in = new Scanner(System.in, "UTF-8"); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + + // TTN v1staging does not have URL safe keys, so we have to decode it + final String code = URLDecoder.decode(in.nextLine(), "UTF-8"); + System.out.println("Using code: "+code); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Oops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessToken(code); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + + // TTN should support both signing the request with a parameter, or with a header. + // 1. Token as a parameter + service.signRequest(accessToken, request); + // 2. Token in the header. + //request.addHeader("Authorization", "bearer "+accessToken.getAccessToken()); + // And we always expect JSON data. + request.addHeader("Accept", "application/json"); + final Response response = request.send(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + + if(response.getCode()==401) + { + System.out.println("Not authorised: "+response.getBody()); + } + else { + System.out.println("You should see a JSON array of your registered applications:"); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("That's it man! Go and build something awesome with ScribeJava! :)"); + } + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java new file mode 100644 index 000000000..18979aa8b --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java @@ -0,0 +1,101 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.TheThingsNetworkV2PreviewApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; + +import java.io.IOException; +import java.net.URLDecoder; +import java.util.Random; +import java.util.Scanner; + +public final class TTNV2Example { + + private static final String NETWORK_NAME = "TTNv2preview"; + private static final String PROTECTED_RESOURCE_URL = "https://preview.account.thethingsnetwork.org/api/v2/applications"; + + private TTNV2Example() { + } + + public static void main(String... args) throws IOException { + // Replace these with your client id and secret + final String clientId = "your_client_id"; + final String clientSecret = "your_client_secret"; + final String secretState = "secret" + new Random().nextInt(999_999); + final String redirectURI = "https://your_redirect_uri"; + + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .state(secretState) + .callback(redirectURI) + .build(TheThingsNetworkV2PreviewApi.instance()); + final Scanner in = new Scanner(System.in, "UTF-8"); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Oops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessToken(code); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + + // TTN should support both signing the request with a parameter, or with a header. + // 1. Token as a parameter + service.signRequest(accessToken, request); + // 2. Token in the header. + //request.addHeader("Authorization", "bearer "+accessToken.getAccessToken()); + // And we always expect JSON data. + request.addHeader("Accept", "application/json"); + final Response response = request.send(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + + if(response.getCode()==401) + { + System.out.println("Not authorised: "+response.getBody()); + } + else { + System.out.println("You should see a JSON array of your registered applications:"); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("That's it man! Go and build something awesome with ScribeJava! :)"); + } + } +} From 4eee5ffc1ab3f8523f21db3e10702414b458246a Mon Sep 17 00:00:00 2001 From: jpmeijers Date: Wed, 2 Nov 2016 14:46:05 +0100 Subject: [PATCH 147/250] Fix style errors from tests. --- .../github/scribejava/apis/examples/TTNV1Example.java | 7 ++----- .../github/scribejava/apis/examples/TTNV2Example.java | 10 ++++------ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java index d9652405c..155b9e999 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java @@ -1,7 +1,6 @@ package com.github.scribejava.apis.examples; import com.github.scribejava.apis.TheThingsNetworkV1StagingApi; -import com.github.scribejava.apis.TheThingsNetworkV2PreviewApi; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequest; @@ -90,11 +89,9 @@ public static void main(String... args) throws IOException { System.out.println(); System.out.println(response.getCode()); - if(response.getCode()==401) - { + if(response.getCode()==401) { System.out.println("Not authorised: "+response.getBody()); - } - else { + } else { System.out.println("You should see a JSON array of your registered applications:"); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java index 18979aa8b..d8c30ffbc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java @@ -9,14 +9,14 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -import java.net.URLDecoder; import java.util.Random; import java.util.Scanner; public final class TTNV2Example { private static final String NETWORK_NAME = "TTNv2preview"; - private static final String PROTECTED_RESOURCE_URL = "https://preview.account.thethingsnetwork.org/api/v2/applications"; + private static final String PROTECTED_RESOURCE_URL = + "https://preview.account.thethingsnetwork.org/api/v2/applications"; private TTNV2Example() { } @@ -86,11 +86,9 @@ public static void main(String... args) throws IOException { System.out.println(); System.out.println(response.getCode()); - if(response.getCode()==401) - { + if(response.getCode()==401) { System.out.println("Not authorised: "+response.getBody()); - } - else { + } else { System.out.println("You should see a JSON array of your registered applications:"); System.out.println(response.getBody()); From 53ebea16ae7eefd96d7f4ebfadad5f1fa983ebfa Mon Sep 17 00:00:00 2001 From: jpmeijers Date: Wed, 2 Nov 2016 14:53:53 +0100 Subject: [PATCH 148/250] Remove trailing white space. --- .../java/com/github/scribejava/apis/examples/TTNV2Example.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java index d8c30ffbc..290f90905 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java @@ -15,7 +15,7 @@ public final class TTNV2Example { private static final String NETWORK_NAME = "TTNv2preview"; - private static final String PROTECTED_RESOURCE_URL = + private static final String PROTECTED_RESOURCE_URL = "https://preview.account.thethingsnetwork.org/api/v2/applications"; private TTNV2Example() { From 6bff3a43878bb43f3fb398405936bd6baf2eaace Mon Sep 17 00:00:00 2001 From: Steven McLaughlin Date: Wed, 2 Nov 2016 17:48:01 -0400 Subject: [PATCH 149/250] Added an Api for Box.com --- .../com/github/scribejava/apis/BoxApi20.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java new file mode 100644 index 000000000..b1bfb28b0 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java @@ -0,0 +1,33 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.core.builder.api.DefaultApi20; + +/** + * Box.com Api + */ +public class BoxApi20 extends DefaultApi20 { + + + protected BoxApi20() { + + } + + private static class InstanceHolder { + private static final BoxApi20 INSTANCE = new BoxApi20(); + } + + public static BoxApi20 instance() { + return InstanceHolder.INSTANCE; + } + + @Override + public String getAccessTokenEndpoint() { + return "https://api.box.com/oauth2/token"; + } + + @Override + protected String getAuthorizationBaseUrl() { + return "https://account.box.com/api/oauth2/authorize"; + } + +} From edeecaa0aa74eb238cfc8a97ff3f5714089315bf Mon Sep 17 00:00:00 2001 From: MclaughlinSteve Date: Wed, 2 Nov 2016 22:24:15 -0400 Subject: [PATCH 150/250] Changed Whitespace to tabs Fixed whitespace errors, and added first draft of test. Will update test soon. --- .../com/github/scribejava/apis/BoxApi20.java | 29 +++-- .../apis/examples/Box20Example.java | 112 ++++++++++++++++++ 2 files changed, 126 insertions(+), 15 deletions(-) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java index b1bfb28b0..4353b6fdf 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java @@ -6,12 +6,11 @@ * Box.com Api */ public class BoxApi20 extends DefaultApi20 { - - - protected BoxApi20() { - - } - + + + protected BoxApi20() { + } + private static class InstanceHolder { private static final BoxApi20 INSTANCE = new BoxApi20(); } @@ -20,14 +19,14 @@ public static BoxApi20 instance() { return InstanceHolder.INSTANCE; } - @Override - public String getAccessTokenEndpoint() { - return "https://api.box.com/oauth2/token"; - } + @Override + public String getAccessTokenEndpoint() { + return "https://api.box.com/oauth2/token"; + } + + @Override + protected String getAuthorizationBaseUrl() { + return "https://account.box.com/api/oauth2/authorize"; + } - @Override - protected String getAuthorizationBaseUrl() { - return "https://account.box.com/api/oauth2/authorize"; - } - } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java new file mode 100644 index 000000000..55a35fbda --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -0,0 +1,112 @@ +package com.github.scribejava.apis.examples; + +import java.util.Random; +import java.util.Scanner; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.apis.BoxApi20; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public final class Box20Example { + + private static final String NETWORK_NAME = "Box"; + private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; + + private Box20Example() { + } + + public static void main(String... args) throws IOException { + //Replace these with your client id and secret + final String clientId ="your client id"; + final string clientSecret = "your client secret"; + final String secretState = "secret" + new Random().nextInt(999_999); + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .scope("profile") // replace with desired scope + .state(secretState) + .callback("http://example.com/callback") + .build(BoxApi20.instance()); + final Scanner in = new Scanner(System.in, "UTF-8"); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + //pass access_type=offline to get refresh token + //https://developers.google.com/identity/protocols/OAuth2WebServer#preparing-to-start-the-oauth-20-flow + final Map additionalParams = new HashMap<>(); + additionalParams.put("access_type", "offline"); + //force to reget refresh token (if usera are asked not the first time) + additionalParams.put("prompt", "consent"); + final String authorizationUrl = service.getAuthorizationUrl(additionalParams); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + OAuth2AccessToken accessToken = service.getAccessToken(code); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + + System.out.println("Refreshing the Access Token..."); + accessToken = service.refreshAccessToken(accessToken.getRefreshToken()); + System.out.println("Refreshed the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + while (true) { + System.out.println("Paste fieldnames to fetch (leave empty to get profile, 'exit' to stop example)"); + System.out.print(">>"); + final String query = in.nextLine(); + System.out.println(); + + final String requestUrl; + if ("exit".equals(query)) { + break; + } else if (query == null || query.isEmpty()) { + requestUrl = PROTECTED_RESOURCE_URL; + } else { + requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; + } + + final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl, service); + service.signRequest(accessToken, request); + final Response response = request.send(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + } + } + +} \ No newline at end of file From 6e6c5502827bb2910002ff3f08fcbd4b60f27047 Mon Sep 17 00:00:00 2001 From: MclaughlinSteve Date: Wed, 2 Nov 2016 22:31:41 -0400 Subject: [PATCH 151/250] Whitespace fixes fixed some additional whitespace issues --- .../src/main/java/com/github/scribejava/apis/BoxApi20.java | 2 +- .../com/github/scribejava/apis/examples/Box20Example.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java index 4353b6fdf..79d75180c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java @@ -8,7 +8,7 @@ public class BoxApi20 extends DefaultApi20 { - protected BoxApi20() { + protected BoxApi20() { } private static class InstanceHolder { diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index 55a35fbda..9fd966ad8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -23,7 +23,7 @@ private Box20Example() { public static void main(String... args) throws IOException { //Replace these with your client id and secret - final String clientId ="your client id"; + final String clientId = "your client id"; final string clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); final OAuth20Service service = new ServiceBuilder() @@ -109,4 +109,4 @@ public static void main(String... args) throws IOException { } } -} \ No newline at end of file +} From cee1ed39f39cb5fd403db3986d2412d6cab7da0c Mon Sep 17 00:00:00 2001 From: MclaughlinSteve Date: Wed, 2 Nov 2016 22:36:53 -0400 Subject: [PATCH 152/250] Fixed typo fixed typo (string -> String) --- .../java/com/github/scribejava/apis/examples/Box20Example.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index 9fd966ad8..cc5adffd2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -24,7 +24,7 @@ private Box20Example() { public static void main(String... args) throws IOException { //Replace these with your client id and secret final String clientId = "your client id"; - final string clientSecret = "your client secret"; + final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) From a47689cebdc97795d68b7380bbbcc2c5e772a63d Mon Sep 17 00:00:00 2001 From: MclaughlinSteve Date: Wed, 2 Nov 2016 23:26:54 -0400 Subject: [PATCH 153/250] Fixed test Updated test. Should be working now --- .../apis/examples/Box20Example.java | 44 +++---------------- 1 file changed, 5 insertions(+), 39 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index cc5adffd2..17997fd6e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -16,7 +16,7 @@ public final class Box20Example { private static final String NETWORK_NAME = "Box"; - private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/plus/v1/people/me"; + private static final String PROTECTED_RESOURCE_URL = "https://app.box.com/files"; private Box20Example() { } @@ -25,13 +25,12 @@ public static void main(String... args) throws IOException { //Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - final String secretState = "secret" + new Random().nextInt(999_999); + final String secretState = "security_token" + new Random().nextInt(999_999); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) - .scope("profile") // replace with desired scope .state(secretState) - .callback("http://example.com/callback") + .callback("https://example.com/callback") .build(BoxApi20.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); @@ -41,7 +40,6 @@ public static void main(String... args) throws IOException { // Obtain the Authorization URL System.out.println("Fetching the Authorization URL..."); //pass access_type=offline to get refresh token - //https://developers.google.com/identity/protocols/OAuth2WebServer#preparing-to-start-the-oauth-20-flow final Map additionalParams = new HashMap<>(); additionalParams.put("access_type", "offline"); //force to reget refresh token (if usera are asked not the first time) @@ -71,42 +69,10 @@ public static void main(String... args) throws IOException { System.out.println("Trading the Request Token for an Access Token..."); OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + System.out.println("(If you're curious, it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println("Refreshing the Access Token..."); - accessToken = service.refreshAccessToken(accessToken.getRefreshToken()); - System.out.println("Refreshed the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - while (true) { - System.out.println("Paste fieldnames to fetch (leave empty to get profile, 'exit' to stop example)"); - System.out.print(">>"); - final String query = in.nextLine(); - System.out.println(); - - final String requestUrl; - if ("exit".equals(query)) { - break; - } else if (query == null || query.isEmpty()) { - requestUrl = PROTECTED_RESOURCE_URL; - } else { - requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; - } - - final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl, service); - service.signRequest(accessToken, request); - final Response response = request.send(); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - - System.out.println(); - } + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); } } From 6405e8b2b556dc9bd615b5095d8a1190e8e113d1 Mon Sep 17 00:00:00 2001 From: MclaughlinSteve Date: Wed, 2 Nov 2016 23:43:35 -0400 Subject: [PATCH 154/250] Updated test Made fixes to test --- .../scribejava/apis/examples/Box20Example.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index 17997fd6e..f22aa6883 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -16,7 +16,7 @@ public final class Box20Example { private static final String NETWORK_NAME = "Box"; - private static final String PROTECTED_RESOURCE_URL = "https://app.box.com/files"; + private static final String PROTECTED_RESOURCE_URL = "https://app.box.com/profile"; private Box20Example() { } @@ -67,11 +67,23 @@ public static void main(String... args) throws IOException { // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - OAuth2AccessToken accessToken = service.getAccessToken(code); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(If you're curious, it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + service.signRequest(accessToken, request); + final Response response = request.send(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); } From 5ffd3abd64aa20892bc7cb646947cd8375bf35ae Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 8 Nov 2016 17:43:00 +0300 Subject: [PATCH 155/250] update dependencies --- pom.xml | 6 +++--- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index cff41d24c..71236d7af 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ com.google.code.gson gson - 2.7 + 2.8.0 test @@ -130,7 +130,7 @@ com.puppycrawl.tools checkstyle - 7.1.2 + 7.2 @@ -139,7 +139,7 @@ maven-compiler-plugin - 3.5.1 + 3.6.0 UTF-8 1.7 diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index ee1bc2b17..3c4e95698 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.15 + 2.0.21 diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index c0d6d44e3..5602512ca 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -23,7 +23,7 @@ com.ning async-http-client - 1.9.39 + 1.9.40 From 315cb1346ff20870761fc261a5931d2c53a4785b Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 8 Nov 2016 18:01:04 +0300 Subject: [PATCH 156/250] minor fixes and additionals for TheThingsNetwork --- README.md | 1 + changelog | 1 + .../apis/TheThingsNetworkV1StagingApi.java | 14 -------------- .../apis/TheThingsNetworkV2PreviewApi.java | 14 -------------- ....java => TheThingsNetworkV1StagingExample.java} | 4 ++-- ....java => TheThingsNetworkV2PreviewExample.java} | 4 ++-- 6 files changed, 6 insertions(+), 32 deletions(-) rename scribejava-apis/src/test/java/com/github/scribejava/apis/examples/{TTNV1Example.java => TheThingsNetworkV1StagingExample.java} (97%) rename scribejava-apis/src/test/java/com/github/scribejava/apis/examples/{TTNV2Example.java => TheThingsNetworkV2PreviewExample.java} (97%) diff --git a/README.md b/README.md index 81e365476..4dca5e9a8 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just * Skyrock (http://skyrock.com/) * sohu 搜狐 (http://www.sohu.com/) * StackExchange (http://stackexchange.com/) +* The Things Network (v1-staging and v2-preview) (https://www.thethingsnetwork.org/) * Trello (https://trello.com/) * Tumblr (https://www.tumblr.com/) * TUT.BY (http://www.tut.by/) diff --git a/changelog b/changelog index 8220f8a2b..998deef3f 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * update Facebook v2.6 -> v2.8 + * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) [3.2.0] * Add Naver API (thanks to chooco) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java index 4b97b50c5..844d75758 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV1StagingApi.java @@ -1,10 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.Verb; public class TheThingsNetworkV1StagingApi extends DefaultApi20 { @@ -19,11 +15,6 @@ public static TheThingsNetworkV1StagingApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://account.thethingsnetwork.org/users/token"; @@ -33,9 +24,4 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://account.thethingsnetwork.org/users/authorize"; } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java index c649e2298..1ac5437a0 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/TheThingsNetworkV2PreviewApi.java @@ -1,10 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; -import com.github.scribejava.core.extractors.TokenExtractor; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.Verb; public class TheThingsNetworkV2PreviewApi extends DefaultApi20 { @@ -19,11 +15,6 @@ public static TheThingsNetworkV2PreviewApi instance() { return InstanceHolder.INSTANCE; } - @Override - public Verb getAccessTokenVerb() { - return Verb.POST; - } - @Override public String getAccessTokenEndpoint() { return "https://preview.account.thethingsnetwork.org/users/token"; @@ -33,9 +24,4 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://preview.account.thethingsnetwork.org/users/authorize"; } - - @Override - public TokenExtractor getAccessTokenExtractor() { - return OAuth2AccessTokenJsonExtractor.instance(); - } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java similarity index 97% rename from scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java rename to scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index 155b9e999..0905fb441 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV1Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -13,12 +13,12 @@ import java.util.Random; import java.util.Scanner; -public final class TTNV1Example { +public final class TheThingsNetworkV1StagingExample { private static final String NETWORK_NAME = "TTNv1staging"; private static final String PROTECTED_RESOURCE_URL = "https://account.thethingsnetwork.org/applications"; - private TTNV1Example() { + private TheThingsNetworkV1StagingExample() { } public static void main(String... args) throws IOException { diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java similarity index 97% rename from scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java rename to scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index 290f90905..ed7f2f6e7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TTNV2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -12,13 +12,13 @@ import java.util.Random; import java.util.Scanner; -public final class TTNV2Example { +public final class TheThingsNetworkV2PreviewExample { private static final String NETWORK_NAME = "TTNv2preview"; private static final String PROTECTED_RESOURCE_URL = "https://preview.account.thethingsnetwork.org/api/v2/applications"; - private TTNV2Example() { + private TheThingsNetworkV2PreviewExample() { } public static void main(String... args) throws IOException { From 0533226b66093fcc71cf631c8f33b3c49683d206 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 8 Nov 2016 18:32:52 +0300 Subject: [PATCH 157/250] fix Box20Example API protected URL --- .../java/com/github/scribejava/apis/examples/Box20Example.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index f22aa6883..731e0b217 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -16,7 +16,7 @@ public final class Box20Example { private static final String NETWORK_NAME = "Box"; - private static final String PROTECTED_RESOURCE_URL = "https://app.box.com/profile"; + private static final String PROTECTED_RESOURCE_URL = "https://api.box.com/2.0/users/me"; private Box20Example() { } From 6d4bf7d998513a9440ff2c5df508dfc0745c257a Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 8 Nov 2016 18:35:10 +0300 Subject: [PATCH 158/250] add Box API --- README.md | 1 + changelog | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 4dca5e9a8..619afd563 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box * AWeber (http://www.aweber.com/) +* Box (https://www.box.com/) * Digg (http://digg.com/) * Доктор на работе (http://www.doktornarabote.ru/) * Facebook (https://www.facebook.com/) diff --git a/changelog b/changelog index 998deef3f..4504d0cce 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * update Facebook v2.6 -> v2.8 * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) + * add Box (thanks to https://github.com/MclaughlinSteve) [3.2.0] * Add Naver API (thanks to chooco) From e9ec58f96917a7d742893f6e0fb07922ef2921b8 Mon Sep 17 00:00:00 2001 From: Vivin Paliath Date: Wed, 16 Nov 2016 16:02:32 -0700 Subject: [PATCH 159/250] issue #722 `OAuth20Service.refreshAccessToken` uses the correct URL by calling `api.getRefreshTokenEndpoint` instead of `api.getAccessTokenEndpoint`. --- .../java/com/github/scribejava/core/oauth/OAuth20Service.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index a6ecc0019..550074c21 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -88,7 +88,7 @@ protected T createAccessTokenRequest(String code, T public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException { final OAuthRequest request = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)); return sendAccessTokenRequestSync(request); } From 2ec0701e6fff84c8ea9f0438aca956df12e2945d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 17 Nov 2016 11:42:29 +0300 Subject: [PATCH 160/250] fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint (thanks to https://github.com/vivin) --- changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog b/changelog index 4504d0cce..09542f689 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * update Facebook v2.6 -> v2.8 * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) * add Box (thanks to https://github.com/MclaughlinSteve) + * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint (thanks to https://github.com/vivin) [3.2.0] * Add Naver API (thanks to chooco) From 1736a9da5cc7a2c9a3eb8d6491e3425bf2d4bc60 Mon Sep 17 00:00:00 2001 From: Alexey Pomelov Date: Thu, 17 Nov 2016 15:19:20 +0200 Subject: [PATCH 161/250] Generify OAuthService with access token type --- .../com/github/scribejava/core/builder/ServiceBuilder.java | 2 +- .../com/github/scribejava/core/builder/api/BaseApi.java | 2 +- .../com/github/scribejava/core/model/AbstractRequest.java | 6 +++--- .../java/com/github/scribejava/core/model/OAuthRequest.java | 2 +- .../com/github/scribejava/core/model/OAuthRequestAsync.java | 4 ++-- .../com/github/scribejava/core/oauth/OAuth10aService.java | 3 ++- .../com/github/scribejava/core/oauth/OAuth20Service.java | 3 ++- .../java/com/github/scribejava/core/oauth/OAuthService.java | 6 +++++- .../scribejava/core/model/ForceTypeOfHttpRequestTest.java | 2 +- .../java/com/github/scribejava/core/model/RequestTest.java | 2 +- 10 files changed, 19 insertions(+), 13 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index aa994d0a1..b45555f93 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -178,7 +178,7 @@ private OAuthConfig createConfig() { * @param api will build Service for this API * @return fully configured {@link S} */ - public S build(BaseApi api) { + public > S build(BaseApi api) { return api.createService(createConfig()); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java index a42fe35fa..7f6fbdd4f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/BaseApi.java @@ -3,7 +3,7 @@ import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuthService; -public interface BaseApi { +public interface BaseApi> { T createService(OAuthConfig config); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 3c994c1d9..d163e2c6d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -25,7 +25,7 @@ public abstract class AbstractRequest { private final ParameterList bodyParams = new ParameterList(); private final Map headers = new HashMap<>(); private boolean followRedirects = true; - private final OAuthService service; + private final OAuthService service; private String payload; private String charset; @@ -41,7 +41,7 @@ public abstract class AbstractRequest { * @param url resource URL * @param service OAuthService */ - public AbstractRequest(Verb verb, String url, OAuthService service) { + public AbstractRequest(Verb verb, String url, OAuthService service) { this.verb = verb; this.url = url; this.service = service; @@ -285,7 +285,7 @@ public boolean isFollowRedirects() { return followRedirects; } - public OAuthService getService() { + public OAuthService getService() { return service; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index fa7212a9e..b3986c5e8 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -12,7 +12,7 @@ public class OAuthRequest extends AbstractRequest { private HttpURLConnection connection; - public OAuthRequest(Verb verb, String url, OAuthService service) { + public OAuthRequest(Verb verb, String url, OAuthService service) { super(verb, url, service); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index 1a92f0699..1de5f69b5 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -8,7 +8,7 @@ public class OAuthRequestAsync extends AbstractRequest { - public OAuthRequestAsync(Verb verb, String url, OAuthService service) { + public OAuthRequestAsync(Verb verb, String url, OAuthService service) { super(verb, url, service); } @@ -17,7 +17,7 @@ public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseCo if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { throw new OAuthException("Cannot use async operations, only sync"); } - final OAuthService service = getService(); + final OAuthService service = getService(); final OAuthConfig config = service.getConfig(); if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { config.log("Cannot use async operations, only sync"); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index e1cc5bf5d..cbfa777f9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -19,7 +19,7 @@ /** * OAuth 1.0a implementation of {@link OAuthService} */ -public class OAuth10aService extends OAuthService { +public class OAuth10aService extends OAuthService { private static final String VERSION = "1.0"; private final DefaultApi10a api; @@ -134,6 +134,7 @@ protected void prepareAccessTokenRequest(AbstractRequest request, OAuth1RequestT appendSignature(request); } + @Override public void signRequest(OAuth1AccessToken token, AbstractRequest request) { final OAuthConfig config = getConfig(); config.log("signing request: " + request.getCompleteUrl()); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 550074c21..c59627844 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -16,7 +16,7 @@ import com.github.scribejava.core.model.Response; import java.util.Map; -public class OAuth20Service extends OAuthService { +public class OAuth20Service extends OAuthService { private static final String VERSION = "2.0"; private final DefaultApi20 api; @@ -169,6 +169,7 @@ public String getVersion() { return VERSION; } + @Override public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getAccessToken()); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 172ed26ff..40d0b707f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -2,12 +2,14 @@ import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.httpclient.HttpClientProvider; +import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.ScribeJavaConfig; +import com.github.scribejava.core.model.Token; import com.github.scribejava.core.model.Verb; import java.io.IOException; @@ -20,7 +22,7 @@ * * A facade responsible for the retrieval of request and access tokens and for the signing of HTTP requests. */ -public abstract class OAuthService { +public abstract class OAuthService { private final OAuthConfig config; private final HttpClient httpClient; @@ -76,6 +78,8 @@ public OAuthConfig getConfig() { */ public abstract String getVersion(); + public abstract void signRequest(T token, AbstractRequest request); + public Future executeAsync(Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java index 9e60f3fb2..f6c6424b6 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java @@ -20,7 +20,7 @@ public class ForceTypeOfHttpRequestTest { @Before public void setUp() { ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.NONE); - final OAuthService oAuthService = new OAuth20Service(null, new OAuthConfig("test", "test")); + final OAuthService oAuthService = new OAuth20Service(null, new OAuthConfig("test", "test")); request = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", oAuthService); requestAsync = new OAuthRequestAsync(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java index 16b060000..cd2733926 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java @@ -14,7 +14,7 @@ public class RequestTest { private OAuthRequest getRequest; private OAuthRequest postRequest; private ConnectionStub connection; - private OAuthService oAuthService; + private OAuthService oAuthService; @Before public void setUp() throws MalformedURLException { From 7ae74c391020e34b7b62ec763fd84dc49fc4f516 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 17:08:13 +0300 Subject: [PATCH 162/250] move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) --- changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog b/changelog index 09542f689..558f2742c 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) * add Box (thanks to https://github.com/MclaughlinSteve) * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint (thanks to https://github.com/vivin) + * move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) [3.2.0] * Add Naver API (thanks to chooco) From 1cfd31a909b52b0e6dbe31ac60a2bc5d1eb1c673 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 17:12:54 +0300 Subject: [PATCH 163/250] update async-http-client --- scribejava-httpclient-ahc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 3c4e95698..238c0fabd 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.21 + 2.0.24 From 4f59e5ee49ee131a0a1c2ed6ed1222beaa6cf105 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 17:59:48 +0300 Subject: [PATCH 164/250] drop deprecated setConnectionKeepAlive method, add javadoc --- changelog | 1 + .../scribejava/core/model/AbstractRequest.java | 14 -------------- .../github/scribejava/core/oauth/OAuthService.java | 1 + 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/changelog b/changelog index 558f2742c..f83d1f745 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,7 @@ * add Box (thanks to https://github.com/MclaughlinSteve) * fix: OAuth20Service::refreshAccessToken should use RefreshTokenEndpoint, not AccessTokenEndpoint (thanks to https://github.com/vivin) * move signRequest method to OAuthService (common for OAuth1 and OAuth2) (thanks to https://github.com/apomelov) + * drop deprecated setConnectionKeepAlive method [3.2.0] * Add Naver API (thanks to chooco) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index d163e2c6d..213ed4b34 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -254,20 +254,6 @@ public void setCharset(String charsetName) { charset = charsetName; } - /** - * Sets whether the underlying Http Connection is persistent or not. - * - * @param connectionKeepAlive boolean - * - * @see http://download.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html - * @deprecated does nothing - JVM default is left untouched. Set {@code http.keepAlive} system property to - * {@code false} for pre-deprecation behavior. - */ - @Deprecated - public void setConnectionKeepAlive(boolean connectionKeepAlive) { - } - /** * Sets whether the underlying Http Connection follows redirects or not. * diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 40d0b707f..dc52942be 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -21,6 +21,7 @@ * The main ScribeJava object. * * A facade responsible for the retrieval of request and access tokens and for the signing of HTTP requests. + * @param type of token used to sign the request */ public abstract class OAuthService { From feff31f16b46563ede25b8cb503bffcb3b6eb661 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:01:57 +0300 Subject: [PATCH 165/250] prepare to release 3.3.0 --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 619afd563..5b185be1b 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 3.2.0 + 3.3.0 ``` @@ -104,7 +104,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 3.2.0 + 3.3.0 ``` diff --git a/changelog b/changelog index f83d1f745..b07af8930 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[3.3.0] * update Facebook v2.6 -> v2.8 * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) * add Box (thanks to https://github.com/MclaughlinSteve) From d9cf3507ab26d3a13852b0f748861b47c0f789b3 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:14:32 +0300 Subject: [PATCH 166/250] make releasing a bit easier --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index 71236d7af..992e6929d 100644 --- a/pom.xml +++ b/pom.xml @@ -134,6 +134,13 @@ + + maven-release-plugin + 2.5.3 + + true + + From f62ca3d64a98ff2f18d34ee789d1a2266e83f995 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:15:31 +0300 Subject: [PATCH 167/250] [maven-release-plugin] prepare release scribejava-3.3.0 --- pom.xml | 5 +++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 992e6929d..45e9d2ef3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.2.1-SNAPSHOT + 3.3.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -32,7 +32,8 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - + scribejava-3.3.0 + diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 8a95b9739..81e0765ae 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index b8774fd58..f555e8038 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 238c0fabd..db6a178e3 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 5602512ca..c9e6e54b3 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml From d3042262335297b7af37f32ecebd7c4ad7649518 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:16:10 +0300 Subject: [PATCH 168/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 45e9d2ef3..e61816262 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.3.0 + 3.3.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -32,7 +32,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-3.3.0 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 81e0765ae..4b164db75 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index f555e8038..8bffdd6fc 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index db6a178e3..0ccfc5f8d 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index c9e6e54b3..bd310a533 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml From feca5d4ef938b076dc23d0dabbc15ef4a454171f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:23:00 +0300 Subject: [PATCH 169/250] Revert "[maven-release-plugin] prepare for next development iteration" This reverts commit d3042262335297b7af37f32ecebd7c4ad7649518. --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index e61816262..45e9d2ef3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.3.1-SNAPSHOT + 3.3.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -32,7 +32,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - HEAD + scribejava-3.3.0 diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 4b164db75..81e0765ae 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 8bffdd6fc..f555e8038 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 0ccfc5f8d..db6a178e3 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index bd310a533..c9e6e54b3 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.3.0 ../pom.xml From 195e1eb1e2b38d933d8367a458a9473836f95093 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:23:12 +0300 Subject: [PATCH 170/250] Revert "[maven-release-plugin] prepare release scribejava-3.3.0" This reverts commit f62ca3d64a98ff2f18d34ee789d1a2266e83f995. --- pom.xml | 5 ++--- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 45e9d2ef3..992e6929d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.3.0 + 3.2.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -32,8 +32,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-3.3.0 - + diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 81e0765ae..8a95b9739 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.2.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index f555e8038..b8774fd58 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.2.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index db6a178e3..238c0fabd 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.2.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index c9e6e54b3..5602512ca 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.2.1-SNAPSHOT ../pom.xml From 0e85a499c0fe5b4de3f0f0057ac765b0431d8fdd Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:24:37 +0300 Subject: [PATCH 171/250] [maven-release-plugin] prepare release scribejava-3.3.0 --- pom.xml | 5 +++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 992e6929d..45e9d2ef3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.2.1-SNAPSHOT + 3.3.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -32,7 +32,8 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - + scribejava-3.3.0 + diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 8a95b9739..81e0765ae 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index b8774fd58..f555e8038 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 238c0fabd..db6a178e3 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 5602512ca..c9e6e54b3 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.2.1-SNAPSHOT + 3.3.0 ../pom.xml From ab828cf5b9590685226a373c4aff397aadf8437d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 18 Nov 2016 18:24:43 +0300 Subject: [PATCH 172/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 45e9d2ef3..e61816262 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.3.0 + 3.3.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -32,7 +32,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-3.3.0 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 81e0765ae..4b164db75 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index f555e8038..8bffdd6fc 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index db6a178e3..0ccfc5f8d 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index c9e6e54b3..bd310a533 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.0 + 3.3.1-SNAPSHOT ../pom.xml From 40c480919262c3753623d0e284aa3a0a34d08b4e Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 00:18:21 +0100 Subject: [PATCH 173/250] Support for okhttp #689 --- pom.xml | 1 + scribejava-apis/pom.xml | 6 ++ .../examples/GitHubAsyncOkHttpExample.java | 87 +++++++++++++++ scribejava-httpclient-okhttp/pom.xml | 42 ++++++++ .../okhttp/OAuthAsyncCompletionHandler.java | 101 ++++++++++++++++++ .../httpclient/okhttp/OkHttpHttpClient.java | 69 ++++++++++++ .../okhttp/OkHttpHttpClientConfig.java | 17 +++ .../httpclient/okhttp/OkHttpProvider.java | 15 +++ ...ibejava.core.httpclient.HttpClientProvider | 1 + 9 files changed, 339 insertions(+) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java create mode 100644 scribejava-httpclient-okhttp/pom.xml create mode 100644 scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java create mode 100644 scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java create mode 100644 scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java create mode 100644 scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java create mode 100644 scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider diff --git a/pom.xml b/pom.xml index e61816262..f6c4aa233 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ scribejava-apis scribejava-httpclient-ahc scribejava-httpclient-ning + scribejava-httpclient-okhttp diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 4b164db75..bc6f2dbd3 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -32,6 +32,12 @@ ${project.version} test + + com.github.scribejava + scribejava-httpclient-okhttp + ${project.version} + test + diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java new file mode 100644 index 000000000..c0e4e6859 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java @@ -0,0 +1,87 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.GitHubApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.github.scribejava.httpclient.okhttp.OkHttpHttpClient; +import okhttp3.OkHttpClient; + +import java.io.IOException; +import java.util.Random; +import java.util.Scanner; +import java.util.concurrent.ExecutionException; + +public final class GitHubAsyncOkHttpExample { + + private static final String NETWORK_NAME = "GitHub"; + private static final String PROTECTED_RESOURCE_URL = "https://api.github.com/user"; + + private GitHubAsyncOkHttpExample() { + } + + public static void main(String... args) throws IOException, ExecutionException, InterruptedException { + // Replace these with your client id and secret + final String clientId = "your client id"; + final String clientSecret = "your client secret"; + final String secretState = "secret" + new Random().nextInt(999_999); + final OAuth20Service service = new ServiceBuilder() + .apiKey(clientId) + .apiSecret(clientSecret) + .state(secretState) + .callback("http://www.example.com/oauth_callback/") + .httpClient(new OkHttpHttpClient(new OkHttpClient())) + .build(GitHubApi.instance()); + final Scanner in = new Scanner(System.in, "UTF-8"); + + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); + + System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service); + service.signRequest(accessToken, request); + final Response response = request.sendAsync(null).get(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } +} diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml new file mode 100644 index 000000000..4536b87de --- /dev/null +++ b/scribejava-httpclient-okhttp/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + com.github.scribejava + scribejava + 3.3.1-SNAPSHOT + ../pom.xml + + + com.github.scribejava + scribejava-httpclient-okhttp + ScribeJava OkHttp Client support + jar + + + + com.github.scribejava + scribejava-core + ${project.version} + + + com.squareup.okhttp3 + okhttp + 3.4.2 + + + + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java new file mode 100644 index 000000000..bde6870e8 --- /dev/null +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -0,0 +1,101 @@ +package com.github.scribejava.httpclient.okhttp; + +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Headers; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +class OAuthAsyncCompletionHandler implements Callback, Future { + + private final OAuthAsyncRequestCallback callback; + private final OAuthRequestAsync.ResponseConverter converter; + private final Call call; + private final CountDownLatch latch; + private T result; + + OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter, Call call) { + this.callback = callback; + this.converter = converter; + this.call = call; + this.latch = new CountDownLatch(1); + + call.enqueue(this); + } + + @Override + public void onFailure(Call call, IOException e) { + try { + if (callback != null) { + callback.onThrowable(e); + } + } finally { + latch.countDown(); + } + } + + @Override + public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOException { + try { + final Headers headers = okHttpResponse.headers(); + final Map headersMap = new HashMap<>(); + + for (String name : headers.names()) { + headersMap.put(name, headers.get(name)); + } + + final Response response = new Response(okHttpResponse.code(), + okHttpResponse.message(), + headersMap, + okHttpResponse.body().string(), + null); // cannot return both body String and InputStream + + @SuppressWarnings("unchecked") + final T t = result = converter == null ? (T) response : converter.convert(response); + if (callback != null) { + callback.onCompleted(t); + } + } finally { + latch.countDown(); + } + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + call.cancel(); + return call.isCanceled(); + } + + @Override + public boolean isCancelled() { + return call.isCanceled(); + } + + @Override + public boolean isDone() { + return call.isExecuted(); + } + + @Override + public T get() throws InterruptedException, ExecutionException { + latch.await(); + return result; + } + + @Override + public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + latch.await(timeout, unit); + return result; + } +} diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java new file mode 100644 index 000000000..452d54f62 --- /dev/null +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -0,0 +1,69 @@ +package com.github.scribejava.httpclient.okhttp; + +import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Verb; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.Future; + +import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; + +public class OkHttpHttpClient implements HttpClient { + + private final OkHttpClient client; + + public OkHttpHttpClient(OkHttpHttpClientConfig config) { + client = config.getClient(); + } + + public OkHttpHttpClient(OkHttpClient client) { + this.client = client; + } + + @Override + public void close() throws IOException { + //client.close(); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + final Request.Builder requestBuilder = new Request.Builder(); + requestBuilder.url(completeUrl); + + switch (httpVerb) { + case GET: + requestBuilder.get(); + break; + case POST: + String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? + headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; + + requestBuilder.post(RequestBody.create(MediaType.parse(contentType), bodyContents)); + break; + default: + throw new IllegalArgumentException("message build error: unknown verb type"); + } + + for (Map.Entry header : headers.entrySet()) { + requestBuilder.addHeader(header.getKey(), header.getValue()); + } + if (userAgent != null) { + requestBuilder.header(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + + final Call call = client.newCall(requestBuilder.build()); + return new OAuthAsyncCompletionHandler<>(callback, converter, call); + } +} diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java new file mode 100644 index 000000000..b5acae110 --- /dev/null +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java @@ -0,0 +1,17 @@ +package com.github.scribejava.httpclient.okhttp; + +import com.github.scribejava.core.model.HttpClient; +import okhttp3.OkHttpClient; + +public class OkHttpHttpClientConfig implements HttpClient.Config { + + private final OkHttpClient client; + + public OkHttpHttpClientConfig(OkHttpClient client) { + this.client = client; + } + + public OkHttpClient getClient() { + return client; + } +} diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java new file mode 100644 index 000000000..3dbfcba5d --- /dev/null +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java @@ -0,0 +1,15 @@ +package com.github.scribejava.httpclient.okhttp; + +import com.github.scribejava.core.httpclient.HttpClientProvider; +import com.github.scribejava.core.model.HttpClient; + +public class OkHttpProvider implements HttpClientProvider { + + @Override + public HttpClient createClient(HttpClient.Config config) { + if (config instanceof OkHttpHttpClientConfig) { + return new OkHttpHttpClient((OkHttpHttpClientConfig) config); + } + return null; + } +} diff --git a/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider new file mode 100644 index 000000000..46afa18ed --- /dev/null +++ b/scribejava-httpclient-okhttp/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -0,0 +1 @@ +com.github.scribejava.httpclient.okhttp.OkHttpProvider From e74c194bc46873ce13335bd5fa450c6d749bfedd Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 00:38:01 +0100 Subject: [PATCH 174/250] Fixed Checkstyle errors --- .../httpclient/okhttp/OAuthAsyncCompletionHandler.java | 3 ++- .../github/scribejava/httpclient/okhttp/OkHttpHttpClient.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java index bde6870e8..94836543b 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -62,7 +62,8 @@ public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOExce null); // cannot return both body String and InputStream @SuppressWarnings("unchecked") - final T t = result = converter == null ? (T) response : converter.convert(response); + final T t = converter == null ? (T) response : converter.convert(response); + result = t; if (callback != null) { callback.onCompleted(t); } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index 452d54f62..30dfe8759 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -47,8 +47,8 @@ public Future executeAsync(String userAgent, Map headers, requestBuilder.get(); break; case POST: - String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? - headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; + final String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? + headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; requestBuilder.post(RequestBody.create(MediaType.parse(contentType), bodyContents)); break; From 3a8d4f6c68dbce35bf71d88aed9fc74431b703a4 Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 00:39:22 +0100 Subject: [PATCH 175/250] Minor change in pom artifact name --- scribejava-httpclient-okhttp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 4536b87de..07d6a6df1 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -11,7 +11,7 @@ com.github.scribejava scribejava-httpclient-okhttp - ScribeJava OkHttp Client support + ScribeJava Async OkHttp Client support jar From 6f21f1563788b8d14569cb33981350a3f08bc7d5 Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 10:07:24 +0100 Subject: [PATCH 176/250] Support for more HTTP methods --- .../httpclient/okhttp/OkHttpHttpClient.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index 30dfe8759..cad3f641a 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -11,6 +11,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; +import okhttp3.internal.http.HttpMethod; import java.io.IOException; import java.util.Map; @@ -42,20 +43,20 @@ public Future executeAsync(String userAgent, Map headers, final Request.Builder requestBuilder = new Request.Builder(); requestBuilder.url(completeUrl); - switch (httpVerb) { - case GET: - requestBuilder.get(); - break; - case POST: - final String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? - headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; + final String method = httpVerb.name(); - requestBuilder.post(RequestBody.create(MediaType.parse(contentType), bodyContents)); - break; - default: - throw new IllegalArgumentException("message build error: unknown verb type"); + // prepare body + RequestBody body = null; + if (bodyContents != null && !bodyContents.isEmpty() && HttpMethod.permitsRequestBody(method)) { + final String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? + headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; + body = RequestBody.create(MediaType.parse(contentType), bodyContents); } + // fill HTTP method and body + requestBuilder.method(method, body); + + // fill headers for (Map.Entry header : headers.entrySet()) { requestBuilder.addHeader(header.getKey(), header.getValue()); } @@ -63,6 +64,7 @@ public Future executeAsync(String userAgent, Map headers, requestBuilder.header(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); } + // create a new call final Call call = client.newCall(requestBuilder.build()); return new OAuthAsyncCompletionHandler<>(callback, converter, call); } From 9787c7df70ed1b248fec22639931db91253f580a Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 11:19:00 +0100 Subject: [PATCH 177/250] Added tests, fixed empty body error --- scribejava-httpclient-okhttp/pom.xml | 6 ++ .../httpclient/okhttp/OkHttpHttpClient.java | 2 +- .../okhttp/OkHttpHttpClientTest.java | 87 +++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 07d6a6df1..b1b0a7a3d 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -25,6 +25,12 @@ okhttp 3.4.2 + + com.squareup.okhttp3 + mockwebserver + 3.4.2 + test + diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index cad3f641a..57f90ca5f 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -47,7 +47,7 @@ public Future executeAsync(String userAgent, Map headers, // prepare body RequestBody body = null; - if (bodyContents != null && !bodyContents.isEmpty() && HttpMethod.permitsRequestBody(method)) { + if (bodyContents != null && HttpMethod.permitsRequestBody(method)) { final String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; body = RequestBody.create(MediaType.parse(contentType), bodyContents); diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java new file mode 100644 index 000000000..c0d986eae --- /dev/null +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -0,0 +1,87 @@ +package com.github.scribejava.httpclient.okhttp; + +import com.github.scribejava.core.model.*; +import com.github.scribejava.core.oauth.OAuth20Service; +import com.github.scribejava.core.oauth.OAuthService; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; +import org.junit.Before; +import org.junit.Test; + +import java.net.MalformedURLException; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertEquals; + +public class OkHttpHttpClientTest { + private OAuthService oAuthService; + + @Before + public void setUp() throws MalformedURLException { + HttpClient client = new OkHttpHttpClient(new OkHttpClient()); + oAuthService = new OAuth20Service(null, + new OAuthConfig("test", "test", null, null, null, null, null, null, null, null, null, null, client)); + } + + + @Test + public void shouldSendGetRequest() throws Exception { + String expectedResponseBody = "response body"; + + MockWebServer server = new MockWebServer(); + server.enqueue(new MockResponse().setBody(expectedResponseBody)); + server.start(); + + HttpUrl baseUrl = server.url("/testUrl"); + + OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); + Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + + assertEquals(expectedResponseBody, response.getBody()); + + RecordedRequest recordedRequest = server.takeRequest(); + assertEquals("GET", recordedRequest.getMethod()); + + server.shutdown(); + } + + @Test + public void shouldSendPostRequest() throws Exception { + String expectedResponseBody = "response body"; + String expectedRequestBody = "request body"; + + MockWebServer server = new MockWebServer(); + server.enqueue(new MockResponse().setBody(expectedResponseBody)); + server.enqueue(new MockResponse().setBody(expectedResponseBody)); + server.start(); + + HttpUrl baseUrl = server.url("/testUrl"); + + // request with body + OAuthRequestAsync request = new OAuthRequestAsync(Verb.POST, baseUrl.toString(), oAuthService); + request.addPayload(expectedRequestBody); + Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + + assertEquals(expectedResponseBody, response.getBody()); + + RecordedRequest recordedRequest = server.takeRequest(); + assertEquals("POST", recordedRequest.getMethod()); + assertEquals(expectedRequestBody, recordedRequest.getBody().readUtf8()); + + + // request with empty body + request = new OAuthRequestAsync(Verb.POST, baseUrl.toString(), oAuthService); + response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + + assertEquals(expectedResponseBody, response.getBody()); + + recordedRequest = server.takeRequest(); + assertEquals("POST", recordedRequest.getMethod()); + assertEquals("", recordedRequest.getBody().readUtf8()); + + server.shutdown(); + } +} From 9bc1ff892fb82029613c852cc0b42c925c2279f9 Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 12:09:20 +0100 Subject: [PATCH 178/250] Fixed not working Response.getStream method --- .../okhttp/OAuthAsyncCompletionHandler.java | 4 +-- .../okhttp/OkHttpHttpClientTest.java | 28 ++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java index 94836543b..9ae280c88 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -58,8 +58,8 @@ public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOExce final Response response = new Response(okHttpResponse.code(), okHttpResponse.message(), headersMap, - okHttpResponse.body().string(), - null); // cannot return both body String and InputStream + null, // cannot return both body String and InputStream + okHttpResponse.body().byteStream()); @SuppressWarnings("unchecked") final T t = converter == null ? (T) response : converter.convert(response); diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index c0d986eae..527321f48 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -1,8 +1,13 @@ package com.github.scribejava.httpclient.okhttp; -import com.github.scribejava.core.model.*; +import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.oauth.OAuthService; +import com.github.scribejava.core.utils.StreamUtils; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.mockwebserver.MockResponse; @@ -84,4 +89,25 @@ public void shouldSendPostRequest() throws Exception { server.shutdown(); } + + @Test + public void shouldReadResponseStream() throws Exception { + String expectedResponseBody = "response body"; + + MockWebServer server = new MockWebServer(); + server.enqueue(new MockResponse().setBody(expectedResponseBody)); + server.start(); + + HttpUrl baseUrl = server.url("/testUrl"); + + OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); + Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + + assertEquals(expectedResponseBody, StreamUtils.getStreamContents(response.getStream())); + + RecordedRequest recordedRequest = server.takeRequest(); + assertEquals("GET", recordedRequest.getMethod()); + + server.shutdown(); + } } From fa96ffb331ec258df4d839a0ae3367b39956590b Mon Sep 17 00:00:00 2001 From: Arcao Date: Tue, 29 Nov 2016 12:18:51 +0100 Subject: [PATCH 179/250] Fixed Checkstyle errors --- .../okhttp/OkHttpHttpClientTest.java | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index 527321f48..b1968dcb3 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -26,7 +26,7 @@ public class OkHttpHttpClientTest { @Before public void setUp() throws MalformedURLException { - HttpClient client = new OkHttpHttpClient(new OkHttpClient()); + final HttpClient client = new OkHttpHttpClient(new OkHttpClient()); oAuthService = new OAuth20Service(null, new OAuthConfig("test", "test", null, null, null, null, null, null, null, null, null, null, client)); } @@ -34,20 +34,20 @@ public void setUp() throws MalformedURLException { @Test public void shouldSendGetRequest() throws Exception { - String expectedResponseBody = "response body"; + final String expectedResponseBody = "response body"; - MockWebServer server = new MockWebServer(); + final MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setBody(expectedResponseBody)); server.start(); - HttpUrl baseUrl = server.url("/testUrl"); + final HttpUrl baseUrl = server.url("/testUrl"); - OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); - Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); + final Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, response.getBody()); - RecordedRequest recordedRequest = server.takeRequest(); + final RecordedRequest recordedRequest = server.takeRequest(); assertEquals("GET", recordedRequest.getMethod()); server.shutdown(); @@ -55,15 +55,15 @@ public void shouldSendGetRequest() throws Exception { @Test public void shouldSendPostRequest() throws Exception { - String expectedResponseBody = "response body"; - String expectedRequestBody = "request body"; + final String expectedResponseBody = "response body"; + final String expectedRequestBody = "request body"; - MockWebServer server = new MockWebServer(); + final MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setBody(expectedResponseBody)); server.enqueue(new MockResponse().setBody(expectedResponseBody)); server.start(); - HttpUrl baseUrl = server.url("/testUrl"); + final HttpUrl baseUrl = server.url("/testUrl"); // request with body OAuthRequestAsync request = new OAuthRequestAsync(Verb.POST, baseUrl.toString(), oAuthService); @@ -92,20 +92,20 @@ public void shouldSendPostRequest() throws Exception { @Test public void shouldReadResponseStream() throws Exception { - String expectedResponseBody = "response body"; + final String expectedResponseBody = "response body"; - MockWebServer server = new MockWebServer(); + final MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setBody(expectedResponseBody)); server.start(); - HttpUrl baseUrl = server.url("/testUrl"); + final HttpUrl baseUrl = server.url("/testUrl"); - OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); - Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); + final Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, StreamUtils.getStreamContents(response.getStream())); - RecordedRequest recordedRequest = server.takeRequest(); + final RecordedRequest recordedRequest = server.takeRequest(); assertEquals("GET", recordedRequest.getMethod()); server.shutdown(); From 36c33b6001fd34a0fedc3e4df901e352aa780949 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 7 Dec 2016 16:04:48 +0300 Subject: [PATCH 180/250] uncouple OAuthRequest and Service --- changelog | 4 ++ .../apis/examples/AWeberExample.java | 2 +- .../apis/examples/Box20Example.java | 2 +- .../scribejava/apis/examples/DiggExample.java | 2 +- .../examples/FacebookAsyncNingExample.java | 4 +- .../apis/examples/FacebookExample.java | 2 +- .../apis/examples/FlickrExample.java | 2 +- .../apis/examples/Foursquare2Example.java | 2 +- .../apis/examples/FoursquareExample.java | 2 +- .../apis/examples/FreelancerExample.java | 2 +- .../apis/examples/GeniusExample.java | 2 +- .../apis/examples/GitHubExample.java | 2 +- .../examples/Google20AsyncAHCExample.java | 4 +- .../apis/examples/Google20Example.java | 2 +- .../scribejava/apis/examples/HHExample.java | 2 +- .../apis/examples/ImgurExample.java | 2 +- .../apis/examples/Kaixin20Example.java | 2 +- .../apis/examples/LinkedIn20Example.java | 2 +- .../apis/examples/LinkedInExample.java | 2 +- .../examples/LinkedInExampleWithScopes.java | 2 +- .../scribejava/apis/examples/LiveExample.java | 2 +- .../apis/examples/MailruAsyncExample.java | 4 +- .../apis/examples/MailruExample.java | 2 +- .../apis/examples/MeetupExample.java | 2 +- .../apis/examples/MisfitExample.java | 2 +- .../apis/examples/NaverExample.java | 2 +- .../apis/examples/NeteaseWeiboExample.java | 2 +- .../apis/examples/OdnoklassnikiExample.java | 2 +- .../apis/examples/PinterestExample.java | 2 +- .../apis/examples/Px500Example.java | 2 +- .../apis/examples/RenrenExample.java | 2 +- .../apis/examples/SalesforceExample.java | 2 +- .../examples/SalesforceNingAsyncExample.java | 4 +- .../apis/examples/SinaWeibo2Example.java | 2 +- .../apis/examples/SinaWeiboExample.java | 2 +- .../apis/examples/SkyrockExample.java | 2 +- .../apis/examples/SohuWeiboExample.java | 2 +- .../apis/examples/StackExchangeExample.java | 2 +- .../TheThingsNetworkV1StagingExample.java | 2 +- .../TheThingsNetworkV2PreviewExample.java | 2 +- .../apis/examples/TrelloExample.java | 2 +- .../apis/examples/TumblrExample.java | 2 +- .../apis/examples/TutByExample.java | 2 +- .../apis/examples/TwitterExample.java | 2 +- .../apis/examples/ViadeoExample.java | 2 +- .../apis/examples/VkontakteExample.java | 2 +- .../VkontakteExternalHttpExample.java | 4 +- .../scribejava/apis/examples/XingExample.java | 2 +- .../apis/examples/YahooExample.java | 2 +- .../service/OdnoklassnikiServiceTest.java | 2 +- .../core/model/AbstractRequest.java | 23 ++++++- .../scribejava/core/model/OAuthRequest.java | 25 ++++++-- .../core/model/OAuthRequestAsync.java | 49 ++++++++++----- .../core/oauth/OAuth10aService.java | 13 ++-- .../scribejava/core/oauth/OAuth20Service.java | 14 ++--- .../scribejava/core/oauth/OAuthService.java | 61 ++++++++++++++++++- .../github/scribejava/core/ObjectMother.java | 14 ++--- .../extractors/BaseStringExtractorTest.java | 4 +- .../core/extractors/HeaderExtractorTest.java | 3 +- .../model/ForceTypeOfHttpRequestTest.java | 14 +++-- .../core/model/OAuthRequestTest.java | 4 +- .../scribejava/core/model/RequestTest.java | 14 ++--- 62 files changed, 229 insertions(+), 121 deletions(-) diff --git a/changelog b/changelog index b07af8930..01d43cbb0 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +[SNAPSHOT] + * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. + You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. + [3.3.0] * update Facebook v2.6 -> v2.8 * add The Things Network API (v1-staging and v2-preview) (thanks to https://github.com/jpmeijers) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index 19a5f5b1f..60bce4f71 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -56,7 +56,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, ACCOUNT_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, ACCOUNT_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index 731e0b217..af58ab9cc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -76,7 +76,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index 0e81446bb..238d6c1dc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -59,7 +59,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL, service.getConfig()); request.addBodyParameter("comment_id", "20100729223726:4fef610331ee46a3b5cbd740bf71313e"); service.signRequest(accessToken, request); final Response response = request.send(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index ce0aab781..23f1dcba1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -84,9 +84,9 @@ public static void main(String... args) throws InterruptedException, ExecutionEx // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.sendAsync(null).get(); + final Response response = service.execute(request, null).get(); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index d955c1f85..32ce7d103 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -69,7 +69,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index b3fd7912a..47c0f8a4e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -55,7 +55,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); request.addQuerystringParameter("method", "flickr.test.login"); service.signRequest(accessToken, request); final Response response = request.send(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index 44d471537..042e8671c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -54,7 +54,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken(), - service); + service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index 645985c75..b347ce154 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -51,7 +51,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index a4c843ea4..35cbed3e8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -59,7 +59,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); request.addHeader("GData-Version", "3.0"); final Response response = request.send(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java index 04cf9f1d4..842b09ec6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -75,7 +75,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Accessing a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Viewing contents..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index 88adcd597..444b86856 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -68,7 +68,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index 855cf6e50..b760feeda 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -113,9 +113,9 @@ public static void main(String... args) throws InterruptedException, ExecutionEx requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; } - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, requestUrl, service); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, requestUrl); service.signRequest(accessToken, request); - final Response response = request.sendAsync(null).get(); + final Response response = service.execute(request, null).get(); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 530de206d..2c1c4a4fc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -98,7 +98,7 @@ public static void main(String... args) throws IOException { requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; } - final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index 91bd52966..ab09915ee 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -54,7 +54,7 @@ public static void main(String... args) throws IOException { System.out.println(); System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index 484142322..62b6b5194 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -53,7 +53,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 50fa30139..8171127db 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -53,7 +53,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index 95b2c5118..448a04d11 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -65,7 +65,7 @@ public static void main(String... args) throws IOException { } final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, query), - service); + service.getConfig()); request.addHeader("x-li-format", "json"); request.addHeader("Accept-Language", "ru-RU"); service.signRequest(accessToken, request); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 927d89524..6bc3cf513 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -52,7 +52,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 0888cab5e..7dbf7bc19 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -56,7 +56,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index d449355b4..5a09bc133 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -55,7 +55,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken(), - service); + service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index 547a8bd57..ec1c8868b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -67,9 +67,9 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println(); System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.sendAsync(null).get(); + final Response response = service.execute(request, null).get(); System.out.println("Got it! Lets see what we found..."); System.out.println(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 391adcd25..91b0eee7a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -54,7 +54,7 @@ public static void main(String... args) throws IOException { System.out.println(); System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index 9b3efce58..e78ef808f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -51,7 +51,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index 451d55539..e2c98b7a5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -56,7 +56,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java index 98eab65df..1a3eff1bb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java @@ -70,7 +70,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index e40715ae9..17217db97 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -59,7 +59,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index 6180595d7..c7b096715 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -66,7 +66,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, publicKey), - service); + service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index b49f1d451..47f9c75dc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -55,7 +55,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken(), - service); + service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index fa84b773e..76c3b29d9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -51,7 +51,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 0a22eba37..2be75bef1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -63,7 +63,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL, service.getConfig()); final Map parameters = new HashMap<>(); parameters.put("method", "users.getInfo"); parameters.put("format", "json"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 71cc8b0f8..9f6b22aaf 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -84,7 +84,7 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep System.out.println(); System.out.println("Full URL: " + url); - final OAuthRequest request = new OAuthRequest(Verb.GET, url, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, url, service.getConfig()); request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); final Response response = request.send(); System.out.println(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 09f8e8dd0..1cec996d3 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -95,9 +95,9 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println(); System.out.println("Full URL: " + url); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url, service); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url); request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - final Response response = request.sendAsync(null).get(); + final Response response = service.execute(request, null).get(); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 5a720717a..414c2e18c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -53,7 +53,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index 3a2ea9249..140aa99ee 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -59,7 +59,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index a1c0fa6dc..5ab1dd56a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -51,7 +51,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index 1333fb0bb..cd9f62453 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -59,7 +59,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index c4c1b2f46..6fe816df3 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -74,7 +74,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, - PROTECTED_RESOURCE_URL + "?site=" + site + "&key=" + key, service); + PROTECTED_RESOURCE_URL + "?site=" + site + "&key=" + key, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index 0905fb441..b0bc642f1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -75,7 +75,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); // TTN should support both signing the request with a parameter, or with a header. // 1. Token as a parameter diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index ed7f2f6e7..2b6ce70e9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -72,7 +72,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); // TTN should support both signing the request with a parameter, or with a header. // 1. Token as a parameter diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index 80094c46c..21350ea9f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -53,7 +53,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index 9dde7b284..e94e1f31b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -53,7 +53,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 74b867939..82e57a344 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -54,7 +54,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index bae89f34a..41a7ea5d6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -51,7 +51,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index c27cb7458..a89fef634 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -53,7 +53,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index 703e580fc..5ca4ae8de 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -54,7 +54,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java index 9221fae44..fe9618914 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -75,9 +75,9 @@ public static void main(String... args) throws IOException, InterruptedException // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.sendAsync(null).get(); + final Response response = service.execute(request, null).get(); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 6133f80cb..93d57b963 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -51,7 +51,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index 3779ed782..7127d28cd 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -52,7 +52,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); service.signRequest(accessToken, request); final Response response = request.send(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java index 3adbafd02..4e4e833cf 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java @@ -27,7 +27,7 @@ public class OdnoklassnikiServiceTest { @Test public void testSigGeneration() { final OAuth2AccessToken accessToken = new OAuth2AccessToken("d3iwa.403gvrs194740652m1k4w2a503k3c"); - final OAuthRequest request = new OAuthRequest(Verb.GET, URL, service); + final OAuthRequest request = new OAuthRequest(Verb.GET, URL, service.getConfig()); service.signRequest(accessToken, request); assertEquals("96127f5ca29a8351399e94bbd284ab16", findParam(request.getQueryStringParams(), "sig")); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 213ed4b34..94d61095f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -25,7 +25,6 @@ public abstract class AbstractRequest { private final ParameterList bodyParams = new ParameterList(); private final Map headers = new HashMap<>(); private boolean followRedirects = true; - private final OAuthService service; private String payload; private String charset; @@ -40,11 +39,22 @@ public abstract class AbstractRequest { * @param verb Http verb/method * @param url resource URL * @param service OAuthService + * @deprecated use {@link #AbstractRequest(com.github.scribejava.core.model.Verb, java.lang.String)} */ + @Deprecated public AbstractRequest(Verb verb, String url, OAuthService service) { + this(verb, url); + } + + /** + * Default constructor. + * + * @param verb Http verb/method + * @param url resource URL + */ + public AbstractRequest(Verb verb, String url) { this.verb = verb; this.url = url; - this.service = service; } /** @@ -271,7 +281,14 @@ public boolean isFollowRedirects() { return followRedirects; } + /** + * always throws UnsupportedOperationException + * + * @return never + * @deprecated Request doesn't couple with Service anymore. It doesn't need it. Look for service somewhere else + */ + @Deprecated public OAuthService getService() { - return service; + throw new UnsupportedOperationException(); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index b3986c5e8..cf723093d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -12,13 +12,31 @@ public class OAuthRequest extends AbstractRequest { private HttpURLConnection connection; + private final OAuthConfig config; + + /** + * + * @param verb verb + * @param url url + * @param service service + * @deprecated use {@link #OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String, + * com.github.scribejava.core.model.OAuthConfig)} + */ + @Deprecated public OAuthRequest(Verb verb, String url, OAuthService service) { - super(verb, url, service); + this(verb, url, service.getConfig()); + } + + public OAuthRequest(Verb verb, String url, OAuthConfig config) { + super(verb, url); + this.config = config; } /** * Execute the request and return a {@link Response} * + * the same as {@link OAuthService#execute(com.github.scribejava.core.model.OAuthRequest)} + * * @return Http Response * * @throws RuntimeException if the connection cannot be created. @@ -30,7 +48,7 @@ public Response send() { throw new OAuthException("Cannot use sync operations, only async"); } if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - getService().getConfig().log("Cannot use sync operations, only async"); + config.log("Cannot use sync operations, only async"); } try { createConnection(); @@ -43,7 +61,6 @@ public Response send() { Response doSend() throws IOException { final Verb verb = getVerb(); connection.setRequestMethod(verb.name()); - final OAuthConfig config = getService().getConfig(); if (config.getConnectTimeout() != null) { connection.setConnectTimeout(config.getConnectTimeout()); } @@ -69,7 +86,7 @@ void addHeaders() { for (Map.Entry entry : getHeaders().entrySet()) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } - final String userAgent = getService().getConfig().getUserAgent(); + final String userAgent = config.getUserAgent(); if (userAgent != null) { connection.setRequestProperty(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index 1de5f69b5..930fe5b76 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -1,32 +1,53 @@ package com.github.scribejava.core.model; -import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; - import java.io.IOException; import java.util.concurrent.Future; public class OAuthRequestAsync extends AbstractRequest { + /** + * @param verb verb + * @param url url + * @param service service + * @deprecated use {@link #OAuthRequestAsync(com.github.scribejava.core.model.Verb, java.lang.String) } + */ + @Deprecated public OAuthRequestAsync(Verb verb, String url, OAuthService service) { - super(verb, url, service); + this(verb, url); + } + + public OAuthRequestAsync(Verb verb, String url) { + super(verb, url); } + /** + * always throws UnsupportedOperationException + * + * @param T + * @param callback callback + * @param converter converter + * @return never + * @deprecated user {@link OAuthService#execute(com.github.scribejava.core.model.OAuthRequestAsync, + * com.github.scribejava.core.model.OAuthAsyncRequestCallback, + * com.github.scribejava.core.model.OAuthRequestAsync.ResponseConverter) } + */ + @Deprecated public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseConverter converter) { - final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use async operations, only sync"); - } - final OAuthService service = getService(); - final OAuthConfig config = service.getConfig(); - if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use async operations, only sync"); - } - return service.executeAsync(getHeaders(), getVerb(), getCompleteUrl(), getBodyContents(), callback, converter); + throw new UnsupportedOperationException(); } + /** + * always throws UnsupportedOperationException + * + * @param callback callback + * @return never + * @deprecated user {@link OAuthService#execute(com.github.scribejava.core.model.OAuthRequestAsync, + * com.github.scribejava.core.model.OAuthAsyncRequestCallback) } + */ + @Deprecated public Future sendAsync(OAuthAsyncRequestCallback callback) { - return sendAsync(callback, null); + throw new UnsupportedOperationException(); } public interface ResponseConverter { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index cbfa777f9..cf988c846 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -38,7 +38,7 @@ public OAuth10aService(DefaultApi10a api, OAuthConfig config) { public final OAuth1RequestToken getRequestToken() throws IOException { final OAuthConfig config = getConfig(); config.log("obtaining request token from " + api.getRequestTokenEndpoint()); - final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), this); + final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), config); prepareRequestTokenRequest(request); @@ -56,9 +56,9 @@ public final Future getRequestTokenAsync( final OAuthConfig config = getConfig(); config.log("async obtaining request token from " + api.getRequestTokenEndpoint()); final OAuthRequestAsync request - = new OAuthRequestAsync(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), this); + = new OAuthRequestAsync(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); prepareRequestTokenRequest(request); - return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { + return execute(request, callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth1RequestToken convert(Response response) throws IOException { return getApi().getRequestTokenExtractor().extract(response); @@ -94,7 +94,7 @@ public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, S throws IOException { final OAuthConfig config = getConfig(); config.log("obtaining access token from " + api.getAccessTokenEndpoint()); - final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this); + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), config); prepareAccessTokenRequest(request, requestToken, oauthVerifier); final Response response = request.send(); return api.getAccessTokenExtractor().extract(response); @@ -113,10 +113,9 @@ public final Future getAccessTokenAsync(OAuth1RequestToken re OAuthAsyncRequestCallback callback) { final OAuthConfig config = getConfig(); config.log("async obtaining access token from " + api.getAccessTokenEndpoint()); - final OAuthRequestAsync request - = new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this); + final OAuthRequestAsync request = new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); prepareAccessTokenRequest(request, requestToken, oauthVerifier); - return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { + return execute(request, callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth1AccessToken convert(Response response) throws IOException { return getApi().getAccessTokenExtractor().extract(response); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index c59627844..656f0816d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -41,7 +41,7 @@ protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) thr protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, OAuthAsyncRequestCallback callback) { - return request.sendAsync(callback, new OAuthRequestAsync.ResponseConverter() { + return execute(request, callback, new OAuthRequestAsync.ResponseConverter() { @Override public OAuth2AccessToken convert(Response response) throws IOException { return getApi().getAccessTokenExtractor().extract(response); @@ -51,7 +51,7 @@ public OAuth2AccessToken convert(Response response) throws IOException { public final OAuth2AccessToken getAccessToken(String code) throws IOException { final OAuthRequest request = createAccessTokenRequest(code, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), getConfig())); return sendAccessTokenRequestSync(request); } @@ -67,7 +67,7 @@ public final OAuth2AccessToken getAccessToken(String code) throws IOException { public final Future getAccessTokenAsync(String code, OAuthAsyncRequestCallback callback) { final OAuthRequestAsync request = createAccessTokenRequest(code, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); return sendAccessTokenRequestAsync(request, callback); } @@ -88,7 +88,7 @@ protected T createAccessTokenRequest(String code, T public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException { final OAuthRequest request = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)); + new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), getConfig())); return sendAccessTokenRequestSync(request); } @@ -96,7 +96,7 @@ public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IO public final Future refreshAccessTokenAsync(String refreshToken, OAuthAsyncRequestCallback callback) { final OAuthRequestAsync request = createRefreshTokenRequest(refreshToken, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), this)); + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint())); return sendAccessTokenRequestAsync(request, callback); } @@ -115,7 +115,7 @@ protected T createRefreshTokenRequest(String refresh public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) throws IOException { final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), getConfig())); return sendAccessTokenRequestSync(request); } @@ -131,7 +131,7 @@ public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String public final Future getAccessTokenPasswordGrantAsync(String uname, String password, OAuthAsyncRequestCallback callback) { final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), this)); + new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); return sendAccessTokenRequestAsync(request, callback); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index dc52942be..a98391630 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -7,7 +7,9 @@ import com.github.scribejava.core.model.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Token; import com.github.scribejava.core.model.Verb; @@ -81,10 +83,65 @@ public OAuthConfig getConfig() { public abstract void signRequest(T token, AbstractRequest request); + /** + * + * @param T + * @param headers headers + * @param httpVerb httpVerb + * @param completeUrl completeUrl + * @param bodyContents bodyContents + * @param callback callback + * @param converter converter + * @return Future + * @deprecated use {@link #execute(com.github.scribejava.core.model.OAuthRequestAsync, + * com.github.scribejava.core.model.OAuthAsyncRequestCallback, + * com.github.scribejava.core.model.OAuthRequestAsync.ResponseConverter)}
+ * or
{@link #execute(com.github.scribejava.core.model.OAuthRequestAsync, + * com.github.scribejava.core.model.OAuthAsyncRequestCallback)} + */ + @Deprecated public Future executeAsync(Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return httpClient.executeAsync(config.getUserAgent(), headers, httpVerb, - completeUrl, bodyContents, callback, converter); + + final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); + if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { + throw new OAuthException("Cannot use async operations, only sync"); + } + if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { + config.log("Cannot use async operations, only sync"); + } + + return httpClient.executeAsync(config.getUserAgent(), headers, httpVerb, completeUrl, bodyContents, callback, + converter); + } + + public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + + final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); + if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { + throw new OAuthException("Cannot use async operations, only sync"); + } + if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { + config.log("Cannot use async operations, only sync"); + } + + return httpClient.executeAsync(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getBodyContents(), callback, converter); + } + + public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback) { + return execute(request, callback, null); + } + + /** + * the same as {@link OAuthRequest#send()} + * + * @param request request + * @return Response + */ + public Response execute(OAuthRequest request) { + return request.send(); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java b/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java index 30482b2c6..c8d9d0ed4 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java @@ -4,13 +4,11 @@ import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth20Service; public abstract class ObjectMother { public static OAuthRequest createSampleOAuthRequest() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com", new OAuthConfig("test", "test")); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -20,7 +18,7 @@ public static OAuthRequest createSampleOAuthRequest() { public static OAuthRequest createSampleOAuthRequestPort80() { final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:80", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + new OAuthConfig("test", "test")); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -30,7 +28,7 @@ public static OAuthRequest createSampleOAuthRequestPort80() { public static OAuthRequest createSampleOAuthRequestPort80v2() { final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:80/test", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + new OAuthConfig("test", "test")); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -40,7 +38,7 @@ public static OAuthRequest createSampleOAuthRequestPort80v2() { public static OAuthRequest createSampleOAuthRequestPort8080() { final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:8080", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + new OAuthConfig("test", "test")); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -50,7 +48,7 @@ public static OAuthRequest createSampleOAuthRequestPort8080() { public static OAuthRequest createSampleOAuthRequestPort443() { final OAuthRequest request = new OAuthRequest(Verb.GET, "https://example.com:443", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + new OAuthConfig("test", "test")); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -60,7 +58,7 @@ public static OAuthRequest createSampleOAuthRequestPort443() { public static OAuthRequest createSampleOAuthRequestPort443v2() { final OAuthRequest request = new OAuthRequest(Verb.GET, "https://example.com:443/test", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + new OAuthConfig("test", "test")); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java index 3eb4b7404..f207f299e 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth20Service; public class BaseStringExtractorTest { @@ -92,8 +91,7 @@ public void shouldThrowExceptionIfRquestIsNull() { @Test(expected = OAuthParametersMissingException.class) public void shouldThrowExceptionIfRquestHasNoOAuthParameters() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com", new OAuthConfig("test", "test")); extractor.extract(request); } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java index 356a1fbba..63f6d4752 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.core.ObjectMother; public class HeaderExtractorTest { @@ -53,7 +52,7 @@ public void shouldExceptionIfRequestIsNull() { @Test(expected = OAuthParametersMissingException.class) public void shouldExceptionIfRequestHasNoOAuthParams() { final OAuthRequest emptyRequest = new OAuthRequest(Verb.GET, "http://example.com", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + new OAuthConfig("test", "test")); extractor.extract(emptyRequest); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java index f6c6424b6..1de09ea92 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java @@ -16,15 +16,17 @@ public class ForceTypeOfHttpRequestTest { private OAuthRequest request; private OAuthRequestAsync requestAsync; + private OAuthService oAuthService; @Before public void setUp() { ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.NONE); - final OAuthService oAuthService = new OAuth20Service(null, new OAuthConfig("test", "test")); - request = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", - oAuthService); - requestAsync = new OAuthRequestAsync(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", - oAuthService); + final OAuthConfig config = new OAuthConfig("test", "test"); + + oAuthService = new OAuth20Service(null, config); + request = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", config); + requestAsync + = new OAuthRequestAsync(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces"); } @Test @@ -40,6 +42,6 @@ public void shouldNotSendAsyncWithForceParameter() throws ExecutionException, In expectedException.expect(OAuthException.class); expectedException.expectMessage("Cannot use async operations, only sync"); ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS); - requestAsync.sendAsync(null).get(); + oAuthService.execute(requestAsync, null).get(); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java index d1bae5bfa..1e632dab8 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java @@ -3,7 +3,6 @@ import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; -import com.github.scribejava.core.oauth.OAuth20Service; public class OAuthRequestTest { @@ -11,8 +10,7 @@ public class OAuthRequestTest { @Before public void setUp() { - request = new OAuthRequest(Verb.GET, "http://example.com", - new OAuth20Service(null, new OAuthConfig("test", "test"))); + request = new OAuthRequest(Verb.GET, "http://example.com", new OAuthConfig("test", "test")); } @Test diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java index cd2733926..6a038307a 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java @@ -5,8 +5,6 @@ import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; -import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.oauth.OAuthService; import java.net.MalformedURLException; public class RequestTest { @@ -14,18 +12,18 @@ public class RequestTest { private OAuthRequest getRequest; private OAuthRequest postRequest; private ConnectionStub connection; - private OAuthService oAuthService; + private OAuthConfig config; @Before public void setUp() throws MalformedURLException { connection = new ConnectionStub(); - oAuthService = new OAuth20Service(null, new OAuthConfig("test", "test")); - postRequest = new OAuthRequest(Verb.POST, "http://example.com", oAuthService); + config = new OAuthConfig("test", "test"); + postRequest = new OAuthRequest(Verb.POST, "http://example.com", config); postRequest.addBodyParameter("param", "value"); postRequest.addBodyParameter("param with spaces", "value with spaces"); postRequest.setConnection(connection); getRequest = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", - oAuthService); + config); getRequest.setConnection(connection); } @@ -68,7 +66,7 @@ public void shouldSetPayloadAndHeaders() { @Test public void shouldAllowAddingQuerystringParametersAfterCreation() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val", oAuthService); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val", config); request.addQuerystringParameter("two", "other val"); request.addQuerystringParameter("more", "params"); assertEquals(3, request.getQueryStringParams().size()); @@ -76,7 +74,7 @@ public void shouldAllowAddingQuerystringParametersAfterCreation() { @Test public void shouldReturnTheCompleteUrl() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val", oAuthService); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val", config); request.addQuerystringParameter("two", "other val"); request.addQuerystringParameter("more", "params"); assertEquals("http://example.com?one=val&two=other%20val&more=params", request.getCompleteUrl()); From b7d0c6dd510c23457fa8ad9da46a6748749aa032 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 7 Dec 2016 16:39:52 +0300 Subject: [PATCH 181/250] add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) --- changelog | 1 + .../core/model/AbstractRequest.java | 98 +++++++++++++++---- .../scribejava/core/model/HttpClient.java | 13 ++- .../scribejava/core/model/OAuthRequest.java | 10 +- .../scribejava/core/oauth/OAuthService.java | 14 ++- .../scribejava/core/model/RequestTest.java | 11 ++- .../httpclient/ahc/AhcHttpClient.java | 77 ++++++++++++++- .../httpclient/ning/NingHttpClient.java | 80 ++++++++++++++- 8 files changed, 270 insertions(+), 34 deletions(-) diff --git a/changelog b/changelog index 01d43cbb0..061400944 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. + * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) [3.3.0] * update Facebook v2.6 -> v2.8 diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 94d61095f..d31bdc658 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -8,6 +8,7 @@ import java.util.Map; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; +import java.io.File; /** * The representation of an OAuth HttpRequest. @@ -26,9 +27,12 @@ public abstract class AbstractRequest { private final Map headers = new HashMap<>(); private boolean followRedirects = true; - private String payload; private String charset; - private byte[] bytePayload; + + private String stringPayload; + private byte[] byteArrayPayload; + private File filePayload; + private final Map oauthParameters = new HashMap<>(); private String realm; @@ -142,13 +146,32 @@ protected boolean hasBodyContent() { } /** - * Add body payload. This method is used when the HTTP body is not a form-url-encoded string, but another thing. + * @param payload payload + * @deprecated use {@link #setPayload(java.lang.String) } + */ + @Deprecated + public void addPayload(String payload) { + setPayload(payload); + } + + /** + * @param payload payload + * @deprecated use {@link #setPayload(byte[]) } + */ + @Deprecated + public void addPayload(byte[] payload) { + setPayload(payload); + } + + /** + * Set body payload. This method is used when the HTTP body is not a form-url-encoded string, but another thing. * Like for example XML. Note: The contents are not part of the OAuth signature * * @param payload the body of the request */ - public void addPayload(String payload) { - this.payload = payload; + public void setPayload(String payload) { + resetPayload(); + stringPayload = payload; } /** @@ -156,8 +179,25 @@ public void addPayload(String payload) { * * @param payload byte[] */ - public void addPayload(byte[] payload) { - this.bytePayload = payload.clone(); + public void setPayload(byte[] payload) { + resetPayload(); + byteArrayPayload = payload.clone(); + } + + /** + * Overloaded version for File + * + * @param payload File + */ + public void setPayload(File payload) { + resetPayload(); + filePayload = payload; + } + + private void resetPayload() { + stringPayload = null; + byteArrayPayload = null; + filePayload = null; } /** @@ -212,25 +252,43 @@ public String getSanitizedUrl() { } /** - * Returns the body of the request + * @return value set in {@link #setPayload(java.lang.String)} + * @deprecated use {@link #getStringPayload()} or {@link #getByteArrayPayload()} + */ + @Deprecated + public String getBodyContents() { + return getStringPayload(); + } + + /** + * Returns the body of the request (set in {@link #setPayload(java.lang.String)}) * * @return form encoded string * * @throws OAuthException if the charset chosen is not supported */ - public String getBodyContents() { - try { - return new String(getByteBodyContents(), getCharset()); - } catch (UnsupportedEncodingException uee) { - throw new OAuthException("Unsupported Charset: " + charset, uee); - } + public String getStringPayload() { + return stringPayload; + } + + /** + * @return value set in {@link #setPayload(byte[])} + * @deprecated use {@link #getByteArrayPayload() } + */ + @Deprecated + public byte[] getByteBodyContents() { + return getByteArrayPayload(); } - byte[] getByteBodyContents() { - if (bytePayload != null) { - return bytePayload; + /** + * @return the body of the request (set in {@link #setPayload(byte[])} or in + * {@link #addBodyParameter(java.lang.String, java.lang.String)} ) + */ + public byte[] getByteArrayPayload() { + if (byteArrayPayload != null) { + return byteArrayPayload; } - final String body = (payload == null) ? bodyParams.asFormUrlEncodedString() : payload; + final String body = bodyParams.asFormUrlEncodedString(); try { return body.getBytes(getCharset()); } catch (UnsupportedEncodingException uee) { @@ -238,6 +296,10 @@ byte[] getByteBodyContents() { } } + public File getFilePayload() { + return filePayload; + } + @Override public String toString() { return String.format("@Request(%s %s)", getVerb(), getUrl()); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java index 3762f7083..339e2d7f4 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java @@ -1,15 +1,24 @@ package com.github.scribejava.core.model; +import java.io.File; import java.io.IOException; import java.util.Map; import java.util.concurrent.Future; public interface HttpClient { + void close() throws IOException; Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter); + byte[] bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter); + + Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter); + + Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter); interface Config { } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index cf723093d..c0f35408a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -7,6 +7,7 @@ import com.github.scribejava.core.exceptions.OAuthConnectionException; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; +import java.io.File; public class OAuthRequest extends AbstractRequest { @@ -69,7 +70,14 @@ Response doSend() throws IOException { } addHeaders(); if (hasBodyContent()) { - addBody(getByteBodyContents()); + final File filePayload = getFilePayload(); + if (filePayload != null) { + throw new UnsupportedOperationException("Sync Requests do not support File payload for the moment"); + } else if (getStringPayload() != null) { + addBody(getStringPayload().getBytes(getCharset())); + } else { + addBody(getByteArrayPayload()); + } } return new Response(connection); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index a98391630..19d9af62d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -13,6 +13,7 @@ import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Token; import com.github.scribejava.core.model.Verb; +import java.io.File; import java.io.IOException; import java.util.Map; @@ -127,8 +128,17 @@ public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallbac config.log("Cannot use async operations, only sync"); } - return httpClient.executeAsync(config.getUserAgent(), request.getHeaders(), request.getVerb(), - request.getCompleteUrl(), request.getBodyContents(), callback, converter); + final File filePayload = request.getFilePayload(); + if (filePayload != null) { + return httpClient.executeAsync(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), filePayload, callback, converter); + } else if (request.getStringPayload() != null) { + return httpClient.executeAsync(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getStringPayload(), callback, converter); + } else { + return httpClient.executeAsync(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getByteArrayPayload(), callback, converter); + } } public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback) { diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java index 6a038307a..bd6cff86f 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java @@ -51,16 +51,17 @@ public void shouldAddRequestHeaders() { @Test public void shouldSetBodyParamsAndAddContentLength() { - assertEquals("param=value¶m%20with%20spaces=value%20with%20spaces", postRequest.getBodyContents()); + assertEquals("param=value¶m%20with%20spaces=value%20with%20spaces", + new String(postRequest.getByteArrayPayload())); postRequest.send(); assertTrue(connection.getHeaders().containsKey("Content-Length")); } @Test public void shouldSetPayloadAndHeaders() { - postRequest.addPayload("PAYLOAD"); + postRequest.setPayload("PAYLOAD"); postRequest.send(); - assertEquals("PAYLOAD", postRequest.getBodyContents()); + assertEquals("PAYLOAD", postRequest.getStringPayload()); assertTrue(connection.getHeaders().containsKey("Content-Length")); } @@ -87,14 +88,14 @@ public void shouldHandleQueryStringSpaceEncodingProperly() { @Test public void shouldAutomaticallyAddContentTypeForPostRequestsWithBytePayload() { - postRequest.addPayload("PAYLOAD".getBytes()); + postRequest.setPayload("PAYLOAD".getBytes()); postRequest.send(); assertEquals(OAuthRequest.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); } @Test public void shouldAutomaticallyAddContentTypeForPostRequestsWithStringPayload() { - postRequest.addPayload("PAYLOAD"); + postRequest.setPayload("PAYLOAD"); postRequest.send(); assertEquals(OAuthRequest.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); } diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 14d88ea31..2729c475d 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -14,6 +14,7 @@ import java.util.concurrent.Future; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import java.io.File; import org.asynchttpclient.BoundRequestBuilder; public class AhcHttpClient implements HttpClient { @@ -35,8 +36,31 @@ public void close() throws IOException { @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + byte[] bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new ByteArrayBodySetter(bodyContents), + callback, converter); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new StringBodySetter(bodyContents), callback, + converter); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new FileBodySetter(bodyContents), callback, + converter); + } + + private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, + String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { final BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: @@ -47,7 +71,7 @@ public Future executeAsync(String userAgent, Map headers, if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } - boundRequestBuilder = requestBuilder.setBody(bodyContents); + boundRequestBuilder = bodySetter.setBody(requestBuilder); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); @@ -64,4 +88,51 @@ public Future executeAsync(String userAgent, Map headers, .execute(new OAuthAsyncCompletionHandler<>( callback, converter)); } + + private interface BodySetter { + + BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder); + } + + private static class ByteArrayBodySetter implements BodySetter { + + private final byte[] bodyContents; + + private ByteArrayBodySetter(byte[] bodyContents) { + this.bodyContents = bodyContents; + } + + @Override + public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) { + return requestBuilder.setBody(bodyContents); + } + } + + private static class StringBodySetter implements BodySetter { + + private final String bodyContents; + + private StringBodySetter(String bodyContents) { + this.bodyContents = bodyContents; + } + + @Override + public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) { + return requestBuilder.setBody(bodyContents); + } + } + + private static class FileBodySetter implements BodySetter { + + private final File bodyContents; + + private FileBodySetter(File bodyContents) { + this.bodyContents = bodyContents; + } + + @Override + public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) { + return requestBuilder.setBody(bodyContents); + } + } } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index 9d4bccffd..5bf19fd53 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -12,6 +12,7 @@ import java.util.concurrent.Future; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import java.io.File; public class NingHttpClient implements HttpClient { @@ -34,8 +35,34 @@ public void close() { @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + byte[] bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new ByteArrayBodySetter(bodyContents), + callback, converter); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new StringBodySetter(bodyContents), callback, + converter); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new FileBodySetter(bodyContents), callback, + converter); + } + + private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, + String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: @@ -46,7 +73,7 @@ public Future executeAsync(String userAgent, Map headers, if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } - boundRequestBuilder = requestBuilder.setBody(bodyContents); + boundRequestBuilder = bodySetter.setBody(requestBuilder); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); @@ -63,4 +90,51 @@ public Future executeAsync(String userAgent, Map headers, .execute(new OAuthAsyncCompletionHandler<>( callback, converter)); } + + private interface BodySetter { + + AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder); + } + + private static class ByteArrayBodySetter implements BodySetter { + + private final byte[] bodyContents; + + private ByteArrayBodySetter(byte[] bodyContents) { + this.bodyContents = bodyContents; + } + + @Override + public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) { + return requestBuilder.setBody(bodyContents); + } + } + + private static class StringBodySetter implements BodySetter { + + private final String bodyContents; + + private StringBodySetter(String bodyContents) { + this.bodyContents = bodyContents; + } + + @Override + public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) { + return requestBuilder.setBody(bodyContents); + } + } + + private static class FileBodySetter implements BodySetter { + + private final File bodyContents; + + private FileBodySetter(File bodyContents) { + this.bodyContents = bodyContents; + } + + @Override + public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) { + return requestBuilder.setBody(bodyContents); + } + } } From 43ea452609f7fa857e61c5f35f955faff6efe760 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 7 Dec 2016 16:55:48 +0300 Subject: [PATCH 182/250] add support for HTTP verbs (thanks to https://github.com/keijohyttinen) --- changelog | 1 + .../httpclient/ahc/AhcHttpClient.java | 21 +++++++++++++------ .../httpclient/ning/NingHttpClient.java | 21 +++++++++++++------ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/changelog b/changelog index 061400944..9d9cf23f4 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) + * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) [3.3.0] * update Facebook v2.6 -> v2.8 diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 2729c475d..0eca9a6fa 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -61,22 +61,31 @@ public Future executeAsync(String userAgent, Map headers, private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final BoundRequestBuilder boundRequestBuilder; + BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: boundRequestBuilder = client.prepareGet(completeUrl); break; case POST: - BoundRequestBuilder requestBuilder = client.preparePost(completeUrl); - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = bodySetter.setBody(requestBuilder); + boundRequestBuilder = client.preparePost(completeUrl); + break; + case PUT: + boundRequestBuilder = client.preparePut(completeUrl); + break; + case DELETE: + boundRequestBuilder = client.prepareDelete(completeUrl); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); } + if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = bodySetter.setBody(boundRequestBuilder); + } + for (Map.Entry header : headers.entrySet()) { boundRequestBuilder.addHeader(header.getKey(), header.getValue()); } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index 5bf19fd53..f75c645c1 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -63,22 +63,31 @@ public Future executeAsync(String userAgent, Map headers, private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; + AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: boundRequestBuilder = client.prepareGet(completeUrl); break; case POST: - AsyncHttpClient.BoundRequestBuilder requestBuilder = client.preparePost(completeUrl); - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - requestBuilder = requestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - boundRequestBuilder = bodySetter.setBody(requestBuilder); + boundRequestBuilder = client.preparePost(completeUrl); + break; + case PUT: + boundRequestBuilder = client.preparePut(completeUrl); + break; + case DELETE: + boundRequestBuilder = client.prepareDelete(completeUrl); break; default: throw new IllegalArgumentException("message build error: unknown verb type"); } + if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { + boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + boundRequestBuilder = bodySetter.setBody(boundRequestBuilder); + } + for (Map.Entry header : headers.entrySet()) { boundRequestBuilder.addHeader(header.getKey(), header.getValue()); } From 5e560cc50fecc907ed1af729656a531b7fd0e149 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 16:18:42 +0300 Subject: [PATCH 183/250] fixes and refactorings to OkHttp support --- README.md | 7 +- changelog | 1 + .../examples/GitHubAsyncOkHttpExample.java | 10 ++- .../VkontakteExternalHttpExample.java | 2 +- .../httpclient/ahc/AhcHttpClient.java | 80 ++++++------------ .../httpclient/ning/NingHttpClient.java | 84 +++++++------------ .../okhttp/OAuthAsyncCompletionHandler.java | 52 ++---------- .../httpclient/okhttp/OkHttpFuture.java | 59 +++++++++++++ .../httpclient/okhttp/OkHttpHttpClient.java | 78 +++++++++++++++-- .../okhttp/OkHttpHttpClientConfig.java | 10 +-- .../okhttp/OkHttpHttpClientTest.java | 21 +++-- 11 files changed, 222 insertions(+), 182 deletions(-) create mode 100644 scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpFuture.java diff --git a/README.md b/README.md index 5b185be1b..f2e576d29 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,12 @@ Hit ScribeJava as hard and with many threads as you like. ### Async and other HTTP clients -You can use ning async http client 1.9.x or asynchttpclient 2.x out-of-box, just add maven modules scribejava-httpclient-ning or scribejava-httpclient-ahc to your pom +ScribeJava support out-of-box several HTTP clients: + * ning async http client 1.9.x (maven module scribejava-httpclient-ning) + * asynchttpclient 2.x (maven module scribejava-httpclient-ahc) + * OkHttp (maven module scribejava-httpclient-okhttp) + + just add corresponding maven modules to your pom ### Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box diff --git a/changelog b/changelog index 9d9cf23f4..1eff1321c 100644 --- a/changelog +++ b/changelog @@ -3,6 +3,7 @@ You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) + * add OkHttp http client support (thanks to https://github.com/arcao) [3.3.0] * update Facebook v2.6 -> v2.8 diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java index c0e4e6859..f3153f66e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java @@ -7,7 +7,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.httpclient.okhttp.OkHttpHttpClient; +import com.github.scribejava.httpclient.okhttp.OkHttpHttpClientConfig; import okhttp3.OkHttpClient; import java.io.IOException; @@ -28,12 +28,13 @@ public static void main(String... args) throws IOException, ExecutionException, final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); + final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder(); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") - .httpClient(new OkHttpHttpClient(new OkHttpClient())) + .httpClientConfig(new OkHttpHttpClientConfig(okHttpBuilder)) .build(GitHubApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); @@ -73,9 +74,9 @@ public static void main(String... args) throws IOException, ExecutionException, // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL, service); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.sendAsync(null).get(); + final Response response = service.execute(request, null).get(); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); @@ -83,5 +84,6 @@ public static void main(String... args) throws IOException, ExecutionException, System.out.println(); System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + service.closeAsyncClient(); } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java index fe9618914..065d1af4e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -30,7 +30,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientSecret = "your client secret"; ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - //create any http cleint externally + //create any http client externally final DefaultAsyncHttpClientConfig httpClientConfig = new DefaultAsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 0eca9a6fa..60d5c92cd 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -38,15 +38,15 @@ public void close() throws IOException { public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new ByteArrayBodySetter(bodyContents), - callback, converter); + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.BYTE_ARRAY, bodyContents, callback, + converter); } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new StringBodySetter(bodyContents), callback, + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.STRING, bodyContents, callback, converter); } @@ -54,12 +54,12 @@ public Future executeAsync(String userAgent, Map headers, public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new FileBodySetter(bodyContents), callback, + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.FILE, bodyContents, callback, converter); } private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, - String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback callback, + String completeUrl, BodySetter bodySetter, Object bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { @@ -83,7 +83,7 @@ private Future doExecuteAsync(String userAgent, Map heade if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } - boundRequestBuilder = bodySetter.setBody(boundRequestBuilder); + boundRequestBuilder = bodySetter.setBody(boundRequestBuilder, bodyContents); } for (Map.Entry header : headers.entrySet()) { @@ -93,55 +93,29 @@ private Future doExecuteAsync(String userAgent, Map heade boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); } - return boundRequestBuilder - .execute(new OAuthAsyncCompletionHandler<>( - callback, converter)); - } - - private interface BodySetter { - - BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder); + return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); } - private static class ByteArrayBodySetter implements BodySetter { - - private final byte[] bodyContents; - - private ByteArrayBodySetter(byte[] bodyContents) { - this.bodyContents = bodyContents; - } - - @Override - public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) { - return requestBuilder.setBody(bodyContents); - } - } - - private static class StringBodySetter implements BodySetter { - - private final String bodyContents; - - private StringBodySetter(String bodyContents) { - this.bodyContents = bodyContents; - } - - @Override - public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) { - return requestBuilder.setBody(bodyContents); - } - } - - private static class FileBodySetter implements BodySetter { - - private final File bodyContents; - - private FileBodySetter(File bodyContents) { - this.bodyContents = bodyContents; - } + private enum BodySetter { + BYTE_ARRAY { + @Override + BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents) { + return requestBuilder.setBody((byte[]) bodyContents); + } + }, + STRING { + @Override + BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents) { + return requestBuilder.setBody((String) bodyContents); + } + }, + FILE { + @Override + BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents) { + return requestBuilder.setBody((File) bodyContents); + } + }; - @Override - public BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder) { - return requestBuilder.setBody(bodyContents); - } + abstract BoundRequestBuilder setBody(BoundRequestBuilder requestBuilder, Object bodyContents); } } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index f75c645c1..26b6c41a4 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -38,8 +38,8 @@ public Future executeAsync(String userAgent, Map headers, byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new ByteArrayBodySetter(bodyContents), - callback, converter); + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.BYTE_ARRAY, bodyContents, callback, + converter); } @Override @@ -47,7 +47,7 @@ public Future executeAsync(String userAgent, Map headers, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new StringBodySetter(bodyContents), callback, + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.STRING, bodyContents, callback, converter); } @@ -56,12 +56,12 @@ public Future executeAsync(String userAgent, Map headers, File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, new FileBodySetter(bodyContents), callback, + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.FILE, bodyContents, callback, converter); } private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, - String completeUrl, BodySetter bodySetter, OAuthAsyncRequestCallback callback, + String completeUrl, BodySetter bodySetter, Object bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { @@ -85,7 +85,7 @@ private Future doExecuteAsync(String userAgent, Map heade if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } - boundRequestBuilder = bodySetter.setBody(boundRequestBuilder); + boundRequestBuilder = bodySetter.setBody(boundRequestBuilder, bodyContents); } for (Map.Entry header : headers.entrySet()) { @@ -95,55 +95,33 @@ private Future doExecuteAsync(String userAgent, Map heade boundRequestBuilder.setHeader(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); } - return boundRequestBuilder - .execute(new OAuthAsyncCompletionHandler<>( - callback, converter)); - } - - private interface BodySetter { - - AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder); + return boundRequestBuilder.execute(new OAuthAsyncCompletionHandler<>(callback, converter)); } - private static class ByteArrayBodySetter implements BodySetter { - - private final byte[] bodyContents; - - private ByteArrayBodySetter(byte[] bodyContents) { - this.bodyContents = bodyContents; - } - - @Override - public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) { - return requestBuilder.setBody(bodyContents); - } - } - - private static class StringBodySetter implements BodySetter { - - private final String bodyContents; - - private StringBodySetter(String bodyContents) { - this.bodyContents = bodyContents; - } - - @Override - public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) { - return requestBuilder.setBody(bodyContents); - } - } - - private static class FileBodySetter implements BodySetter { - - private final File bodyContents; - - private FileBodySetter(File bodyContents) { - this.bodyContents = bodyContents; - } + private enum BodySetter { + BYTE_ARRAY { + @Override + AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder, + Object bodyContents) { + return requestBuilder.setBody((byte[]) bodyContents); + } + }, + STRING { + @Override + AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder, + Object bodyContents) { + return requestBuilder.setBody((String) bodyContents); + } + }, + FILE { + @Override + AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder, + Object bodyContents) { + return requestBuilder.setBody((File) bodyContents); + } + }; - @Override - public AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder) { - return requestBuilder.setBody(bodyContents); - } + abstract AsyncHttpClient.BoundRequestBuilder setBody(AsyncHttpClient.BoundRequestBuilder requestBuilder, + Object bodyContents); } } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java index 9ae280c88..189781669 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -10,28 +10,18 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -class OAuthAsyncCompletionHandler implements Callback, Future { +class OAuthAsyncCompletionHandler implements Callback { private final OAuthAsyncRequestCallback callback; private final OAuthRequestAsync.ResponseConverter converter; - private final Call call; - private final CountDownLatch latch; - private T result; + private final OkHttpFuture okHttpFuture; OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter, Call call) { + OAuthRequestAsync.ResponseConverter converter, OkHttpFuture okHttpFuture) { this.callback = callback; this.converter = converter; - this.call = call; - this.latch = new CountDownLatch(1); - - call.enqueue(this); + this.okHttpFuture = okHttpFuture; } @Override @@ -41,7 +31,7 @@ public void onFailure(Call call, IOException e) { callback.onThrowable(e); } } finally { - latch.countDown(); + okHttpFuture.finish(); } } @@ -63,40 +53,12 @@ public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOExce @SuppressWarnings("unchecked") final T t = converter == null ? (T) response : converter.convert(response); - result = t; + okHttpFuture.setResult(t); if (callback != null) { callback.onCompleted(t); } } finally { - latch.countDown(); + okHttpFuture.finish(); } } - - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - call.cancel(); - return call.isCanceled(); - } - - @Override - public boolean isCancelled() { - return call.isCanceled(); - } - - @Override - public boolean isDone() { - return call.isExecuted(); - } - - @Override - public T get() throws InterruptedException, ExecutionException { - latch.await(); - return result; - } - - @Override - public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - latch.await(timeout, unit); - return result; - } } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpFuture.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpFuture.java new file mode 100644 index 000000000..ebf459260 --- /dev/null +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpFuture.java @@ -0,0 +1,59 @@ +package com.github.scribejava.httpclient.okhttp; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import okhttp3.Call; + +public class OkHttpFuture implements Future { + + private final CountDownLatch latch = new CountDownLatch(1); + private final Call call; + private T result; + + public OkHttpFuture(Call call) { + this.call = call; + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + call.cancel(); + return call.isCanceled(); + } + + @Override + public boolean isCancelled() { + return call.isCanceled(); + } + + @Override + public boolean isDone() { + return call.isExecuted(); + } + + @Override + public T get() throws InterruptedException, ExecutionException { + latch.await(); + return result; + } + + @Override + public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + if (latch.await(timeout, unit)) { + return result; + } else { + throw new TimeoutException(); + } + } + + void finish() { + latch.countDown(); + } + + void setResult(T result) { + this.result = result; + } + +} diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index 57f90ca5f..45beb8c41 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -18,13 +18,17 @@ import java.util.concurrent.Future; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import java.io.File; +import okhttp3.Cache; public class OkHttpHttpClient implements HttpClient { + private static final MediaType DEFAULT_CONTENT_TYPE_MEDIA_TYPE = MediaType.parse(DEFAULT_CONTENT_TYPE); + private final OkHttpClient client; public OkHttpHttpClient(OkHttpHttpClientConfig config) { - client = config.getClient(); + client = config.getClientBuilder().build(); } public OkHttpHttpClient(OkHttpClient client) { @@ -33,24 +37,55 @@ public OkHttpHttpClient(OkHttpClient client) { @Override public void close() throws IOException { - //client.close(); + client.dispatcher().executorService().shutdown(); + client.connectionPool().evictAll(); + final Cache cache = client.cache(); + if (cache != null) { + cache.close(); + } + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodyType.BYTE_ARRAY, bodyContents, callback, + converter); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodyType.STRING, bodyContents, callback, + converter); } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + File bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodyType.FILE, bodyContents, callback, + converter); + } + + private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, + String completeUrl, BodyType bodyType, Object bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { final Request.Builder requestBuilder = new Request.Builder(); requestBuilder.url(completeUrl); final String method = httpVerb.name(); // prepare body - RequestBody body = null; + final RequestBody body; if (bodyContents != null && HttpMethod.permitsRequestBody(method)) { - final String contentType = headers.containsKey(AbstractRequest.CONTENT_TYPE) ? - headers.get(AbstractRequest.CONTENT_TYPE) : DEFAULT_CONTENT_TYPE; - body = RequestBody.create(MediaType.parse(contentType), bodyContents); + final MediaType mediaType = headers.containsKey(AbstractRequest.CONTENT_TYPE) + ? MediaType.parse(headers.get(AbstractRequest.CONTENT_TYPE)) : DEFAULT_CONTENT_TYPE_MEDIA_TYPE; + + body = bodyType.createBody(mediaType, bodyContents); + } else { + body = null; } // fill HTTP method and body @@ -66,6 +101,31 @@ public Future executeAsync(String userAgent, Map headers, // create a new call final Call call = client.newCall(requestBuilder.build()); - return new OAuthAsyncCompletionHandler<>(callback, converter, call); + final OkHttpFuture okHttpFuture = new OkHttpFuture<>(call); + call.enqueue(new OAuthAsyncCompletionHandler<>(callback, converter, okHttpFuture)); + return okHttpFuture; + } + + private enum BodyType { + BYTE_ARRAY { + @Override + RequestBody createBody(MediaType mediaType, Object bodyContents) { + return RequestBody.create(mediaType, (byte[]) bodyContents); + } + }, + STRING { + @Override + RequestBody createBody(MediaType mediaType, Object bodyContents) { + return RequestBody.create(mediaType, (String) bodyContents); + } + }, + FILE { + @Override + RequestBody createBody(MediaType mediaType, Object bodyContents) { + return RequestBody.create(mediaType, (File) bodyContents); + } + }; + + abstract RequestBody createBody(MediaType mediaType, Object bodyContents); } } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java index b5acae110..e536fd810 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java @@ -5,13 +5,13 @@ public class OkHttpHttpClientConfig implements HttpClient.Config { - private final OkHttpClient client; + private final OkHttpClient.Builder clientBuilder; - public OkHttpHttpClientConfig(OkHttpClient client) { - this.client = client; + public OkHttpHttpClientConfig(OkHttpClient.Builder clientBuilder) { + this.clientBuilder = clientBuilder; } - public OkHttpClient getClient() { - return client; + public OkHttpClient.Builder getClientBuilder() { + return clientBuilder; } } diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index b1968dcb3..97b8cbad6 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -16,7 +16,6 @@ import org.junit.Before; import org.junit.Test; -import java.net.MalformedURLException; import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; @@ -25,7 +24,7 @@ public class OkHttpHttpClientTest { private OAuthService oAuthService; @Before - public void setUp() throws MalformedURLException { + public void setUp() { final HttpClient client = new OkHttpHttpClient(new OkHttpClient()); oAuthService = new OAuth20Service(null, new OAuthConfig("test", "test", null, null, null, null, null, null, null, null, null, null, client)); @@ -42,8 +41,8 @@ public void shouldSendGetRequest() throws Exception { final HttpUrl baseUrl = server.url("/testUrl"); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); - final Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString()); + final Response response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, response.getBody()); @@ -66,9 +65,9 @@ public void shouldSendPostRequest() throws Exception { final HttpUrl baseUrl = server.url("/testUrl"); // request with body - OAuthRequestAsync request = new OAuthRequestAsync(Verb.POST, baseUrl.toString(), oAuthService); - request.addPayload(expectedRequestBody); - Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + OAuthRequestAsync request = new OAuthRequestAsync(Verb.POST, baseUrl.toString()); + request.setPayload(expectedRequestBody); + Response response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, response.getBody()); @@ -78,8 +77,8 @@ public void shouldSendPostRequest() throws Exception { // request with empty body - request = new OAuthRequestAsync(Verb.POST, baseUrl.toString(), oAuthService); - response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + request = new OAuthRequestAsync(Verb.POST, baseUrl.toString()); + response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, response.getBody()); @@ -100,8 +99,8 @@ public void shouldReadResponseStream() throws Exception { final HttpUrl baseUrl = server.url("/testUrl"); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString(), oAuthService); - final Response response = request.sendAsync(null).get(30, TimeUnit.SECONDS); + final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString()); + final Response response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, StreamUtils.getStreamContents(response.getStream())); From 65761bb1bcefd1299f47c8572501ced3cb3e2c02 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 18:00:10 +0300 Subject: [PATCH 184/250] add default HTTP client configs (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') --- changelog | 1 + .../examples/GitHubAsyncOkHttpExample.java | 4 +- .../examples/Google20AsyncAHCExample.java | 4 +- .../core/builder/ServiceBuilder.java | 19 +++++++-- .../core/httpclient/HttpClient.java | 26 ++++++++++++ .../core/httpclient/HttpClientConfig.java | 6 +++ .../core/httpclient/HttpClientProvider.java | 4 +- .../scribejava/core/model/HttpClient.java | 11 +++++ .../scribejava/core/model/OAuthConfig.java | 41 ++++++++++++++++--- .../scribejava/core/oauth/OAuthService.java | 7 ++-- .../httpclient/ahc/AhcHttpClient.java | 6 ++- .../httpclient/ahc/AhcHttpClientConfig.java | 13 +++++- .../httpclient/ahc/AhcProvider.java | 5 ++- .../httpclient/ning/NingHttpClient.java | 14 +++++-- .../httpclient/ning/NingHttpClientConfig.java | 13 +++++- .../httpclient/ning/NingProvider.java | 5 ++- .../httpclient/okhttp/OkHttpHttpClient.java | 5 ++- .../okhttp/OkHttpHttpClientConfig.java | 13 +++++- .../httpclient/okhttp/OkHttpProvider.java | 5 ++- .../okhttp/OkHttpHttpClientTest.java | 2 +- 20 files changed, 165 insertions(+), 39 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientConfig.java diff --git a/changelog b/changelog index 1eff1321c..189e1555b 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,7 @@ * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) * add OkHttp http client support (thanks to https://github.com/arcao) + * add default HTTP client configs (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') [3.3.0] * update Facebook v2.6 -> v2.8 diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java index f3153f66e..fc8d5ec44 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java @@ -8,7 +8,6 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.httpclient.okhttp.OkHttpHttpClientConfig; -import okhttp3.OkHttpClient; import java.io.IOException; import java.util.Random; @@ -28,13 +27,12 @@ public static void main(String... args) throws IOException, ExecutionException, final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - final OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder(); final OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") - .httpClientConfig(new OkHttpHttpClientConfig(okHttpBuilder)) + .httpClientConfig(OkHttpHttpClientConfig.defaultConfig()) .build(GitHubApi.instance()); final Scanner in = new Scanner(System.in, "UTF-8"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index b760feeda..735b04911 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -6,7 +6,7 @@ import com.github.scribejava.httpclient.ahc.AhcHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; @@ -33,7 +33,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - final HttpClient.Config clientConfig = new AhcHttpClientConfig(new DefaultAsyncHttpClientConfig.Builder() + final HttpClientConfig clientConfig = new AhcHttpClientConfig(new DefaultAsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) .setPooledConnectionIdleTimeout(1_000) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index b45555f93..e34f3316f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -1,7 +1,8 @@ package com.github.scribejava.core.builder; import com.github.scribejava.core.builder.api.BaseApi; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.SignatureType; @@ -30,7 +31,7 @@ public class ServiceBuilder { private Integer readTimeout; //not-default httpclient only - private HttpClient.Config httpClientConfig; + private HttpClientConfig httpClientConfig; private HttpClient httpClient; public ServiceBuilder() { @@ -134,7 +135,19 @@ public ServiceBuilder readTimeout(Integer readTimeout) { return this; } - public ServiceBuilder httpClientConfig(HttpClient.Config httpClientConfig) { + /** + * throws UnsupportedOperationException + * + * @param httpClientConfig httpClientConfig + * @return never + * @deprecated use {@link #httpClientConfig(com.github.scribejava.core.httpclient.HttpClientConfig)} + */ + @Deprecated + public ServiceBuilder httpClientConfig(com.github.scribejava.core.model.HttpClient.Config httpClientConfig) { + throw new UnsupportedOperationException("deprecated, use another method, see javadocs"); + } + + public ServiceBuilder httpClientConfig(HttpClientConfig httpClientConfig) { Preconditions.checkNotNull(httpClientConfig, "httpClientConfig can't be null"); this.httpClientConfig = httpClientConfig; return this; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java new file mode 100644 index 000000000..fba0ef215 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java @@ -0,0 +1,26 @@ +package com.github.scribejava.core.httpclient; + +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Verb; +import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.Future; + +public interface HttpClient { + + void close() throws IOException; + + Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter); + + Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter); + + Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter); + +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientConfig.java new file mode 100644 index 000000000..3c28d6249 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientConfig.java @@ -0,0 +1,6 @@ +package com.github.scribejava.core.httpclient; + +public interface HttpClientConfig { + + HttpClientConfig createDefaultConfig(); +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java index d7667ee20..5b69156d2 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClientProvider.java @@ -1,8 +1,6 @@ package com.github.scribejava.core.httpclient; -import com.github.scribejava.core.model.HttpClient; - public interface HttpClientProvider { - HttpClient createClient(HttpClient.Config httpClientConfig); + HttpClient createClient(HttpClientConfig httpClientConfig); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java index 339e2d7f4..7d0d45078 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java @@ -5,6 +5,11 @@ import java.util.Map; import java.util.concurrent.Future; +/** + * + * @deprecated use {@link com.github.scribejava.core.httpclient.HttpClient} + */ +@Deprecated public interface HttpClient { void close() throws IOException; @@ -20,6 +25,12 @@ Future executeAsync(String userAgent, Map headers, Verb h Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter); + /** + * + * @deprecated use {@link com.github.scribejava.core.httpclient.HttpClientConfig} + */ + @Deprecated interface Config { + } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 0a6e44894..37be3f2a0 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -1,5 +1,6 @@ package com.github.scribejava.core.model; +import com.github.scribejava.core.httpclient.HttpClientConfig; import java.io.IOException; import java.io.OutputStream; @@ -23,16 +24,46 @@ public class OAuthConfig { private final Integer readTimeout; //async version only - private HttpClient.Config httpClientConfig; - private HttpClient httpClient; + private HttpClientConfig httpClientConfig; + private com.github.scribejava.core.httpclient.HttpClient httpClient; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null, (HttpClientConfig) null, null); } + /** + * throws UnsupportedOperationException + * + * @param apiKey apiKey + * @param apiSecret apiSecret + * @param callback callback + * @param signatureType signatureType + * @param scope scope + * @param debugStream debugStream + * @param state state + * @param responseType responseType + * @param userAgent userAgent + * @param connectTimeout connectTimeout + * @param readTimeout readTimeout + * @param httpClientConfig httpClientConfig + * @param httpClient httpClient + * @deprecated use + * {@link #OAuthConfig(java.lang.String, java.lang.String, java.lang.String, + * com.github.scribejava.core.model.SignatureType, java.lang.String, java.io.OutputStream, java.lang.String, + * java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer, + * com.github.scribejava.core.httpclient.HttpClientConfig, com.github.scribejava.core.httpclient.HttpClient)} + */ + @Deprecated public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, Integer readTimeout, HttpClient.Config httpClientConfig, HttpClient httpClient) { + throw new UnsupportedOperationException("deprecated, use another method, see javadocs"); + } + + public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, + OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, + Integer readTimeout, HttpClientConfig httpClientConfig, + com.github.scribejava.core.httpclient.HttpClient httpClient) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; @@ -99,11 +130,11 @@ public Integer getReadTimeout() { return readTimeout; } - public HttpClient.Config getHttpClientConfig() { + public HttpClientConfig getHttpClientConfig() { return httpClientConfig; } - public HttpClient getHttpClient() { + public com.github.scribejava.core.httpclient.HttpClient getHttpClient() { return httpClient; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 19d9af62d..3ea22dade 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -4,7 +4,8 @@ import com.github.scribejava.core.httpclient.HttpClientProvider; import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.ForceTypeOfHttpRequest; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; @@ -34,7 +35,7 @@ public abstract class OAuthService { public OAuthService(OAuthConfig config) { this.config = config; final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - final HttpClient.Config httpClientConfig = config.getHttpClientConfig(); + final HttpClientConfig httpClientConfig = config.getHttpClientConfig(); final HttpClient externalHttpClient = config.getHttpClient(); if (httpClientConfig == null && externalHttpClient == null) { @@ -57,7 +58,7 @@ public OAuthService(OAuthConfig config) { } } - private static HttpClient getClient(HttpClient.Config config) { + private static HttpClient getClient(HttpClientConfig config) { for (HttpClientProvider provider : ServiceLoader.load(HttpClientProvider.class)) { final HttpClient client = provider.createClient(config); if (client != null) { diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 60d5c92cd..4426946c8 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.ahc; import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -15,6 +15,7 @@ import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; import java.io.File; +import org.asynchttpclient.AsyncHttpClientConfig; import org.asynchttpclient.BoundRequestBuilder; public class AhcHttpClient implements HttpClient { @@ -22,7 +23,8 @@ public class AhcHttpClient implements HttpClient { private final AsyncHttpClient client; public AhcHttpClient(AhcHttpClientConfig ahcConfig) { - client = new DefaultAsyncHttpClient(ahcConfig.getClientConfig()); + final AsyncHttpClientConfig clientConfig = ahcConfig.getClientConfig(); + client = clientConfig == null ? new DefaultAsyncHttpClient() : new DefaultAsyncHttpClient(clientConfig); } public AhcHttpClient(DefaultAsyncHttpClient ahcClient) { diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java index bc6820281..67fc92bdf 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java @@ -1,9 +1,9 @@ package com.github.scribejava.httpclient.ahc; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; import org.asynchttpclient.AsyncHttpClientConfig; -public class AhcHttpClientConfig implements HttpClient.Config { +public class AhcHttpClientConfig implements HttpClientConfig { private final AsyncHttpClientConfig clientConfig; @@ -14,4 +14,13 @@ public AhcHttpClientConfig(AsyncHttpClientConfig clientConfig) { public AsyncHttpClientConfig getClientConfig() { return clientConfig; } + + @Override + public HttpClientConfig createDefaultConfig() { + return defaultConfig(); + } + + public static HttpClientConfig defaultConfig() { + return new AhcHttpClientConfig(null); + } } diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java index 835ba5f03..97c21dc86 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcProvider.java @@ -1,12 +1,13 @@ package com.github.scribejava.httpclient.ahc; import com.github.scribejava.core.httpclient.HttpClientProvider; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; public class AhcProvider implements HttpClientProvider { @Override - public HttpClient createClient(HttpClient.Config config) { + public HttpClient createClient(HttpClientConfig config) { if (config instanceof AhcHttpClientConfig) { return new AhcHttpClient((AhcHttpClientConfig) config); } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index 26b6c41a4..b2fced5e5 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.ning; import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -12,6 +12,7 @@ import java.util.concurrent.Future; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import com.ning.http.client.AsyncHttpClientConfig; import java.io.File; public class NingHttpClient implements HttpClient { @@ -20,8 +21,15 @@ public class NingHttpClient implements HttpClient { public NingHttpClient(NingHttpClientConfig ningConfig) { final String ningAsyncHttpProviderClassName = ningConfig.getNingAsyncHttpProviderClassName(); - client = ningAsyncHttpProviderClassName == null ? new AsyncHttpClient(ningConfig.getConfig()) - : new AsyncHttpClient(ningAsyncHttpProviderClassName, ningConfig.getConfig()); + AsyncHttpClientConfig config = ningConfig.getConfig(); + if (ningAsyncHttpProviderClassName == null) { + client = config == null ? new AsyncHttpClient() : new AsyncHttpClient(config); + } else { + if (config == null) { + config = new AsyncHttpClientConfig.Builder().build(); + } + client = new AsyncHttpClient(ningAsyncHttpProviderClassName, config); + } } public NingHttpClient(AsyncHttpClient client) { diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java index f25d91e54..1dc5aad2a 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java @@ -1,9 +1,9 @@ package com.github.scribejava.httpclient.ning; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; import com.ning.http.client.AsyncHttpClientConfig; -public class NingHttpClientConfig implements HttpClient.Config { +public class NingHttpClientConfig implements HttpClientConfig { private final AsyncHttpClientConfig config; private String ningAsyncHttpProviderClassName; @@ -23,4 +23,13 @@ public void setNingAsyncHttpProviderClassName(String ningAsyncHttpProviderClassN public AsyncHttpClientConfig getConfig() { return config; } + + @Override + public HttpClientConfig createDefaultConfig() { + return defaultConfig(); + } + + public static HttpClientConfig defaultConfig() { + return new NingHttpClientConfig(null); + } } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java index bfd4bce96..2db967249 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingProvider.java @@ -1,12 +1,13 @@ package com.github.scribejava.httpclient.ning; import com.github.scribejava.core.httpclient.HttpClientProvider; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; public class NingProvider implements HttpClientProvider { @Override - public HttpClient createClient(HttpClient.Config httpClientConfig) { + public HttpClient createClient(HttpClientConfig httpClientConfig) { if (httpClientConfig instanceof NingHttpClientConfig) { return new NingHttpClient((NingHttpClientConfig) httpClientConfig); } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index 45beb8c41..e41011991 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.okhttp; import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -28,7 +28,8 @@ public class OkHttpHttpClient implements HttpClient { private final OkHttpClient client; public OkHttpHttpClient(OkHttpHttpClientConfig config) { - client = config.getClientBuilder().build(); + final OkHttpClient.Builder clientBuilder = config.getClientBuilder(); + client = clientBuilder == null ? new OkHttpClient() : clientBuilder.build(); } public OkHttpHttpClient(OkHttpClient client) { diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java index e536fd810..62737fe31 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java @@ -1,9 +1,9 @@ package com.github.scribejava.httpclient.okhttp; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; import okhttp3.OkHttpClient; -public class OkHttpHttpClientConfig implements HttpClient.Config { +public class OkHttpHttpClientConfig implements HttpClientConfig { private final OkHttpClient.Builder clientBuilder; @@ -14,4 +14,13 @@ public OkHttpHttpClientConfig(OkHttpClient.Builder clientBuilder) { public OkHttpClient.Builder getClientBuilder() { return clientBuilder; } + + @Override + public HttpClientConfig createDefaultConfig() { + return defaultConfig(); + } + + public static HttpClientConfig defaultConfig() { + return new OkHttpHttpClientConfig(null); + } } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java index 3dbfcba5d..4d27f5f0c 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpProvider.java @@ -1,12 +1,13 @@ package com.github.scribejava.httpclient.okhttp; import com.github.scribejava.core.httpclient.HttpClientProvider; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; public class OkHttpProvider implements HttpClientProvider { @Override - public HttpClient createClient(HttpClient.Config config) { + public HttpClient createClient(HttpClientConfig config) { if (config instanceof OkHttpHttpClientConfig) { return new OkHttpHttpClient((OkHttpHttpClientConfig) config); } diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index 97b8cbad6..917fe1ce8 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -1,6 +1,6 @@ package com.github.scribejava.httpclient.okhttp; -import com.github.scribejava.core.model.HttpClient; +import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; From d59818211179ba4b04fa129ae13f5e47d87ce8bf Mon Sep 17 00:00:00 2001 From: Gabriel Titerlea Date: Tue, 6 Dec 2016 15:57:02 +0200 Subject: [PATCH 185/250] Using interface instead of impl in AhcHttpClient. --- .../com/github/scribejava/httpclient/ahc/AhcHttpClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 4426946c8..74d3ac730 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -27,7 +27,7 @@ public AhcHttpClient(AhcHttpClientConfig ahcConfig) { client = clientConfig == null ? new DefaultAsyncHttpClient() : new DefaultAsyncHttpClient(clientConfig); } - public AhcHttpClient(DefaultAsyncHttpClient ahcClient) { + public AhcHttpClient(AsyncHttpClient ahcClient) { client = ahcClient; } From cab69546950fdfd48ff41bd33722214a7fd09849 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 18:05:52 +0300 Subject: [PATCH 186/250] update changelog --- changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog b/changelog index 189e1555b..4d0136640 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,7 @@ * add support for HTTP verbs (thanks to https://github.com/keijohyttinen) * add OkHttp http client support (thanks to https://github.com/arcao) * add default HTTP client configs (to use like 'new ServiceBuilder().httpClientConfig(OkHttpHttpClientConfig.defaultConfig())') + * you can use your own impl of AsyncHttpClient [3.3.0] * update Facebook v2.6 -> v2.8 From 18aa97b5ed6b21794748585424908c178594c7b6 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 18:29:48 +0300 Subject: [PATCH 187/250] update checkstyle and OkHttp --- pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index f6c4aa233..5aae303c7 100644 --- a/pom.xml +++ b/pom.xml @@ -132,7 +132,7 @@ com.puppycrawl.tools checkstyle - 7.2 + 7.3 diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index b1b0a7a3d..3d2f016da 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -23,12 +23,12 @@ com.squareup.okhttp3 okhttp - 3.4.2 + 3.5.0 com.squareup.okhttp3 mockwebserver - 3.4.2 + 3.5.0 test From 5a64f30a76cfb675d895728aa9ffdc18644a043e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 19:15:12 +0300 Subject: [PATCH 188/250] prepare to release 3.4.0 --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f2e576d29..93b7a9c2d 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 3.3.0 + 3.4.0 ``` @@ -109,7 +109,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 3.3.0 + 3.4.0 ``` diff --git a/changelog b/changelog index 4d0136640..4b6baf4fd 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[3.4.0] * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. * add support for byte[] and File (async only) payload in OAuth Requests (thanks to https://github.com/keijohyttinen) From c47e787ddab4c2fb88ab2bb6028b02a5d79148fc Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 19:16:23 +0300 Subject: [PATCH 189/250] [maven-release-plugin] prepare release scribejava-3.4.0 --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 5aae303c7..5de98acda 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.3.1-SNAPSHOT + 3.4.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - HEAD + scribejava-3.4.0 diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index bc6f2dbd3..f23d9794e 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.4.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 8bffdd6fc..667affac6 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.4.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 0ccfc5f8d..bf22b97f0 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.4.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index bd310a533..70ed01963 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.4.0 ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 3d2f016da..0323ddf88 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.3.1-SNAPSHOT + 3.4.0 ../pom.xml From 13d67a7fd0c48b6fd64eb3047b5530f8f7d411e9 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 8 Dec 2016 19:16:29 +0300 Subject: [PATCH 190/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 5de98acda..dc3506a62 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.4.0 + 3.4.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-3.4.0 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index f23d9794e..cb5c6e443 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.0 + 3.4.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 667affac6..470d5a534 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.0 + 3.4.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index bf22b97f0..08551999b 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.0 + 3.4.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 70ed01963..7d7d6d3e3 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.0 + 3.4.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 0323ddf88..86365bfff 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.0 + 3.4.1-SNAPSHOT ../pom.xml From 83930b3e245d1d4d4e79729bc6d6b50f35433329 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 13 Dec 2016 12:23:45 +0300 Subject: [PATCH 191/250] drop deprecated methods --- .../core/builder/ServiceBuilder.java | 12 ---- .../core/model/AbstractRequest.java | 61 ------------------- .../scribejava/core/model/HttpClient.java | 36 ----------- .../scribejava/core/model/OAuthConfig.java | 31 +--------- .../scribejava/core/model/OAuthRequest.java | 13 ---- .../core/model/OAuthRequestAsync.java | 42 ------------- .../scribejava/core/oauth/OAuthService.java | 35 ----------- 7 files changed, 1 insertion(+), 229 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index e34f3316f..dd1cc1989 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -135,18 +135,6 @@ public ServiceBuilder readTimeout(Integer readTimeout) { return this; } - /** - * throws UnsupportedOperationException - * - * @param httpClientConfig httpClientConfig - * @return never - * @deprecated use {@link #httpClientConfig(com.github.scribejava.core.httpclient.HttpClientConfig)} - */ - @Deprecated - public ServiceBuilder httpClientConfig(com.github.scribejava.core.model.HttpClient.Config httpClientConfig) { - throw new UnsupportedOperationException("deprecated, use another method, see javadocs"); - } - public ServiceBuilder httpClientConfig(HttpClientConfig httpClientConfig) { Preconditions.checkNotNull(httpClientConfig, "httpClientConfig can't be null"); this.httpClientConfig = httpClientConfig; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index d31bdc658..3a5499c03 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -7,7 +7,6 @@ import java.util.HashMap; import java.util.Map; import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.oauth.OAuthService; import java.io.File; /** @@ -37,19 +36,6 @@ public abstract class AbstractRequest { private String realm; - /** - * Default constructor. - * - * @param verb Http verb/method - * @param url resource URL - * @param service OAuthService - * @deprecated use {@link #AbstractRequest(com.github.scribejava.core.model.Verb, java.lang.String)} - */ - @Deprecated - public AbstractRequest(Verb verb, String url, OAuthService service) { - this(verb, url); - } - /** * Default constructor. * @@ -145,24 +131,6 @@ protected boolean hasBodyContent() { return verb == Verb.PUT || verb == Verb.POST; } - /** - * @param payload payload - * @deprecated use {@link #setPayload(java.lang.String) } - */ - @Deprecated - public void addPayload(String payload) { - setPayload(payload); - } - - /** - * @param payload payload - * @deprecated use {@link #setPayload(byte[]) } - */ - @Deprecated - public void addPayload(byte[] payload) { - setPayload(payload); - } - /** * Set body payload. This method is used when the HTTP body is not a form-url-encoded string, but another thing. * Like for example XML. Note: The contents are not part of the OAuth signature @@ -251,15 +219,6 @@ public String getSanitizedUrl() { } } - /** - * @return value set in {@link #setPayload(java.lang.String)} - * @deprecated use {@link #getStringPayload()} or {@link #getByteArrayPayload()} - */ - @Deprecated - public String getBodyContents() { - return getStringPayload(); - } - /** * Returns the body of the request (set in {@link #setPayload(java.lang.String)}) * @@ -271,15 +230,6 @@ public String getStringPayload() { return stringPayload; } - /** - * @return value set in {@link #setPayload(byte[])} - * @deprecated use {@link #getByteArrayPayload() } - */ - @Deprecated - public byte[] getByteBodyContents() { - return getByteArrayPayload(); - } - /** * @return the body of the request (set in {@link #setPayload(byte[])} or in * {@link #addBodyParameter(java.lang.String, java.lang.String)} ) @@ -342,15 +292,4 @@ public void setFollowRedirects(boolean followRedirects) { public boolean isFollowRedirects() { return followRedirects; } - - /** - * always throws UnsupportedOperationException - * - * @return never - * @deprecated Request doesn't couple with Service anymore. It doesn't need it. Look for service somewhere else - */ - @Deprecated - public OAuthService getService() { - throw new UnsupportedOperationException(); - } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java deleted file mode 100644 index 7d0d45078..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/HttpClient.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.github.scribejava.core.model; - -import java.io.File; -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.Future; - -/** - * - * @deprecated use {@link com.github.scribejava.core.httpclient.HttpClient} - */ -@Deprecated -public interface HttpClient { - - void close() throws IOException; - - Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - byte[] bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter); - - Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter); - - Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter); - - /** - * - * @deprecated use {@link com.github.scribejava.core.httpclient.HttpClientConfig} - */ - @Deprecated - interface Config { - - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 37be3f2a0..b54c79180 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -28,36 +28,7 @@ public class OAuthConfig { private com.github.scribejava.core.httpclient.HttpClient httpClient; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, (HttpClientConfig) null, null); - } - - /** - * throws UnsupportedOperationException - * - * @param apiKey apiKey - * @param apiSecret apiSecret - * @param callback callback - * @param signatureType signatureType - * @param scope scope - * @param debugStream debugStream - * @param state state - * @param responseType responseType - * @param userAgent userAgent - * @param connectTimeout connectTimeout - * @param readTimeout readTimeout - * @param httpClientConfig httpClientConfig - * @param httpClient httpClient - * @deprecated use - * {@link #OAuthConfig(java.lang.String, java.lang.String, java.lang.String, - * com.github.scribejava.core.model.SignatureType, java.lang.String, java.io.OutputStream, java.lang.String, - * java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer, - * com.github.scribejava.core.httpclient.HttpClientConfig, com.github.scribejava.core.httpclient.HttpClient)} - */ - @Deprecated - public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, - OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, - Integer readTimeout, HttpClient.Config httpClientConfig, HttpClient httpClient) { - throw new UnsupportedOperationException("deprecated, use another method, see javadocs"); + this(key, secret, null, null, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index c0f35408a..d82153b3c 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -15,19 +15,6 @@ public class OAuthRequest extends AbstractRequest { private final OAuthConfig config; - /** - * - * @param verb verb - * @param url url - * @param service service - * @deprecated use {@link #OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String, - * com.github.scribejava.core.model.OAuthConfig)} - */ - @Deprecated - public OAuthRequest(Verb verb, String url, OAuthService service) { - this(verb, url, service.getConfig()); - } - public OAuthRequest(Verb verb, String url, OAuthConfig config) { super(verb, url); this.config = config; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index 930fe5b76..f6bd48003 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -1,55 +1,13 @@ package com.github.scribejava.core.model; -import com.github.scribejava.core.oauth.OAuthService; import java.io.IOException; -import java.util.concurrent.Future; public class OAuthRequestAsync extends AbstractRequest { - /** - * @param verb verb - * @param url url - * @param service service - * @deprecated use {@link #OAuthRequestAsync(com.github.scribejava.core.model.Verb, java.lang.String) } - */ - @Deprecated - public OAuthRequestAsync(Verb verb, String url, OAuthService service) { - this(verb, url); - } - public OAuthRequestAsync(Verb verb, String url) { super(verb, url); } - /** - * always throws UnsupportedOperationException - * - * @param T - * @param callback callback - * @param converter converter - * @return never - * @deprecated user {@link OAuthService#execute(com.github.scribejava.core.model.OAuthRequestAsync, - * com.github.scribejava.core.model.OAuthAsyncRequestCallback, - * com.github.scribejava.core.model.OAuthRequestAsync.ResponseConverter) } - */ - @Deprecated - public Future sendAsync(OAuthAsyncRequestCallback callback, ResponseConverter converter) { - throw new UnsupportedOperationException(); - } - - /** - * always throws UnsupportedOperationException - * - * @param callback callback - * @return never - * @deprecated user {@link OAuthService#execute(com.github.scribejava.core.model.OAuthRequestAsync, - * com.github.scribejava.core.model.OAuthAsyncRequestCallback) } - */ - @Deprecated - public Future sendAsync(OAuthAsyncRequestCallback callback) { - throw new UnsupportedOperationException(); - } - public interface ResponseConverter { T convert(Response response) throws IOException; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 3ea22dade..82d46d549 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -13,11 +13,9 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Token; -import com.github.scribejava.core.model.Verb; import java.io.File; import java.io.IOException; -import java.util.Map; import java.util.ServiceLoader; import java.util.concurrent.Future; @@ -85,39 +83,6 @@ public OAuthConfig getConfig() { public abstract void signRequest(T token, AbstractRequest request); - /** - * - * @param T - * @param headers headers - * @param httpVerb httpVerb - * @param completeUrl completeUrl - * @param bodyContents bodyContents - * @param callback callback - * @param converter converter - * @return Future - * @deprecated use {@link #execute(com.github.scribejava.core.model.OAuthRequestAsync, - * com.github.scribejava.core.model.OAuthAsyncRequestCallback, - * com.github.scribejava.core.model.OAuthRequestAsync.ResponseConverter)}
- * or
{@link #execute(com.github.scribejava.core.model.OAuthRequestAsync, - * com.github.scribejava.core.model.OAuthAsyncRequestCallback)} - */ - @Deprecated - public Future executeAsync(Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { - - final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use async operations, only sync"); - } - if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use async operations, only sync"); - } - - return httpClient.executeAsync(config.getUserAgent(), headers, httpVerb, completeUrl, bodyContents, callback, - converter); - } - public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { From 1f9087c700df1a53f9e4367f2b28ce1ccb6a011f Mon Sep 17 00:00:00 2001 From: Eugeny Zibrov Date: Wed, 14 Dec 2016 17:28:48 +0300 Subject: [PATCH 192/250] Move doktornarabote.ru urls to https --- README.md | 2 +- .../java/com/github/scribejava/apis/DoktornaraboteApi.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 93b7a9c2d..310c3184c 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ ScribeJava support out-of-box several HTTP clients: * AWeber (http://www.aweber.com/) * Box (https://www.box.com/) * Digg (http://digg.com/) -* Доктор на работе (http://www.doktornarabote.ru/) +* Доктор на работе (https://www.doktornarabote.ru/) * Facebook (https://www.facebook.com/) * Flickr (https://www.flickr.com/) * Foursquare (https://foursquare.com/) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java index 8965ea07f..9cb308be3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java @@ -20,12 +20,12 @@ public static DoktornaraboteApi instance() { @Override public String getAccessTokenEndpoint() { - return "http://auth.doktornarabote.ru/OAuth/Token"; + return "https://auth.doktornarabote.ru/OAuth/Token"; } @Override protected String getAuthorizationBaseUrl() { - return "http://auth.doktornarabote.ru/OAuth/Authorize"; + return "https://auth.doktornarabote.ru/OAuth/Authorize"; } @Override From 4722632641132eff869f33d285b20cb5c61f5c8e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 14 Dec 2016 17:35:11 +0300 Subject: [PATCH 193/250] update changelog --- changelog | 4 ++++ pom.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 4b6baf4fd..e79803e97 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +[SNAPSHOT] + * Drop deprecated methods + * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) + [3.4.0] * uncouple OAuthRequest and Service. OAuthRequest shouldn't know anything about OAuthservice. You don't need OAuthService to create OAuthRequest anymore. Async request should be sent via OAuthService method. diff --git a/pom.xml b/pom.xml index dc3506a62..045d8b5d7 100644 --- a/pom.xml +++ b/pom.xml @@ -172,7 +172,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.0.1 + 3.0.2 UTF-8 From 5f960068c681db9ff8302dbf80e0bb002f88518f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 14 Dec 2016 17:54:05 +0300 Subject: [PATCH 194/250] prepare 3.4.1 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 310c3184c..0c78e074d 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 3.4.0 + 3.4.1 ``` @@ -109,7 +109,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 3.4.0 + 3.4.1 ``` diff --git a/changelog b/changelog index e79803e97..d829bbe9a 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[3.4.1] * Drop deprecated methods * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) From 731f72217b4cde9a6f01805596f095ecadebb6a9 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 14 Dec 2016 17:55:10 +0300 Subject: [PATCH 195/250] [maven-release-plugin] prepare release scribejava-3.4.1 --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 045d8b5d7..2cbd98768 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.4.1-SNAPSHOT + 3.4.1 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - HEAD + scribejava-3.4.1 diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index cb5c6e443..c71a40aa0 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1-SNAPSHOT + 3.4.1 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 470d5a534..f1f792f84 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1-SNAPSHOT + 3.4.1 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 08551999b..1e0add6fb 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1-SNAPSHOT + 3.4.1 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 7d7d6d3e3..481938ae0 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1-SNAPSHOT + 3.4.1 ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 86365bfff..a324fa458 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1-SNAPSHOT + 3.4.1 ../pom.xml From 548da8fb7fa61094f312be3e1e38e07df23cde28 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 14 Dec 2016 17:55:17 +0300 Subject: [PATCH 196/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 2cbd98768..8277cd1b6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.4.1 + 3.4.2-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-3.4.1 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index c71a40aa0..1e0291007 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1 + 3.4.2-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index f1f792f84..186c868e0 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1 + 3.4.2-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 1e0add6fb..190e489c4 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1 + 3.4.2-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 481938ae0..a8d55177e 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1 + 3.4.2-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index a324fa458..cc1c52080 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.1 + 3.4.2-SNAPSHOT ../pom.xml From 840dbeba90608274f6069bd399f126a2a3b008a9 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 26 Dec 2016 15:56:00 +0300 Subject: [PATCH 197/250] deprecate ScribeJavaConfig and ForceTypeOfHttpRequest --- .../examples/FacebookAsyncNingExample.java | 3 -- .../examples/Google20AsyncAHCExample.java | 3 -- .../examples/SalesforceNingAsyncExample.java | 3 -- .../VkontakteExternalHttpExample.java | 3 -- .../core/model/ForceTypeOfHttpRequest.java | 5 ++ .../scribejava/core/model/OAuthRequest.java | 9 ---- .../core/model/ScribeJavaConfig.java | 5 ++ .../scribejava/core/oauth/OAuthService.java | 25 ---------- .../model/ForceTypeOfHttpRequestTest.java | 47 ------------------- 9 files changed, 10 insertions(+), 93 deletions(-) delete mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index 23f1dcba1..a6e8b58f5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -7,11 +7,9 @@ import java.util.concurrent.ExecutionException; import com.github.scribejava.apis.FacebookApi; import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; @@ -29,7 +27,6 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index 735b04911..4511aa64b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -5,12 +5,10 @@ import com.github.scribejava.apis.GoogleApi20; import com.github.scribejava.httpclient.ahc.AhcHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; @@ -32,7 +30,6 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); final HttpClientConfig clientConfig = new AhcHttpClientConfig(new DefaultAsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 1cec996d3..4167b535d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -11,10 +11,8 @@ import com.github.scribejava.apis.salesforce.SalesforceToken; import com.github.scribejava.httpclient.ning.NingHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.ning.http.client.AsyncHttpClientConfig; @@ -35,7 +33,6 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String clientId = "your client id"; final String clientSecret = "your client secret"; - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); final NingHttpClientConfig clientConfig = new NingHttpClientConfig(new AsyncHttpClientConfig.Builder() .setMaxConnections(5) .setRequestTimeout(10_000) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java index 065d1af4e..ad16d5428 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -3,11 +3,9 @@ import java.util.Scanner; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.apis.VkontakteApi; -import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import com.github.scribejava.httpclient.ahc.AhcHttpClient; @@ -28,7 +26,6 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); //create any http client externally final DefaultAsyncHttpClientConfig httpClientConfig = new DefaultAsyncHttpClientConfig.Builder() diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java index b0387a535..c1ea3f3ce 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java @@ -1,5 +1,10 @@ package com.github.scribejava.core.model; +/** + * + * @deprecated unused anymore. Have no sense and impaction + */ +@Deprecated public enum ForceTypeOfHttpRequest { NONE, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index d82153b3c..fe0b802df 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -5,7 +5,6 @@ import java.net.URL; import java.util.Map; import com.github.scribejava.core.exceptions.OAuthConnectionException; -import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; import java.io.File; @@ -30,14 +29,6 @@ public OAuthRequest(Verb verb, String url, OAuthConfig config) { * @throws RuntimeException if the connection cannot be created. */ public Response send() { - final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - - if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use sync operations, only async"); - } - if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use sync operations, only async"); - } try { createConnection(); return doSend(); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java index 171bbac1a..3ebb31827 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java @@ -1,5 +1,10 @@ package com.github.scribejava.core.model; +/** + * + * @deprecated unused anymore. Have no sense and impaction + */ +@Deprecated public abstract class ScribeJavaConfig { private static ForceTypeOfHttpRequest forceTypeOfHttpRequests = ForceTypeOfHttpRequest.NONE; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 82d46d549..68275db6d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -1,9 +1,7 @@ package com.github.scribejava.core.oauth; -import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.httpclient.HttpClientProvider; import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.model.ForceTypeOfHttpRequest; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; @@ -11,7 +9,6 @@ import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.ScribeJavaConfig; import com.github.scribejava.core.model.Token; import java.io.File; @@ -32,26 +29,12 @@ public abstract class OAuthService { public OAuthService(OAuthConfig config) { this.config = config; - final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); final HttpClientConfig httpClientConfig = config.getHttpClientConfig(); final HttpClient externalHttpClient = config.getHttpClient(); if (httpClientConfig == null && externalHttpClient == null) { - if (ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use sync operations, only async"); - } - if (ForceTypeOfHttpRequest.PREFER_ASYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use sync operations, only async"); - } httpClient = null; } else { - if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use async operations, only sync"); - } - if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use async operations, only sync"); - } - httpClient = externalHttpClient == null ? getClient(httpClientConfig) : externalHttpClient; } } @@ -86,14 +69,6 @@ public OAuthConfig getConfig() { public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - final ForceTypeOfHttpRequest forceTypeOfHttpRequest = ScribeJavaConfig.getForceTypeOfHttpRequests(); - if (ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - throw new OAuthException("Cannot use async operations, only sync"); - } - if (ForceTypeOfHttpRequest.PREFER_SYNC_ONLY_HTTP_REQUESTS == forceTypeOfHttpRequest) { - config.log("Cannot use async operations, only sync"); - } - final File filePayload = request.getFilePayload(); if (filePayload != null) { return httpClient.executeAsync(config.getUserAgent(), request.getHeaders(), request.getVerb(), diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java deleted file mode 100644 index 1de09ea92..000000000 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ForceTypeOfHttpRequestTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.github.scribejava.core.model; - -import java.util.concurrent.ExecutionException; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.oauth.OAuthService; - -public class ForceTypeOfHttpRequestTest { - - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - private OAuthRequest request; - private OAuthRequestAsync requestAsync; - private OAuthService oAuthService; - - @Before - public void setUp() { - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.NONE); - final OAuthConfig config = new OAuthConfig("test", "test"); - - oAuthService = new OAuth20Service(null, config); - request = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", config); - requestAsync - = new OAuthRequestAsync(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces"); - } - - @Test - public void shouldNotSendSyncWithForceParameter() { - expectedException.expect(OAuthException.class); - expectedException.expectMessage("Cannot use sync operations, only async"); - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); - request.send(); - } - - @Test - public void shouldNotSendAsyncWithForceParameter() throws ExecutionException, InterruptedException { - expectedException.expect(OAuthException.class); - expectedException.expectMessage("Cannot use async operations, only sync"); - ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_SYNC_ONLY_HTTP_REQUESTS); - oAuthService.execute(requestAsync, null).get(); - } -} From 7450a60a2c48a92cf4b03bfa3f266f38d7a7d7b6 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 26 Dec 2016 17:53:16 +0300 Subject: [PATCH 198/250] make Response do not know abouth HttpUrlConnection (or any other HTTP stuff) --- .../scribejava/core/model/OAuthRequest.java | 28 +++++++- .../scribejava/core/model/Response.java | 56 ++++++++++++++-- .../OAuth1AccessTokenExtractorTest.java | 3 +- .../OAuth2AccessTokenExtractorTest.java | 3 +- .../OAuth2AccessTokenJsonExtractorTest.java | 6 +- .../scribejava/core/model/ConnectionStub.java | 15 +---- .../scribejava/core/model/ResponseTest.java | 67 ------------------- .../ahc/OAuthAsyncCompletionHandler.java | 2 +- .../ning/OAuthAsyncCompletionHandler.java | 2 +- .../okhttp/OAuthAsyncCompletionHandler.java | 7 +- 10 files changed, 87 insertions(+), 102 deletions(-) delete mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index fe0b802df..9cc901bd5 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -5,8 +5,12 @@ import java.net.URL; import java.util.Map; import com.github.scribejava.core.exceptions.OAuthConnectionException; +import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; import java.io.File; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.List; public class OAuthRequest extends AbstractRequest { @@ -57,7 +61,29 @@ Response doSend() throws IOException { addBody(getByteArrayPayload()); } } - return new Response(connection); + + try { + connection.connect(); + final int responseCode = connection.getResponseCode(); + return new Response(responseCode, connection.getResponseMessage(), parseHeaders(connection), + responseCode >= 200 && responseCode < 400 ? connection.getInputStream() + : connection.getErrorStream()); + } catch (UnknownHostException e) { + throw new OAuthException("The IP address of a host could not be determined.", e); + } + } + + private static Map parseHeaders(HttpURLConnection conn) { + final Map headers = new HashMap<>(); + for (Map.Entry> entry : conn.getHeaderFields().entrySet()) { + final String key = entry.getKey(); + if ("Content-Encoding".equalsIgnoreCase(key)) { + headers.put("Content-Encoding", entry.getValue().get(0)); + } else { + headers.put(key, entry.getValue().get(0)); + } + } + return headers; } private void createConnection() throws IOException { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java index e57f39c44..3b50923a7 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java @@ -13,20 +13,54 @@ public class Response { - private int code; - private String message; + private final int code; + private final String message; + private final Map headers; private String body; private InputStream stream; - private Map headers; + /** + * + * @param code code + * @param message message + * @param headers headers + * @param body body + * @param stream stream + * @deprecated use either {@link #Response(int, java.lang.String, java.util.Map, java.io.InputStream) } + * or {@link #Response(int, java.lang.String, java.util.Map, java.lang.String) } + */ + @Deprecated public Response(int code, String message, Map headers, String body, InputStream stream) { this.code = code; + this.message = message; this.headers = headers; this.body = body; + this.stream = stream; + } + + private Response(int code, String message, Map headers) { + this.code = code; this.message = message; + this.headers = headers; + } + + public Response(int code, String message, Map headers, InputStream stream) { + this(code, message, headers); this.stream = stream; } + public Response(int code, String message, Map headers, String body) { + this(code, message, headers); + this.body = body; + } + + /** + * + * @param connection connection + * @throws IOException + * @deprecated use {@link #Response(int, java.lang.String, java.util.Map, java.lang.String, java.io.InputStream) } + */ + @Deprecated Response(HttpURLConnection connection) throws IOException { try { connection.connect(); @@ -40,14 +74,24 @@ public Response(int code, String message, Map headers, String bo } private String parseBodyContents() throws IOException { + if (stream == null) { + return null; + } if ("gzip".equals(getHeader("Content-Encoding"))) { - body = StreamUtils.getGzipStreamContents(getStream()); + body = StreamUtils.getGzipStreamContents(stream); } else { - body = StreamUtils.getStreamContents(getStream()); + body = StreamUtils.getStreamContents(stream); } return body; } + /** + * + * @param conn conn + * @return + * @deprecated use {@link OAuthRequest#parseHeaders(java.net.HttpURLConnection) } + */ + @Deprecated private Map parseHeaders(HttpURLConnection conn) { final Map headers = new HashMap<>(); for (Entry> entry : conn.getHeaderFields().entrySet()) { @@ -62,7 +106,7 @@ private Map parseHeaders(HttpURLConnection conn) { } public final boolean isSuccessful() { - return getCode() >= 200 && getCode() < 400; + return code >= 200 && code < 400; } public String getBody() throws IOException { diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java index b810d25b3..36ac4cd2e 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth1AccessTokenExtractorTest.java @@ -77,7 +77,6 @@ public void shouldThrowExceptionIfResponseIsEmptyString() throws IOException { } private static Response ok(String body) { - return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), - body, /* stream */ null); + return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), body); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java index eb88b583f..7f2cd4ddd 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractorTest.java @@ -76,7 +76,6 @@ public void shouldThrowExceptionIfResponseIsEmptyString() throws IOException { } private static Response ok(String body) { - return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), - body, /* stream */ null); + return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), body); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java index 026885dcf..42f07e25f 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractorTest.java @@ -48,12 +48,10 @@ public void shouldThrowExceptionIfResponseIsError() throws IOException { } private static Response ok(String body) { - return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), - body, /* stream */ null); + return new Response(200, /* message */ null, /* headers */ Collections.emptyMap(), body); } private static Response error(String body) { - return new Response(400, /* message */ null, /* headers */ Collections.emptyMap(), - body, /* stream */ null); + return new Response(400, /* message */ null, /* headers */ Collections.emptyMap(), body); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java index b7465527d..0e9839d47 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java @@ -8,7 +8,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; -import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,8 +16,6 @@ public class ConnectionStub extends HttpURLConnection { private final Map headers = new HashMap<>(); - private final Map> responseHeaders = new HashMap<>(); - private int inputStreamCalled; public ConnectionStub() throws MalformedURLException { super(new URL("http://example.com")); @@ -44,14 +42,9 @@ public int getResponseCode() throws IOException { @Override public InputStream getInputStream() throws IOException { - inputStreamCalled++; return new ByteArrayInputStream("contents".getBytes()); } - public int getTimesCalledInpuStream() { - return inputStreamCalled; - } - @Override public OutputStream getOutputStream() throws IOException { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -61,11 +54,7 @@ public OutputStream getOutputStream() throws IOException { @Override public Map> getHeaderFields() { - return responseHeaders; - } - - public void addResponseHeader(String key, String value) { - responseHeaders.put(key, Arrays.asList(value)); + return Collections.emptyMap(); } @Override diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java deleted file mode 100644 index 1f7b0a4fe..000000000 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ResponseTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.github.scribejava.core.model; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Test; - -public class ResponseTest { - - private Response response; - private ConnectionStub connection; - - @Before - public void setUp() throws IOException { - connection = new ConnectionStub(); - connection.addResponseHeader("one", "one"); - connection.addResponseHeader("two", "two"); - response = new Response(connection); - } - - @Test - public void shouldPopulateResponseHeaders() { - assertEquals(2, response.getHeaders().size()); - assertEquals("one", response.getHeader("one")); - } - - @Test - public void shouldParseBodyContents() throws IOException { - assertEquals("contents", response.getBody()); - assertEquals(1, connection.getTimesCalledInpuStream()); - } - - @Test - public void shouldParseBodyContentsOnlyOnce() throws IOException { - assertEquals("contents", response.getBody()); - assertEquals("contents", response.getBody()); - assertEquals("contents", response.getBody()); - assertEquals(1, connection.getTimesCalledInpuStream()); - } - - @Test - public void shouldHandleAConnectionWithErrors() throws IOException { - final Response errResponse = new Response(new FaultyConnection()); - assertEquals(400, errResponse.getCode()); - assertEquals("errors", errResponse.getBody()); - } - - private static class FaultyConnection extends ConnectionStub { - - private FaultyConnection() throws MalformedURLException { - super(); - } - - @Override - public InputStream getErrorStream() { - return new ByteArrayInputStream("errors".getBytes()); - } - - @Override - public int getResponseCode() throws IOException { - return 400; - } - } -} diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java index b19e3c3a7..003821b2f 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java @@ -28,7 +28,7 @@ public T onCompleted(org.asynchttpclient.Response ahcResponse) throws IOExceptio headersMap.put(header.getKey(), header.getValue()); } final Response response = new Response(ahcResponse.getStatusCode(), ahcResponse.getStatusText(), headersMap, - ahcResponse.getResponseBody(), ahcResponse.getResponseBodyAsStream()); + ahcResponse.getResponseBodyAsStream()); @SuppressWarnings("unchecked") final T t = converter == null ? (T) response : converter.convert(response); diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java index 2f176e6b0..1448b60c3 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java @@ -33,7 +33,7 @@ public T onCompleted(com.ning.http.client.Response ningResponse) throws IOExcept headersMap.put(header.getKey(), value.toString()); } final Response response = new Response(ningResponse.getStatusCode(), ningResponse.getStatusText(), headersMap, - ningResponse.getResponseBody(), ningResponse.getResponseBodyAsStream()); + ningResponse.getResponseBodyAsStream()); @SuppressWarnings("unchecked") final T t = converter == null ? (T) response : converter.convert(response); diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java index 189781669..28dda16a2 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -45,11 +45,8 @@ public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOExce headersMap.put(name, headers.get(name)); } - final Response response = new Response(okHttpResponse.code(), - okHttpResponse.message(), - headersMap, - null, // cannot return both body String and InputStream - okHttpResponse.body().byteStream()); + final Response response = new Response(okHttpResponse.code(), okHttpResponse.message(), headersMap, + okHttpResponse.body().byteStream()); @SuppressWarnings("unchecked") final T t = converter == null ? (T) response : converter.convert(response); From a1cb90a9688c6d36ef81ec9c4ea53b9e7db90dff Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 26 Dec 2016 18:18:59 +0300 Subject: [PATCH 199/250] prepare to move HTTP communications logic from OAuthRequest to separate package --- .../scribejava/core/model/OAuthRequest.java | 46 ++++-------- .../scribejava/core/model/ConnectionStub.java | 73 ------------------- .../scribejava/core/model/RequestTest.java | 59 +-------------- 3 files changed, 18 insertions(+), 160 deletions(-) delete mode 100644 scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index 9cc901bd5..a7ee73b7b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -2,20 +2,18 @@ import java.io.IOException; import java.net.HttpURLConnection; -import java.net.URL; import java.util.Map; import com.github.scribejava.core.exceptions.OAuthConnectionException; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.oauth.OAuthService; import java.io.File; +import java.net.URL; import java.net.UnknownHostException; import java.util.HashMap; import java.util.List; public class OAuthRequest extends AbstractRequest { - private HttpURLConnection connection; - private final OAuthConfig config; public OAuthRequest(Verb verb, String url, OAuthConfig config) { @@ -34,31 +32,32 @@ public OAuthRequest(Verb verb, String url, OAuthConfig config) { */ public Response send() { try { - createConnection(); - return doSend(); + return doSend(config, isFollowRedirects(), getHeaders(), getVerb(), getCompleteUrl(), this); } catch (IOException | RuntimeException e) { throw new OAuthConnectionException(getCompleteUrl(), e); } } - Response doSend() throws IOException { - final Verb verb = getVerb(); - connection.setRequestMethod(verb.name()); + private static Response doSend(OAuthConfig config, boolean followRedirects, Map headers, + Verb httpVerb, String completeUrl, OAuthRequest request) throws IOException { + final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection(); + connection.setInstanceFollowRedirects(followRedirects); + connection.setRequestMethod(httpVerb.name()); if (config.getConnectTimeout() != null) { connection.setConnectTimeout(config.getConnectTimeout()); } if (config.getReadTimeout() != null) { connection.setReadTimeout(config.getReadTimeout()); } - addHeaders(); - if (hasBodyContent()) { - final File filePayload = getFilePayload(); + addHeaders(connection, headers, config.getUserAgent()); + if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + final File filePayload = request.getFilePayload(); if (filePayload != null) { throw new UnsupportedOperationException("Sync Requests do not support File payload for the moment"); - } else if (getStringPayload() != null) { - addBody(getStringPayload().getBytes(getCharset())); + } else if (request.getStringPayload() != null) { + addBody(connection, request.getStringPayload().getBytes(request.getCharset())); } else { - addBody(getByteArrayPayload()); + addBody(connection, request.getByteArrayPayload()); } } @@ -86,25 +85,16 @@ private static Map parseHeaders(HttpURLConnection conn) { return headers; } - private void createConnection() throws IOException { - final String completeUrl = getCompleteUrl(); - if (connection == null) { - connection = (HttpURLConnection) new URL(completeUrl).openConnection(); - connection.setInstanceFollowRedirects(isFollowRedirects()); - } - } - - void addHeaders() { - for (Map.Entry entry : getHeaders().entrySet()) { + private static void addHeaders(HttpURLConnection connection, Map headers, String userAgent) { + for (Map.Entry entry : headers.entrySet()) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } - final String userAgent = config.getUserAgent(); if (userAgent != null) { connection.setRequestProperty(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); } } - void addBody(byte[] content) throws IOException { + private static void addBody(HttpURLConnection connection, byte[] content) throws IOException { connection.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length)); if (connection.getRequestProperty(CONTENT_TYPE) == null) { @@ -113,8 +103,4 @@ void addBody(byte[] content) throws IOException { connection.setDoOutput(true); connection.getOutputStream().write(content); } - - void setConnection(HttpURLConnection connection) { - this.connection = connection; - } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java deleted file mode 100644 index 0e9839d47..000000000 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/ConnectionStub.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.scribejava.core.model; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ConnectionStub extends HttpURLConnection { - - private final Map headers = new HashMap<>(); - - public ConnectionStub() throws MalformedURLException { - super(new URL("http://example.com")); - } - - @Override - public void setRequestProperty(String key, String value) { - headers.put(key, value); - } - - @Override - public String getRequestProperty(String s) { - return headers.get(s); - } - - public Map getHeaders() { - return headers; - } - - @Override - public int getResponseCode() throws IOException { - return 200; - } - - @Override - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream("contents".getBytes()); - } - - @Override - public OutputStream getOutputStream() throws IOException { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - baos.write("contents".getBytes()); - return baos; - } - - @Override - public Map> getHeaderFields() { - return Collections.emptyMap(); - } - - @Override - public void connect() { - } - - @Override - public void disconnect() { - } - - @Override - public boolean usingProxy() { - return false; - } - -} diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java index bd6cff86f..bdce597ef 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java @@ -1,7 +1,6 @@ package com.github.scribejava.core.model; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; @@ -11,26 +10,18 @@ public class RequestTest { private OAuthRequest getRequest; private OAuthRequest postRequest; - private ConnectionStub connection; private OAuthConfig config; @Before public void setUp() throws MalformedURLException { - connection = new ConnectionStub(); config = new OAuthConfig("test", "test"); + postRequest = new OAuthRequest(Verb.POST, "http://example.com", config); postRequest.addBodyParameter("param", "value"); postRequest.addBodyParameter("param with spaces", "value with spaces"); - postRequest.setConnection(connection); + getRequest = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", config); - getRequest.setConnection(connection); - } - - @Test - public void shouldSetRequestVerb() { - getRequest.send(); - assertEquals("GET", connection.getRequestMethod()); } @Test @@ -40,29 +31,16 @@ public void shouldGetQueryStringParameters() { assertTrue(getRequest.getQueryStringParams().contains(new Parameter("qsparam", "value"))); } - @Test - public void shouldAddRequestHeaders() { - getRequest.addHeader("Header", "1"); - getRequest.addHeader("Header2", "2"); - getRequest.send(); - assertEquals(2, getRequest.getHeaders().size()); - assertEquals(2, connection.getHeaders().size()); - } - @Test public void shouldSetBodyParamsAndAddContentLength() { assertEquals("param=value¶m%20with%20spaces=value%20with%20spaces", new String(postRequest.getByteArrayPayload())); - postRequest.send(); - assertTrue(connection.getHeaders().containsKey("Content-Length")); } @Test public void shouldSetPayloadAndHeaders() { postRequest.setPayload("PAYLOAD"); - postRequest.send(); assertEquals("PAYLOAD", postRequest.getStringPayload()); - assertTrue(connection.getHeaders().containsKey("Content-Length")); } @Test @@ -85,37 +63,4 @@ public void shouldReturnTheCompleteUrl() { public void shouldHandleQueryStringSpaceEncodingProperly() { assertTrue(getRequest.getQueryStringParams().contains(new Parameter("other param", "value with spaces"))); } - - @Test - public void shouldAutomaticallyAddContentTypeForPostRequestsWithBytePayload() { - postRequest.setPayload("PAYLOAD".getBytes()); - postRequest.send(); - assertEquals(OAuthRequest.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); - } - - @Test - public void shouldAutomaticallyAddContentTypeForPostRequestsWithStringPayload() { - postRequest.setPayload("PAYLOAD"); - postRequest.send(); - assertEquals(OAuthRequest.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); - } - - @Test - public void shouldAutomaticallyAddContentTypeForPostRequestsWithBodyParameters() { - postRequest.send(); - assertEquals(OAuthRequest.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); - } - - @Test - public void shouldBeAbleToOverrideItsContentType() { - postRequest.addHeader("Content-Type", "my-content-type"); - postRequest.send(); - assertEquals("my-content-type", connection.getHeaders().get("Content-Type")); - } - - @Test - public void shouldNotAddContentTypeForGetRequests() { - getRequest.send(); - assertFalse(connection.getHeaders().containsKey("Content-Type")); - } } From c09bfced136222cd04ef618fbec2d7819ae509bc Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 26 Dec 2016 19:15:36 +0300 Subject: [PATCH 200/250] add possibility to execute requests in sync manner for OkHttp, AHC and Ning (and any other) --- .../AbstractAsyncOnlyHttpClient.java | 33 ++++++++++++ .../core/httpclient/HttpClient.java | 10 ++++ .../scribejava/core/oauth/OAuthService.java | 19 ++++++- .../httpclient/ahc/AhcHttpClient.java | 4 +- .../httpclient/ning/NingHttpClient.java | 4 +- .../okhttp/OAuthAsyncCompletionHandler.java | 12 +---- .../httpclient/okhttp/OkHttpHttpClient.java | 54 +++++++++++++++++-- 7 files changed, 115 insertions(+), 21 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java new file mode 100644 index 000000000..7b59a81f5 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java @@ -0,0 +1,33 @@ +package com.github.scribejava.core.httpclient; + +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +public abstract class AbstractAsyncOnlyHttpClient implements HttpClient { + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents) throws InterruptedException, ExecutionException, IOException { + return executeAsync(userAgent, headers, httpVerb, completeUrl, bodyContents, null, + (OAuthRequestAsync.ResponseConverter) null).get(); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents) throws InterruptedException, ExecutionException, IOException { + return executeAsync(userAgent, headers, httpVerb, completeUrl, bodyContents, null, + (OAuthRequestAsync.ResponseConverter) null).get(); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents) throws InterruptedException, ExecutionException, IOException { + return executeAsync(userAgent, headers, httpVerb, completeUrl, bodyContents, null, + (OAuthRequestAsync.ResponseConverter) null).get(); + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java index fba0ef215..9377226f9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java @@ -2,10 +2,12 @@ import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import java.io.File; import java.io.IOException; import java.util.Map; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; public interface HttpClient { @@ -23,4 +25,12 @@ Future executeAsync(String userAgent, Map headers, Verb h Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter); + Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents) throws InterruptedException, ExecutionException, IOException; + + Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents) throws InterruptedException, ExecutionException, IOException; + + Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents) throws InterruptedException, ExecutionException, IOException; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 68275db6d..3eb6b4890 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.util.ServiceLoader; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; /** @@ -66,8 +67,8 @@ public OAuthConfig getConfig() { public abstract void signRequest(T token, AbstractRequest request); - public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { final File filePayload = request.getFilePayload(); if (filePayload != null) { @@ -86,6 +87,20 @@ public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCall return execute(request, callback, null); } + public Response execute(OAuthRequestAsync request) throws InterruptedException, ExecutionException, IOException { + final File filePayload = request.getFilePayload(); + if (filePayload != null) { + return httpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), filePayload); + } else if (request.getStringPayload() != null) { + return httpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getStringPayload()); + } else { + return httpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getByteArrayPayload()); + } + } + /** * the same as {@link OAuthRequest#send()} * diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index 74d3ac730..e8742e2fc 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.ahc; +import com.github.scribejava.core.httpclient.AbstractAsyncOnlyHttpClient; import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -18,7 +18,7 @@ import org.asynchttpclient.AsyncHttpClientConfig; import org.asynchttpclient.BoundRequestBuilder; -public class AhcHttpClient implements HttpClient { +public class AhcHttpClient extends AbstractAsyncOnlyHttpClient { private final AsyncHttpClient client; diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index b2fced5e5..c2b27e3eb 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.ning; +import com.github.scribejava.core.httpclient.AbstractAsyncOnlyHttpClient; import com.github.scribejava.core.model.AbstractRequest; -import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -15,7 +15,7 @@ import com.ning.http.client.AsyncHttpClientConfig; import java.io.File; -public class NingHttpClient implements HttpClient { +public class NingHttpClient extends AbstractAsyncOnlyHttpClient { private final AsyncHttpClient client; diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java index 28dda16a2..8481b163f 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -5,11 +5,8 @@ import com.github.scribejava.core.model.Response; import okhttp3.Call; import okhttp3.Callback; -import okhttp3.Headers; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; class OAuthAsyncCompletionHandler implements Callback { @@ -38,15 +35,8 @@ public void onFailure(Call call, IOException e) { @Override public void onResponse(Call call, okhttp3.Response okHttpResponse) throws IOException { try { - final Headers headers = okHttpResponse.headers(); - final Map headersMap = new HashMap<>(); - for (String name : headers.names()) { - headersMap.put(name, headers.get(name)); - } - - final Response response = new Response(okHttpResponse.code(), okHttpResponse.message(), headersMap, - okHttpResponse.body().byteStream()); + final Response response = OkHttpHttpClient.convertResponse(okHttpResponse); @SuppressWarnings("unchecked") final T t = converter == null ? (T) response : converter.convert(response); diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index e41011991..ff8f0c80f 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -18,8 +18,12 @@ import java.util.concurrent.Future; import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; +import com.github.scribejava.core.model.Response; import java.io.File; +import java.util.HashMap; +import java.util.concurrent.ExecutionException; import okhttp3.Cache; +import okhttp3.Headers; public class OkHttpHttpClient implements HttpClient { @@ -73,6 +77,38 @@ public Future executeAsync(String userAgent, Map headers, private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, BodyType bodyType, Object bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { + final Call call = createCall(userAgent, headers, httpVerb, completeUrl, bodyType, bodyContents); + final OkHttpFuture okHttpFuture = new OkHttpFuture<>(call); + call.enqueue(new OAuthAsyncCompletionHandler<>(callback, converter, okHttpFuture)); + return okHttpFuture; + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents) throws InterruptedException, ExecutionException, IOException { + return doExecute(userAgent, headers, httpVerb, completeUrl, BodyType.BYTE_ARRAY, bodyContents); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents) throws InterruptedException, ExecutionException, IOException { + return doExecute(userAgent, headers, httpVerb, completeUrl, BodyType.STRING, bodyContents); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents) throws InterruptedException, ExecutionException, IOException { + return doExecute(userAgent, headers, httpVerb, completeUrl, BodyType.FILE, bodyContents); + } + + private Response doExecute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + BodyType bodyType, Object bodyContents) throws IOException { + final Call call = createCall(userAgent, headers, httpVerb, completeUrl, bodyType, bodyContents); + return convertResponse(call.execute()); + } + + private Call createCall(String userAgent, Map headers, Verb httpVerb, String completeUrl, + BodyType bodyType, Object bodyContents) { final Request.Builder requestBuilder = new Request.Builder(); requestBuilder.url(completeUrl); @@ -101,10 +137,7 @@ private Future doExecuteAsync(String userAgent, Map heade } // create a new call - final Call call = client.newCall(requestBuilder.build()); - final OkHttpFuture okHttpFuture = new OkHttpFuture<>(call); - call.enqueue(new OAuthAsyncCompletionHandler<>(callback, converter, okHttpFuture)); - return okHttpFuture; + return client.newCall(requestBuilder.build()); } private enum BodyType { @@ -129,4 +162,17 @@ RequestBody createBody(MediaType mediaType, Object bodyContents) { abstract RequestBody createBody(MediaType mediaType, Object bodyContents); } + + static Response convertResponse(okhttp3.Response okHttpResponse) { + final Headers headers = okHttpResponse.headers(); + final Map headersMap = new HashMap<>(); + + for (String name : headers.names()) { + headersMap.put(name, headers.get(name)); + } + + return new Response(okHttpResponse.code(), okHttpResponse.message(), headersMap, + okHttpResponse.body().byteStream()); + + } } From dae4fe61713eb75f21332c087a36de56d9727cab Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 9 Jan 2017 18:49:49 +0300 Subject: [PATCH 201/250] unify requests sending (async and sync variants). Allways use service::execute --- .../apis/examples/AWeberExample.java | 4 ++-- .../apis/examples/Box20Example.java | 4 ++-- .../scribejava/apis/examples/DiggExample.java | 4 ++-- .../apis/examples/FacebookExample.java | 4 ++-- .../apis/examples/FlickrExample.java | 4 ++-- .../apis/examples/Foursquare2Example.java | 5 ++-- .../apis/examples/FoursquareExample.java | 4 ++-- .../apis/examples/FreelancerExample.java | 4 ++-- .../apis/examples/GeniusExample.java | 4 ++-- .../apis/examples/GitHubExample.java | 4 ++-- .../apis/examples/Google20Example.java | 4 ++-- .../scribejava/apis/examples/HHExample.java | 4 ++-- .../apis/examples/ImgurExample.java | 4 ++-- .../apis/examples/Kaixin20Example.java | 4 ++-- .../apis/examples/LinkedIn20Example.java | 5 ++-- .../apis/examples/LinkedInExample.java | 4 ++-- .../examples/LinkedInExampleWithScopes.java | 4 ++-- .../scribejava/apis/examples/LiveExample.java | 5 ++-- .../apis/examples/MailruExample.java | 4 ++-- .../apis/examples/MeetupExample.java | 4 ++-- .../apis/examples/MisfitExample.java | 4 ++-- .../apis/examples/NaverExample.java | 4 ++-- .../apis/examples/NeteaseWeiboExample.java | 4 ++-- .../apis/examples/OdnoklassnikiExample.java | 5 ++-- .../apis/examples/PinterestExample.java | 5 ++-- .../apis/examples/Px500Example.java | 4 ++-- .../apis/examples/RenrenExample.java | 4 ++-- .../apis/examples/SalesforceExample.java | 4 ++-- .../apis/examples/SinaWeibo2Example.java | 4 ++-- .../apis/examples/SinaWeiboExample.java | 4 ++-- .../apis/examples/SkyrockExample.java | 4 ++-- .../apis/examples/SohuWeiboExample.java | 4 ++-- .../apis/examples/StackExchangeExample.java | 4 ++-- .../TheThingsNetworkV1StagingExample.java | 4 ++-- .../TheThingsNetworkV2PreviewExample.java | 4 ++-- .../apis/examples/TrelloExample.java | 4 ++-- .../apis/examples/TumblrExample.java | 4 ++-- .../apis/examples/TutByExample.java | 4 ++-- .../apis/examples/TwitterExample.java | 4 ++-- .../apis/examples/ViadeoExample.java | 4 ++-- .../apis/examples/VkontakteExample.java | 4 ++-- .../scribejava/apis/examples/XingExample.java | 4 ++-- .../apis/examples/YahooExample.java | 4 ++-- .../service/OdnoklassnikiServiceTest.java | 2 +- .../scribejava/core/model/OAuthRequest.java | 23 +++++++++---------- .../core/oauth/OAuth10aService.java | 11 ++++----- .../scribejava/core/oauth/OAuth20Service.java | 8 +++---- .../scribejava/core/oauth/OAuthService.java | 8 +------ .../github/scribejava/core/ObjectMother.java | 18 +++++---------- .../extractors/BaseStringExtractorTest.java | 3 +-- .../core/extractors/HeaderExtractorTest.java | 4 +--- .../core/model/OAuthRequestTest.java | 2 +- .../scribejava/core/model/RequestTest.java | 12 ++++------ 53 files changed, 121 insertions(+), 147 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index 60bce4f71..324fcc013 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -56,9 +56,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, ACCOUNT_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, ACCOUNT_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index af58ab9cc..c41e5f45e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -76,9 +76,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index 238d6c1dc..61f6c1e75 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -59,10 +59,10 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL); request.addBodyParameter("comment_id", "20100729223726:4fef610331ee46a3b5cbd740bf71313e"); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 32ce7d103..1aaa26ba5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -69,9 +69,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index 47c0f8a4e..c5055412b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -55,10 +55,10 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); request.addQuerystringParameter("method", "flickr.test.login"); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index 042e8671c..1d371a51b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -53,10 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken(), - service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken()); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index b347ce154..acfa08ce6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -51,9 +51,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index 35cbed3e8..e1542dd0f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -59,10 +59,10 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); request.addHeader("GData-Version", "3.0"); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java index 842b09ec6..f91fb5dc4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -75,9 +75,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Accessing a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Viewing contents..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index 444b86856..bfd482f04 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -68,9 +68,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 2c1c4a4fc..1fc8a6869 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -98,9 +98,9 @@ public static void main(String... args) throws IOException { requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; } - final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index ab09915ee..2a1d6d3f9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -54,9 +54,9 @@ public static void main(String... args) throws IOException { System.out.println(); System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index 62b6b5194..2eaa8db72 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -53,9 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 8171127db..35591086e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -53,9 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index 448a04d11..1dc096586 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -64,12 +64,11 @@ public static void main(String... args) throws IOException { break; } - final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, query), - service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, query)); request.addHeader("x-li-format", "json"); request.addHeader("Accept-Language", "ru-RU"); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 6bc3cf513..9c6a085ae 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -52,9 +52,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 7dbf7bc19..4bc2a3529 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -56,9 +56,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index 5a09bc133..832382472 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -54,10 +54,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken(), - service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken()); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 91b0eee7a..9c633b9f4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -54,9 +54,9 @@ public static void main(String... args) throws IOException { System.out.println(); System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index e78ef808f..c488a1149 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -51,9 +51,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index e2c98b7a5..39037fde0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -56,9 +56,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java index 1a3eff1bb..962db655b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java @@ -70,9 +70,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index 17217db97..27f2a6610 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -59,9 +59,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index c7b096715..a1c8e5bdb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -65,10 +65,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, publicKey), - service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, String.format(PROTECTED_RESOURCE_URL, publicKey)); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index 47f9c75dc..bb07b59cc 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -54,10 +54,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken(), - service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + accessToken.getAccessToken()); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index 76c3b29d9..c84acbaeb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -51,9 +51,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 2be75bef1..854eeb295 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -63,7 +63,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL); final Map parameters = new HashMap<>(); parameters.put("method", "users.getInfo"); parameters.put("format", "json"); @@ -84,7 +84,7 @@ public static void main(String... args) throws IOException { System.out.println("Sig string: " + b.toString()); request.addQuerystringParameter("sig", md5(b.toString())); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 9f6b22aaf..d69181338 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -84,9 +84,9 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep System.out.println(); System.out.println("Full URL: " + url); - final OAuthRequest request = new OAuthRequest(Verb.GET, url, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, url); request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 414c2e18c..44b1ef2cf 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -53,9 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index 140aa99ee..d09ff08e2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -59,9 +59,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index 5ab1dd56a..d22a373e5 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -51,9 +51,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index cd9f62453..524268436 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -59,9 +59,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index 6fe816df3..81e5bcf5a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -74,9 +74,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, - PROTECTED_RESOURCE_URL + "?site=" + site + "&key=" + key, service.getConfig()); + PROTECTED_RESOURCE_URL + "?site=" + site + "&key=" + key); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index b0bc642f1..22fa12a73 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -75,7 +75,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); // TTN should support both signing the request with a parameter, or with a header. // 1. Token as a parameter @@ -84,7 +84,7 @@ public static void main(String... args) throws IOException { //request.addHeader("Authorization", "bearer "+accessToken.getAccessToken()); // And we always expect JSON data. request.addHeader("Accept", "application/json"); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index 2b6ce70e9..1f6bb61bb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -72,7 +72,7 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); // TTN should support both signing the request with a parameter, or with a header. // 1. Token as a parameter @@ -81,7 +81,7 @@ public static void main(String... args) throws IOException { //request.addHeader("Authorization", "bearer "+accessToken.getAccessToken()); // And we always expect JSON data. request.addHeader("Accept", "application/json"); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index 21350ea9f..b2371312f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -53,9 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index e94e1f31b..efcc38cee 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -53,9 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 82e57a344..012c2b88f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -54,9 +54,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index 41a7ea5d6..b000f0c3f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -51,9 +51,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index a89fef634..a9e16905e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -53,9 +53,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index 5ca4ae8de..57bea7831 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -54,9 +54,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 93d57b963..4e6037b88 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -51,9 +51,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index 7127d28cd..3f4d52563 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -52,9 +52,9 @@ public static void main(String... args) throws IOException { // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = request.send(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java index 4e4e833cf..af14b9744 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java @@ -27,7 +27,7 @@ public class OdnoklassnikiServiceTest { @Test public void testSigGeneration() { final OAuth2AccessToken accessToken = new OAuth2AccessToken("d3iwa.403gvrs194740652m1k4w2a503k3c"); - final OAuthRequest request = new OAuthRequest(Verb.GET, URL, service.getConfig()); + final OAuthRequest request = new OAuthRequest(Verb.GET, URL); service.signRequest(accessToken, request); assertEquals("96127f5ca29a8351399e94bbd284ab16", findParam(request.getQueryStringParams(), "sig")); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index a7ee73b7b..b4feb382f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -5,7 +5,6 @@ import java.util.Map; import com.github.scribejava.core.exceptions.OAuthConnectionException; import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.oauth.OAuthService; import java.io.File; import java.net.URL; import java.net.UnknownHostException; @@ -14,23 +13,23 @@ public class OAuthRequest extends AbstractRequest { - private final OAuthConfig config; - - public OAuthRequest(Verb verb, String url, OAuthConfig config) { + public OAuthRequest(Verb verb, String url) { super(verb, url); - this.config = config; } /** - * Execute the request and return a {@link Response} - * - * the same as {@link OAuthService#execute(com.github.scribejava.core.model.OAuthRequest)} - * - * @return Http Response * - * @throws RuntimeException if the connection cannot be created. + * @param verb verb + * @param url url + * @param config unused + * @deprecated use {@link #OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String) } */ - public Response send() { + @Deprecated + public OAuthRequest(Verb verb, String url, OAuthConfig config) { + this(verb, url); + } + + public Response send(OAuthConfig config) { try { return doSend(config, isFollowRedirects(), getHeaders(), getVerb(), getCompleteUrl(), this); } catch (IOException | RuntimeException e) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index cf988c846..7c86ff342 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -38,12 +38,12 @@ public OAuth10aService(DefaultApi10a api, OAuthConfig config) { public final OAuth1RequestToken getRequestToken() throws IOException { final OAuthConfig config = getConfig(); config.log("obtaining request token from " + api.getRequestTokenEndpoint()); - final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint(), config); + final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); prepareRequestTokenRequest(request); config.log("sending request..."); - final Response response = request.send(); + final Response response = execute(request); final String body = response.getBody(); config.log("response status code: " + response.getCode()); @@ -92,11 +92,10 @@ private void addOAuthParams(AbstractRequest request, String tokenSecret) { public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, String oauthVerifier) throws IOException { - final OAuthConfig config = getConfig(); - config.log("obtaining access token from " + api.getAccessTokenEndpoint()); - final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), config); + getConfig().log("obtaining access token from " + api.getAccessTokenEndpoint()); + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); prepareAccessTokenRequest(request, requestToken, oauthVerifier); - final Response response = request.send(); + final Response response = execute(request); return api.getAccessTokenExtractor().extract(response); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 656f0816d..7c9d11ddf 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -34,7 +34,7 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { //sync version, protected to facilitate mocking protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) throws IOException { - return api.getAccessTokenExtractor().extract(request.send()); + return api.getAccessTokenExtractor().extract(execute(request)); } //async version, protected to facilitate mocking @@ -51,7 +51,7 @@ public OAuth2AccessToken convert(Response response) throws IOException { public final OAuth2AccessToken getAccessToken(String code) throws IOException { final OAuthRequest request = createAccessTokenRequest(code, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), getConfig())); + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); return sendAccessTokenRequestSync(request); } @@ -88,7 +88,7 @@ protected T createAccessTokenRequest(String code, T public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException { final OAuthRequest request = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint(), getConfig())); + new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint())); return sendAccessTokenRequestSync(request); } @@ -115,7 +115,7 @@ protected T createRefreshTokenRequest(String refresh public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) throws IOException { final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint(), getConfig())); + new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); return sendAccessTokenRequestSync(request); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 3eb6b4890..1870115c8 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -101,13 +101,7 @@ public Response execute(OAuthRequestAsync request) throws InterruptedException, } } - /** - * the same as {@link OAuthRequest#send()} - * - * @param request request - * @return Response - */ public Response execute(OAuthRequest request) { - return request.send(); + return request.send(config); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java b/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java index c8d9d0ed4..07e4081ec 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/ObjectMother.java @@ -1,6 +1,5 @@ package com.github.scribejava.core; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; @@ -8,7 +7,7 @@ public abstract class ObjectMother { public static OAuthRequest createSampleOAuthRequest() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com", new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com"); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -17,8 +16,7 @@ public static OAuthRequest createSampleOAuthRequest() { } public static OAuthRequest createSampleOAuthRequestPort80() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:80", - new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:80"); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -27,8 +25,7 @@ public static OAuthRequest createSampleOAuthRequestPort80() { } public static OAuthRequest createSampleOAuthRequestPort80v2() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:80/test", - new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:80/test"); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -37,8 +34,7 @@ public static OAuthRequest createSampleOAuthRequestPort80v2() { } public static OAuthRequest createSampleOAuthRequestPort8080() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:8080", - new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com:8080"); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -47,8 +43,7 @@ public static OAuthRequest createSampleOAuthRequestPort8080() { } public static OAuthRequest createSampleOAuthRequestPort443() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "https://example.com:443", - new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "https://example.com:443"); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); @@ -57,8 +52,7 @@ public static OAuthRequest createSampleOAuthRequestPort443() { } public static OAuthRequest createSampleOAuthRequestPort443v2() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "https://example.com:443/test", - new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "https://example.com:443/test"); request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java index f207f299e..bc833db08 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/BaseStringExtractorTest.java @@ -5,7 +5,6 @@ import org.junit.Test; import com.github.scribejava.core.ObjectMother; import com.github.scribejava.core.exceptions.OAuthParametersMissingException; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; @@ -91,7 +90,7 @@ public void shouldThrowExceptionIfRquestIsNull() { @Test(expected = OAuthParametersMissingException.class) public void shouldThrowExceptionIfRquestHasNoOAuthParameters() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com", new OAuthConfig("test", "test")); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com"); extractor.extract(request); } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java index 63f6d4752..c1658fc7e 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/extractors/HeaderExtractorTest.java @@ -5,7 +5,6 @@ import org.junit.Before; import org.junit.Test; import com.github.scribejava.core.exceptions.OAuthParametersMissingException; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.ObjectMother; @@ -51,8 +50,7 @@ public void shouldExceptionIfRequestIsNull() { @Test(expected = OAuthParametersMissingException.class) public void shouldExceptionIfRequestHasNoOAuthParams() { - final OAuthRequest emptyRequest = new OAuthRequest(Verb.GET, "http://example.com", - new OAuthConfig("test", "test")); + final OAuthRequest emptyRequest = new OAuthRequest(Verb.GET, "http://example.com"); extractor.extract(emptyRequest); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java index 1e632dab8..0ea88985d 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/OAuthRequestTest.java @@ -10,7 +10,7 @@ public class OAuthRequestTest { @Before public void setUp() { - request = new OAuthRequest(Verb.GET, "http://example.com", new OAuthConfig("test", "test")); + request = new OAuthRequest(Verb.GET, "http://example.com"); } @Test diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java index bdce597ef..274ccca23 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/model/RequestTest.java @@ -10,18 +10,14 @@ public class RequestTest { private OAuthRequest getRequest; private OAuthRequest postRequest; - private OAuthConfig config; @Before public void setUp() throws MalformedURLException { - config = new OAuthConfig("test", "test"); - - postRequest = new OAuthRequest(Verb.POST, "http://example.com", config); + postRequest = new OAuthRequest(Verb.POST, "http://example.com"); postRequest.addBodyParameter("param", "value"); postRequest.addBodyParameter("param with spaces", "value with spaces"); - getRequest = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces", - config); + getRequest = new OAuthRequest(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces"); } @Test @@ -45,7 +41,7 @@ public void shouldSetPayloadAndHeaders() { @Test public void shouldAllowAddingQuerystringParametersAfterCreation() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val", config); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val"); request.addQuerystringParameter("two", "other val"); request.addQuerystringParameter("more", "params"); assertEquals(3, request.getQueryStringParams().size()); @@ -53,7 +49,7 @@ public void shouldAllowAddingQuerystringParametersAfterCreation() { @Test public void shouldReturnTheCompleteUrl() { - final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val", config); + final OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com?one=val"); request.addQuerystringParameter("two", "other val"); request.addQuerystringParameter("more", "params"); assertEquals("http://example.com?one=val&two=other%20val&more=params", request.getCompleteUrl()); From 8dc788310ac737584e20fc003e5bf68ddbe7523d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 9 Jan 2017 19:23:51 +0300 Subject: [PATCH 202/250] move JDK HTTP client specific config (connectTimeout and readTimeout) to separate class (JDKHttpClientConfig) --- .../core/builder/ServiceBuilder.java | 44 ++++++++++++++----- .../httpclient/jdk/JDKHttpClientConfig.java | 34 ++++++++++++++ .../scribejava/core/model/OAuthConfig.java | 42 +++++++++++------- .../scribejava/core/model/OAuthRequest.java | 20 +++++---- .../scribejava/core/oauth/OAuthService.java | 6 ++- .../httpclient/ahc/AhcHttpClientConfig.java | 4 +- .../httpclient/ning/NingHttpClientConfig.java | 4 +- .../okhttp/OkHttpHttpClientConfig.java | 4 +- .../okhttp/OkHttpHttpClientTest.java | 2 +- 9 files changed, 118 insertions(+), 42 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index dd1cc1989..ca7e5f05e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -3,6 +3,7 @@ import com.github.scribejava.core.builder.api.BaseApi; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.SignatureType; @@ -26,11 +27,6 @@ public class ServiceBuilder { private String responseType = "code"; private String userAgent; - //sync version only - private Integer connectTimeout; - private Integer readTimeout; - - //not-default httpclient only private HttpClientConfig httpClientConfig; private HttpClient httpClient; @@ -123,15 +119,43 @@ public ServiceBuilder responseType(String responseType) { return this; } + /** + * + * @param connectTimeout connectTimeout + * @return ServiceBuilder to chain methods + * @deprecated use {@link com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig} and + *
{@link #httpClientConfig(com.github.scribejava.core.httpclient.HttpClientConfig) } + */ + @Deprecated public ServiceBuilder connectTimeout(Integer connectTimeout) { - Preconditions.checkNotNull(connectTimeout, "Connection timeout can't be null"); - this.connectTimeout = connectTimeout; + final JDKHttpClientConfig jdkHttpClientConfig; + if (httpClientConfig instanceof JDKHttpClientConfig) { + jdkHttpClientConfig = (JDKHttpClientConfig) httpClientConfig; + } else { + jdkHttpClientConfig = new JDKHttpClientConfig(); + httpClientConfig = jdkHttpClientConfig; + } + jdkHttpClientConfig.setConnectTimeout(connectTimeout); return this; } + /** + * + * @param readTimeout readTimeout + * @return ServiceBuilder to chain methods + * @deprecated use {@link com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig} and + *
{@link #httpClientConfig(com.github.scribejava.core.httpclient.HttpClientConfig) } + */ + @Deprecated public ServiceBuilder readTimeout(Integer readTimeout) { - Preconditions.checkNotNull(readTimeout, "Read timeout can't be null"); - this.readTimeout = readTimeout; + final JDKHttpClientConfig jdkHttpClientConfig; + if (httpClientConfig instanceof JDKHttpClientConfig) { + jdkHttpClientConfig = (JDKHttpClientConfig) httpClientConfig; + } else { + jdkHttpClientConfig = new JDKHttpClientConfig(); + httpClientConfig = jdkHttpClientConfig; + } + jdkHttpClientConfig.setReadTimeout(readTimeout); return this; } @@ -169,7 +193,7 @@ public void checkPreconditions() { private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, - userAgent, connectTimeout, readTimeout, httpClientConfig, httpClient); + userAgent, httpClientConfig, httpClient); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java new file mode 100644 index 000000000..471fb5c96 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java @@ -0,0 +1,34 @@ +package com.github.scribejava.core.httpclient.jdk; + +import com.github.scribejava.core.httpclient.HttpClientConfig; + +public class JDKHttpClientConfig implements HttpClientConfig { + + private Integer connectTimeout; + private Integer readTimeout; + + @Override + public JDKHttpClientConfig createDefaultConfig() { + return defaultConfig(); + } + + public static JDKHttpClientConfig defaultConfig() { + return new JDKHttpClientConfig(); + } + + public Integer getConnectTimeout() { + return connectTimeout; + } + + public void setConnectTimeout(Integer connectTimeout) { + this.connectTimeout = connectTimeout; + } + + public Integer getReadTimeout() { + return readTimeout; + } + + public void setReadTimeout(Integer readTimeout) { + this.readTimeout = readTimeout; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index b54c79180..65df39368 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -1,6 +1,8 @@ package com.github.scribejava.core.model; +import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import java.io.IOException; import java.io.OutputStream; @@ -19,22 +21,16 @@ public class OAuthConfig { private final String responseType; private final String userAgent; - //sync only version - private final Integer connectTimeout; - private final Integer readTimeout; - - //async version only private HttpClientConfig httpClientConfig; - private com.github.scribejava.core.httpclient.HttpClient httpClient; + private HttpClient httpClient; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null, null); } public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, - OutputStream debugStream, String state, String responseType, String userAgent, Integer connectTimeout, - Integer readTimeout, HttpClientConfig httpClientConfig, - com.github.scribejava.core.httpclient.HttpClient httpClient) { + OutputStream debugStream, String state, String responseType, String userAgent, + HttpClientConfig httpClientConfig, HttpClient httpClient) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; @@ -44,8 +40,6 @@ public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureTy this.state = state; this.responseType = responseType; this.userAgent = userAgent; - this.connectTimeout = connectTimeout; - this.readTimeout = readTimeout; this.httpClientConfig = httpClientConfig; this.httpClient = httpClient; } @@ -93,19 +87,37 @@ public void log(String message) { } } + /** + * + * @return Connect Timeout + * @deprecated use {@link JDKHttpClientConfig} + */ + @Deprecated public Integer getConnectTimeout() { - return connectTimeout; + if (httpClientConfig instanceof JDKHttpClientConfig) { + return ((JDKHttpClientConfig) httpClientConfig).getConnectTimeout(); + } + return null; } + /** + * + * @return Read Timeout + * @deprecated use {@link JDKHttpClientConfig} + */ + @Deprecated public Integer getReadTimeout() { - return readTimeout; + if (httpClientConfig instanceof JDKHttpClientConfig) { + return ((JDKHttpClientConfig) httpClientConfig).getReadTimeout(); + } + return null; } public HttpClientConfig getHttpClientConfig() { return httpClientConfig; } - public com.github.scribejava.core.httpclient.HttpClient getHttpClient() { + public HttpClient getHttpClient() { return httpClient; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index b4feb382f..bb8254f22 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -5,6 +5,7 @@ import java.util.Map; import com.github.scribejava.core.exceptions.OAuthConnectionException; import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import java.io.File; import java.net.URL; import java.net.UnknownHostException; @@ -29,26 +30,27 @@ public OAuthRequest(Verb verb, String url, OAuthConfig config) { this(verb, url); } - public Response send(OAuthConfig config) { + public Response send(String userAgent, JDKHttpClientConfig httpClientConfig) { try { - return doSend(config, isFollowRedirects(), getHeaders(), getVerb(), getCompleteUrl(), this); + return doSend(userAgent, httpClientConfig, isFollowRedirects(), getHeaders(), getVerb(), getCompleteUrl(), + this); } catch (IOException | RuntimeException e) { throw new OAuthConnectionException(getCompleteUrl(), e); } } - private static Response doSend(OAuthConfig config, boolean followRedirects, Map headers, - Verb httpVerb, String completeUrl, OAuthRequest request) throws IOException { + private static Response doSend(String userAgent, JDKHttpClientConfig httpClientConfig, boolean followRedirects, + Map headers, Verb httpVerb, String completeUrl, OAuthRequest request) throws IOException { final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection(); connection.setInstanceFollowRedirects(followRedirects); connection.setRequestMethod(httpVerb.name()); - if (config.getConnectTimeout() != null) { - connection.setConnectTimeout(config.getConnectTimeout()); + if (httpClientConfig.getConnectTimeout() != null) { + connection.setConnectTimeout(httpClientConfig.getConnectTimeout()); } - if (config.getReadTimeout() != null) { - connection.setReadTimeout(config.getReadTimeout()); + if (httpClientConfig.getReadTimeout() != null) { + connection.setReadTimeout(httpClientConfig.getReadTimeout()); } - addHeaders(connection, headers, config.getUserAgent()); + addHeaders(connection, headers, userAgent); if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { final File filePayload = request.getFilePayload(); if (filePayload != null) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 1870115c8..8553aa4a1 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -4,6 +4,7 @@ import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; @@ -102,6 +103,9 @@ public Response execute(OAuthRequestAsync request) throws InterruptedException, } public Response execute(OAuthRequest request) { - return request.send(config); + final HttpClientConfig httpClientConfig = config.getHttpClientConfig(); + return request.send(config.getUserAgent(), + httpClientConfig instanceof JDKHttpClientConfig ? (JDKHttpClientConfig) httpClientConfig + : JDKHttpClientConfig.defaultConfig()); } } diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java index 67fc92bdf..490eaf2e6 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClientConfig.java @@ -16,11 +16,11 @@ public AsyncHttpClientConfig getClientConfig() { } @Override - public HttpClientConfig createDefaultConfig() { + public AhcHttpClientConfig createDefaultConfig() { return defaultConfig(); } - public static HttpClientConfig defaultConfig() { + public static AhcHttpClientConfig defaultConfig() { return new AhcHttpClientConfig(null); } } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java index 1dc5aad2a..9eb5d83c2 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClientConfig.java @@ -25,11 +25,11 @@ public AsyncHttpClientConfig getConfig() { } @Override - public HttpClientConfig createDefaultConfig() { + public NingHttpClientConfig createDefaultConfig() { return defaultConfig(); } - public static HttpClientConfig defaultConfig() { + public static NingHttpClientConfig defaultConfig() { return new NingHttpClientConfig(null); } } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java index 62737fe31..7759a0936 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientConfig.java @@ -16,11 +16,11 @@ public OkHttpClient.Builder getClientBuilder() { } @Override - public HttpClientConfig createDefaultConfig() { + public OkHttpHttpClientConfig createDefaultConfig() { return defaultConfig(); } - public static HttpClientConfig defaultConfig() { + public static OkHttpHttpClientConfig defaultConfig() { return new OkHttpHttpClientConfig(null); } } diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index 917fe1ce8..9770f403a 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -27,7 +27,7 @@ public class OkHttpHttpClientTest { public void setUp() { final HttpClient client = new OkHttpHttpClient(new OkHttpClient()); oAuthService = new OAuth20Service(null, - new OAuthConfig("test", "test", null, null, null, null, null, null, null, null, null, null, client)); + new OAuthConfig("test", "test", null, null, null, null, null, null, null, null, client)); } From a75a695ff7c81e21c04c4e3a2e190d1e4b66b425 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 10 Jan 2017 12:11:48 +0300 Subject: [PATCH 203/250] move JDK HTTP client specific config (followRedirects) from OAuthRequest to JDKHttpClientConfig --- .../httpclient/jdk/JDKHttpClientConfig.java | 18 ++++++++++++++++++ .../scribejava/core/model/AbstractRequest.java | 18 ------------------ .../scribejava/core/model/OAuthRequest.java | 8 ++++---- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java index 471fb5c96..cfb97b359 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClientConfig.java @@ -6,6 +6,7 @@ public class JDKHttpClientConfig implements HttpClientConfig { private Integer connectTimeout; private Integer readTimeout; + private boolean followRedirects = true; @Override public JDKHttpClientConfig createDefaultConfig() { @@ -31,4 +32,21 @@ public Integer getReadTimeout() { public void setReadTimeout(Integer readTimeout) { this.readTimeout = readTimeout; } + + public boolean isFollowRedirects() { + return followRedirects; + } + + /** + * Sets whether the underlying Http Connection follows redirects or not. + * + * Defaults to true (follow redirects) + * + * @see http://docs.oracle.com/javase/6/docs/api/java/net/HttpURLConnection.html#setInstanceFollowRedirects(boolean) + * @param followRedirects boolean + */ + public void setFollowRedirects(boolean followRedirects) { + this.followRedirects = followRedirects; + } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 3a5499c03..9e48c4f52 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -24,7 +24,6 @@ public abstract class AbstractRequest { private final ParameterList querystringParams = new ParameterList(); private final ParameterList bodyParams = new ParameterList(); private final Map headers = new HashMap<>(); - private boolean followRedirects = true; private String charset; @@ -275,21 +274,4 @@ public String getCharset() { public void setCharset(String charsetName) { charset = charsetName; } - - /** - * Sets whether the underlying Http Connection follows redirects or not. - * - * Defaults to true (follow redirects) - * - * @see http://docs.oracle.com/javase/6/docs/api/java/net/HttpURLConnection.html#setInstanceFollowRedirects(boolean) - * @param followRedirects boolean - */ - public void setFollowRedirects(boolean followRedirects) { - this.followRedirects = followRedirects; - } - - public boolean isFollowRedirects() { - return followRedirects; - } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index bb8254f22..e498d62fa 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -32,17 +32,17 @@ public OAuthRequest(Verb verb, String url, OAuthConfig config) { public Response send(String userAgent, JDKHttpClientConfig httpClientConfig) { try { - return doSend(userAgent, httpClientConfig, isFollowRedirects(), getHeaders(), getVerb(), getCompleteUrl(), + return doSend(userAgent, httpClientConfig, getHeaders(), getVerb(), getCompleteUrl(), this); } catch (IOException | RuntimeException e) { throw new OAuthConnectionException(getCompleteUrl(), e); } } - private static Response doSend(String userAgent, JDKHttpClientConfig httpClientConfig, boolean followRedirects, - Map headers, Verb httpVerb, String completeUrl, OAuthRequest request) throws IOException { + private static Response doSend(String userAgent, JDKHttpClientConfig httpClientConfig, Map headers, + Verb httpVerb, String completeUrl, OAuthRequest request) throws IOException { final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection(); - connection.setInstanceFollowRedirects(followRedirects); + connection.setInstanceFollowRedirects(httpClientConfig.isFollowRedirects()); connection.setRequestMethod(httpVerb.name()); if (httpClientConfig.getConnectTimeout() != null) { connection.setConnectTimeout(httpClientConfig.getConnectTimeout()); From a69f9def256f09cf9758ef9773c28e3091af3567 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 11 Jan 2017 14:09:38 +0300 Subject: [PATCH 204/250] introduce JDKHttpClient (default). --- .../core/httpclient/HttpClient.java | 3 + .../core/httpclient/jdk/JDKHttpClient.java | 147 ++++++++++++++++++ .../core/httpclient/jdk/JDKHttpProvider.java | 16 ++ .../core/model/AbstractRequest.java | 3 - .../scribejava/core/model/OAuthRequest.java | 87 ----------- .../scribejava/core/oauth/OAuthService.java | 11 +- ...ibejava.core.httpclient.HttpClientProvider | 2 + .../httpclient/ahc/AhcHttpClient.java | 6 +- .../httpclient/ning/NingHttpClient.java | 6 +- .../httpclient/okhttp/OkHttpHttpClient.java | 6 +- 10 files changed, 180 insertions(+), 107 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpProvider.java create mode 100644 scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java index 9377226f9..3d6d0433f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java @@ -11,6 +11,9 @@ import java.util.concurrent.Future; public interface HttpClient { + String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded"; + String CONTENT_TYPE = "Content-Type"; + String CONTENT_LENGTH = "Content-Length"; void close() throws IOException; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java new file mode 100644 index 000000000..0a673f056 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java @@ -0,0 +1,147 @@ +package com.github.scribejava.core.httpclient.jdk; + +import com.github.scribejava.core.exceptions.OAuthConnectionException; +import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.model.OAuthAsyncRequestCallback; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import java.io.File; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +public class JDKHttpClient implements HttpClient { + + private final JDKHttpClientConfig config; + + public JDKHttpClient(JDKHttpClientConfig clientConfig) { + config = clientConfig; + } + + @Override + public void close() throws IOException { + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents, OAuthAsyncRequestCallback callback, + OAuthRequestAsync.ResponseConverter converter) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + byte[] bodyContents) throws InterruptedException, ExecutionException, IOException { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + String bodyContents) throws InterruptedException, ExecutionException, IOException { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + File bodyContents) throws InterruptedException, ExecutionException, IOException { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Response send(String userAgent, OAuthRequest request) { + try { + return doSend(userAgent, request.getHeaders(), request.getVerb(), request.getCompleteUrl(), request); + } catch (IOException | RuntimeException e) { + throw new OAuthConnectionException(request.getCompleteUrl(), e); + } + } + + private Response doSend(String userAgent, Map headers, Verb httpVerb, String completeUrl, + OAuthRequest request) throws IOException { + final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection(); + connection.setInstanceFollowRedirects(config.isFollowRedirects()); + connection.setRequestMethod(httpVerb.name()); + if (config.getConnectTimeout() != null) { + connection.setConnectTimeout(config.getConnectTimeout()); + } + if (config.getReadTimeout() != null) { + connection.setReadTimeout(config.getReadTimeout()); + } + addHeaders(connection, headers, userAgent); + if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + final File filePayload = request.getFilePayload(); + if (filePayload != null) { + throw new UnsupportedOperationException("Sync Requests do not support File payload for the moment"); + } else if (request.getStringPayload() != null) { + addBody(connection, request.getStringPayload().getBytes(request.getCharset())); + } else { + addBody(connection, request.getByteArrayPayload()); + } + } + + try { + connection.connect(); + final int responseCode = connection.getResponseCode(); + return new Response(responseCode, connection.getResponseMessage(), parseHeaders(connection), + responseCode >= 200 && responseCode < 400 ? connection.getInputStream() + : connection.getErrorStream()); + } catch (UnknownHostException e) { + throw new OAuthException("The IP address of a host could not be determined.", e); + } + } + + private static Map parseHeaders(HttpURLConnection conn) { + final Map headers = new HashMap<>(); + for (Map.Entry> entry : conn.getHeaderFields().entrySet()) { + final String key = entry.getKey(); + if ("Content-Encoding".equalsIgnoreCase(key)) { + headers.put("Content-Encoding", entry.getValue().get(0)); + } else { + headers.put(key, entry.getValue().get(0)); + } + } + return headers; + } + + private static void addHeaders(HttpURLConnection connection, Map headers, String userAgent) { + for (Map.Entry entry : headers.entrySet()) { + connection.setRequestProperty(entry.getKey(), entry.getValue()); + } + if (userAgent != null) { + connection.setRequestProperty(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); + } + } + + private static void addBody(HttpURLConnection connection, byte[] content) throws IOException { + connection.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length)); + + if (connection.getRequestProperty(CONTENT_TYPE) == null) { + connection.setRequestProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + connection.setDoOutput(true); + connection.getOutputStream().write(content); + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpProvider.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpProvider.java new file mode 100644 index 000000000..04472e78a --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpProvider.java @@ -0,0 +1,16 @@ +package com.github.scribejava.core.httpclient.jdk; + +import com.github.scribejava.core.httpclient.HttpClient; +import com.github.scribejava.core.httpclient.HttpClientConfig; +import com.github.scribejava.core.httpclient.HttpClientProvider; + +public class JDKHttpProvider implements HttpClientProvider { + + @Override + public HttpClient createClient(HttpClientConfig config) { + if (config instanceof JDKHttpClientConfig) { + return new JDKHttpClient((JDKHttpClientConfig) config); + } + return null; + } +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 9e48c4f52..57ded183b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -14,9 +14,6 @@ */ public abstract class AbstractRequest { - public static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded"; - public static final String CONTENT_TYPE = "Content-Type"; - protected static final String CONTENT_LENGTH = "Content-Length"; private static final String OAUTH_PREFIX = "oauth_"; private final String url; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index e498d62fa..b12c3683d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -1,17 +1,5 @@ package com.github.scribejava.core.model; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.util.Map; -import com.github.scribejava.core.exceptions.OAuthConnectionException; -import com.github.scribejava.core.exceptions.OAuthException; -import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; -import java.io.File; -import java.net.URL; -import java.net.UnknownHostException; -import java.util.HashMap; -import java.util.List; - public class OAuthRequest extends AbstractRequest { public OAuthRequest(Verb verb, String url) { @@ -29,79 +17,4 @@ public OAuthRequest(Verb verb, String url) { public OAuthRequest(Verb verb, String url, OAuthConfig config) { this(verb, url); } - - public Response send(String userAgent, JDKHttpClientConfig httpClientConfig) { - try { - return doSend(userAgent, httpClientConfig, getHeaders(), getVerb(), getCompleteUrl(), - this); - } catch (IOException | RuntimeException e) { - throw new OAuthConnectionException(getCompleteUrl(), e); - } - } - - private static Response doSend(String userAgent, JDKHttpClientConfig httpClientConfig, Map headers, - Verb httpVerb, String completeUrl, OAuthRequest request) throws IOException { - final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection(); - connection.setInstanceFollowRedirects(httpClientConfig.isFollowRedirects()); - connection.setRequestMethod(httpVerb.name()); - if (httpClientConfig.getConnectTimeout() != null) { - connection.setConnectTimeout(httpClientConfig.getConnectTimeout()); - } - if (httpClientConfig.getReadTimeout() != null) { - connection.setReadTimeout(httpClientConfig.getReadTimeout()); - } - addHeaders(connection, headers, userAgent); - if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { - final File filePayload = request.getFilePayload(); - if (filePayload != null) { - throw new UnsupportedOperationException("Sync Requests do not support File payload for the moment"); - } else if (request.getStringPayload() != null) { - addBody(connection, request.getStringPayload().getBytes(request.getCharset())); - } else { - addBody(connection, request.getByteArrayPayload()); - } - } - - try { - connection.connect(); - final int responseCode = connection.getResponseCode(); - return new Response(responseCode, connection.getResponseMessage(), parseHeaders(connection), - responseCode >= 200 && responseCode < 400 ? connection.getInputStream() - : connection.getErrorStream()); - } catch (UnknownHostException e) { - throw new OAuthException("The IP address of a host could not be determined.", e); - } - } - - private static Map parseHeaders(HttpURLConnection conn) { - final Map headers = new HashMap<>(); - for (Map.Entry> entry : conn.getHeaderFields().entrySet()) { - final String key = entry.getKey(); - if ("Content-Encoding".equalsIgnoreCase(key)) { - headers.put("Content-Encoding", entry.getValue().get(0)); - } else { - headers.put(key, entry.getValue().get(0)); - } - } - return headers; - } - - private static void addHeaders(HttpURLConnection connection, Map headers, String userAgent) { - for (Map.Entry entry : headers.entrySet()) { - connection.setRequestProperty(entry.getKey(), entry.getValue()); - } - if (userAgent != null) { - connection.setRequestProperty(OAuthConstants.USER_AGENT_HEADER_NAME, userAgent); - } - } - - private static void addBody(HttpURLConnection connection, byte[] content) throws IOException { - connection.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length)); - - if (connection.getRequestProperty(CONTENT_TYPE) == null) { - connection.setRequestProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - connection.setDoOutput(true); - connection.getOutputStream().write(content); - } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 8553aa4a1..ca00bc5f7 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -4,6 +4,7 @@ import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClient; import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; @@ -35,7 +36,7 @@ public OAuthService(OAuthConfig config) { final HttpClient externalHttpClient = config.getHttpClient(); if (httpClientConfig == null && externalHttpClient == null) { - httpClient = null; + httpClient = new JDKHttpClient(JDKHttpClientConfig.defaultConfig()); } else { httpClient = externalHttpClient == null ? getClient(httpClientConfig) : externalHttpClient; } @@ -103,9 +104,9 @@ public Response execute(OAuthRequestAsync request) throws InterruptedException, } public Response execute(OAuthRequest request) { - final HttpClientConfig httpClientConfig = config.getHttpClientConfig(); - return request.send(config.getUserAgent(), - httpClientConfig instanceof JDKHttpClientConfig ? (JDKHttpClientConfig) httpClientConfig - : JDKHttpClientConfig.defaultConfig()); + final JDKHttpClient jdkHttpClient = httpClient instanceof JDKHttpClient ? (JDKHttpClient) httpClient + : new JDKHttpClient(JDKHttpClientConfig.defaultConfig()); + + return jdkHttpClient.send(config.getUserAgent(), request); } } diff --git a/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider b/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider new file mode 100644 index 000000000..7df053c24 --- /dev/null +++ b/scribejava-core/src/main/resources/META-INF/services/com.github.scribejava.core.httpclient.HttpClientProvider @@ -0,0 +1,2 @@ +com.github.scribejava.core.httpclient.jdk.JDKHttpProvider + diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index e8742e2fc..f547779a1 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -1,7 +1,6 @@ package com.github.scribejava.httpclient.ahc; import com.github.scribejava.core.httpclient.AbstractAsyncOnlyHttpClient; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -13,7 +12,6 @@ import java.util.Map; import java.util.concurrent.Future; -import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; import java.io.File; import org.asynchttpclient.AsyncHttpClientConfig; import org.asynchttpclient.BoundRequestBuilder; @@ -82,8 +80,8 @@ private Future doExecuteAsync(String userAgent, Map heade } if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + if (!headers.containsKey(CONTENT_TYPE)) { + boundRequestBuilder = boundRequestBuilder.addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } boundRequestBuilder = bodySetter.setBody(boundRequestBuilder, bodyContents); } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index c2b27e3eb..6c4acde60 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -1,7 +1,6 @@ package com.github.scribejava.httpclient.ning; import com.github.scribejava.core.httpclient.AbstractAsyncOnlyHttpClient; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequestAsync; @@ -11,7 +10,6 @@ import java.util.Map; import java.util.concurrent.Future; -import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; import com.ning.http.client.AsyncHttpClientConfig; import java.io.File; @@ -90,8 +88,8 @@ private Future doExecuteAsync(String userAgent, Map heade } if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { - if (!headers.containsKey(AbstractRequest.CONTENT_TYPE)) { - boundRequestBuilder = boundRequestBuilder.addHeader(AbstractRequest.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + if (!headers.containsKey(CONTENT_TYPE)) { + boundRequestBuilder = boundRequestBuilder.addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } boundRequestBuilder = bodySetter.setBody(boundRequestBuilder, bodyContents); } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index ff8f0c80f..80c0c4ddc 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -1,6 +1,5 @@ package com.github.scribejava.httpclient.okhttp; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; @@ -17,7 +16,6 @@ import java.util.Map; import java.util.concurrent.Future; -import static com.github.scribejava.core.model.AbstractRequest.DEFAULT_CONTENT_TYPE; import com.github.scribejava.core.model.Response; import java.io.File; import java.util.HashMap; @@ -117,8 +115,8 @@ private Call createCall(String userAgent, Map headers, Verb http // prepare body final RequestBody body; if (bodyContents != null && HttpMethod.permitsRequestBody(method)) { - final MediaType mediaType = headers.containsKey(AbstractRequest.CONTENT_TYPE) - ? MediaType.parse(headers.get(AbstractRequest.CONTENT_TYPE)) : DEFAULT_CONTENT_TYPE_MEDIA_TYPE; + final MediaType mediaType = headers.containsKey(CONTENT_TYPE) ? MediaType.parse(headers.get(CONTENT_TYPE)) + : DEFAULT_CONTENT_TYPE_MEDIA_TYPE; body = bodyType.createBody(mediaType, bodyContents); } else { From 3c724082167ba8d334b5a5d7f5ccbe87d591cb32 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 11 Jan 2017 15:01:28 +0300 Subject: [PATCH 205/250] make JDKHttpClient implement sync execute methods from HttpClient --- .../apis/examples/AWeberExample.java | 3 +- .../apis/examples/Box20Example.java | 3 +- .../scribejava/apis/examples/DiggExample.java | 3 +- .../apis/examples/FacebookExample.java | 3 +- .../apis/examples/FlickrExample.java | 3 +- .../apis/examples/Foursquare2Example.java | 3 +- .../apis/examples/FoursquareExample.java | 3 +- .../apis/examples/FreelancerExample.java | 3 +- .../apis/examples/GeniusExample.java | 3 +- .../apis/examples/GitHubExample.java | 3 +- .../apis/examples/Google20Example.java | 3 +- .../scribejava/apis/examples/HHExample.java | 3 +- .../apis/examples/ImgurExample.java | 3 +- .../apis/examples/Kaixin20Example.java | 3 +- .../apis/examples/LinkedIn20Example.java | 3 +- .../apis/examples/LinkedInExample.java | 3 +- .../examples/LinkedInExampleWithScopes.java | 3 +- .../scribejava/apis/examples/LiveExample.java | 3 +- .../apis/examples/MailruExample.java | 3 +- .../apis/examples/MeetupExample.java | 3 +- .../apis/examples/MisfitExample.java | 3 +- .../apis/examples/NaverExample.java | 3 +- .../apis/examples/NeteaseWeiboExample.java | 3 +- .../apis/examples/OdnoklassnikiExample.java | 3 +- .../apis/examples/PinterestExample.java | 3 +- .../apis/examples/Px500Example.java | 3 +- .../apis/examples/RenrenExample.java | 3 +- .../apis/examples/SalesforceExample.java | 4 +- .../apis/examples/SinaWeibo2Example.java | 3 +- .../apis/examples/SinaWeiboExample.java | 3 +- .../apis/examples/SkyrockExample.java | 3 +- .../apis/examples/SohuWeiboExample.java | 3 +- .../apis/examples/StackExchangeExample.java | 3 +- .../TheThingsNetworkV1StagingExample.java | 3 +- .../TheThingsNetworkV2PreviewExample.java | 3 +- .../apis/examples/TrelloExample.java | 3 +- .../apis/examples/TumblrExample.java | 3 +- .../apis/examples/TutByExample.java | 3 +- .../apis/examples/TwitterExample.java | 3 +- .../apis/examples/ViadeoExample.java | 3 +- .../apis/examples/VkontakteExample.java | 3 +- .../scribejava/apis/examples/XingExample.java | 3 +- .../apis/examples/YahooExample.java | 3 +- .../exceptions/OAuthConnectionException.java | 11 ----- .../core/httpclient/jdk/JDKHttpClient.java | 46 +++++++++---------- .../core/model/AbstractRequest.java | 2 - .../core/oauth/OAuth10aService.java | 5 +- .../scribejava/core/oauth/OAuth20Service.java | 13 ++++-- .../scribejava/core/oauth/OAuthService.java | 14 +++++- .../core/oauth/OAuth20ServiceTest.java | 2 +- 50 files changed, 135 insertions(+), 88 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthConnectionException.java diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index 324fcc013..d79bd77b2 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class AWeberExample { @@ -22,7 +23,7 @@ public final class AWeberExample { private AWeberExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey(CONSUMER_KEY) .apiSecret(CONSUMER_SECRET) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index c41e5f45e..e2f5d6f2c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ExecutionException; public final class Box20Example { @@ -21,7 +22,7 @@ public final class Box20Example { private Box20Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { //Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index 61f6c1e75..6afd1db07 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class DiggExample { @@ -19,7 +20,7 @@ public final class DiggExample { private DiggExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "myKey"; final String apiSecret = "mySecret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 1aaa26ba5..54f56181a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class FacebookExample { @@ -19,7 +20,7 @@ public final class FacebookExample { private FacebookExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index c5055412b..7165844bf 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class FlickrExample { @@ -18,7 +19,7 @@ public final class FlickrExample { private FlickrExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index 1d371a51b..1874e5deb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class Foursquare2Example { @@ -18,7 +19,7 @@ public final class Foursquare2Example { private Foursquare2Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index acfa08ce6..59956cafd 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class FoursquareExample { @@ -18,7 +19,7 @@ public final class FoursquareExample { private FoursquareExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index e1542dd0f..3908ae116 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -11,6 +11,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class FreelancerExample { @@ -23,7 +24,7 @@ public final class FreelancerExample { private FreelancerExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .signatureType(SignatureType.QueryString) .apiKey("your client id") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java index f91fb5dc4..59c2d872a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class GeniusExample { @@ -19,7 +20,7 @@ public final class GeniusExample { private GeniusExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index bfd482f04..28d5bc5c4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class GitHubExample { @@ -19,7 +20,7 @@ public final class GitHubExample { private GitHubExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 1fc8a6869..770703321 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ExecutionException; public final class Google20Example { @@ -21,7 +22,7 @@ public final class Google20Example { private Google20Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index 2a1d6d3f9..c19ba50c3 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -11,6 +11,7 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class HHExample { @@ -20,7 +21,7 @@ public final class HHExample { private HHExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index 2eaa8db72..fd8c59c31 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.Scanner; +import java.util.concurrent.ExecutionException; public final class ImgurExample { @@ -19,7 +20,7 @@ public final class ImgurExample { private ImgurExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 35591086e..50a134c7d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class Kaixin20Example { @@ -18,7 +19,7 @@ public final class Kaixin20Example { private Kaixin20Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your api key"; final String apiSecret = "your api secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index 1dc096586..cf34a9ae0 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class LinkedIn20Example { @@ -18,7 +19,7 @@ public final class LinkedIn20Example { private LinkedIn20Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 9c6a085ae..6f9654e7f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class LinkedInExample { @@ -19,7 +20,7 @@ public final class LinkedInExample { private LinkedInExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 4bc2a3529..3ab8bb006 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class LinkedInExampleWithScopes { @@ -19,7 +20,7 @@ public final class LinkedInExampleWithScopes { private LinkedInExampleWithScopes() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index 832382472..a93643eda 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class LiveExample { @@ -18,7 +19,7 @@ public final class LiveExample { private LiveExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = ""; final String apiSecret = ""; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 9c633b9f4..9fb743b05 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class MailruExample { @@ -19,7 +20,7 @@ public final class MailruExample { private MailruExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index c488a1149..f7c41894a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class MeetupExample { @@ -18,7 +19,7 @@ public final class MeetupExample { private MeetupExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index 39037fde0..1caa28eb1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.Scanner; +import java.util.concurrent.ExecutionException; public final class MisfitExample { @@ -20,7 +21,7 @@ public final class MisfitExample { private MisfitExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java index 962db655b..3a85e8845 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.util.Random; import java.util.Scanner; +import java.util.concurrent.ExecutionException; public final class NaverExample { @@ -20,7 +21,7 @@ public final class NaverExample { private NaverExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index 27f2a6610..cde99f609 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class NeteaseWeiboExample { @@ -19,7 +20,7 @@ public final class NeteaseWeiboExample { private NeteaseWeiboExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your key"; final String apiSecret = "your secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index a1c8e5bdb..c87fad63c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class OdnoklassnikiExample { @@ -19,7 +20,7 @@ public final class OdnoklassnikiExample { private OdnoklassnikiExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your api client id"; final String publicKey = "your api public key"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index bb07b59cc..16a8f6e65 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.Scanner; +import java.util.concurrent.ExecutionException; public final class PinterestExample { @@ -18,7 +19,7 @@ public final class PinterestExample { private PinterestExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_app_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index c84acbaeb..2ab55085c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class Px500Example { @@ -18,7 +19,7 @@ public final class Px500Example { private Px500Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your-api-key") .apiSecret("your-api-secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 854eeb295..021c9b0d4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -18,6 +18,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class RenrenExample { @@ -27,7 +28,7 @@ public final class RenrenExample { private RenrenExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your api key"; final String apiSecret = "your api secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index d69181338..bfe562249 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -14,6 +14,7 @@ import com.github.scribejava.core.oauth.OAuth20Service; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; +import java.util.concurrent.ExecutionException; public final class SalesforceExample { @@ -22,7 +23,8 @@ public final class SalesforceExample { private SalesforceExample() { } - public static void main(String... args) throws IOException, NoSuchAlgorithmException, KeyManagementException { + public static void main(String... args) throws IOException, NoSuchAlgorithmException, KeyManagementException, + InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index 44b1ef2cf..d99a20b1c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class SinaWeibo2Example { @@ -18,7 +19,7 @@ public final class SinaWeibo2Example { private SinaWeibo2Example() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your_api_key"; final String apiSecret = "your_api_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index d09ff08e2..18edbb49e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class SinaWeiboExample { @@ -19,7 +20,7 @@ public final class SinaWeiboExample { private SinaWeiboExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your key"; final String apiSecret = "your secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index d22a373e5..a9c957541 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class SkyrockExample { @@ -18,7 +19,7 @@ public final class SkyrockExample { private SkyrockExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your-api-key") .apiSecret("your-api-secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index 524268436..81202256d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class SohuWeiboExample { @@ -19,7 +20,7 @@ public final class SohuWeiboExample { private SohuWeiboExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your_key"; final String apiSecret = "your_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index 81e5bcf5a..ed3eea0db 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -11,6 +11,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class StackExchangeExample { @@ -20,7 +21,7 @@ public final class StackExchangeExample { private StackExchangeExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id, secret, application key and // optionally site name final String clientId = "your client id"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index 22fa12a73..50fbef28e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -12,6 +12,7 @@ import java.net.URLDecoder; import java.util.Random; import java.util.Scanner; +import java.util.concurrent.ExecutionException; public final class TheThingsNetworkV1StagingExample { @@ -21,7 +22,7 @@ public final class TheThingsNetworkV1StagingExample { private TheThingsNetworkV1StagingExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your_client_id"; final String clientSecret = "your_client_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index 1f6bb61bb..38bd2fb5f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.util.Random; import java.util.Scanner; +import java.util.concurrent.ExecutionException; public final class TheThingsNetworkV2PreviewExample { @@ -21,7 +22,7 @@ public final class TheThingsNetworkV2PreviewExample { private TheThingsNetworkV2PreviewExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your_client_id"; final String clientSecret = "your_client_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index b2371312f..e847d7b94 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class TrelloExample { @@ -20,7 +21,7 @@ public final class TrelloExample { private TrelloExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey(API_KEY) .apiSecret(API_SECRET) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index efcc38cee..edc12efa7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class TumblrExample { @@ -18,7 +19,7 @@ public final class TumblrExample { private TumblrExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("MY_CONSUMER_KEY") .apiSecret("MY_CONSUMER_SECRET") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 012c2b88f..06e035abb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -11,6 +11,7 @@ import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class TutByExample { @@ -20,7 +21,7 @@ public final class TutByExample { private TutByExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index b000f0c3f..6cd012bb7 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class TwitterExample { @@ -18,7 +19,7 @@ public final class TwitterExample { private TwitterExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index a9e16905e..d0b5cfaeb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class ViadeoExample { @@ -18,7 +19,7 @@ public final class ViadeoExample { private ViadeoExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index 57bea7831..fb806492d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -9,6 +9,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class VkontakteExample { @@ -18,7 +19,7 @@ public final class VkontakteExample { private VkontakteExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 4e6037b88..3ec67e472 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class XingExample { @@ -18,7 +19,7 @@ public final class XingExample { private XingExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index 3f4d52563..aa6691cdb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -10,6 +10,7 @@ import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; +import java.util.concurrent.ExecutionException; public final class YahooExample { @@ -19,7 +20,7 @@ public final class YahooExample { private YahooExample() { } - public static void main(String... args) throws IOException { + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() .apiKey("your client id") .apiSecret("your client secret") diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthConnectionException.java b/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthConnectionException.java deleted file mode 100644 index 93feb8c42..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthConnectionException.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.scribejava.core.exceptions; - -public class OAuthConnectionException extends OAuthException { - - private static final long serialVersionUID = 6901269342236961310L; - private static final String MSG = "There was a problem while creating a connection to the remote service: "; - - public OAuthConnectionException(String url, Exception e) { - super(MSG + url, e); - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java index 0a673f056..00b795367 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java @@ -1,11 +1,9 @@ package com.github.scribejava.core.httpclient.jdk; -import com.github.scribejava.core.exceptions.OAuthConnectionException; import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; @@ -56,31 +54,23 @@ public Future executeAsync(String userAgent, Map headers, @Override public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, byte[] bodyContents) throws InterruptedException, ExecutionException, IOException { - throw new UnsupportedOperationException("Not supported yet."); + return doExecute(userAgent, headers, httpVerb, completeUrl, BodyType.BYTE_ARRAY, bodyContents); } @Override public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents) throws InterruptedException, ExecutionException, IOException { - throw new UnsupportedOperationException("Not supported yet."); + return doExecute(userAgent, headers, httpVerb, completeUrl, BodyType.STRING, bodyContents); } @Override public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, File bodyContents) throws InterruptedException, ExecutionException, IOException { - throw new UnsupportedOperationException("Not supported yet."); - } - - public Response send(String userAgent, OAuthRequest request) { - try { - return doSend(userAgent, request.getHeaders(), request.getVerb(), request.getCompleteUrl(), request); - } catch (IOException | RuntimeException e) { - throw new OAuthConnectionException(request.getCompleteUrl(), e); - } + throw new UnsupportedOperationException("JDKHttpClient do not support File payload for the moment"); } - private Response doSend(String userAgent, Map headers, Verb httpVerb, String completeUrl, - OAuthRequest request) throws IOException { + private Response doExecute(String userAgent, Map headers, Verb httpVerb, String completeUrl, + BodyType bodyType, Object bodyContents) throws IOException { final HttpURLConnection connection = (HttpURLConnection) new URL(completeUrl).openConnection(); connection.setInstanceFollowRedirects(config.isFollowRedirects()); connection.setRequestMethod(httpVerb.name()); @@ -92,14 +82,7 @@ private Response doSend(String userAgent, Map headers, Verb http } addHeaders(connection, headers, userAgent); if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { - final File filePayload = request.getFilePayload(); - if (filePayload != null) { - throw new UnsupportedOperationException("Sync Requests do not support File payload for the moment"); - } else if (request.getStringPayload() != null) { - addBody(connection, request.getStringPayload().getBytes(request.getCharset())); - } else { - addBody(connection, request.getByteArrayPayload()); - } + bodyType.setBody(connection, bodyContents); } try { @@ -113,6 +96,23 @@ private Response doSend(String userAgent, Map headers, Verb http } } + private enum BodyType { + BYTE_ARRAY { + @Override + void setBody(HttpURLConnection connection, Object bodyContents) throws IOException { + addBody(connection, (byte[]) bodyContents); + } + }, + STRING { + @Override + void setBody(HttpURLConnection connection, Object bodyContents) throws IOException { + addBody(connection, ((String) bodyContents).getBytes()); + } + }; + + abstract void setBody(HttpURLConnection connection, Object bodyContents) throws IOException; + } + private static Map parseHeaders(HttpURLConnection conn) { final Map headers = new HashMap<>(); for (Map.Entry> entry : conn.getHeaderFields().entrySet()) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 57ded183b..96550f4e9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -219,8 +219,6 @@ public String getSanitizedUrl() { * Returns the body of the request (set in {@link #setPayload(java.lang.String)}) * * @return form encoded string - * - * @throws OAuthException if the charset chosen is not supported */ public String getStringPayload() { return stringPayload; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index 7c86ff342..6bdb539ed 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -15,6 +15,7 @@ import com.github.scribejava.core.model.Response; import com.github.scribejava.core.services.Base64Encoder; import com.github.scribejava.core.utils.MapUtils; +import java.util.concurrent.ExecutionException; /** * OAuth 1.0a implementation of {@link OAuthService} @@ -35,7 +36,7 @@ public OAuth10aService(DefaultApi10a api, OAuthConfig config) { this.api = api; } - public final OAuth1RequestToken getRequestToken() throws IOException { + public final OAuth1RequestToken getRequestToken() throws IOException, InterruptedException, ExecutionException { final OAuthConfig config = getConfig(); config.log("obtaining request token from " + api.getRequestTokenEndpoint()); final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); @@ -91,7 +92,7 @@ private void addOAuthParams(AbstractRequest request, String tokenSecret) { } public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, String oauthVerifier) - throws IOException { + throws IOException, InterruptedException, ExecutionException { getConfig().log("obtaining access token from " + api.getAccessTokenEndpoint()); final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); prepareAccessTokenRequest(request, requestToken, oauthVerifier); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 7c9d11ddf..d33c6fd07 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -15,6 +15,7 @@ import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import java.util.Map; +import java.util.concurrent.ExecutionException; public class OAuth20Service extends OAuthService { @@ -33,7 +34,8 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { } //sync version, protected to facilitate mocking - protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) throws IOException { + protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) + throws IOException, InterruptedException, ExecutionException { return api.getAccessTokenExtractor().extract(execute(request)); } @@ -49,7 +51,8 @@ public OAuth2AccessToken convert(Response response) throws IOException { }); } - public final OAuth2AccessToken getAccessToken(String code) throws IOException { + public final OAuth2AccessToken getAccessToken(String code) + throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createAccessTokenRequest(code, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); @@ -86,7 +89,8 @@ protected T createAccessTokenRequest(String code, T return request; } - public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException { + public final OAuth2AccessToken refreshAccessToken(String refreshToken) + throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createRefreshTokenRequest(refreshToken, new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint())); @@ -113,7 +117,8 @@ protected T createRefreshTokenRequest(String refresh return request; } - public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) throws IOException { + public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) + throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password, new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index ca00bc5f7..251c2f9fe 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -103,10 +103,20 @@ public Response execute(OAuthRequestAsync request) throws InterruptedException, } } - public Response execute(OAuthRequest request) { + public Response execute(OAuthRequest request) throws InterruptedException, ExecutionException, IOException { final JDKHttpClient jdkHttpClient = httpClient instanceof JDKHttpClient ? (JDKHttpClient) httpClient : new JDKHttpClient(JDKHttpClientConfig.defaultConfig()); - return jdkHttpClient.send(config.getUserAgent(), request); + final File filePayload = request.getFilePayload(); + if (filePayload != null) { + return jdkHttpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), filePayload); + } else if (request.getStringPayload() != null) { + return jdkHttpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getStringPayload()); + } else { + return jdkHttpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), + request.getCompleteUrl(), request.getByteArrayPayload()); + } } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java index 050b0ae4d..3115fd832 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java @@ -19,7 +19,7 @@ public class OAuth20ServiceTest { @Test - public void shouldProduceCorrectRequestSync() throws IOException { + public void shouldProduceCorrectRequestSync() throws IOException, InterruptedException, ExecutionException { final OAuth20Service service = new ServiceBuilder() .apiKey("your_api_key") .apiSecret("your_api_secret") From c9bb1a1c4c9909b21ff1f08e9dfe49b5dbfbceb2 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 11 Jan 2017 15:45:02 +0300 Subject: [PATCH 206/250] implement async HTTPClient methods in JDKHttpClient (it's complete now) --- .../core/httpclient/jdk/JDKHttpClient.java | 20 +++++-- .../core/httpclient/jdk/JDKHttpFuture.java | 54 +++++++++++++++++++ 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java index 00b795367..64350a764 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java @@ -34,21 +34,35 @@ public void close() throws IOException { public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - throw new UnsupportedOperationException("Not supported yet."); + try { + final T response = converter.convert(execute(userAgent, headers, httpVerb, completeUrl, bodyContents)); + callback.onCompleted(response); + return new JDKHttpFuture<>(response); + } catch (InterruptedException | ExecutionException | IOException e) { + callback.onThrowable(e); + return new JDKHttpFuture<>(e); + } } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - throw new UnsupportedOperationException("Not supported yet."); + try { + final T response = converter.convert(execute(userAgent, headers, httpVerb, completeUrl, bodyContents)); + callback.onCompleted(response); + return new JDKHttpFuture<>(response); + } catch (InterruptedException | ExecutionException | IOException e) { + callback.onThrowable(e); + return new JDKHttpFuture<>(e); + } } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter) { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("JDKHttpClient do not support File payload for the moment"); } @Override diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java new file mode 100644 index 000000000..14d95ec80 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java @@ -0,0 +1,54 @@ +package com.github.scribejava.core.httpclient.jdk; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class JDKHttpFuture implements Future { + + private final Exception exception; + private final V response; + + public JDKHttpFuture(Exception exception) { + this(null, exception); + } + + public JDKHttpFuture(V response) { + this(response, null); + } + + private JDKHttpFuture(V response, Exception exception) { + this.response = response; + this.exception = exception; + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean isDone() { + return true; + } + + @Override + public V get() throws InterruptedException, ExecutionException { + if (exception != null) { + throw new ExecutionException(exception); + } + + return response; + } + + @Override + public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + return get(); + } +} From bfa0109cb9f11ec5f80276906f215847e6cc87e1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 11 Jan 2017 16:46:44 +0300 Subject: [PATCH 207/250] Remove OAuthRequestAsync, just OAuthRequest. Request should not know anything about sync vs async --- changelog | 3 + .../DoktornaraboteOAuthServiceImpl.java | 4 +- .../apis/service/GeniusOAuthServiceImpl.java | 4 +- .../apis/service/HHOAuthServiceImpl.java | 4 +- .../apis/service/ImgurOAuthServiceImpl.java | 8 +- .../apis/service/LinkedIn20ServiceImpl.java | 4 +- .../apis/service/MailruOAuthServiceImpl.java | 4 +- .../service/OdnoklassnikiServiceImpl.java | 4 +- .../apis/service/TutByOAuthServiceImpl.java | 4 +- .../examples/FacebookAsyncNingExample.java | 92 +++--- .../examples/GitHubAsyncOkHttpExample.java | 93 +++--- .../examples/Google20AsyncAHCExample.java | 133 ++++----- .../apis/examples/MailruAsyncExample.java | 69 +++-- .../examples/SalesforceNingAsyncExample.java | 95 +++--- .../VkontakteExternalHttpExample.java | 4 +- .../OAuthParametersMissingException.java | 4 +- .../core/extractors/BaseStringExtractor.java | 8 +- .../extractors/BaseStringExtractorImpl.java | 12 +- .../core/extractors/HeaderExtractor.java | 4 +- .../core/extractors/HeaderExtractorImpl.java | 6 +- .../AbstractAsyncOnlyHttpClient.java | 8 +- .../core/httpclient/HttpClient.java | 10 +- .../core/httpclient/jdk/JDKHttpClient.java | 19 +- .../core/model/AbstractRequest.java | 267 +---------------- .../scribejava/core/model/OAuthRequest.java | 273 +++++++++++++++++- .../core/model/OAuthRequestAsync.java | 24 +- .../core/oauth/OAuth10aService.java | 45 +-- .../scribejava/core/oauth/OAuth20Service.java | 57 ++-- .../scribejava/core/oauth/OAuthService.java | 42 ++- .../core/oauth/OAuth20ServiceUnit.java | 6 +- .../httpclient/ahc/AhcHttpClient.java | 13 +- .../ahc/OAuthAsyncCompletionHandler.java | 6 +- .../httpclient/ning/NingHttpClient.java | 13 +- .../ning/OAuthAsyncCompletionHandler.java | 6 +- .../okhttp/OAuthAsyncCompletionHandler.java | 8 +- .../httpclient/okhttp/OkHttpHttpClient.java | 13 +- .../okhttp/OkHttpHttpClientTest.java | 10 +- 37 files changed, 694 insertions(+), 685 deletions(-) diff --git a/changelog b/changelog index d829bbe9a..d3a832068 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async + [3.4.1] * Drop deprecated methods * Move doktornarabote.ru urls to https (thanks to https://github.com/ezibrov) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java index 837449436..80c6cde48 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java @@ -1,9 +1,9 @@ package com.github.scribejava.apis.service; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class DoktornaraboteOAuthServiceImpl extends OAuth20Service { @@ -13,7 +13,7 @@ public DoktornaraboteOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java index 4c2aa992c..dd9c493cd 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java @@ -1,9 +1,9 @@ package com.github.scribejava.apis.service; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class GeniusOAuthServiceImpl extends OAuth20Service { @@ -13,7 +13,7 @@ public GeniusOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java index 8d1799272..ba9dd809b 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java @@ -1,9 +1,9 @@ package com.github.scribejava.apis.service; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class HHOAuthServiceImpl extends OAuth20Service { @@ -13,7 +13,7 @@ public HHOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java index ac80b1df6..c0f74aab6 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/ImgurOAuthServiceImpl.java @@ -2,10 +2,10 @@ import com.github.scribejava.apis.ImgurApi; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class ImgurOAuthServiceImpl extends OAuth20Service { @@ -15,7 +15,9 @@ public ImgurOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - protected T createAccessTokenRequest(String oauthVerifier, T request) { + protected OAuthRequest createAccessTokenRequest(String oauthVerifier) { + final DefaultApi20 api = getApi(); + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); final OAuthConfig config = getConfig(); request.addBodyParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addBodyParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); @@ -31,7 +33,7 @@ protected T createAccessTokenRequest(String oauthVer } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addHeader("Authorization", accessToken == null ? "Client-ID " + getConfig().getApiKey() : "Bearer " + accessToken.getAccessToken()); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java index b0e6adf14..4e26c6635 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java @@ -1,9 +1,9 @@ package com.github.scribejava.apis.service; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class LinkedIn20ServiceImpl extends OAuth20Service { @@ -13,7 +13,7 @@ public LinkedIn20ServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addQuerystringParameter("oauth2_access_token", accessToken.getAccessToken()); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java index d436d8244..3330bb006 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/MailruOAuthServiceImpl.java @@ -7,9 +7,9 @@ import org.apache.commons.codec.CharEncoding; import static org.apache.commons.codec.digest.DigestUtils.md5Hex; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class MailruOAuthServiceImpl extends OAuth20Service { @@ -19,7 +19,7 @@ public MailruOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { // sig = md5(params + secret_key) request.addQuerystringParameter("session_key", accessToken.getAccessToken()); request.addQuerystringParameter("app_id", getConfig().getApiKey()); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java index 2a6e01339..9de7f8fa2 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java @@ -5,9 +5,9 @@ import org.apache.commons.codec.CharEncoding; import static org.apache.commons.codec.digest.DigestUtils.md5Hex; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; import java.util.Arrays; @@ -18,7 +18,7 @@ public OdnoklassnikiServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { //sig = lower(md5( sorted_request_params_composed_string + md5(access_token + application_secret_key))) try { final String tokenDigest = md5Hex(accessToken.getAccessToken() + getConfig().getApiSecret()); diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/TutByOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/TutByOAuthServiceImpl.java index 21a61d13e..f1f14485f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/TutByOAuthServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/TutByOAuthServiceImpl.java @@ -1,10 +1,10 @@ package com.github.scribejava.apis.service; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.oauth.OAuth20Service; public class TutByOAuthServiceImpl extends OAuth20Service { @@ -14,7 +14,7 @@ public TutByOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addQuerystringParameter(OAuthConstants.TOKEN, accessToken.getAccessToken()); } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index a6e8b58f5..7bc944dd8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -8,7 +8,7 @@ import com.github.scribejava.apis.FacebookApi; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -35,62 +35,62 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(1_000) .build()); - final OAuth20Service service = new ServiceBuilder() + try (OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") .httpClientConfig(clientConfig) - .build(FacebookApi.instance()); + .build(FacebookApi.instance())) { + final Scanner in = new Scanner(System.in, "UTF-8"); - final Scanner in = new Scanner(System.in, "UTF-8"); + System.out.println("=== " + NETWORK_NAME + "'s Async OAuth Workflow ==="); + System.out.println(); - System.out.println("=== " + NETWORK_NAME + "'s Async OAuth Workflow ==="); - System.out.println(); + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); + System.out.println("And paste the state from server here. We have set 'secretState'='" + + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } - System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); - System.out.print(">>"); - final String value = in.nextLine(); - if (secretState.equals(value)) { - System.out.println("State value does match!"); - } else { - System.out.println("Ooops, state value does not match!"); - System.out.println("Expected = " + secretState); - System.out.println("Got = " + value); + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); - } - - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); - System.out.println("Got it! Lets see what we found..."); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + service.signRequest(accessToken, request); + final Response response = service.execute(request, null).get(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); - System.out.println(); - System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); - service.closeAsyncClient(); + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java index fc8d5ec44..1cfb35d06 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java @@ -3,7 +3,7 @@ import com.github.scribejava.apis.GitHubApi; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -27,61 +27,62 @@ public static void main(String... args) throws IOException, ExecutionException, final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() + try (OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") .httpClientConfig(OkHttpHttpClientConfig.defaultConfig()) - .build(GitHubApi.instance()); - final Scanner in = new Scanner(System.in, "UTF-8"); + .build(GitHubApi.instance())) { + final Scanner in = new Scanner(System.in, "UTF-8"); - System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); + System.out.println(); - System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); - System.out.print(">>"); - final String value = in.nextLine(); - if (secretState.equals(value)) { - System.out.println("State value does match!"); - } else { - System.out.println("Ooops, state value does not match!"); - System.out.println("Expected = " + secretState); - System.out.println("Got = " + value); + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); System.out.println(); - } - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); + System.out.println("And paste the state from server here. We have set 'secretState'='" + + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); + } else { + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); + } + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); - System.out.println("Got it! Lets see what we found..."); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + service.signRequest(accessToken, request); + final Response response = service.execute(request, null).get(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); - System.out.println(); - System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); - service.closeAsyncClient(); + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index 4511aa64b..baddacc9b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -7,7 +7,7 @@ import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -37,88 +37,89 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(1_000) .build()); - final OAuth20Service service = new ServiceBuilder() + try (OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .scope("profile") // replace with desired scope .state(secretState) .callback("http://example.com/callback") .httpClientConfig(clientConfig) - .build(GoogleApi20.instance()); - final Scanner in = new Scanner(System.in, "UTF-8"); + .build(GoogleApi20.instance())) { + final Scanner in = new Scanner(System.in, "UTF-8"); - System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - //pass access_type=offline to get refresh token - //https://developers.google.com/identity/protocols/OAuth2WebServer#preparing-to-start-the-oauth-20-flow - final Map additionalParams = new HashMap<>(); - additionalParams.put("access_type", "offline"); - //force to reget refresh token (if usera are asked not the first time) - additionalParams.put("prompt", "consent"); - final String authorizationUrl = service.getAuthorizationUrl(additionalParams); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); - - System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'."); - System.out.print(">>"); - final String value = in.nextLine(); - if (secretState.equals(value)) { - System.out.println("State value does match!"); - } else { - System.out.println("Ooops, state value does not match!"); - System.out.println("Expected = " + secretState); - System.out.println("Got = " + value); + System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ==="); System.out.println(); - } - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - - System.out.println("Refreshing the Access Token..."); - accessToken = service.refreshAccessTokenAsync(accessToken.getRefreshToken(), null).get(); - System.out.println("Refreshed the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - while (true) { - System.out.println("Paste fieldnames to fetch (leave empty to get profile, 'exit' to stop example)"); + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + //pass access_type=offline to get refresh token + //https://developers.google.com/identity/protocols/OAuth2WebServer#preparing-to-start-the-oauth-20-flow + final Map additionalParams = new HashMap<>(); + additionalParams.put("access_type", "offline"); + //force to reget refresh token (if usera are asked not the first time) + additionalParams.put("prompt", "consent"); + final String authorizationUrl = service.getAuthorizationUrl(additionalParams); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); System.out.print(">>"); - final String query = in.nextLine(); + final String code = in.nextLine(); System.out.println(); - final String requestUrl; - if ("exit".equals(query)) { - break; - } else if (query == null || query.isEmpty()) { - requestUrl = PROTECTED_RESOURCE_URL; + System.out.println("And paste the state from server here. We have set 'secretState'='" + + secretState + "'."); + System.out.print(">>"); + final String value = in.nextLine(); + if (secretState.equals(value)) { + System.out.println("State value does match!"); } else { - requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; + System.out.println("Ooops, state value does not match!"); + System.out.println("Expected = " + secretState); + System.out.println("Got = " + value); + System.out.println(); } - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, requestUrl); - service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println("Refreshing the Access Token..."); + accessToken = service.refreshAccessTokenAsync(accessToken.getRefreshToken(), null).get(); + System.out.println("Refreshed the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + while (true) { + System.out.println("Paste fieldnames to fetch (leave empty to get profile, 'exit' to stop example)"); + System.out.print(">>"); + final String query = in.nextLine(); + System.out.println(); + + final String requestUrl; + if ("exit".equals(query)) { + break; + } else if (query == null || query.isEmpty()) { + requestUrl = PROTECTED_RESOURCE_URL; + } else { + requestUrl = PROTECTED_RESOURCE_URL + "?fields=" + query; + } + + final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl); + service.signRequest(accessToken, request); + final Response response = service.execute(request, null).get(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); + + System.out.println(); + } } - service.closeAsyncClient(); } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index ec1c8868b..e4343d19b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -7,7 +7,7 @@ import com.github.scribejava.apis.MailruApi; import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -35,49 +35,48 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(10_000) .build()); - final OAuth20Service service = new ServiceBuilder() + try (OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") .httpClientConfig(clientConfig) - .build(MailruApi.instance()); + .build(MailruApi.instance())) { + final Scanner in = new Scanner(System.in, "UTF-8"); - final Scanner in = new Scanner(System.in, "UTF-8"); + System.out.println("=== " + NETWORK_NAME + "'s Async OAuth Workflow ==="); + System.out.println(); - System.out.println("=== " + NETWORK_NAME + "'s Async OAuth Workflow ==="); - System.out.println(); + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code = in.nextLine(); + System.out.println(); - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code = in.nextLine(); - System.out.println(); + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + service.signRequest(accessToken, request); + final Response response = service.execute(request, null).get(); - System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); - System.out.println("Got it! Lets see what we found..."); - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - - System.out.println(); - System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); - service.closeAsyncClient(); + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 4167b535d..e57cd7f8d 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -11,7 +11,7 @@ import com.github.scribejava.apis.salesforce.SalesforceToken; import com.github.scribejava.httpclient.ning.NingHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -43,62 +43,51 @@ public static void main(String... args) throws InterruptedException, ExecutionEx //IT's important! Salesforce upper require TLS v1.1 or 1.2 SalesforceApi.initTLSv11orUpper(); - final OAuth20Service service = new ServiceBuilder() + try (OAuth20Service service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) .httpClientConfig(clientConfig) .callback("https://www.example.com/callback") - .build(SalesforceApi.instance()); - - System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - final String authorizationUrl = service.getAuthorizationUrl(); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize ScribeJava here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - final String code; - try (Scanner in = new Scanner(System.in)) { - code = in.nextLine(); + .build(SalesforceApi.instance())) { + System.out.println("=== " + NETWORK_NAME + "'s OAuth20 Workflow ==="); + System.out.println(); + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize ScribeJava here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final String code; + try (Scanner in = new Scanner(System.in)) { + code = in.nextLine(); + } + System.out.println(); + final String codeEncoded = URLDecoder.decode(code, "UTF-8"); + // Trade the Request Token and Verifier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + System.out.println("Instance is: " + accessToken.getInstanceUrl()); + // Now let's go and ask for a protected resource! + System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); + // Sample SOQL statement + final String queryEncoded = URLEncoder.encode("Select Id, Name from Account LIMIT 10", "UTF-8"); + // Building the query URI. We've parsed the instance URL from the + // accessToken request. + final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + System.out.println(); + System.out.println("Full URL: " + url); + final OAuthRequest request = new OAuthRequest(Verb.GET, url); + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + final Response response = service.execute(request, null).get(); + System.out.println(); + System.out.println(response.getCode()); + System.out.println(response.getBody()); } - System.out.println(); - - final String codeEncoded = URLDecoder.decode(code, "UTF-8"); - - // Trade the Request Token and Verifier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - System.out.println("Instance is: " + accessToken.getInstanceUrl()); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); - - // Sample SOQL statement - final String queryEncoded = URLEncoder.encode("Select Id, Name from Account LIMIT 10", "UTF-8"); - - // Building the query URI. We've parsed the instance URL from the - // accessToken request. - final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; - - System.out.println(); - System.out.println("Full URL: " + url); - - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, url); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - final Response response = service.execute(request, null).get(); - - System.out.println(); - System.out.println(response.getCode()); - System.out.println(response.getBody()); - service.closeAsyncClient(); } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java index ad16d5428..cfdbe6210 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -4,7 +4,7 @@ import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.apis.VkontakteApi; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -72,7 +72,7 @@ public static void main(String... args) throws IOException, InterruptedException // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, PROTECTED_RESOURCE_URL); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); final Response response = service.execute(request, null).get(); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthParametersMissingException.java b/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthParametersMissingException.java index ddf77ab78..2d4a5dfc4 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthParametersMissingException.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/exceptions/OAuthParametersMissingException.java @@ -1,6 +1,6 @@ package com.github.scribejava.core.exceptions; -import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.OAuthRequest; /** * Specialized exception that represents a missing OAuth parameter. @@ -16,7 +16,7 @@ public class OAuthParametersMissingException extends OAuthException { * * @param request OAuthRequest that caused the error */ - public OAuthParametersMissingException(AbstractRequest request) { + public OAuthParametersMissingException(OAuthRequest request) { super(String.format(MSG, request)); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractor.java index 113dc3515..21cb3431b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractor.java @@ -1,19 +1,19 @@ package com.github.scribejava.core.extractors; -import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.OAuthRequest; /** - * Simple command object that extracts a base string from a {@link AbstractRequest} + * Simple command object that extracts a base string from a {@link OAuthRequest} */ public interface BaseStringExtractor { /** - * Extracts an url-encoded base string from the {@link AbstractRequest}. + * Extracts an url-encoded base string from the {@link OAuthRequest}. * * See the oauth spec for more info on this. * * @param request the OAuthRequest * @return the url-encoded base string */ - String extract(AbstractRequest request); + String extract(OAuthRequest request); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractorImpl.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractorImpl.java index e2ba3b950..879dac9ae 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractorImpl.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/BaseStringExtractorImpl.java @@ -1,7 +1,7 @@ package com.github.scribejava.core.extractors; import com.github.scribejava.core.exceptions.OAuthParametersMissingException; -import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.ParameterList; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -17,7 +17,7 @@ public class BaseStringExtractorImpl implements BaseStringExtractor { * {@inheritDoc} */ @Override - public String extract(AbstractRequest request) { + public String extract(OAuthRequest request) { checkPreconditions(request); final String verb = OAuthEncoder.encode(getVerb(request)); final String url = OAuthEncoder.encode(getUrl(request)); @@ -25,15 +25,15 @@ public String extract(AbstractRequest request) { return String.format(AMPERSAND_SEPARATED_STRING, verb, url, params); } - protected String getVerb(AbstractRequest request) { + protected String getVerb(OAuthRequest request) { return request.getVerb().name(); } - protected String getUrl(AbstractRequest request) { + protected String getUrl(OAuthRequest request) { return request.getSanitizedUrl(); } - protected String getSortedAndEncodedParams(AbstractRequest request) { + protected String getSortedAndEncodedParams(OAuthRequest request) { final ParameterList params = new ParameterList(); params.addAll(request.getQueryStringParams()); params.addAll(request.getBodyParams()); @@ -41,7 +41,7 @@ protected String getSortedAndEncodedParams(AbstractRequest request) { return params.sort().asOauthBaseString(); } - protected void checkPreconditions(AbstractRequest request) { + protected void checkPreconditions(OAuthRequest request) { Preconditions.checkNotNull(request, "Cannot extract base string from a null object"); if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractor.java index d84390a91..e6e6156e4 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractor.java @@ -1,6 +1,6 @@ package com.github.scribejava.core.extractors; -import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.OAuthRequest; /** * Simple command object that generates an OAuth Authorization header to include in the request. @@ -13,5 +13,5 @@ public interface HeaderExtractor { * @param request the AbstractRequest to inspect and generate the header * @return the Http header value */ - String extract(AbstractRequest request); + String extract(OAuthRequest request); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractorImpl.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractorImpl.java index a3c142a10..2a840521c 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractorImpl.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/HeaderExtractorImpl.java @@ -3,7 +3,7 @@ import java.util.Map; import com.github.scribejava.core.exceptions.OAuthParametersMissingException; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.AbstractRequest; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.utils.OAuthEncoder; import com.github.scribejava.core.utils.Preconditions; @@ -20,7 +20,7 @@ public class HeaderExtractorImpl implements HeaderExtractor { * {@inheritDoc} */ @Override - public String extract(AbstractRequest request) { + public String extract(OAuthRequest request) { checkPreconditions(request); final Map parameters = request.getOauthParameters(); final StringBuilder header = new StringBuilder(parameters.size() * ESTIMATED_PARAM_LENGTH); @@ -40,7 +40,7 @@ public String extract(AbstractRequest request) { return header.toString(); } - private void checkPreconditions(AbstractRequest request) { + private void checkPreconditions(OAuthRequest request) { Preconditions.checkNotNull(request, "Cannot extract a header from a null object"); if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) { diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java index 7b59a81f5..091a95849 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/AbstractAsyncOnlyHttpClient.java @@ -1,6 +1,6 @@ package com.github.scribejava.core.httpclient; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import java.io.File; @@ -14,20 +14,20 @@ public abstract class AbstractAsyncOnlyHttpClient implements HttpClient { public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, byte[] bodyContents) throws InterruptedException, ExecutionException, IOException { return executeAsync(userAgent, headers, httpVerb, completeUrl, bodyContents, null, - (OAuthRequestAsync.ResponseConverter) null).get(); + (OAuthRequest.ResponseConverter) null).get(); } @Override public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, String bodyContents) throws InterruptedException, ExecutionException, IOException { return executeAsync(userAgent, headers, httpVerb, completeUrl, bodyContents, null, - (OAuthRequestAsync.ResponseConverter) null).get(); + (OAuthRequest.ResponseConverter) null).get(); } @Override public Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, File bodyContents) throws InterruptedException, ExecutionException, IOException { return executeAsync(userAgent, headers, httpVerb, completeUrl, bodyContents, null, - (OAuthRequestAsync.ResponseConverter) null).get(); + (OAuthRequest.ResponseConverter) null).get(); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java index 3d6d0433f..5793faf5c 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/HttpClient.java @@ -1,7 +1,7 @@ package com.github.scribejava.core.httpclient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import java.io.File; @@ -18,15 +18,13 @@ public interface HttpClient { void close() throws IOException; Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - byte[] bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter); + byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter); Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter); + String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter); Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequestAsync.ResponseConverter converter); + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter); Response execute(String userAgent, Map headers, Verb httpVerb, String completeUrl, byte[] bodyContents) throws InterruptedException, ExecutionException, IOException; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java index 64350a764..3e19a7d6d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java @@ -4,7 +4,7 @@ import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import java.io.File; @@ -32,8 +32,7 @@ public void close() throws IOException { @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - byte[] bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { try { final T response = converter.convert(execute(userAgent, headers, httpVerb, completeUrl, bodyContents)); callback.onCompleted(response); @@ -46,22 +45,24 @@ public Future executeAsync(String userAgent, Map headers, @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { try { final T response = converter.convert(execute(userAgent, headers, httpVerb, completeUrl, bodyContents)); - callback.onCompleted(response); + if (callback != null) { + callback.onCompleted(response); + } return new JDKHttpFuture<>(response); } catch (InterruptedException | ExecutionException | IOException e) { - callback.onThrowable(e); + if (callback != null) { + callback.onThrowable(e); + } return new JDKHttpFuture<>(e); } } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - File bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { throw new UnsupportedOperationException("JDKHttpClient do not support File payload for the moment"); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java index 96550f4e9..7cf52107d 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java @@ -1,272 +1,9 @@ package com.github.scribejava.core.model; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.Map; -import com.github.scribejava.core.exceptions.OAuthException; -import java.io.File; - /** - * The representation of an OAuth HttpRequest. + * @deprecated use {@link OAuthRequest} */ +@Deprecated public abstract class AbstractRequest { - private static final String OAUTH_PREFIX = "oauth_"; - - private final String url; - private final Verb verb; - private final ParameterList querystringParams = new ParameterList(); - private final ParameterList bodyParams = new ParameterList(); - private final Map headers = new HashMap<>(); - - private String charset; - - private String stringPayload; - private byte[] byteArrayPayload; - private File filePayload; - - private final Map oauthParameters = new HashMap<>(); - - private String realm; - - /** - * Default constructor. - * - * @param verb Http verb/method - * @param url resource URL - */ - public AbstractRequest(Verb verb, String url) { - this.verb = verb; - this.url = url; - } - - /** - * Adds an OAuth parameter. - * - * @param key name of the parameter - * @param value value of the parameter - * @throws IllegalArgumentException if the parameter is not an OAuth parameter - */ - public void addOAuthParameter(String key, String value) { - oauthParameters.put(checkKey(key), value); - } - - private String checkKey(String key) { - 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', '%s' or start with '%s'", OAuthConstants.SCOPE, - OAuthConstants.REALM, OAUTH_PREFIX)); - } - } - - public Map getOauthParameters() { - return oauthParameters; - } - - public void setRealm(String realm) { - this.realm = realm; - } - - public String getRealm() { - return realm; - } - - /** - * Returns the complete url (host + resource + encoded querystring parameters). - * - * @return the complete url. - */ - public String getCompleteUrl() { - return querystringParams.appendTo(url); - } - - /** - * Add an HTTP Header to the Request - * - * @param key the header name - * @param value the header value - */ - public void addHeader(String key, String value) { - this.headers.put(key, value); - } - - /** - * Add a body Parameter (for POST/ PUT Requests) - * - * @param key the parameter name - * @param value the parameter value - */ - public void addBodyParameter(String key, String value) { - this.bodyParams.add(key, value); - } - - /** - * Add a QueryString parameter - * - * @param key the parameter name - * @param value the parameter value - */ - public void addQuerystringParameter(String key, String value) { - this.querystringParams.add(key, value); - } - - public void addParameter(String key, String value) { - if (hasBodyContent()) { - bodyParams.add(key, value); - } else { - querystringParams.add(key, value); - } - } - - protected boolean hasBodyContent() { - return verb == Verb.PUT || verb == Verb.POST; - } - - /** - * Set body payload. This method is used when the HTTP body is not a form-url-encoded string, but another thing. - * Like for example XML. Note: The contents are not part of the OAuth signature - * - * @param payload the body of the request - */ - public void setPayload(String payload) { - resetPayload(); - stringPayload = payload; - } - - /** - * Overloaded version for byte arrays - * - * @param payload byte[] - */ - public void setPayload(byte[] payload) { - resetPayload(); - byteArrayPayload = payload.clone(); - } - - /** - * Overloaded version for File - * - * @param payload File - */ - public void setPayload(File payload) { - resetPayload(); - filePayload = payload; - } - - private void resetPayload() { - stringPayload = null; - byteArrayPayload = null; - filePayload = null; - } - - /** - * Get a {@link ParameterList} with the query string parameters. - * - * @return a {@link ParameterList} containing the query string parameters. - * @throws OAuthException if the request URL is not valid. - */ - public ParameterList getQueryStringParams() { - try { - final ParameterList result = new ParameterList(); - final String queryString = new URL(url).getQuery(); - result.addQuerystring(queryString); - result.addAll(querystringParams); - return result; - } catch (MalformedURLException mue) { - throw new OAuthException("Malformed URL", mue); - } - } - - /** - * Obtains a {@link ParameterList} of the body parameters. - * - * @return a {@link ParameterList}containing the body parameters. - */ - public ParameterList getBodyParams() { - return bodyParams; - } - - /** - * Obtains the URL of the HTTP Request. - * - * @return the original URL of the HTTP Request - */ - public String getUrl() { - return url; - } - - /** - * Returns the URL without the port and the query string part. - * - * @return the OAuth-sanitized URL - */ - public String getSanitizedUrl() { - if (url.startsWith("http://") && (url.endsWith(":80") || url.contains(":80/"))) { - return url.replaceAll("\\?.*", "").replaceAll(":80", ""); - } else if (url.startsWith("https://") && (url.endsWith(":443") || url.contains(":443/"))) { - return url.replaceAll("\\?.*", "").replaceAll(":443", ""); - } else { - return url.replaceAll("\\?.*", ""); - } - } - - /** - * Returns the body of the request (set in {@link #setPayload(java.lang.String)}) - * - * @return form encoded string - */ - public String getStringPayload() { - return stringPayload; - } - - /** - * @return the body of the request (set in {@link #setPayload(byte[])} or in - * {@link #addBodyParameter(java.lang.String, java.lang.String)} ) - */ - public byte[] getByteArrayPayload() { - if (byteArrayPayload != null) { - return byteArrayPayload; - } - final String body = bodyParams.asFormUrlEncodedString(); - try { - return body.getBytes(getCharset()); - } catch (UnsupportedEncodingException uee) { - throw new OAuthException("Unsupported Charset: " + getCharset(), uee); - } - } - - public File getFilePayload() { - return filePayload; - } - - @Override - public String toString() { - return String.format("@Request(%s %s)", getVerb(), getUrl()); - } - - public Verb getVerb() { - return verb; - } - - public Map getHeaders() { - return headers; - } - - public String getCharset() { - return charset == null ? Charset.defaultCharset().name() : charset; - } - - /** - * Set the charset of the body of the request - * - * @param charsetName name of the charset of the request - */ - public void setCharset(String charsetName) { - charset = charsetName; - } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index b12c3683d..ba99bf6b5 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -1,9 +1,47 @@ package com.github.scribejava.core.model; +import com.github.scribejava.core.exceptions.OAuthException; +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; + +/** + * The representation of an OAuth HttpRequest. + */ public class OAuthRequest extends AbstractRequest { + private static final String OAUTH_PREFIX = "oauth_"; + + private final String url; + private final Verb verb; + private final ParameterList querystringParams = new ParameterList(); + private final ParameterList bodyParams = new ParameterList(); + private final Map headers = new HashMap<>(); + + private String charset; + + private String stringPayload; + private byte[] byteArrayPayload; + private File filePayload; + + private final Map oauthParameters = new HashMap<>(); + + private String realm; + + /** + * Default constructor. + * + * @param verb Http verb/method + * @param url resource URL + */ public OAuthRequest(Verb verb, String url) { - super(verb, url); + this.verb = verb; + this.url = url; } /** @@ -17,4 +55,237 @@ public OAuthRequest(Verb verb, String url) { public OAuthRequest(Verb verb, String url, OAuthConfig config) { this(verb, url); } + + /** + * Adds an OAuth parameter. + * + * @param key name of the parameter + * @param value value of the parameter + * @throws IllegalArgumentException if the parameter is not an OAuth parameter + */ + public void addOAuthParameter(String key, String value) { + oauthParameters.put(checkKey(key), value); + } + + private String checkKey(String key) { + 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', '%s' or start with '%s'", OAuthConstants.SCOPE, + OAuthConstants.REALM, OAUTH_PREFIX)); + } + } + + public Map getOauthParameters() { + return oauthParameters; + } + + public void setRealm(String realm) { + this.realm = realm; + } + + public String getRealm() { + return realm; + } + + /** + * Returns the complete url (host + resource + encoded querystring parameters). + * + * @return the complete url. + */ + public String getCompleteUrl() { + return querystringParams.appendTo(url); + } + + /** + * Add an HTTP Header to the Request + * + * @param key the header name + * @param value the header value + */ + public void addHeader(String key, String value) { + this.headers.put(key, value); + } + + /** + * Add a body Parameter (for POST/ PUT Requests) + * + * @param key the parameter name + * @param value the parameter value + */ + public void addBodyParameter(String key, String value) { + this.bodyParams.add(key, value); + } + + /** + * Add a QueryString parameter + * + * @param key the parameter name + * @param value the parameter value + */ + public void addQuerystringParameter(String key, String value) { + this.querystringParams.add(key, value); + } + + public void addParameter(String key, String value) { + if (hasBodyContent()) { + bodyParams.add(key, value); + } else { + querystringParams.add(key, value); + } + } + + protected boolean hasBodyContent() { + return verb == Verb.PUT || verb == Verb.POST; + } + + /** + * Set body payload. This method is used when the HTTP body is not a form-url-encoded string, but another thing. + * Like for example XML. Note: The contents are not part of the OAuth signature + * + * @param payload the body of the request + */ + public void setPayload(String payload) { + resetPayload(); + stringPayload = payload; + } + + /** + * Overloaded version for byte arrays + * + * @param payload byte[] + */ + public void setPayload(byte[] payload) { + resetPayload(); + byteArrayPayload = payload.clone(); + } + + /** + * Overloaded version for File + * + * @param payload File + */ + public void setPayload(File payload) { + resetPayload(); + filePayload = payload; + } + + private void resetPayload() { + stringPayload = null; + byteArrayPayload = null; + filePayload = null; + } + + /** + * Get a {@link ParameterList} with the query string parameters. + * + * @return a {@link ParameterList} containing the query string parameters. + * @throws OAuthException if the request URL is not valid. + */ + public ParameterList getQueryStringParams() { + try { + final ParameterList result = new ParameterList(); + final String queryString = new URL(url).getQuery(); + result.addQuerystring(queryString); + result.addAll(querystringParams); + return result; + } catch (MalformedURLException mue) { + throw new OAuthException("Malformed URL", mue); + } + } + + /** + * Obtains a {@link ParameterList} of the body parameters. + * + * @return a {@link ParameterList}containing the body parameters. + */ + public ParameterList getBodyParams() { + return bodyParams; + } + + /** + * Obtains the URL of the HTTP Request. + * + * @return the original URL of the HTTP Request + */ + public String getUrl() { + return url; + } + + /** + * Returns the URL without the port and the query string part. + * + * @return the OAuth-sanitized URL + */ + public String getSanitizedUrl() { + if (url.startsWith("http://") && (url.endsWith(":80") || url.contains(":80/"))) { + return url.replaceAll("\\?.*", "").replaceAll(":80", ""); + } else if (url.startsWith("https://") && (url.endsWith(":443") || url.contains(":443/"))) { + return url.replaceAll("\\?.*", "").replaceAll(":443", ""); + } else { + return url.replaceAll("\\?.*", ""); + } + } + + /** + * Returns the body of the request (set in {@link #setPayload(java.lang.String)}) + * + * @return form encoded string + */ + public String getStringPayload() { + return stringPayload; + } + + /** + * @return the body of the request (set in {@link #setPayload(byte[])} or in + * {@link #addBodyParameter(java.lang.String, java.lang.String)} ) + */ + public byte[] getByteArrayPayload() { + if (byteArrayPayload != null) { + return byteArrayPayload; + } + final String body = bodyParams.asFormUrlEncodedString(); + try { + return body.getBytes(getCharset()); + } catch (UnsupportedEncodingException uee) { + throw new OAuthException("Unsupported Charset: " + getCharset(), uee); + } + } + + public File getFilePayload() { + return filePayload; + } + + @Override + public String toString() { + return String.format("@Request(%s %s)", getVerb(), getUrl()); + } + + public Verb getVerb() { + return verb; + } + + public Map getHeaders() { + return headers; + } + + public String getCharset() { + return charset == null ? Charset.defaultCharset().name() : charset; + } + + /** + * Set the charset of the body of the request + * + * @param charsetName name of the charset of the request + */ + public void setCharset(String charsetName) { + charset = charsetName; + } + + public interface ResponseConverter { + + T convert(Response response) throws IOException; + } + } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index f6bd48003..dc8127c05 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -1,15 +1,27 @@ package com.github.scribejava.core.model; -import java.io.IOException; - -public class OAuthRequestAsync extends AbstractRequest { +/** + * + * @deprecated use {@link OAuthRequest} + */ +@Deprecated +public class OAuthRequestAsync extends OAuthRequest { + /** + * + * @deprecated use {@link OAuthRequest#OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String) } + */ + @Deprecated public OAuthRequestAsync(Verb verb, String url) { super(verb, url); } - public interface ResponseConverter { - - T convert(Response response) throws IOException; + /** + * + * @param goal type + * @deprecated use {@link OAuthRequest.ResponseConverter} + */ + @Deprecated + public interface ResponseConverter extends OAuthRequest.ResponseConverter { } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index 6bdb539ed..d9332d03b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -4,14 +4,12 @@ import java.util.Map; import java.util.concurrent.Future; import com.github.scribejava.core.builder.api.DefaultApi10a; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.services.Base64Encoder; import com.github.scribejava.core.utils.MapUtils; @@ -39,9 +37,7 @@ public OAuth10aService(DefaultApi10a api, OAuthConfig config) { public final OAuth1RequestToken getRequestToken() throws IOException, InterruptedException, ExecutionException { final OAuthConfig config = getConfig(); config.log("obtaining request token from " + api.getRequestTokenEndpoint()); - final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); - - prepareRequestTokenRequest(request); + final OAuthRequest request = prepareRequestTokenRequest(); config.log("sending request..."); final Response response = execute(request); @@ -52,14 +48,16 @@ public final OAuth1RequestToken getRequestToken() throws IOException, Interrupte return api.getRequestTokenExtractor().extract(response); } + public final Future getRequestTokenAsync() { + return getRequestTokenAsync(null); + } + public final Future getRequestTokenAsync( OAuthAsyncRequestCallback callback) { final OAuthConfig config = getConfig(); config.log("async obtaining request token from " + api.getRequestTokenEndpoint()); - final OAuthRequestAsync request - = new OAuthRequestAsync(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); - prepareRequestTokenRequest(request); - return execute(request, callback, new OAuthRequestAsync.ResponseConverter() { + final OAuthRequest request = prepareRequestTokenRequest(); + return execute(request, callback, new OAuthRequest.ResponseConverter() { @Override public OAuth1RequestToken convert(Response response) throws IOException { return getApi().getRequestTokenExtractor().extract(response); @@ -67,15 +65,17 @@ public OAuth1RequestToken convert(Response response) throws IOException { }); } - protected void prepareRequestTokenRequest(AbstractRequest request) { + protected OAuthRequest prepareRequestTokenRequest() { + final OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); final OAuthConfig config = getConfig(); config.log("setting oauth_callback to " + config.getCallback()); request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback()); addOAuthParams(request, ""); appendSignature(request); + return request; } - private void addOAuthParams(AbstractRequest request, String tokenSecret) { + private void addOAuthParams(OAuthRequest request, String tokenSecret) { final OAuthConfig config = getConfig(); request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); @@ -94,12 +94,15 @@ private void addOAuthParams(AbstractRequest request, String tokenSecret) { public final OAuth1AccessToken getAccessToken(OAuth1RequestToken requestToken, String oauthVerifier) throws IOException, InterruptedException, ExecutionException { getConfig().log("obtaining access token from " + api.getAccessTokenEndpoint()); - final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); - prepareAccessTokenRequest(request, requestToken, oauthVerifier); + final OAuthRequest request = prepareAccessTokenRequest(requestToken, oauthVerifier); final Response response = execute(request); return api.getAccessTokenExtractor().extract(response); } + public final Future getAccessTokenAsync(OAuth1RequestToken requestToken, String oauthVerifier) { + return getAccessTokenAsync(requestToken, oauthVerifier, null); + } + /** * Start the request to retrieve the access token. The optionally provided * callback will be called with the Token when it is available. @@ -113,9 +116,8 @@ public final Future getAccessTokenAsync(OAuth1RequestToken re OAuthAsyncRequestCallback callback) { final OAuthConfig config = getConfig(); config.log("async obtaining access token from " + api.getAccessTokenEndpoint()); - final OAuthRequestAsync request = new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); - prepareAccessTokenRequest(request, requestToken, oauthVerifier); - return execute(request, callback, new OAuthRequestAsync.ResponseConverter() { + final OAuthRequest request = prepareAccessTokenRequest(requestToken, oauthVerifier); + return execute(request, callback, new OAuthRequest.ResponseConverter() { @Override public OAuth1AccessToken convert(Response response) throws IOException { return getApi().getAccessTokenExtractor().extract(response); @@ -123,18 +125,19 @@ public OAuth1AccessToken convert(Response response) throws IOException { }); } - protected void prepareAccessTokenRequest(AbstractRequest request, OAuth1RequestToken requestToken, - String oauthVerifier) { + protected OAuthRequest prepareAccessTokenRequest(OAuth1RequestToken requestToken, String oauthVerifier) { + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); final OAuthConfig config = getConfig(); request.addOAuthParameter(OAuthConstants.TOKEN, requestToken.getToken()); request.addOAuthParameter(OAuthConstants.VERIFIER, oauthVerifier); config.log("setting token to: " + requestToken + " and verifier to: " + oauthVerifier); addOAuthParams(request, requestToken.getTokenSecret()); appendSignature(request); + return request; } @Override - public void signRequest(OAuth1AccessToken token, AbstractRequest request) { + public void signRequest(OAuth1AccessToken token, OAuthRequest request) { final OAuthConfig config = getConfig(); config.log("signing request: " + request.getCompleteUrl()); @@ -162,7 +165,7 @@ public String getAuthorizationUrl(OAuth1RequestToken requestToken) { return api.getAuthorizationUrl(requestToken); } - private String getSignature(AbstractRequest request, String tokenSecret) { + private String getSignature(OAuthRequest request, String tokenSecret) { final OAuthConfig config = getConfig(); config.log("generating signature..."); config.log("using base64 encoder: " + Base64Encoder.type()); @@ -174,7 +177,7 @@ private String getSignature(AbstractRequest request, String tokenSecret) { return signature; } - private void appendSignature(AbstractRequest request) { + private void appendSignature(OAuthRequest request) { final OAuthConfig config = getConfig(); switch (config.getSignatureType()) { case Header: diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index d33c6fd07..c1ec7fc44 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -5,14 +5,12 @@ import java.nio.charset.Charset; import java.util.concurrent.Future; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuth2Authorization; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -33,17 +31,22 @@ public OAuth20Service(DefaultApi20 api, OAuthConfig config) { this.api = api; } - //sync version, protected to facilitate mocking + //protected to facilitate mocking protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) throws IOException, InterruptedException, ExecutionException { return api.getAccessTokenExtractor().extract(execute(request)); } - //async version, protected to facilitate mocking - protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, + //protected to facilitate mocking + protected Future sendAccessTokenRequestAsync(OAuthRequest request) { + return sendAccessTokenRequestAsync(request, null); + } + + //protected to facilitate mocking + protected Future sendAccessTokenRequestAsync(OAuthRequest request, OAuthAsyncRequestCallback callback) { - return execute(request, callback, new OAuthRequestAsync.ResponseConverter() { + return execute(request, callback, new OAuthRequest.ResponseConverter() { @Override public OAuth2AccessToken convert(Response response) throws IOException { return getApi().getAccessTokenExtractor().extract(response); @@ -53,12 +56,15 @@ public OAuth2AccessToken convert(Response response) throws IOException { public final OAuth2AccessToken getAccessToken(String code) throws IOException, InterruptedException, ExecutionException { - final OAuthRequest request = createAccessTokenRequest(code, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); + final OAuthRequest request = createAccessTokenRequest(code); return sendAccessTokenRequestSync(request); } + public final Future getAccessTokenAsync(String code) { + return getAccessTokenAsync(code, null); + } + /** * Start the request to retrieve the access token. The optionally provided callback will be called with the Token * when it is available. @@ -69,13 +75,13 @@ public final OAuth2AccessToken getAccessToken(String code) */ public final Future getAccessTokenAsync(String code, OAuthAsyncRequestCallback callback) { - final OAuthRequestAsync request = createAccessTokenRequest(code, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); + final OAuthRequest request = createAccessTokenRequest(code); return sendAccessTokenRequestAsync(request, callback); } - protected T createAccessTokenRequest(String code, T request) { + protected OAuthRequest createAccessTokenRequest(String code) { + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); @@ -91,24 +97,27 @@ protected T createAccessTokenRequest(String code, T public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException, InterruptedException, ExecutionException { - final OAuthRequest request = createRefreshTokenRequest(refreshToken, - new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint())); + final OAuthRequest request = createRefreshTokenRequest(refreshToken); return sendAccessTokenRequestSync(request); } + public final Future refreshAccessTokenAsync(String refreshToken) { + return refreshAccessTokenAsync(refreshToken, null); + } + public final Future refreshAccessTokenAsync(String refreshToken, OAuthAsyncRequestCallback callback) { - final OAuthRequestAsync request = createRefreshTokenRequest(refreshToken, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint())); + final OAuthRequest request = createRefreshTokenRequest(refreshToken); return sendAccessTokenRequestAsync(request, callback); } - protected T createRefreshTokenRequest(String refreshToken, T request) { + protected OAuthRequest createRefreshTokenRequest(String refreshToken) { if (refreshToken == null || refreshToken.isEmpty()) { throw new IllegalArgumentException("The refreshToken cannot be null or empty"); } + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint()); final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); @@ -119,12 +128,15 @@ protected T createRefreshTokenRequest(String refresh public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String password) throws IOException, InterruptedException, ExecutionException { - final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); + final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password); return sendAccessTokenRequestSync(request); } + public final Future getAccessTokenPasswordGrantAsync(String uname, String password) { + return getAccessTokenPasswordGrantAsync(uname, password, null); + } + /** * Request Access Token Password Grant async version * @@ -135,14 +147,13 @@ public final OAuth2AccessToken getAccessTokenPasswordGrant(String uname, String */ public final Future getAccessTokenPasswordGrantAsync(String uname, String password, OAuthAsyncRequestCallback callback) { - final OAuthRequestAsync request = createAccessTokenPasswordGrantRequest(uname, password, - new OAuthRequestAsync(api.getAccessTokenVerb(), api.getAccessTokenEndpoint())); + final OAuthRequest request = createAccessTokenPasswordGrantRequest(uname, password); return sendAccessTokenRequestAsync(request, callback); } - protected T createAccessTokenPasswordGrantRequest(String username, String password, - T request) { + protected OAuthRequest createAccessTokenPasswordGrantRequest(String username, String password) { + final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.USERNAME, username); request.addParameter(OAuthConstants.PASSWORD, password); @@ -175,7 +186,7 @@ public String getVersion() { } @Override - public void signRequest(OAuth2AccessToken accessToken, AbstractRequest request) { + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getAccessToken()); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 251c2f9fe..c17c3b7dc 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -1,7 +1,6 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.httpclient.HttpClientProvider; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.httpclient.jdk.JDKHttpClient; @@ -9,7 +8,6 @@ import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Token; import java.io.File; @@ -25,7 +23,7 @@ * A facade responsible for the retrieval of request and access tokens and for the signing of HTTP requests. * @param type of token used to sign the request */ -public abstract class OAuthService { +public abstract class OAuthService implements AutoCloseable { private final OAuthConfig config; private final HttpClient httpClient; @@ -52,7 +50,18 @@ private static HttpClient getClient(HttpClientConfig config) { return null; } + /** + * + * @throws IOException IOException + * @deprecated use {@link #close() } + */ + @Deprecated public void closeAsyncClient() throws IOException { + close(); + } + + @Override + public void close() throws IOException { httpClient.close(); } @@ -67,10 +76,10 @@ public OAuthConfig getConfig() { */ public abstract String getVersion(); - public abstract void signRequest(T token, AbstractRequest request); + public abstract void signRequest(T token, OAuthRequest request); - public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + public Future execute(OAuthRequest request, OAuthAsyncRequestCallback callback, + OAuthRequest.ResponseConverter converter) { final File filePayload = request.getFilePayload(); if (filePayload != null) { @@ -85,11 +94,11 @@ public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallbac } } - public Future execute(OAuthRequestAsync request, OAuthAsyncRequestCallback callback) { + public Future execute(OAuthRequest request, OAuthAsyncRequestCallback callback) { return execute(request, callback, null); } - public Response execute(OAuthRequestAsync request) throws InterruptedException, ExecutionException, IOException { + public Response execute(OAuthRequest request) throws InterruptedException, ExecutionException, IOException { final File filePayload = request.getFilePayload(); if (filePayload != null) { return httpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), @@ -102,21 +111,4 @@ public Response execute(OAuthRequestAsync request) throws InterruptedException, request.getCompleteUrl(), request.getByteArrayPayload()); } } - - public Response execute(OAuthRequest request) throws InterruptedException, ExecutionException, IOException { - final JDKHttpClient jdkHttpClient = httpClient instanceof JDKHttpClient ? (JDKHttpClient) httpClient - : new JDKHttpClient(JDKHttpClientConfig.defaultConfig()); - - final File filePayload = request.getFilePayload(); - if (filePayload != null) { - return jdkHttpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), - request.getCompleteUrl(), filePayload); - } else if (request.getStringPayload() != null) { - return jdkHttpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), - request.getCompleteUrl(), request.getStringPayload()); - } else { - return jdkHttpClient.execute(config.getUserAgent(), request.getHeaders(), request.getVerb(), - request.getCompleteUrl(), request.getByteArrayPayload()); - } - } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java index 4d75c5ece..8a49c0ee1 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceUnit.java @@ -1,13 +1,11 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.AbstractRequest; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.OAuthRequestAsync; import com.github.scribejava.core.model.Parameter; import com.google.gson.Gson; @@ -30,7 +28,7 @@ protected OAuth2AccessToken sendAccessTokenRequestSync(OAuthRequest request) { return new OAuth2AccessToken(TOKEN, prepareRawResponse(request)); } - private String prepareRawResponse(T request) { + private String prepareRawResponse(OAuthRequest request) { final Gson json = new Gson(); final Map response = new HashMap<>(); response.put(OAuthConstants.ACCESS_TOKEN, TOKEN); @@ -48,7 +46,7 @@ private String prepareRawResponse(T request) { } @Override - protected Future sendAccessTokenRequestAsync(OAuthRequestAsync request, + protected Future sendAccessTokenRequestAsync(OAuthRequest request, OAuthAsyncRequestCallback callback) { final OAuth2AccessToken accessToken = new OAuth2AccessToken(TOKEN, prepareRawResponse(request)); diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index f547779a1..a4962b2b5 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -3,7 +3,7 @@ import com.github.scribejava.core.httpclient.AbstractAsyncOnlyHttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; import org.asynchttpclient.AsyncHttpClient; import org.asynchttpclient.DefaultAsyncHttpClient; @@ -36,31 +36,28 @@ public void close() throws IOException { @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - byte[] bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.BYTE_ARRAY, bodyContents, callback, converter); } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.STRING, bodyContents, callback, converter); } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - File bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.FILE, bodyContents, callback, converter); } private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, BodySetter bodySetter, Object bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + OAuthRequest.ResponseConverter converter) { BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java index 003821b2f..856cbcf68 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/OAuthAsyncCompletionHandler.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.ahc; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import io.netty.handler.codec.http.HttpHeaders; import java.io.IOException; @@ -12,10 +12,10 @@ public class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { private final OAuthAsyncRequestCallback callback; - private final OAuthRequestAsync.ResponseConverter converter; + private final OAuthRequest.ResponseConverter converter; public OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + OAuthRequest.ResponseConverter converter) { this.callback = callback; this.converter = converter; } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index 6c4acde60..a9fcb0a81 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -3,7 +3,7 @@ import com.github.scribejava.core.httpclient.AbstractAsyncOnlyHttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; import com.ning.http.client.AsyncHttpClient; @@ -41,8 +41,7 @@ public void close() { @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - byte[] bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.BYTE_ARRAY, bodyContents, callback, converter); @@ -50,8 +49,7 @@ public Future executeAsync(String userAgent, Map headers, @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.STRING, bodyContents, callback, converter); @@ -59,8 +57,7 @@ public Future executeAsync(String userAgent, Map headers, @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - File bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodySetter.FILE, bodyContents, callback, converter); @@ -68,7 +65,7 @@ public Future executeAsync(String userAgent, Map headers, private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, BodySetter bodySetter, Object bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + OAuthRequest.ResponseConverter converter) { AsyncHttpClient.BoundRequestBuilder boundRequestBuilder; switch (httpVerb) { case GET: diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java index 1448b60c3..5ce461b1b 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/OAuthAsyncCompletionHandler.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.ning; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.ning.http.client.AsyncCompletionHandler; import com.ning.http.client.FluentCaseInsensitiveStringsMap; @@ -13,10 +13,10 @@ public class OAuthAsyncCompletionHandler extends AsyncCompletionHandler { private final OAuthAsyncRequestCallback callback; - private final OAuthRequestAsync.ResponseConverter converter; + private final OAuthRequest.ResponseConverter converter; public OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + OAuthRequest.ResponseConverter converter) { this.callback = callback; this.converter = converter; } diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java index 8481b163f..af59abbb5 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OAuthAsyncCompletionHandler.java @@ -1,7 +1,7 @@ package com.github.scribejava.httpclient.okhttp; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import okhttp3.Call; import okhttp3.Callback; @@ -11,11 +11,11 @@ class OAuthAsyncCompletionHandler implements Callback { private final OAuthAsyncRequestCallback callback; - private final OAuthRequestAsync.ResponseConverter converter; + private final OAuthRequest.ResponseConverter converter; private final OkHttpFuture okHttpFuture; - OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter, OkHttpFuture okHttpFuture) { + OAuthAsyncCompletionHandler(OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter, + OkHttpFuture okHttpFuture) { this.callback = callback; this.converter = converter; this.okHttpFuture = okHttpFuture; diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index 80c0c4ddc..1199c87de 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -3,7 +3,7 @@ import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Verb; import okhttp3.Call; import okhttp3.MediaType; @@ -50,31 +50,28 @@ public void close() throws IOException { @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - byte[] bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + byte[] bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodyType.BYTE_ARRAY, bodyContents, callback, converter); } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - String bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + String bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodyType.STRING, bodyContents, callback, converter); } @Override public Future executeAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, - File bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + File bodyContents, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { return doExecuteAsync(userAgent, headers, httpVerb, completeUrl, BodyType.FILE, bodyContents, callback, converter); } private Future doExecuteAsync(String userAgent, Map headers, Verb httpVerb, String completeUrl, BodyType bodyType, Object bodyContents, OAuthAsyncRequestCallback callback, - OAuthRequestAsync.ResponseConverter converter) { + OAuthRequest.ResponseConverter converter) { final Call call = createCall(userAgent, headers, httpVerb, completeUrl, bodyType, bodyContents); final OkHttpFuture okHttpFuture = new OkHttpFuture<>(call); call.enqueue(new OAuthAsyncCompletionHandler<>(callback, converter, okHttpFuture)); diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index 9770f403a..92ef44423 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -2,7 +2,7 @@ import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthRequestAsync; +import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; @@ -41,7 +41,7 @@ public void shouldSendGetRequest() throws Exception { final HttpUrl baseUrl = server.url("/testUrl"); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString()); + final OAuthRequest request = new OAuthRequest(Verb.GET, baseUrl.toString()); final Response response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, response.getBody()); @@ -65,7 +65,7 @@ public void shouldSendPostRequest() throws Exception { final HttpUrl baseUrl = server.url("/testUrl"); // request with body - OAuthRequestAsync request = new OAuthRequestAsync(Verb.POST, baseUrl.toString()); + OAuthRequest request = new OAuthRequest(Verb.POST, baseUrl.toString()); request.setPayload(expectedRequestBody); Response response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); @@ -77,7 +77,7 @@ public void shouldSendPostRequest() throws Exception { // request with empty body - request = new OAuthRequestAsync(Verb.POST, baseUrl.toString()); + request = new OAuthRequest(Verb.POST, baseUrl.toString()); response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, response.getBody()); @@ -99,7 +99,7 @@ public void shouldReadResponseStream() throws Exception { final HttpUrl baseUrl = server.url("/testUrl"); - final OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, baseUrl.toString()); + final OAuthRequest request = new OAuthRequest(Verb.GET, baseUrl.toString()); final Response response = oAuthService.execute(request, null).get(30, TimeUnit.SECONDS); assertEquals(expectedResponseBody, StreamUtils.getStreamContents(response.getStream())); From a013e330b6c672aa45e33c88c0a7eefb746a3e16 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 11 Jan 2017 16:51:52 +0300 Subject: [PATCH 208/250] update checkstyle, fix some violations, update changelog --- changelog | 2 +- pom.xml | 2 +- .../apis/examples/TheThingsNetworkV1StagingExample.java | 2 +- .../apis/examples/TheThingsNetworkV2PreviewExample.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/changelog b/changelog index d3a832068..3806d5822 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,5 @@ [SNAPSHOT] - * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async + * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. [3.4.1] * Drop deprecated methods diff --git a/pom.xml b/pom.xml index 8277cd1b6..94bd2f763 100644 --- a/pom.xml +++ b/pom.xml @@ -132,7 +132,7 @@ com.puppycrawl.tools checkstyle - 7.3 + 7.4
diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index 50fbef28e..44aee4c74 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -90,7 +90,7 @@ public static void main(String... args) throws IOException, InterruptedException System.out.println(); System.out.println(response.getCode()); - if(response.getCode()==401) { + if (response.getCode() == 401) { System.out.println("Not authorised: "+response.getBody()); } else { System.out.println("You should see a JSON array of your registered applications:"); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index 38bd2fb5f..c1c3eb9a6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -87,7 +87,7 @@ public static void main(String... args) throws IOException, InterruptedException System.out.println(); System.out.println(response.getCode()); - if(response.getCode()==401) { + if (response.getCode() == 401) { System.out.println("Not authorised: "+response.getBody()); } else { System.out.println("You should see a JSON array of your registered applications:"); From 78cb95ccb6c92499265298bf8d9cb6079ae36775 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 11 Jan 2017 17:38:44 +0300 Subject: [PATCH 209/250] introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests --- changelog | 1 + .../com/github/scribejava/apis/BoxApi20.java | 5 ++++ .../scribejava/apis/DoktornaraboteApi.java | 8 ----- .../github/scribejava/apis/FacebookApi.java | 6 ++++ .../scribejava/apis/Foursquare2Api.java | 6 ++++ .../com/github/scribejava/apis/GeniusApi.java | 8 ----- .../com/github/scribejava/apis/GitHubApi.java | 6 ++++ .../github/scribejava/apis/GoogleApi20.java | 6 ++++ .../com/github/scribejava/apis/HHApi.java | 9 ------ .../github/scribejava/apis/KaixinApi20.java | 6 ++++ .../github/scribejava/apis/LinkedInApi20.java | 6 ++++ .../com/github/scribejava/apis/LiveApi.java | 6 ++++ .../com/github/scribejava/apis/MisfitApi.java | 6 ++++ .../com/github/scribejava/apis/NaverApi.java | 6 ++++ .../github/scribejava/apis/PinterestApi.java | 6 ++++ .../com/github/scribejava/apis/RenrenApi.java | 6 ++++ .../scribejava/apis/SinaWeiboApi20.java | 6 ++++ .../scribejava/apis/StackExchangeApi.java | 6 ++++ .../com/github/scribejava/apis/ViadeoApi.java | 6 ++++ .../github/scribejava/apis/VkontakteApi.java | 6 ++++ .../DoktornaraboteOAuthServiceImpl.java | 19 ------------ .../apis/service/GeniusOAuthServiceImpl.java | 19 ------------ .../apis/service/HHOAuthServiceImpl.java | 19 ------------ .../apis/examples/SalesforceExample.java | 1 - .../examples/SalesforceNingAsyncExample.java | 1 - .../TheThingsNetworkV1StagingExample.java | 5 ---- .../TheThingsNetworkV2PreviewExample.java | 5 ---- .../core/builder/api/DefaultApi20.java | 4 +++ .../core/builder/api/SignatureType.java | 30 +++++++++++++++++++ .../core/model/OAuthRequestAsync.java | 3 ++ .../scribejava/core/oauth/OAuth20Service.java | 2 +- .../scribejava/core/oauth/OAuth20ApiUnit.java | 6 ++++ 32 files changed, 140 insertions(+), 95 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java diff --git a/changelog b/changelog index 3806d5822..bd889038c 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. + * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests [3.4.1] * Drop deprecated methods diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java index 79d75180c..c6613b62e 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; /** * Box.com Api @@ -29,4 +30,8 @@ protected String getAuthorizationBaseUrl() { return "https://account.box.com/api/oauth2/authorize"; } + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java index 9cb308be3..1fcac7108 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/DoktornaraboteApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; -import com.github.scribejava.apis.service.DoktornaraboteOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.oauth.OAuth20Service; public class DoktornaraboteApi extends DefaultApi20 { @@ -27,9 +24,4 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://auth.doktornarabote.ru/OAuth/Authorize"; } - - @Override - public OAuth20Service createService(OAuthConfig config) { - return new DoktornaraboteOAuthServiceImpl(this, config); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index 1f00e931c..c5320708d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; /** @@ -39,4 +40,9 @@ public String getRefreshTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://www.facebook.com/v2.8/dialog/oauth"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java index cb574618d..71fb94768 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; public class Foursquare2Api extends DefaultApi20 { @@ -30,4 +31,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://foursquare.com/oauth2/authenticate"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java index 14570697c..03eae859c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GeniusApi.java @@ -1,9 +1,6 @@ package com.github.scribejava.apis; -import com.github.scribejava.apis.service.GeniusOAuthServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.oauth.OAuth20Service; public class GeniusApi extends DefaultApi20 { @@ -28,9 +25,4 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://api.genius.com/oauth/authorize"; } - - @Override - public OAuth20Service createService(OAuthConfig config) { - return new GeniusOAuthServiceImpl(this, config); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java index ada35c1b3..7e10fefc3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -38,4 +39,9 @@ protected String getAuthorizationBaseUrl() { public TokenExtractor getAccessTokenExtractor() { return OAuth2AccessTokenExtractor.instance(); } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index 157753f6d..a9394dfee 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -2,6 +2,7 @@ import com.github.scribejava.apis.google.GoogleJsonTokenExtractor; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -32,4 +33,9 @@ protected String getAuthorizationBaseUrl() { public TokenExtractor getAccessTokenExtractor() { return GoogleJsonTokenExtractor.instance(); } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java index acb239fa5..2a8a8aa12 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/HHApi.java @@ -1,10 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuthConfig; - -import com.github.scribejava.apis.service.HHOAuthServiceImpl; -import com.github.scribejava.core.oauth.OAuth20Service; public class HHApi extends DefaultApi20 { @@ -28,9 +24,4 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://hh.ru/oauth/authorize"; } - - @Override - public OAuth20Service createService(OAuthConfig config) { - return new HHOAuthServiceImpl(this, config); - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java index cd8917fd5..fdf8f67af 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; /** @@ -33,4 +34,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "http://api.kaixin001.com/oauth2/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java index 88dc30e7f..2ba6259f3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java @@ -2,6 +2,7 @@ import com.github.scribejava.apis.service.LinkedIn20ServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; @@ -32,4 +33,9 @@ protected String getAuthorizationBaseUrl() { public OAuth20Service createService(OAuthConfig config) { return new LinkedIn20ServiceImpl(this, config); } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java index ee6c6ba12..da34cab8f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; public class LiveApi extends DefaultApi20 { @@ -30,4 +31,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://oauth.live.com/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java index f6d2fc706..54559e6da 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; public class MisfitApi extends DefaultApi20 { @@ -25,4 +26,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://api.misfitwearables.com/auth/dialog/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java index 514b17b96..42056e7eb 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; public class NaverApi extends DefaultApi20 { protected NaverApi() { @@ -26,4 +27,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://nid.naver.com/oauth2.0/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java index 0f44d7b12..2940f0a15 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; public class PinterestApi extends DefaultApi20 { @@ -24,4 +25,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://api.pinterest.com/oauth"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java index da10760c3..08fde329e 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; /** @@ -33,4 +34,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://graph.renren.com/oauth/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java index 1799806f1..64d3b4950 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; /** * SinaWeibo OAuth 2.0 api. @@ -27,4 +28,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://api.weibo.com/oauth2/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java index c6dfcb101..b2f6f0db7 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -36,4 +37,9 @@ protected String getAuthorizationBaseUrl() { public TokenExtractor getAccessTokenExtractor() { return OAuth2AccessTokenExtractor.instance(); } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java index e3143b5b4..bc1833563 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; public class ViadeoApi extends DefaultApi20 { @@ -30,4 +31,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://secure.viadeo.com/oauth-provider/authorize2"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java index 7d440d275..87217c4b8 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; public class VkontakteApi extends DefaultApi20 { @@ -30,4 +31,9 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://oauth.vk.com/authorize"; } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java deleted file mode 100644 index 80c6cde48..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/DoktornaraboteOAuthServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.github.scribejava.apis.service; - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.oauth.OAuth20Service; - -public class DoktornaraboteOAuthServiceImpl extends OAuth20Service { - - public DoktornaraboteOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { - super(api, config); - } - - @Override - public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java deleted file mode 100644 index dd9c493cd..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/GeniusOAuthServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.github.scribejava.apis.service; - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.oauth.OAuth20Service; - -public class GeniusOAuthServiceImpl extends OAuth20Service { - - public GeniusOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { - super(api, config); - } - - @Override - public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - } -} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java deleted file mode 100644 index ba9dd809b..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/HHOAuthServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.github.scribejava.apis.service; - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.oauth.OAuth20Service; - -public class HHOAuthServiceImpl extends OAuth20Service { - - public HHOAuthServiceImpl(DefaultApi20 api, OAuthConfig config) { - super(api, config); - } - - @Override - public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - } -} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index bfe562249..e47fbaeea 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -87,7 +87,6 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep System.out.println("Full URL: " + url); final OAuthRequest request = new OAuthRequest(Verb.GET, url); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); final Response response = service.execute(request); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index e57cd7f8d..080cebd50 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -83,7 +83,6 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println(); System.out.println("Full URL: " + url); final OAuthRequest request = new OAuthRequest(Verb.GET, url); - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); final Response response = service.execute(request, null).get(); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index 44aee4c74..e154dc634 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -78,12 +78,7 @@ public static void main(String... args) throws IOException, InterruptedException System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - // TTN should support both signing the request with a parameter, or with a header. - // 1. Token as a parameter service.signRequest(accessToken, request); - // 2. Token in the header. - //request.addHeader("Authorization", "bearer "+accessToken.getAccessToken()); - // And we always expect JSON data. request.addHeader("Accept", "application/json"); final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index c1c3eb9a6..4feb220c3 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -75,12 +75,7 @@ public static void main(String... args) throws IOException, InterruptedException System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - // TTN should support both signing the request with a parameter, or with a header. - // 1. Token as a parameter service.signRequest(accessToken, request); - // 2. Token in the header. - //request.addHeader("Authorization", "bearer "+accessToken.getAccessToken()); - // And we always expect JSON data. request.addHeader("Accept", "application/json"); final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index 480a7a34d..95c3022b6 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -90,4 +90,8 @@ public String getAuthorizationUrl(OAuthConfig config, Map additi public OAuth20Service createService(OAuthConfig config) { return new OAuth20Service(this, config); } + + public SignatureType getSignatureType() { + return SignatureType.BEARER_AUTHORIZATION_REQUEST_HEADER_FIELD; + } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java new file mode 100644 index 000000000..91ebf5b94 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java @@ -0,0 +1,30 @@ +package com.github.scribejava.core.builder.api; + +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequest; + +public enum SignatureType { + /** + * https://tools.ietf.org/html/rfc6750#section-2.1 + */ + BEARER_AUTHORIZATION_REQUEST_HEADER_FIELD { + @Override + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + } + + }, + /** + * https://tools.ietf.org/html/rfc6750#section-2.3 + */ + BEARER_URI_QUERY_PARAMETER { + @Override + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { + request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getAccessToken()); + } + + }; + + public abstract void signRequest(OAuth2AccessToken accessToken, OAuthRequest request); +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java index dc8127c05..4717b1259 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java @@ -8,6 +8,9 @@ public class OAuthRequestAsync extends OAuthRequest { /** + * + * @param verb verb + * @param url url * * @deprecated use {@link OAuthRequest#OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String) } */ diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index c1ec7fc44..94463003a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -187,7 +187,7 @@ public String getVersion() { @Override public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getAccessToken()); + api.getSignatureType().signRequest(accessToken, request); } /** diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java index 7b23203ac..55e04a461 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java @@ -1,6 +1,7 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.OAuthConfig; class OAuth20ApiUnit extends DefaultApi20 { @@ -19,4 +20,9 @@ protected String getAuthorizationBaseUrl() { public OAuth20Service createService(OAuthConfig config) { return new OAuth20ServiceUnit(this, config); } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } From 3d4e1657b5aebb2ce77114c1e2b53e09354011fa Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 12 Jan 2017 16:43:12 +0300 Subject: [PATCH 210/250] fix after new signing enum in OAuth2.0 --- .../java/com/github/scribejava/apis/OdnoklassnikiApi.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java index 3144a77e0..85f3cb007 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java @@ -2,6 +2,7 @@ import com.github.scribejava.apis.service.OdnoklassnikiServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; @@ -32,4 +33,9 @@ protected String getAuthorizationBaseUrl() { public OAuth20Service createService(OAuthConfig config) { return new OdnoklassnikiServiceImpl(this, config); } + + @Override + public SignatureType getSignatureType() { + return SignatureType.BEARER_URI_QUERY_PARAMETER; + } } From a8f1e32851dd14e8f587b3c65fc3dc9207c90182 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 12 Jan 2017 16:56:57 +0300 Subject: [PATCH 211/250] switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant (GET-param -> header Bearer) --- changelog | 1 + .../main/java/com/github/scribejava/apis/FacebookApi.java | 6 ------ .../src/main/java/com/github/scribejava/apis/GitHubApi.java | 6 ------ .../main/java/com/github/scribejava/apis/GoogleApi20.java | 6 ------ 4 files changed, 1 insertion(+), 18 deletions(-) diff --git a/changelog b/changelog index bd889038c..0fde371d4 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests + * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant (GET-param -> header Bearer) [3.4.1] * Drop deprecated methods diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index c5320708d..1f00e931c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -1,7 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.model.Verb; /** @@ -40,9 +39,4 @@ public String getRefreshTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://www.facebook.com/v2.8/dialog/oauth"; } - - @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java index 7e10fefc3..ada35c1b3 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GitHubApi.java @@ -1,7 +1,6 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -39,9 +38,4 @@ protected String getAuthorizationBaseUrl() { public TokenExtractor getAccessTokenExtractor() { return OAuth2AccessTokenExtractor.instance(); } - - @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java index a9394dfee..157753f6d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/GoogleApi20.java @@ -2,7 +2,6 @@ import com.github.scribejava.apis.google.GoogleJsonTokenExtractor; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -33,9 +32,4 @@ protected String getAuthorizationBaseUrl() { public TokenExtractor getAccessTokenExtractor() { return GoogleJsonTokenExtractor.instance(); } - - @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; - } } From bdb25f30d708250fce50264d5782e5a4df5a407b Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Thu, 12 Jan 2017 17:08:04 +0300 Subject: [PATCH 212/250] fix OAuth20Service::extractAuthorization when redirectLocation contains '#' part --- .../com/github/scribejava/core/oauth/OAuth20Service.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 94463003a..89a74febd 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -215,7 +215,11 @@ public DefaultApi20 getApi() { public OAuth2Authorization extractAuthorization(String redirectLocation) { final OAuth2Authorization authorization = new OAuth2Authorization(); - for (String param : redirectLocation.substring(redirectLocation.indexOf('?') + 1).split("&")) { + int end = redirectLocation.indexOf('#'); + if (end == -1) { + end = redirectLocation.length(); + } + for (String param : redirectLocation.substring(redirectLocation.indexOf('?') + 1, end).split("&")) { final String[] keyValue = param.split("="); if (keyValue.length == 2) { switch (keyValue[0]) { From caf723056f41fc0561719f2b24856eb58515b13f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 14:09:26 +0300 Subject: [PATCH 213/250] introduce custom nonstandard Facebook AccessTokenErrorResponse --- changelog | 1 + .../github/scribejava/apis/FacebookApi.java | 8 ++ .../FacebookAccessTokenErrorResponse.java | 95 +++++++++++++++++++ .../FacebookAccessTokenJsonExtractor.java | 45 +++++++++ .../OAuth2AccessTokenJsonExtractor.java | 4 +- 5 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenErrorResponse.java create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java diff --git a/changelog b/changelog index 0fde371d4..24a3756d3 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant (GET-param -> header Bearer) + * introduce custom nonstandard Facebook AccessTokenErrorResponse [3.4.1] * Drop deprecated methods diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java index 1f00e931c..f761aab03 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FacebookApi.java @@ -1,6 +1,9 @@ package com.github.scribejava.apis; +import com.github.scribejava.apis.facebook.FacebookAccessTokenJsonExtractor; import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.TokenExtractor; +import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.Verb; /** @@ -39,4 +42,9 @@ public String getRefreshTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://www.facebook.com/v2.8/dialog/oauth"; } + + @Override + public TokenExtractor getAccessTokenExtractor() { + return FacebookAccessTokenJsonExtractor.instance(); + } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenErrorResponse.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenErrorResponse.java new file mode 100644 index 000000000..30c049a3f --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenErrorResponse.java @@ -0,0 +1,95 @@ +package com.github.scribejava.apis.facebook; + +import com.github.scribejava.core.exceptions.OAuthException; +import java.util.Objects; + +/** + * non standard Facebook replace for {@link com.github.scribejava.core.model.OAuth2AccessTokenErrorResponse} + * + * examples:
+ * + * '{"error":{"message":"This authorization code has been + * used.","type":"OAuthException","code":100,"fbtrace_id":"DtxvtGRaxbB"}}'
+ * + * '{"error":{"message":"Error validating application. Invalid application + * ID.","type":"OAuthException","code":101,"fbtrace_id":"CvDR+X4WWIx"}}' + */ +public class FacebookAccessTokenErrorResponse extends OAuthException { + + private static final long serialVersionUID = -1277129766099856895L; + + private final String type; + private final String code; + private final String fbtraceId; + private final String rawResponse; + + public FacebookAccessTokenErrorResponse(String message, String type, String code, String fbtraceId, + String rawResponse) { + super(message); + this.type = type; + this.code = code; + this.fbtraceId = fbtraceId; + this.rawResponse = rawResponse; + } + + public String getType() { + return type; + } + + public String getCode() { + return code; + } + + public String getFbtraceId() { + return fbtraceId; + } + + public String getRawResponse() { + return rawResponse; + } + + @Override + public int hashCode() { + int hash = 5; + hash = 83 * hash + Objects.hashCode(rawResponse); + hash = 83 * hash + Objects.hashCode(getMessage()); + hash = 83 * hash + Objects.hashCode(type); + hash = 83 * hash + Objects.hashCode(code); + hash = 83 * hash + Objects.hashCode(fbtraceId); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final FacebookAccessTokenErrorResponse other = (FacebookAccessTokenErrorResponse) obj; + if (!Objects.equals(rawResponse, other.getRawResponse())) { + return false; + } + if (!Objects.equals(getMessage(), other.getMessage())) { + return false; + } + if (!Objects.equals(type, other.getType())) { + return false; + } + if (!Objects.equals(code, other.getCode())) { + return false; + } + return Objects.equals(fbtraceId, other.getFbtraceId()); + } + + @Override + public String toString() { + return "FacebookAccessTokenErrorResponse{'type'='" + type + "', 'code'='" + code + + "', 'fbtraceId'='" + fbtraceId + "', 'rawResponse'='" + rawResponse + + "', 'message'='" + getMessage() + "'}"; + } +} diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java new file mode 100644 index 000000000..b78f048ac --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java @@ -0,0 +1,45 @@ +package com.github.scribejava.apis.facebook; + +import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; + +/** + * non standard Facebook Extractor + */ +public class FacebookAccessTokenJsonExtractor extends OAuth2AccessTokenJsonExtractor { + + private static final String MESSAGE_REGEX = "\"message\"\\s*:\\s*\"([^\"]*?)\""; + private static final String TYPE_REGEX = "\"type\"\\s*:\\s*\"([^\"]*?)\""; + private static final String CODE_REGEX = "\"code\"\\s*:\\s*\"?([^\",}]*?)[\",}]"; + private static final String FBTRACE_ID_REGEX = "\"fbtrace_id\"\\s*:\\s*\"([^\"]*?)\""; + + protected FacebookAccessTokenJsonExtractor() { + } + + private static class InstanceHolder { + + private static final FacebookAccessTokenJsonExtractor INSTANCE = new FacebookAccessTokenJsonExtractor(); + } + + public static FacebookAccessTokenJsonExtractor instance() { + return InstanceHolder.INSTANCE; + } + + /** + * non standard. examples:
+ * + * '{"error":{"message":"This authorization code has been + * used.","type":"OAuthException","code":100,"fbtrace_id":"DtxvtGRaxbB"}}'
+ * + * '{"error":{"message":"Error validating application. Invalid application + * ID.","type":"OAuthException","code":101,"fbtrace_id":"CvDR+X4WWIx"}}' + */ + @Override + protected void generateError(String response) { + extractParameter(response, MESSAGE_REGEX, false); + + throw new FacebookAccessTokenErrorResponse(extractParameter(response, MESSAGE_REGEX, false), + extractParameter(response, TYPE_REGEX, false), extractParameter(response, CODE_REGEX, false), + extractParameter(response, FBTRACE_ID_REGEX, false), response); + } + +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java index feeed66a7..71950a759 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java @@ -50,8 +50,10 @@ public OAuth2AccessToken extract(Response response) throws IOException { /** * Related documentation: https://tools.ietf.org/html/rfc6749#section-5.2 + * + * @param response response */ - private static void generateError(String response) { + protected void generateError(String response) { final String errorInString = extractParameter(response, ERROR_REGEX, true); final String errorDescription = extractParameter(response, ERROR_DESCRIPTION_REGEX, false); final String errorUriInString = extractParameter(response, ERROR_URI_REGEX, false); From b6cb1dcb24abda20da59bb40d21cd92f0d9c905b Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 15:39:48 +0300 Subject: [PATCH 214/250] precompile regexp Patterns (microoptimizations) --- .../FacebookAccessTokenJsonExtractor.java | 18 ++++---- .../apis/google/GoogleJsonTokenExtractor.java | 5 ++- .../SalesforceJsonTokenExtractor.java | 5 ++- .../AbstractOAuth1TokenExtractor.java | 8 ++-- .../OAuth2AccessTokenExtractor.java | 28 ++++++------ .../OAuth2AccessTokenJsonExtractor.java | 40 +++++++++-------- .../scribejava/core/utils/Preconditions.java | 24 +++++++++- .../core/utils/PreconditionsTest.java | 45 ------------------- 8 files changed, 78 insertions(+), 95 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java index b78f048ac..5f6d71d44 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/facebook/FacebookAccessTokenJsonExtractor.java @@ -1,16 +1,17 @@ package com.github.scribejava.apis.facebook; import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import java.util.regex.Pattern; /** * non standard Facebook Extractor */ public class FacebookAccessTokenJsonExtractor extends OAuth2AccessTokenJsonExtractor { - private static final String MESSAGE_REGEX = "\"message\"\\s*:\\s*\"([^\"]*?)\""; - private static final String TYPE_REGEX = "\"type\"\\s*:\\s*\"([^\"]*?)\""; - private static final String CODE_REGEX = "\"code\"\\s*:\\s*\"?([^\",}]*?)[\",}]"; - private static final String FBTRACE_ID_REGEX = "\"fbtrace_id\"\\s*:\\s*\"([^\"]*?)\""; + private static final Pattern MESSAGE_REGEX_PATTERN = Pattern.compile("\"message\"\\s*:\\s*\"([^\"]*?)\""); + private static final Pattern TYPE_REGEX_PATTERN = Pattern.compile("\"type\"\\s*:\\s*\"([^\"]*?)\""); + private static final Pattern CODE_REGEX_PATTERN = Pattern.compile("\"code\"\\s*:\\s*\"?([^\",}]*?)[\",}]"); + private static final Pattern FBTRACE_ID_REGEX_PATTERN = Pattern.compile("\"fbtrace_id\"\\s*:\\s*\"([^\"]*?)\""); protected FacebookAccessTokenJsonExtractor() { } @@ -35,11 +36,12 @@ public static FacebookAccessTokenJsonExtractor instance() { */ @Override protected void generateError(String response) { - extractParameter(response, MESSAGE_REGEX, false); + extractParameter(response, MESSAGE_REGEX_PATTERN, false); - throw new FacebookAccessTokenErrorResponse(extractParameter(response, MESSAGE_REGEX, false), - extractParameter(response, TYPE_REGEX, false), extractParameter(response, CODE_REGEX, false), - extractParameter(response, FBTRACE_ID_REGEX, false), response); + throw new FacebookAccessTokenErrorResponse(extractParameter(response, MESSAGE_REGEX_PATTERN, false), + extractParameter(response, TYPE_REGEX_PATTERN, false), + extractParameter(response, CODE_REGEX_PATTERN, false), + extractParameter(response, FBTRACE_ID_REGEX_PATTERN, false), response); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java index 8295ddc3f..722390ae0 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/google/GoogleJsonTokenExtractor.java @@ -1,13 +1,14 @@ package com.github.scribejava.apis.google; import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import java.util.regex.Pattern; /** * additionally parses OpenID id_token */ public class GoogleJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { - private static final String ID_TOKEN_REGEX = "\"id_token\"\\s*:\\s*\"(\\S*?)\""; + private static final Pattern ID_TOKEN_REGEX_PATTERN = Pattern.compile("\"id_token\"\\s*:\\s*\"(\\S*?)\""); protected GoogleJsonTokenExtractor() { } @@ -25,6 +26,6 @@ public static GoogleJsonTokenExtractor instance() { protected GoogleToken createToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, String response) { return new GoogleToken(accessToken, tokenType, expiresIn, refreshToken, scope, - extractParameter(response, ID_TOKEN_REGEX, false), response); + extractParameter(response, ID_TOKEN_REGEX_PATTERN, false), response); } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java index 2f219163a..841276724 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/salesforce/SalesforceJsonTokenExtractor.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis.salesforce; import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor; +import java.util.regex.Pattern; /** * This extractor parses in addition to the standard Extractor the instance_url @@ -8,7 +9,7 @@ */ public class SalesforceJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor { - private static final String INSTANCE_URL_REGEX = "\"instance_url\"\\s*:\\s*\"(\\S*?)\""; + private static final Pattern INSTANCE_URL_REGEX_PATTERN = Pattern.compile("\"instance_url\"\\s*:\\s*\"(\\S*?)\""); protected SalesforceJsonTokenExtractor() { } @@ -26,6 +27,6 @@ public static SalesforceJsonTokenExtractor instance() { protected SalesforceToken createToken(String accessToken, String tokenType, Integer expiresIn, String refreshToken, String scope, String response) { return new SalesforceToken(accessToken, tokenType, expiresIn, refreshToken, scope, - extractParameter(response, INSTANCE_URL_REGEX, true), response); + extractParameter(response, INSTANCE_URL_REGEX_PATTERN, true), response); } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java index 36285c2c1..61578d01b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/AbstractOAuth1TokenExtractor.java @@ -18,8 +18,8 @@ */ public abstract class AbstractOAuth1TokenExtractor implements TokenExtractor { - private static final String OAUTH_TOKEN_REGEXP = "oauth_token=([^&]+)"; - private static final String OAUTH_TOKEN_SECRET_REGEXP = "oauth_token_secret=([^&]*)"; + private static final Pattern OAUTH_TOKEN_REGEXP_PATTERN = Pattern.compile("oauth_token=([^&]+)"); + private static final Pattern OAUTH_TOKEN_SECRET_REGEXP_PATTERN = Pattern.compile("oauth_token_secret=([^&]*)"); /** * {@inheritDoc} @@ -29,8 +29,8 @@ public T extract(Response response) throws IOException { final String body = response.getBody(); Preconditions.checkEmptyString(body, "Response body is incorrect. Can't extract a token from an empty string"); - final String token = extract(body, Pattern.compile(OAUTH_TOKEN_REGEXP)); - final String secret = extract(body, Pattern.compile(OAUTH_TOKEN_SECRET_REGEXP)); + final String token = extract(body, OAUTH_TOKEN_REGEXP_PATTERN); + final String secret = extract(body, OAUTH_TOKEN_SECRET_REGEXP_PATTERN); return createToken(token, secret, body); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java index 67de27299..8af44d3aa 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenExtractor.java @@ -14,11 +14,11 @@ */ public class OAuth2AccessTokenExtractor implements TokenExtractor { - private static final String ACCESS_TOKEN_REGEX = "access_token=([^&]+)"; - private static final String TOKEN_TYPE_REGEX = "token_type=([^&]+)"; - private static final String EXPIRES_IN_REGEX = "expires_in=([^&]+)"; - private static final String REFRESH_TOKEN_REGEX = "refresh_token=([^&]+)"; - private static final String SCOPE_REGEX = "scope=([^&]+)"; + private static final Pattern ACCESS_TOKEN_REGEX_PATTERN = Pattern.compile("access_token=([^&]+)"); + private static final Pattern TOKEN_TYPE_REGEX_PATTERN = Pattern.compile("token_type=([^&]+)"); + private static final Pattern EXPIRES_IN_REGEX_PATTERN = Pattern.compile("expires_in=([^&]+)"); + private static final Pattern REFRESH_TOKEN_REGEX_PATTERN = Pattern.compile("refresh_token=([^&]+)"); + private static final Pattern SCOPE_REGEX_PATTERN = Pattern.compile("scope=([^&]+)"); protected OAuth2AccessTokenExtractor() { } @@ -41,27 +41,29 @@ public OAuth2AccessToken extract(Response response) throws IOException { Preconditions.checkEmptyString(body, "Response body is incorrect. Can't extract a token from an empty string"); - final String accessToken = extractParameter(body, ACCESS_TOKEN_REGEX, true); - final String tokenType = extractParameter(body, TOKEN_TYPE_REGEX, false); - final String expiresInString = extractParameter(body, EXPIRES_IN_REGEX, false); + final String accessToken = extractParameter(body, ACCESS_TOKEN_REGEX_PATTERN, true); + final String tokenType = extractParameter(body, TOKEN_TYPE_REGEX_PATTERN, false); + final String expiresInString = extractParameter(body, EXPIRES_IN_REGEX_PATTERN, false); Integer expiresIn; try { expiresIn = expiresInString == null ? null : Integer.valueOf(expiresInString); } catch (NumberFormatException nfe) { expiresIn = null; } - final String refreshToken = extractParameter(body, REFRESH_TOKEN_REGEX, false); - final String scope = extractParameter(body, SCOPE_REGEX, false); + final String refreshToken = extractParameter(body, REFRESH_TOKEN_REGEX_PATTERN, false); + final String scope = extractParameter(body, SCOPE_REGEX_PATTERN, false); return new OAuth2AccessToken(accessToken, tokenType, expiresIn, refreshToken, scope, body); } - private static String extractParameter(String response, String regex, boolean required) throws OAuthException { - final Matcher matcher = Pattern.compile(regex).matcher(response); + private static String extractParameter(String response, Pattern regexPattern, boolean required) + throws OAuthException { + + final Matcher matcher = regexPattern.matcher(response); if (matcher.find()) { return OAuthEncoder.decode(matcher.group(1)); } else if (required) { - throw new OAuthException("Response body is incorrect. Can't extract a '" + regex + throw new OAuthException("Response body is incorrect. Can't extract a '" + regexPattern.pattern() + "' from this: '" + response + "'", null); } else { return null; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java index 71950a759..0c24755b3 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/extractors/OAuth2AccessTokenJsonExtractor.java @@ -15,14 +15,15 @@ */ public class OAuth2AccessTokenJsonExtractor implements TokenExtractor { - private static final String ACCESS_TOKEN_REGEX = "\"access_token\"\\s*:\\s*\"(\\S*?)\""; - private static final String TOKEN_TYPE_REGEX = "\"token_type\"\\s*:\\s*\"(\\S*?)\""; - private static final String EXPIRES_IN_REGEX = "\"expires_in\"\\s*:\\s*\"?(\\d*?)\"?\\D"; - private static final String REFRESH_TOKEN_REGEX = "\"refresh_token\"\\s*:\\s*\"(\\S*?)\""; - private static final String SCOPE_REGEX = "\"scope\"\\s*:\\s*\"(\\S*?)\""; - private static final String ERROR_REGEX = "\"error\"\\s*:\\s*\"(\\S*?)\""; - private static final String ERROR_DESCRIPTION_REGEX = "\"error_description\"\\s*:\\s*\"([^\"]*?)\""; - private static final String ERROR_URI_REGEX = "\"error_uri\"\\s*:\\s*\"(\\S*?)\""; + private static final Pattern ACCESS_TOKEN_REGEX_PATTERN = Pattern.compile("\"access_token\"\\s*:\\s*\"(\\S*?)\""); + private static final Pattern TOKEN_TYPE_REGEX_PATTERN = Pattern.compile("\"token_type\"\\s*:\\s*\"(\\S*?)\""); + private static final Pattern EXPIRES_IN_REGEX_PATTERN = Pattern.compile("\"expires_in\"\\s*:\\s*\"?(\\d*?)\"?\\D"); + private static final Pattern REFRESH_TOKEN_REGEX_PATTERN = Pattern.compile("\"refresh_token\"\\s*:\\s*\"(\\S*?)\""); + private static final Pattern SCOPE_REGEX_PATTERN = Pattern.compile("\"scope\"\\s*:\\s*\"(\\S*?)\""); + private static final Pattern ERROR_REGEX_PATTERN = Pattern.compile("\"error\"\\s*:\\s*\"(\\S*?)\""); + private static final Pattern ERROR_DESCRIPTION_REGEX_PATTERN + = Pattern.compile("\"error_description\"\\s*:\\s*\"([^\"]*?)\""); + private static final Pattern ERROR_URI_REGEX_PATTERN = Pattern.compile("\"error_uri\"\\s*:\\s*\"(\\S*?)\""); protected OAuth2AccessTokenJsonExtractor() { } @@ -54,9 +55,9 @@ public OAuth2AccessToken extract(Response response) throws IOException { * @param response response */ protected void generateError(String response) { - final String errorInString = extractParameter(response, ERROR_REGEX, true); - final String errorDescription = extractParameter(response, ERROR_DESCRIPTION_REGEX, false); - final String errorUriInString = extractParameter(response, ERROR_URI_REGEX, false); + final String errorInString = extractParameter(response, ERROR_REGEX_PATTERN, true); + final String errorDescription = extractParameter(response, ERROR_DESCRIPTION_REGEX_PATTERN, false); + final String errorUriInString = extractParameter(response, ERROR_URI_REGEX_PATTERN, false); URI errorUri; try { errorUri = errorUriInString == null ? null : URI.create(errorUriInString); @@ -69,17 +70,17 @@ protected void generateError(String response) { } private OAuth2AccessToken createToken(String response) { - final String accessToken = extractParameter(response, ACCESS_TOKEN_REGEX, true); - final String tokenType = extractParameter(response, TOKEN_TYPE_REGEX, false); - final String expiresInString = extractParameter(response, EXPIRES_IN_REGEX, false); + final String accessToken = extractParameter(response, ACCESS_TOKEN_REGEX_PATTERN, true); + final String tokenType = extractParameter(response, TOKEN_TYPE_REGEX_PATTERN, false); + final String expiresInString = extractParameter(response, EXPIRES_IN_REGEX_PATTERN, false); Integer expiresIn; try { expiresIn = expiresInString == null ? null : Integer.valueOf(expiresInString); } catch (NumberFormatException nfe) { expiresIn = null; } - final String refreshToken = extractParameter(response, REFRESH_TOKEN_REGEX, false); - final String scope = extractParameter(response, SCOPE_REGEX, false); + final String refreshToken = extractParameter(response, REFRESH_TOKEN_REGEX_PATTERN, false); + final String scope = extractParameter(response, SCOPE_REGEX_PATTERN, false); return createToken(accessToken, tokenType, expiresIn, refreshToken, scope, response); } @@ -89,14 +90,15 @@ protected OAuth2AccessToken createToken(String accessToken, String tokenType, In return new OAuth2AccessToken(accessToken, tokenType, expiresIn, refreshToken, scope, response); } - protected static String extractParameter(String response, String regex, boolean required) throws OAuthException { - final Matcher matcher = Pattern.compile(regex).matcher(response); + protected static String extractParameter(String response, Pattern regexPattern, boolean required) + throws OAuthException { + final Matcher matcher = regexPattern.matcher(response); if (matcher.find()) { return matcher.group(1); } if (required) { - throw new OAuthException("Response body is incorrect. Can't extract a '" + regex + throw new OAuthException("Response body is incorrect. Can't extract a '" + regexPattern.pattern() + "' from this: '" + response + "'", null); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java index 0858fc89d..6343eef3b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java @@ -35,15 +35,32 @@ public static void checkNotNull(Object object, String errorMsg) { * @throws IllegalArgumentException if the string is null or empty */ public static void checkEmptyString(String string, String errorMsg) { - check(string != null && !string.trim().isEmpty(), errorMsg); + check(hasText(string), errorMsg); } + public static boolean hasText(String str) { + if (str == null || str.isEmpty()) { + return false; + } + final int strLen = str.length(); + for (int i = 0; i < strLen; i++) { + if (!Character.isWhitespace(str.charAt(i))) { + return true; + } + } + return false; + } + + /** * Checks that a URL is valid * * @param url any string * @param errorMsg error message + * + * @deprecated will be just removed. not used in ScribeJava */ + @Deprecated public static void checkValidUrl(String url, String errorMsg) { checkEmptyString(url, errorMsg); check(isUrl(url), errorMsg); @@ -54,7 +71,10 @@ public static void checkValidUrl(String url, String errorMsg) { * * @param url any string * @param errorMsg error message + * + * @deprecated will be just removed. not used in ScribeJava */ + @Deprecated public static void checkValidOAuthCallback(String url, String errorMsg) { checkEmptyString(url, errorMsg); if (url.toLowerCase(Locale.getDefault()).compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) { @@ -68,7 +88,7 @@ private static boolean isUrl(String url) { private static void check(boolean requirements, String error) { if (!requirements) { - throw new IllegalArgumentException(error == null || error.trim().length() <= 0 ? DEFAULT_MESSAGE : error); + throw new IllegalArgumentException(hasText(error) ? error : DEFAULT_MESSAGE); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/utils/PreconditionsTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/utils/PreconditionsTest.java index 76d64c5ba..ec6722c5a 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/utils/PreconditionsTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/utils/PreconditionsTest.java @@ -25,49 +25,4 @@ public void shouldThrowExceptionForEmptyStrings() { public void shouldThrowExceptionForSpacesOnlyStrings() { Preconditions.checkEmptyString(" ", ERROR_MSG); } - - @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionForInvalidUrls() { - Preconditions.checkValidUrl("this/is/not/a/valid/url", ERROR_MSG); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionForNullUrls() { - Preconditions.checkValidUrl(null, ERROR_MSG); - } - - @Test - public void shouldAllowValidUrls() { - Preconditions.checkValidUrl("http://www.example.com", ERROR_MSG); - } - - @Test - public void shouldAllowSSLUrls() { - Preconditions.checkValidUrl("https://www.example.com", ERROR_MSG); - } - - @Test - public void shouldAllowSpecialCharsInScheme() { - Preconditions.checkValidUrl("custom+9.3-1://www.example.com", ERROR_MSG); - } - - @Test - public void shouldAllowNonStandarProtocolsForAndroid() { - Preconditions.checkValidUrl("x-url-custom://www.example.com", ERROR_MSG); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldNotAllowStrangeProtocolNames() { - Preconditions.checkValidUrl("$weird*://www.example.com", ERROR_MSG); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldNotAllowUnderscoreInScheme() { - Preconditions.checkValidUrl("http_custom://www.example.com", ERROR_MSG); - } - - @Test - public void shouldAllowOutOfBandAsValidCallbackValue() { - Preconditions.checkValidOAuthCallback("oob", ERROR_MSG); - } } From 8aeb9d85e55ff0b263c892e01f9255c3a5d89e5e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 15:47:44 +0300 Subject: [PATCH 215/250] prepare 4.0.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0c78e074d..156f924fb 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 3.4.1 + 4.0.0 ``` @@ -109,7 +109,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 3.4.1 + 4.0.0 ``` diff --git a/changelog b/changelog index 24a3756d3..ee62bbf36 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[4.0.0] * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests * switch Google, GitHub, Facebook OAuth2.0 oauth requests signing to more secured recommended variant (GET-param -> header Bearer) From c362f0c31bfb305bacb04564ea2d69bc152e0986 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 15:48:50 +0300 Subject: [PATCH 216/250] [maven-release-plugin] prepare release scribejava-4.0.0 --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 94bd2f763..6fe3846c4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 3.4.2-SNAPSHOT + 4.0.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - HEAD + scribejava-4.0.0 diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 1e0291007..2940b60e9 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.2-SNAPSHOT + 4.0.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 186c868e0..6a3023c4f 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.2-SNAPSHOT + 4.0.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 190e489c4..07c23c4d1 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.2-SNAPSHOT + 4.0.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index a8d55177e..9db730f45 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.2-SNAPSHOT + 4.0.0 ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index cc1c52080..795e843fa 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 3.4.2-SNAPSHOT + 4.0.0 ../pom.xml From 1c9d5e3fe538a6aaa499212904ecae3ac4f2f045 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 15:49:01 +0300 Subject: [PATCH 217/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 6fe3846c4..e3149970b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 4.0.0 + 4.0.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-4.0.0 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 2940b60e9..d317b3998 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.0 + 4.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 6a3023c4f..00dee881e 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.0 + 4.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 07c23c4d1..3dde9e796 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.0 + 4.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 9db730f45..6449b91cc 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.0 + 4.0.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 795e843fa..171ba7cd0 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.0 + 4.0.1-SNAPSHOT ../pom.xml From 9ee53d21b13a077856088079cb0b2e516ab5e579 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 16:00:56 +0300 Subject: [PATCH 218/250] remove deprecated methods and class after release --- .../core/builder/ServiceBuilder.java | 41 ------------ .../core/model/AbstractRequest.java | 9 --- .../core/model/ForceTypeOfHttpRequest.java | 15 ----- .../scribejava/core/model/OAuthConfig.java | 27 -------- .../scribejava/core/model/OAuthRequest.java | 14 +--- .../core/model/OAuthRequestAsync.java | 30 --------- .../scribejava/core/model/Response.java | 64 ------------------- .../core/model/ScribeJavaConfig.java | 19 ------ .../scribejava/core/oauth/OAuthService.java | 10 --- .../scribejava/core/utils/Preconditions.java | 42 ------------ 10 files changed, 1 insertion(+), 270 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index ca7e5f05e..0651a0e9a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -3,7 +3,6 @@ import com.github.scribejava.core.builder.api.BaseApi; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; -import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.SignatureType; @@ -119,46 +118,6 @@ public ServiceBuilder responseType(String responseType) { return this; } - /** - * - * @param connectTimeout connectTimeout - * @return ServiceBuilder to chain methods - * @deprecated use {@link com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig} and - *
{@link #httpClientConfig(com.github.scribejava.core.httpclient.HttpClientConfig) } - */ - @Deprecated - public ServiceBuilder connectTimeout(Integer connectTimeout) { - final JDKHttpClientConfig jdkHttpClientConfig; - if (httpClientConfig instanceof JDKHttpClientConfig) { - jdkHttpClientConfig = (JDKHttpClientConfig) httpClientConfig; - } else { - jdkHttpClientConfig = new JDKHttpClientConfig(); - httpClientConfig = jdkHttpClientConfig; - } - jdkHttpClientConfig.setConnectTimeout(connectTimeout); - return this; - } - - /** - * - * @param readTimeout readTimeout - * @return ServiceBuilder to chain methods - * @deprecated use {@link com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig} and - *
{@link #httpClientConfig(com.github.scribejava.core.httpclient.HttpClientConfig) } - */ - @Deprecated - public ServiceBuilder readTimeout(Integer readTimeout) { - final JDKHttpClientConfig jdkHttpClientConfig; - if (httpClientConfig instanceof JDKHttpClientConfig) { - jdkHttpClientConfig = (JDKHttpClientConfig) httpClientConfig; - } else { - jdkHttpClientConfig = new JDKHttpClientConfig(); - httpClientConfig = jdkHttpClientConfig; - } - jdkHttpClientConfig.setReadTimeout(readTimeout); - return this; - } - public ServiceBuilder httpClientConfig(HttpClientConfig httpClientConfig) { Preconditions.checkNotNull(httpClientConfig, "httpClientConfig can't be null"); this.httpClientConfig = httpClientConfig; diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java deleted file mode 100644 index 7cf52107d..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/AbstractRequest.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.github.scribejava.core.model; - -/** - * @deprecated use {@link OAuthRequest} - */ -@Deprecated -public abstract class AbstractRequest { - -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java deleted file mode 100644 index c1ea3f3ce..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/ForceTypeOfHttpRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.scribejava.core.model; - -/** - * - * @deprecated unused anymore. Have no sense and impaction - */ -@Deprecated -public enum ForceTypeOfHttpRequest { - - NONE, - FORCE_ASYNC_ONLY_HTTP_REQUESTS, - FORCE_SYNC_ONLY_HTTP_REQUESTS, - PREFER_ASYNC_ONLY_HTTP_REQUESTS, - PREFER_SYNC_ONLY_HTTP_REQUESTS -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 65df39368..e84ad6805 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -2,7 +2,6 @@ import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; -import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; import java.io.IOException; import java.io.OutputStream; @@ -87,32 +86,6 @@ public void log(String message) { } } - /** - * - * @return Connect Timeout - * @deprecated use {@link JDKHttpClientConfig} - */ - @Deprecated - public Integer getConnectTimeout() { - if (httpClientConfig instanceof JDKHttpClientConfig) { - return ((JDKHttpClientConfig) httpClientConfig).getConnectTimeout(); - } - return null; - } - - /** - * - * @return Read Timeout - * @deprecated use {@link JDKHttpClientConfig} - */ - @Deprecated - public Integer getReadTimeout() { - if (httpClientConfig instanceof JDKHttpClientConfig) { - return ((JDKHttpClientConfig) httpClientConfig).getReadTimeout(); - } - return null; - } - public HttpClientConfig getHttpClientConfig() { return httpClientConfig; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index ba99bf6b5..102bc702a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -13,7 +13,7 @@ /** * The representation of an OAuth HttpRequest. */ -public class OAuthRequest extends AbstractRequest { +public class OAuthRequest { private static final String OAUTH_PREFIX = "oauth_"; @@ -44,18 +44,6 @@ public OAuthRequest(Verb verb, String url) { this.url = url; } - /** - * - * @param verb verb - * @param url url - * @param config unused - * @deprecated use {@link #OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String) } - */ - @Deprecated - public OAuthRequest(Verb verb, String url, OAuthConfig config) { - this(verb, url); - } - /** * Adds an OAuth parameter. * diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java deleted file mode 100644 index 4717b1259..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequestAsync.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.github.scribejava.core.model; - -/** - * - * @deprecated use {@link OAuthRequest} - */ -@Deprecated -public class OAuthRequestAsync extends OAuthRequest { - - /** - * - * @param verb verb - * @param url url - * - * @deprecated use {@link OAuthRequest#OAuthRequest(com.github.scribejava.core.model.Verb, java.lang.String) } - */ - @Deprecated - public OAuthRequestAsync(Verb verb, String url) { - super(verb, url); - } - - /** - * - * @param goal type - * @deprecated use {@link OAuthRequest.ResponseConverter} - */ - @Deprecated - public interface ResponseConverter extends OAuthRequest.ResponseConverter { - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java index 3b50923a7..8a4807677 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/Response.java @@ -2,13 +2,7 @@ import java.io.IOException; import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.UnknownHostException; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Map.Entry; -import com.github.scribejava.core.exceptions.OAuthException; import com.github.scribejava.core.utils.StreamUtils; public class Response { @@ -19,25 +13,6 @@ public class Response { private String body; private InputStream stream; - /** - * - * @param code code - * @param message message - * @param headers headers - * @param body body - * @param stream stream - * @deprecated use either {@link #Response(int, java.lang.String, java.util.Map, java.io.InputStream) } - * or {@link #Response(int, java.lang.String, java.util.Map, java.lang.String) } - */ - @Deprecated - public Response(int code, String message, Map headers, String body, InputStream stream) { - this.code = code; - this.message = message; - this.headers = headers; - this.body = body; - this.stream = stream; - } - private Response(int code, String message, Map headers) { this.code = code; this.message = message; @@ -54,25 +29,6 @@ public Response(int code, String message, Map headers, String bo this.body = body; } - /** - * - * @param connection connection - * @throws IOException - * @deprecated use {@link #Response(int, java.lang.String, java.util.Map, java.lang.String, java.io.InputStream) } - */ - @Deprecated - Response(HttpURLConnection connection) throws IOException { - try { - connection.connect(); - code = connection.getResponseCode(); - message = connection.getResponseMessage(); - headers = parseHeaders(connection); - stream = isSuccessful() ? connection.getInputStream() : connection.getErrorStream(); - } catch (UnknownHostException e) { - throw new OAuthException("The IP address of a host could not be determined.", e); - } - } - private String parseBodyContents() throws IOException { if (stream == null) { return null; @@ -85,26 +41,6 @@ private String parseBodyContents() throws IOException { return body; } - /** - * - * @param conn conn - * @return - * @deprecated use {@link OAuthRequest#parseHeaders(java.net.HttpURLConnection) } - */ - @Deprecated - private Map parseHeaders(HttpURLConnection conn) { - final Map headers = new HashMap<>(); - for (Entry> entry : conn.getHeaderFields().entrySet()) { - final String key = entry.getKey(); - if ("Content-Encoding".equalsIgnoreCase(key)) { - headers.put("Content-Encoding", entry.getValue().get(0)); - } else { - headers.put(key, entry.getValue().get(0)); - } - } - return headers; - } - public final boolean isSuccessful() { return code >= 200 && code < 400; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java deleted file mode 100644 index 3ebb31827..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/ScribeJavaConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.github.scribejava.core.model; - -/** - * - * @deprecated unused anymore. Have no sense and impaction - */ -@Deprecated -public abstract class ScribeJavaConfig { - - private static ForceTypeOfHttpRequest forceTypeOfHttpRequests = ForceTypeOfHttpRequest.NONE; - - public static ForceTypeOfHttpRequest getForceTypeOfHttpRequests() { - return forceTypeOfHttpRequests; - } - - public static void setForceTypeOfHttpRequests(ForceTypeOfHttpRequest forceTypeOfHttpRequests) { - ScribeJavaConfig.forceTypeOfHttpRequests = forceTypeOfHttpRequests; - } -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index c17c3b7dc..27fedec80 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -50,16 +50,6 @@ private static HttpClient getClient(HttpClientConfig config) { return null; } - /** - * - * @throws IOException IOException - * @deprecated use {@link #close() } - */ - @Deprecated - public void closeAsyncClient() throws IOException { - close(); - } - @Override public void close() throws IOException { httpClient.close(); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java index 6343eef3b..19e1df083 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/utils/Preconditions.java @@ -1,9 +1,5 @@ package com.github.scribejava.core.utils; -import java.util.Locale; -import java.util.regex.Pattern; -import com.github.scribejava.core.model.OAuthConstants; - /** * Utils for checking preconditions and invariants */ @@ -11,9 +7,6 @@ public abstract class Preconditions { private static final String DEFAULT_MESSAGE = "Received an invalid parameter"; - // scheme = alpha *( alpha | digit | "+" | "-" | "." ) - private static final String URL_REGEXP = "^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+"; - /** * Checks that an object is not null. * @@ -51,41 +44,6 @@ public static boolean hasText(String str) { return false; } - - /** - * Checks that a URL is valid - * - * @param url any string - * @param errorMsg error message - * - * @deprecated will be just removed. not used in ScribeJava - */ - @Deprecated - public static void checkValidUrl(String url, String errorMsg) { - checkEmptyString(url, errorMsg); - check(isUrl(url), errorMsg); - } - - /** - * Checks that a URL is a valid OAuth callback - * - * @param url any string - * @param errorMsg error message - * - * @deprecated will be just removed. not used in ScribeJava - */ - @Deprecated - public static void checkValidOAuthCallback(String url, String errorMsg) { - checkEmptyString(url, errorMsg); - if (url.toLowerCase(Locale.getDefault()).compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) { - check(isUrl(url), errorMsg); - } - } - - private static boolean isUrl(String url) { - return Pattern.compile(URL_REGEXP).matcher(url).matches(); - } - private static void check(boolean requirements, String error) { if (!requirements) { throw new IllegalArgumentException(hasText(error) ? error : DEFAULT_MESSAGE); From ad795568a083bc6cfe15ef8e531335159c1bcec8 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 13 Jan 2017 16:36:42 +0300 Subject: [PATCH 219/250] simplify async examples to reflect use of new OAuthService unified methods --- .../examples/FacebookAsyncNingExample.java | 4 +- .../examples/GitHubAsyncOkHttpExample.java | 4 +- .../examples/Google20AsyncAHCExample.java | 6 +-- .../apis/examples/MailruAsyncExample.java | 4 +- .../examples/SalesforceNingAsyncExample.java | 4 +- .../VkontakteExternalHttpExample.java | 4 +- .../scribejava/core/oauth/OAuth20Service.java | 54 +++++++++++++++---- .../scribejava/core/oauth/OAuthService.java | 12 +++-- 8 files changed, 65 insertions(+), 27 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index 7bc944dd8..bf916d083 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -73,7 +73,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code).get(); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); @@ -83,7 +83,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java index 1cfb35d06..ed8189390 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java @@ -65,7 +65,7 @@ public static void main(String... args) throws IOException, ExecutionException, // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); @@ -75,7 +75,7 @@ public static void main(String... args) throws IOException, ExecutionException, System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index baddacc9b..970c5d534 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -82,13 +82,13 @@ public static void main(String... args) throws InterruptedException, ExecutionEx // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println("Refreshing the Access Token..."); - accessToken = service.refreshAccessTokenAsync(accessToken.getRefreshToken(), null).get(); + accessToken = service.refreshAccessToken(accessToken.getRefreshToken()); System.out.println("Refreshed the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); @@ -113,7 +113,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final OAuthRequest request = new OAuthRequest(Verb.GET, requestUrl); service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); + final Response response = service.execute(request); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index e4343d19b..38613c019 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -59,7 +59,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); @@ -68,7 +68,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 080cebd50..2cf040a45 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -67,7 +67,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String codeEncoded = URLDecoder.decode(code, "UTF-8"); // Trade the Request Token and Verifier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessTokenAsync(codeEncoded, null).get(); + final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); @@ -83,7 +83,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx System.out.println(); System.out.println("Full URL: " + url); final OAuthRequest request = new OAuthRequest(Verb.GET, url); - final Response response = service.execute(request, null).get(); + final Response response = service.execute(request); System.out.println(); System.out.println(response.getCode()); System.out.println(response.getBody()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java index cfdbe6210..2cd858236 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -64,7 +64,7 @@ public static void main(String... args) throws IOException, InterruptedException // Trade the Request Token and Verfier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final OAuth2AccessToken accessToken = service.getAccessTokenAsync(code, null).get(); + final OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Got the Access Token!"); System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); @@ -74,7 +74,7 @@ public static void main(String... args) throws IOException, InterruptedException System.out.println("Now we're going to access a protected resource..."); final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); - final Response response = service.execute(request, null).get(); + final Response response = service.execute(request); System.out.println("Got it! Lets see what we found..."); System.out.println(); System.out.println(response.getCode()); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 89a74febd..fadf54800 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -54,6 +54,28 @@ public OAuth2AccessToken convert(Response response) throws IOException { }); } + public final Future getAccessTokenAsync(String code) { + return getAccessToken(code, null); + } + + /** + * Start the request to retrieve the access token. The optionally provided callback will be called with the Token + * when it is available. + * + * @param code code + * @param callback optional callback + * @return Future + * @deprecated user {@link #getAccessToken(java.lang.String, + * com.github.scribejava.core.model.OAuthAsyncRequestCallback) } + */ + @Deprecated + public final Future getAccessTokenAsync(String code, + OAuthAsyncRequestCallback callback) { + final OAuthRequest request = createAccessTokenRequest(code); + + return sendAccessTokenRequestAsync(request, callback); + } + public final OAuth2AccessToken getAccessToken(String code) throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createAccessTokenRequest(code); @@ -61,10 +83,6 @@ public final OAuth2AccessToken getAccessToken(String code) return sendAccessTokenRequestSync(request); } - public final Future getAccessTokenAsync(String code) { - return getAccessTokenAsync(code, null); - } - /** * Start the request to retrieve the access token. The optionally provided callback will be called with the Token * when it is available. @@ -73,7 +91,7 @@ public final Future getAccessTokenAsync(String code) { * @param callback optional callback * @return Future */ - public final Future getAccessTokenAsync(String code, + public final Future getAccessToken(String code, OAuthAsyncRequestCallback callback) { final OAuthRequest request = createAccessTokenRequest(code); @@ -95,6 +113,26 @@ protected OAuthRequest createAccessTokenRequest(String code) { return request; } + public final Future refreshAccessTokenAsync(String refreshToken) { + return refreshAccessToken(refreshToken, null); + } + + /** + * + * @param refreshToken refreshToken + * @param callback callback + * @return future + * @deprecated use {@link #refreshAccessToken(java.lang.String, + * com.github.scribejava.core.model.OAuthAsyncRequestCallback)} + */ + @Deprecated + public final Future refreshAccessTokenAsync(String refreshToken, + OAuthAsyncRequestCallback callback) { + final OAuthRequest request = createRefreshTokenRequest(refreshToken); + + return sendAccessTokenRequestAsync(request, callback); + } + public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createRefreshTokenRequest(refreshToken); @@ -102,11 +140,7 @@ public final OAuth2AccessToken refreshAccessToken(String refreshToken) return sendAccessTokenRequestSync(request); } - public final Future refreshAccessTokenAsync(String refreshToken) { - return refreshAccessTokenAsync(refreshToken, null); - } - - public final Future refreshAccessTokenAsync(String refreshToken, + public final Future refreshAccessToken(String refreshToken, OAuthAsyncRequestCallback callback) { final OAuthRequest request = createRefreshTokenRequest(refreshToken); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java index 27fedec80..df58ce3ea 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuthService.java @@ -68,6 +68,14 @@ public OAuthConfig getConfig() { public abstract void signRequest(T token, OAuthRequest request); + public Future executeAsync(OAuthRequest request) { + return execute(request, null); + } + + public Future execute(OAuthRequest request, OAuthAsyncRequestCallback callback) { + return execute(request, callback, null); + } + public Future execute(OAuthRequest request, OAuthAsyncRequestCallback callback, OAuthRequest.ResponseConverter converter) { @@ -84,10 +92,6 @@ public Future execute(OAuthRequest request, OAuthAsyncRequestCallback } } - public Future execute(OAuthRequest request, OAuthAsyncRequestCallback callback) { - return execute(request, callback, null); - } - public Response execute(OAuthRequest request) throws InterruptedException, ExecutionException, IOException { final File filePayload = request.getFilePayload(); if (filePayload != null) { From bd9a43018147cd72e5d2d04ad76752c3b4065ae4 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 1 Feb 2017 13:09:21 +0300 Subject: [PATCH 220/250] add body for PATCH HTTP method --- changelog | 3 +++ pom.xml | 2 +- .../core/httpclient/jdk/JDKHttpClient.java | 2 +- .../github/scribejava/core/model/OAuthRequest.java | 6 +----- .../java/com/github/scribejava/core/model/Verb.java | 12 +++++++++++- scribejava-httpclient-ahc/pom.xml | 2 +- .../scribejava/httpclient/ahc/AhcHttpClient.java | 2 +- .../scribejava/httpclient/ning/NingHttpClient.java | 2 +- 8 files changed, 20 insertions(+), 11 deletions(-) diff --git a/changelog b/changelog index ee62bbf36..9cc7f8f12 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * add body for PATCH HTTP method + [4.0.0] * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. * introduce SignatureType for OAuth2.0 to implement Bearer signing for the requests diff --git a/pom.xml b/pom.xml index e3149970b..8be793348 100644 --- a/pom.xml +++ b/pom.xml @@ -148,7 +148,7 @@ maven-compiler-plugin - 3.6.0 + 3.6.1 UTF-8 1.7 diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java index 3e19a7d6d..205c842b9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java @@ -96,7 +96,7 @@ private Response doExecute(String userAgent, Map headers, Verb h connection.setReadTimeout(config.getReadTimeout()); } addHeaders(connection, headers, userAgent); - if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + if (httpVerb.isPermitBody()) { bodyType.setBody(connection, bodyContents); } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java index 102bc702a..3f50440eb 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthRequest.java @@ -117,17 +117,13 @@ public void addQuerystringParameter(String key, String value) { } public void addParameter(String key, String value) { - if (hasBodyContent()) { + if (verb.isPermitBody()) { bodyParams.add(key, value); } else { querystringParams.add(key, value); } } - protected boolean hasBodyContent() { - return verb == Verb.PUT || verb == Verb.POST; - } - /** * Set body payload. This method is used when the HTTP body is not a form-url-encoded string, but another thing. * Like for example XML. Note: The contents are not part of the OAuth signature diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/Verb.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/Verb.java index 6ca83a517..ddcebc6b2 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/Verb.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/Verb.java @@ -5,5 +5,15 @@ */ public enum Verb { - GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, PATCH + GET(false), POST(true), PUT(true), DELETE(true), HEAD(false), OPTIONS(false), TRACE(false), PATCH(true); + + private final boolean permitBody; + + Verb(boolean permitBody) { + this.permitBody = permitBody; + } + + public boolean isPermitBody() { + return permitBody; + } } diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 3dde9e796..8c78da1cd 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.24 + 2.0.26 diff --git a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java index a4962b2b5..cdc894bb8 100644 --- a/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java +++ b/scribejava-httpclient-ahc/src/main/java/com/github/scribejava/httpclient/ahc/AhcHttpClient.java @@ -76,7 +76,7 @@ private Future doExecuteAsync(String userAgent, Map heade throw new IllegalArgumentException("message build error: unknown verb type"); } - if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + if (httpVerb.isPermitBody()) { if (!headers.containsKey(CONTENT_TYPE)) { boundRequestBuilder = boundRequestBuilder.addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } diff --git a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java index a9fcb0a81..bcc843e00 100644 --- a/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java +++ b/scribejava-httpclient-ning/src/main/java/com/github/scribejava/httpclient/ning/NingHttpClient.java @@ -84,7 +84,7 @@ private Future doExecuteAsync(String userAgent, Map heade throw new IllegalArgumentException("message build error: unknown verb type"); } - if (httpVerb == Verb.POST || httpVerb == Verb.PUT || httpVerb == Verb.DELETE) { + if (httpVerb.isPermitBody()) { if (!headers.containsKey(CONTENT_TYPE)) { boundRequestBuilder = boundRequestBuilder.addHeader(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } From 4cd58302f9e252e0a3c355b1f842a527e9b6af3d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 4 Apr 2017 16:09:11 +0300 Subject: [PATCH 221/250] move OAuth1 SignatureType to ServiceBuilder to API --- changelog | 1 + .../com/github/scribejava/apis/BoxApi20.java | 6 +-- .../scribejava/apis/Foursquare2Api.java | 6 +-- .../github/scribejava/apis/FreelancerApi.java | 6 +++ .../github/scribejava/apis/KaixinApi20.java | 6 +-- .../github/scribejava/apis/LinkedInApi20.java | 6 +-- .../com/github/scribejava/apis/LiveApi.java | 6 +-- .../com/github/scribejava/apis/MisfitApi.java | 6 +-- .../com/github/scribejava/apis/NaverApi.java | 6 +-- .../scribejava/apis/OdnoklassnikiApi.java | 6 +-- .../github/scribejava/apis/PinterestApi.java | 6 +-- .../com/github/scribejava/apis/RenrenApi.java | 6 +-- .../scribejava/apis/SinaWeiboApi20.java | 6 +-- .../scribejava/apis/StackExchangeApi.java | 6 +-- .../com/github/scribejava/apis/ViadeoApi.java | 6 +-- .../github/scribejava/apis/VkontakteApi.java | 6 +-- .../apis/examples/FreelancerExample.java | 2 - .../core/builder/ServiceBuilder.java | 24 ++++++--- .../core/builder/api/DefaultApi10a.java | 7 +++ .../core/builder/api/DefaultApi20.java | 4 +- .../core/builder/api/OAuth1SignatureType.java | 7 +++ .../core/builder/api/OAuth2SignatureType.java | 30 +++++++++++ .../core/builder/api/SignatureType.java | 4 ++ .../scribejava/core/model/OAuthConfig.java | 53 ++++++++++++++++--- .../scribejava/core/model/SignatureType.java | 4 ++ .../core/oauth/OAuth10aService.java | 8 ++- .../core/builder/ServiceBuilderTest.java | 10 ++-- .../scribejava/core/oauth/OAuth20ApiUnit.java | 6 +-- .../okhttp/OkHttpHttpClientTest.java | 2 +- 29 files changed, 183 insertions(+), 69 deletions(-) create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth1SignatureType.java create mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth2SignatureType.java diff --git a/changelog b/changelog index 9cc7f8f12..359cd2c75 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,5 @@ [SNAPSHOT] + * move OAuth1 SignatureType to ServiceBuilder to API * add body for PATCH HTTP method [4.0.0] diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java index c6613b62e..d21cc39be 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/BoxApi20.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; /** * Box.com Api @@ -31,7 +31,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java index 71fb94768..321554af2 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/Foursquare2Api.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.Verb; public class Foursquare2Api extends DefaultApi20 { @@ -33,7 +33,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FreelancerApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FreelancerApi.java index 52fe4cc1f..65b64c04f 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FreelancerApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FreelancerApi.java @@ -1,6 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi10a; +import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.Verb; @@ -19,6 +20,11 @@ public static FreelancerApi instance() { return InstanceHolder.INSTANCE; } + @Override + public OAuth1SignatureType getSignatureType() { + return OAuth1SignatureType.QueryString; + } + @Override public String getAccessTokenEndpoint() { return "http://api.freelancer.com/RequestAccessToken/requestAccessToken.xml?"; diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java index fdf8f67af..927813535 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KaixinApi20.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.Verb; /** @@ -36,7 +36,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java index 2ba6259f3..8fa239c5d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java @@ -2,7 +2,7 @@ import com.github.scribejava.apis.service.LinkedIn20ServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; @@ -35,7 +35,7 @@ public OAuth20Service createService(OAuthConfig config) { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java index da34cab8f..ffaf3bcf6 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LiveApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.Verb; public class LiveApi extends DefaultApi20 { @@ -33,7 +33,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java index 54559e6da..c34d2cc15 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/MisfitApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; public class MisfitApi extends DefaultApi20 { @@ -28,7 +28,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java index 42056e7eb..a3028ae11 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/NaverApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; public class NaverApi extends DefaultApi20 { protected NaverApi() { @@ -29,7 +29,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java index 85f3cb007..f8e1a40ef 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/OdnoklassnikiApi.java @@ -2,7 +2,7 @@ import com.github.scribejava.apis.service.OdnoklassnikiServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.oauth.OAuth20Service; @@ -35,7 +35,7 @@ public OAuth20Service createService(OAuthConfig config) { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java index 2940f0a15..d93404b5e 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; public class PinterestApi extends DefaultApi20 { @@ -27,7 +27,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java index 08fde329e..cc475440e 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/RenrenApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.Verb; /** @@ -36,7 +36,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java index 64d3b4950..edd316f87 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/SinaWeiboApi20.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; /** * SinaWeibo OAuth 2.0 api. @@ -30,7 +30,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java index b2f6f0db7..554c97b33 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/StackExchangeApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; @@ -39,7 +39,7 @@ public TokenExtractor getAccessTokenExtractor() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java index bc1833563..30c0ffcfe 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/ViadeoApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.Verb; public class ViadeoApi extends DefaultApi20 { @@ -33,7 +33,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java index 87217c4b8..285cb2cde 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/VkontakteApi.java @@ -1,7 +1,7 @@ package com.github.scribejava.apis; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.Verb; public class VkontakteApi extends DefaultApi20 { @@ -33,7 +33,7 @@ protected String getAuthorizationBaseUrl() { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index 3908ae116..45986edf1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -7,7 +7,6 @@ import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.SignatureType; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; import java.io.IOException; @@ -26,7 +25,6 @@ private FreelancerExample() { public static void main(String... args) throws IOException, InterruptedException, ExecutionException { final OAuth10aService service = new ServiceBuilder() - .signatureType(SignatureType.QueryString) .apiKey("your client id") .apiSecret("your client secret") .scope(SCOPE) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index 0651a0e9a..b0a6067db 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -5,7 +5,7 @@ import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.SignatureType; +import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; @@ -21,7 +21,12 @@ public class ServiceBuilder { private String apiSecret; private String scope; private String state; - private SignatureType signatureType; + /** + * @deprecated override or change in Pull Request + * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} + */ + @Deprecated + private OAuth1SignatureType signatureType; private OutputStream debugStream; private String responseType = "code"; private String userAgent; @@ -31,7 +36,6 @@ public class ServiceBuilder { public ServiceBuilder() { callback = OAuthConstants.OUT_OF_BAND; - signatureType = SignatureType.Header; } /** @@ -95,13 +99,18 @@ public ServiceBuilder state(String state) { } /** - * Configures the signature type, choose between header, querystring, etc. Defaults to Header + * Configures the signature type, choose between header, querystring, etc. Defaults to null.
+ * 'null' means to use default for API + * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} * - * @param signatureType SignatureType + * @param signatureType OAuth1SignatureType * @return the {@link ServiceBuilder} instance for method chaining + * + * @deprecated override or change in Pull Request + * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} */ - public ServiceBuilder signatureType(SignatureType signatureType) { - Preconditions.checkNotNull(signatureType, "Signature type can't be null"); + @Deprecated + public ServiceBuilder signatureType(OAuth1SignatureType signatureType) { this.signatureType = signatureType; return this; } @@ -149,6 +158,7 @@ public void checkPreconditions() { Preconditions.checkEmptyString(apiKey, "You must provide an api key"); } + @SuppressWarnings("deprecation") private OAuthConfig createConfig() { checkPreconditions(); return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java index 3b4b148c6..b7167a86e 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi10a.java @@ -77,6 +77,13 @@ public SignatureService getSignatureService() { return new HMACSha1SignatureService(); } + /** + * @return the signature type, choose between header, querystring, etc. Defaults to Header + */ + public OAuth1SignatureType getSignatureType() { + return OAuth1SignatureType.Header; + } + /** * Returns the timestamp service. * diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java index 95c3022b6..5a9e7ce44 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/DefaultApi20.java @@ -91,7 +91,7 @@ public OAuth20Service createService(OAuthConfig config) { return new OAuth20Service(this, config); } - public SignatureType getSignatureType() { - return SignatureType.BEARER_AUTHORIZATION_REQUEST_HEADER_FIELD; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_AUTHORIZATION_REQUEST_HEADER_FIELD; } } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth1SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth1SignatureType.java new file mode 100644 index 000000000..7660b5826 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth1SignatureType.java @@ -0,0 +1,7 @@ +package com.github.scribejava.core.builder.api; + +public enum OAuth1SignatureType { + + Header, + QueryString +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth2SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth2SignatureType.java new file mode 100644 index 000000000..a6825a757 --- /dev/null +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/OAuth2SignatureType.java @@ -0,0 +1,30 @@ +package com.github.scribejava.core.builder.api; + +import com.github.scribejava.core.model.OAuth2AccessToken; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.OAuthRequest; + +public enum OAuth2SignatureType { + /** + * https://tools.ietf.org/html/rfc6750#section-2.1 + */ + BEARER_AUTHORIZATION_REQUEST_HEADER_FIELD { + @Override + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { + request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); + } + + }, + /** + * https://tools.ietf.org/html/rfc6750#section-2.3 + */ + BEARER_URI_QUERY_PARAMETER { + @Override + public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { + request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getAccessToken()); + } + + }; + + public abstract void signRequest(OAuth2AccessToken accessToken, OAuthRequest request); +} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java index 91ebf5b94..3429b64b5 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java @@ -4,6 +4,10 @@ import com.github.scribejava.core.model.OAuthConstants; import com.github.scribejava.core.model.OAuthRequest; +/** + * @deprecated renamed to {@link OAuth2SignatureType} + */ +@Deprecated public enum SignatureType { /** * https://tools.ietf.org/html/rfc6750#section-2.1 diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index e84ad6805..929fc97cc 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -1,5 +1,6 @@ package com.github.scribejava.core.model; +import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; import java.io.IOException; @@ -13,7 +14,12 @@ public class OAuthConfig { private final String apiKey; private final String apiSecret; private final String callback; - private final SignatureType signatureType; + /** + * @deprecated override or change in Pull Request + * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} + */ + @Deprecated + private OAuth1SignatureType signatureType; private final String scope; private final OutputStream debugStream; private final String state; @@ -24,16 +30,44 @@ public class OAuthConfig { private HttpClient httpClient; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null, null, null, null, null, null); + this(key, secret, null, null, null, null, null, null, null, null); } - public OAuthConfig(String apiKey, String apiSecret, String callback, SignatureType signatureType, String scope, - OutputStream debugStream, String state, String responseType, String userAgent, + /** + * @param apiKey apiKey + * @param apiSecret apiSecret + * @param callback callback + * @param signatureType signatureType + * @param scope scope + * @param debugStream debugStream + * @param state state + * @param responseType responseType + * @param userAgent userAgent + * @param httpClientConfig httpClientConfig + * @param httpClient httpClient + * + * @deprecated use {@link #OAuthConfig(java.lang.String, java.lang.String, java.lang.String, java.lang.String, + * java.io.OutputStream, java.lang.String, java.lang.String, java.lang.String, + * com.github.scribejava.core.httpclient.HttpClientConfig, com.github.scribejava.core.httpclient.HttpClient)} + *
+ * without OAuth1SignatureType param. to change OAuth1SignatureType override or change in Pull Request + *
{@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} + */ + @Deprecated + public OAuthConfig(String apiKey, String apiSecret, String callback, OAuth1SignatureType signatureType, + String scope, OutputStream debugStream, String state, String responseType, String userAgent, HttpClientConfig httpClientConfig, HttpClient httpClient) { + this(apiKey, apiSecret, callback, scope, debugStream, state, responseType, userAgent, httpClientConfig, + httpClient); + this.signatureType = signatureType; + } + + public OAuthConfig(String apiKey, String apiSecret, String callback, String scope, OutputStream debugStream, + String state, String responseType, String userAgent, HttpClientConfig httpClientConfig, + HttpClient httpClient) { this.apiKey = apiKey; this.apiSecret = apiSecret; this.callback = callback; - this.signatureType = signatureType; this.scope = scope; this.debugStream = debugStream; this.state = state; @@ -55,7 +89,14 @@ public String getCallback() { return callback; } - public SignatureType getSignatureType() { + /** + * @return configured OAuth1SignatureType to override from API + * + * @deprecated override or change in Pull Request + * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} + */ + @Deprecated + public OAuth1SignatureType getSignatureType() { return signatureType; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java index 26ffe054e..5e6dd91a7 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java @@ -1,5 +1,9 @@ package com.github.scribejava.core.model; +/** + * @deprecated renamed to {@link com.github.scribejava.core.builder.api.OAuth1SignatureType} + */ +@Deprecated public enum SignatureType { Header, diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index d9332d03b..8dab33476 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -4,6 +4,7 @@ import java.util.Map; import java.util.concurrent.Future; import com.github.scribejava.core.builder.api.DefaultApi10a; +import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthAsyncRequestCallback; @@ -179,7 +180,10 @@ private String getSignature(OAuthRequest request, String tokenSecret) { private void appendSignature(OAuthRequest request) { final OAuthConfig config = getConfig(); - switch (config.getSignatureType()) { + @SuppressWarnings("deprecation") + final OAuth1SignatureType signatureType + = config.getSignatureType() == null ? api.getSignatureType() : config.getSignatureType(); + switch (signatureType) { case Header: config.log("using Http Header signature"); @@ -194,7 +198,7 @@ private void appendSignature(OAuthRequest request) { } break; default: - throw new IllegalStateException("Unknown new Signature Type '" + config.getSignatureType() + "'."); + throw new IllegalStateException("Unknown new Signature Type '" + signatureType + "'."); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java index 57f7d62e2..6654c15b4 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java @@ -6,7 +6,7 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.SignatureType; +import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.oauth.OAuth20Service; public class ServiceBuilderTest { @@ -21,6 +21,7 @@ public void setUp() { } @Test + @SuppressWarnings("deprecation") public void shouldReturnConfigDefaultValues() { builder.apiKey("key").apiSecret("secret").build(api); @@ -28,7 +29,7 @@ public void shouldReturnConfigDefaultValues() { assertEquals(config.getApiKey(), "key"); assertEquals(config.getApiSecret(), "secret"); assertEquals(config.getCallback(), OAuthConstants.OUT_OF_BAND); - assertEquals(config.getSignatureType(), SignatureType.Header); + assertEquals(config.getSignatureType(), null); } @Test @@ -42,13 +43,14 @@ public void shouldAcceptValidCallbackUrl() { } @Test + @SuppressWarnings("deprecation") public void shouldAcceptASignatureType() { - builder.apiKey("key").apiSecret("secret").signatureType(SignatureType.QueryString).build(api); + builder.apiKey("key").apiSecret("secret").signatureType(OAuth1SignatureType.QueryString).build(api); final OAuthConfig config = api.getConfig(); assertEquals(config.getApiKey(), "key"); assertEquals(config.getApiSecret(), "secret"); - assertEquals(config.getSignatureType(), SignatureType.QueryString); + assertEquals(config.getSignatureType(), OAuth1SignatureType.QueryString); } @Test(expected = IllegalArgumentException.class) diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java index 55e04a461..c6c05e05c 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ApiUnit.java @@ -1,7 +1,7 @@ package com.github.scribejava.core.oauth; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.SignatureType; +import com.github.scribejava.core.builder.api.OAuth2SignatureType; import com.github.scribejava.core.model.OAuthConfig; class OAuth20ApiUnit extends DefaultApi20 { @@ -22,7 +22,7 @@ public OAuth20Service createService(OAuthConfig config) { } @Override - public SignatureType getSignatureType() { - return SignatureType.BEARER_URI_QUERY_PARAMETER; + public OAuth2SignatureType getSignatureType() { + return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; } } diff --git a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java index 92ef44423..496882cdd 100644 --- a/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java +++ b/scribejava-httpclient-okhttp/src/test/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClientTest.java @@ -27,7 +27,7 @@ public class OkHttpHttpClientTest { public void setUp() { final HttpClient client = new OkHttpHttpClient(new OkHttpClient()); oAuthService = new OAuth20Service(null, - new OAuthConfig("test", "test", null, null, null, null, null, null, null, null, client)); + new OAuthConfig("test", "test", null, null, null, null, null, null, null, client)); } From ac8ff60ed008e43202d826d7ba7f21a881825e44 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 4 Apr 2017 17:35:20 +0300 Subject: [PATCH 222/250] make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) --- changelog | 1 + .../com/github/scribejava/core/oauth/OAuth20Service.java | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 359cd2c75..0e4300df6 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,5 @@ [SNAPSHOT] + * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) * move OAuth1 SignatureType to ServiceBuilder to API * add body for PATCH HTTP method diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index fadf54800..8174a8e51 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -102,7 +102,10 @@ protected OAuthRequest createAccessTokenRequest(String code) { final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); - request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + final String apiSecret = config.getApiSecret(); + if (apiSecret != null) { + request.addParameter(OAuthConstants.CLIENT_SECRET, apiSecret); + } request.addParameter(OAuthConstants.CODE, code); request.addParameter(OAuthConstants.REDIRECT_URI, config.getCallback()); final String scope = config.getScope(); From a2887ddc0d724c22a3071eb9c44c8c3db6505bb9 Mon Sep 17 00:00:00 2001 From: Vivin Paliath Date: Wed, 29 Mar 2017 10:50:01 -0700 Subject: [PATCH 223/250] issue #753 Makes `addOAuthParams` and `appendSignature` `protected`, so that they can be used from overridden `prepareRequestTokenRequest` methods in subclasses. This makes it possible to deal with the (rare) case where the request-token endpoint in an OAuth 1.0a service accepts additional-parameters; these are supported by request-token endpoints as per the specification. --- .../com/github/scribejava/core/oauth/OAuth10aService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index d9332d03b..c1291646f 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -75,7 +75,7 @@ protected OAuthRequest prepareRequestTokenRequest() { return request; } - private void addOAuthParams(OAuthRequest request, String tokenSecret) { + protected void addOAuthParams(OAuthRequest request, String tokenSecret) { final OAuthConfig config = getConfig(); request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); @@ -177,7 +177,7 @@ private String getSignature(OAuthRequest request, String tokenSecret) { return signature; } - private void appendSignature(OAuthRequest request) { + protected void appendSignature(OAuthRequest request) { final OAuthConfig config = getConfig(); switch (config.getSignatureType()) { case Header: From cad7e9a4ddc68e840e49721bbf1206e29c721c4d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 10 Apr 2017 12:47:21 +0300 Subject: [PATCH 224/250] refactor example a bit --- .../apis/examples/SalesforceExample.java | 17 +++++++++++++---- .../examples/SalesforceNingAsyncExample.java | 17 +++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index e47fbaeea..925819a7b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -8,6 +8,7 @@ import com.github.scribejava.apis.SalesforceApi; import com.github.scribejava.apis.salesforce.SalesforceToken; import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; @@ -66,13 +67,21 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep // Trade the Request Token and Verifier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); + + final OAuth2AccessToken accessToken = service.getAccessToken(codeEncoded); + final SalesforceToken salesforceAccessToken; + if (accessToken instanceof SalesforceToken) { + salesforceAccessToken = (SalesforceToken) accessToken; + } else { + throw new IllegalStateException("Salesforce API didn't return SalesforceToken."); + } System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + ", 'rawResponse'='" + + System.out.println("(if your curious it looks like this: " + salesforceAccessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); - System.out.println("instance_url is: " + accessToken.getInstanceUrl()); + System.out.println("instance_url is: " + salesforceAccessToken.getInstanceUrl()); // Now let's go and ask for a protected resource! System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); @@ -81,7 +90,7 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep final String queryEncoded = URLEncoder.encode("Select Id, Name from Account LIMIT 10", "UTF-8"); // Building the query URI. We've parsed the instance URL from the accessToken request. - final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + final String url = salesforceAccessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; System.out.println(); System.out.println("Full URL: " + url); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 2cf040a45..36a060123 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -11,6 +11,7 @@ import com.github.scribejava.apis.salesforce.SalesforceToken; import com.github.scribejava.httpclient.ning.NingHttpClientConfig; import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; @@ -67,19 +68,27 @@ public static void main(String... args) throws InterruptedException, ExecutionEx final String codeEncoded = URLDecoder.decode(code, "UTF-8"); // Trade the Request Token and Verifier for the Access Token System.out.println("Trading the Request Token for an Access Token..."); - final SalesforceToken accessToken = (SalesforceToken) service.getAccessToken(codeEncoded); + + final OAuth2AccessToken accessToken = service.getAccessToken(codeEncoded); + final SalesforceToken salesforceAccessToken; + if (accessToken instanceof SalesforceToken) { + salesforceAccessToken = (SalesforceToken) accessToken; + } else { + throw new IllegalStateException("Salesforce API didn't return SalesforceToken."); + } System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken + + System.out.println("(if your curious it looks like this: " + salesforceAccessToken + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); System.out.println(); - System.out.println("Instance is: " + accessToken.getInstanceUrl()); + System.out.println("Instance is: " + salesforceAccessToken.getInstanceUrl()); // Now let's go and ask for a protected resource! System.out.println("Now we're reading accounts from the Salesforce org (maxing them to 10)."); // Sample SOQL statement final String queryEncoded = URLEncoder.encode("Select Id, Name from Account LIMIT 10", "UTF-8"); // Building the query URI. We've parsed the instance URL from the // accessToken request. - final String url = accessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; + final String url = salesforceAccessToken.getInstanceUrl() + "/services/data/v36.0/query?q=" + queryEncoded; System.out.println(); System.out.println("Full URL: " + url); final OAuthRequest request = new OAuthRequest(Verb.GET, url); From 04f42bbb97019171a8c4ce6f297680b7063dde7f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 10 Apr 2017 13:38:01 +0300 Subject: [PATCH 225/250] update maven deps --- pom.xml | 4 ++-- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 8be793348..ba06a1035 100644 --- a/pom.xml +++ b/pom.xml @@ -103,7 +103,7 @@ org.apache.felix maven-bundle-plugin - 3.2.0 + 3.3.0 bundle-manifest @@ -132,7 +132,7 @@ com.puppycrawl.tools checkstyle - 7.4 + 7.6.1 diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 8c78da1cd..d4ff34885 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.26 + 2.0.31 diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 171ba7cd0..8c2b45af1 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -23,12 +23,12 @@ com.squareup.okhttp3 okhttp - 3.5.0 + 3.6.0 com.squareup.okhttp3 mockwebserver - 3.5.0 + 3.6.0 test From 6548aaba76571278dcc1e7168d5bf28c80a3e16d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 18 Apr 2017 11:26:05 +0300 Subject: [PATCH 226/250] add changelog entry --- changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog b/changelog index 0e4300df6..3fe88d590 100644 --- a/changelog +++ b/changelog @@ -2,6 +2,7 @@ * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) * move OAuth1 SignatureType to ServiceBuilder to API * add body for PATCH HTTP method + * make addOAuthParams appendSignature methods protected in OAuth10aService (to override them in case of need) (thanks to https://github.com/vivin) [4.0.0] * Remove OAuthRequestAsync, just OAuthRequest. Request should know about sync vs async. Move default Http engine to JDKHttpClient. From 3d10ecad0fe36887dbc298e749431d1f137ff51e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 18 Apr 2017 11:47:26 +0300 Subject: [PATCH 227/250] fix typo in changelog --- changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog b/changelog index 3fe88d590..8f626f359 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,6 @@ [SNAPSHOT] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) - * move OAuth1 SignatureType to ServiceBuilder to API + * move OAuth1 SignatureType from ServiceBuilder to API * add body for PATCH HTTP method * make addOAuthParams appendSignature methods protected in OAuth10aService (to override them in case of need) (thanks to https://github.com/vivin) From 32be73a4fb7479fcaf200eedbc83318133467882 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 18 Apr 2017 11:48:34 +0300 Subject: [PATCH 228/250] prepare 4.1.0 release --- README.md | 4 ++-- changelog | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 156f924fb..e1fdf095e 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 4.0.0 + 4.1.0 ``` @@ -109,7 +109,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 4.0.0 + 4.1.0 ``` diff --git a/changelog b/changelog index 8f626f359..2a6598599 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,4 @@ -[SNAPSHOT] +[4.1.0] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) * move OAuth1 SignatureType from ServiceBuilder to API * add body for PATCH HTTP method From 08afa0d96e7da433035eeab273cee095da297fb4 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 18 Apr 2017 11:50:05 +0300 Subject: [PATCH 229/250] [maven-release-plugin] prepare release scribejava-4.1.0 --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index ba06a1035..7dc377c7e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 4.0.1-SNAPSHOT + 4.1.0 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - HEAD + scribejava-4.1.0 diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index d317b3998..327ca9e68 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.1-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 00dee881e..0817d3390 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.1-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index d4ff34885..d1adebfe3 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.1-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 6449b91cc..5fe6be24d 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.1-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 8c2b45af1..94d74190c 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.0.1-SNAPSHOT + 4.1.0 ../pom.xml From c09046936a6518a53612b6ca66d8ae1fcc1a72c2 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 18 Apr 2017 11:50:12 +0300 Subject: [PATCH 230/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 7dc377c7e..4b61d03ae 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 4.1.0 + 4.1.1-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-4.1.0 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 327ca9e68..237f2586f 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 0817d3390..4101caf4b 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index d1adebfe3..e3da50259 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 5fe6be24d..1f8283d29 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 94d74190c..89cf81ef0 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml From 2b0dce249d35ef35d2f9a84172aa609f39844690 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Wed, 19 Apr 2017 12:21:31 +0300 Subject: [PATCH 231/250] remove deprecated code --- changelog | 2 + .../core/builder/ServiceBuilder.java | 29 +----------- .../core/builder/api/SignatureType.java | 34 -------------- .../scribejava/core/model/OAuthConfig.java | 47 ------------------- .../scribejava/core/model/SignatureType.java | 11 ----- .../core/oauth/OAuth10aService.java | 4 +- .../scribejava/core/oauth/OAuth20Service.java | 34 -------------- .../core/builder/ServiceBuilderTest.java | 14 ------ 8 files changed, 5 insertions(+), 170 deletions(-) delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java delete mode 100644 scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java diff --git a/changelog b/changelog index 2a6598599..0378202e7 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,5 @@ +[SNAPSHOT] + [4.1.0] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) * move OAuth1 SignatureType from ServiceBuilder to API diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index b0a6067db..d44b784fd 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -5,7 +5,6 @@ import com.github.scribejava.core.httpclient.HttpClientConfig; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.utils.Preconditions; @@ -21,12 +20,6 @@ public class ServiceBuilder { private String apiSecret; private String scope; private String state; - /** - * @deprecated override or change in Pull Request - * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} - */ - @Deprecated - private OAuth1SignatureType signatureType; private OutputStream debugStream; private String responseType = "code"; private String userAgent; @@ -98,23 +91,6 @@ public ServiceBuilder state(String state) { return this; } - /** - * Configures the signature type, choose between header, querystring, etc. Defaults to null.
- * 'null' means to use default for API - * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} - * - * @param signatureType OAuth1SignatureType - * @return the {@link ServiceBuilder} instance for method chaining - * - * @deprecated override or change in Pull Request - * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} - */ - @Deprecated - public ServiceBuilder signatureType(OAuth1SignatureType signatureType) { - this.signatureType = signatureType; - return this; - } - public ServiceBuilder debugStream(OutputStream debugStream) { Preconditions.checkNotNull(debugStream, "debug stream can't be null"); this.debugStream = debugStream; @@ -158,11 +134,10 @@ public void checkPreconditions() { Preconditions.checkEmptyString(apiKey, "You must provide an api key"); } - @SuppressWarnings("deprecation") private OAuthConfig createConfig() { checkPreconditions(); - return new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream, state, responseType, - userAgent, httpClientConfig, httpClient); + return new OAuthConfig(apiKey, apiSecret, callback, scope, debugStream, state, responseType, userAgent, + httpClientConfig, httpClient); } /** diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java deleted file mode 100644 index 3429b64b5..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/api/SignatureType.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.github.scribejava.core.builder.api; - -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.model.OAuthRequest; - -/** - * @deprecated renamed to {@link OAuth2SignatureType} - */ -@Deprecated -public enum SignatureType { - /** - * https://tools.ietf.org/html/rfc6750#section-2.1 - */ - BEARER_AUTHORIZATION_REQUEST_HEADER_FIELD { - @Override - public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addHeader("Authorization", "Bearer " + accessToken.getAccessToken()); - } - - }, - /** - * https://tools.ietf.org/html/rfc6750#section-2.3 - */ - BEARER_URI_QUERY_PARAMETER { - @Override - public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getAccessToken()); - } - - }; - - public abstract void signRequest(OAuth2AccessToken accessToken, OAuthRequest request); -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java index 929fc97cc..244ca6731 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/model/OAuthConfig.java @@ -1,6 +1,5 @@ package com.github.scribejava.core.model; -import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.httpclient.HttpClient; import com.github.scribejava.core.httpclient.HttpClientConfig; import java.io.IOException; @@ -14,12 +13,6 @@ public class OAuthConfig { private final String apiKey; private final String apiSecret; private final String callback; - /** - * @deprecated override or change in Pull Request - * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} - */ - @Deprecated - private OAuth1SignatureType signatureType; private final String scope; private final OutputStream debugStream; private final String state; @@ -33,35 +26,6 @@ public OAuthConfig(String key, String secret) { this(key, secret, null, null, null, null, null, null, null, null); } - /** - * @param apiKey apiKey - * @param apiSecret apiSecret - * @param callback callback - * @param signatureType signatureType - * @param scope scope - * @param debugStream debugStream - * @param state state - * @param responseType responseType - * @param userAgent userAgent - * @param httpClientConfig httpClientConfig - * @param httpClient httpClient - * - * @deprecated use {@link #OAuthConfig(java.lang.String, java.lang.String, java.lang.String, java.lang.String, - * java.io.OutputStream, java.lang.String, java.lang.String, java.lang.String, - * com.github.scribejava.core.httpclient.HttpClientConfig, com.github.scribejava.core.httpclient.HttpClient)} - *
- * without OAuth1SignatureType param. to change OAuth1SignatureType override or change in Pull Request - *
{@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} - */ - @Deprecated - public OAuthConfig(String apiKey, String apiSecret, String callback, OAuth1SignatureType signatureType, - String scope, OutputStream debugStream, String state, String responseType, String userAgent, - HttpClientConfig httpClientConfig, HttpClient httpClient) { - this(apiKey, apiSecret, callback, scope, debugStream, state, responseType, userAgent, httpClientConfig, - httpClient); - this.signatureType = signatureType; - } - public OAuthConfig(String apiKey, String apiSecret, String callback, String scope, OutputStream debugStream, String state, String responseType, String userAgent, HttpClientConfig httpClientConfig, HttpClient httpClient) { @@ -89,17 +53,6 @@ public String getCallback() { return callback; } - /** - * @return configured OAuth1SignatureType to override from API - * - * @deprecated override or change in Pull Request - * {@link com.github.scribejava.core.builder.api.DefaultApi10a#getSignatureType()} - */ - @Deprecated - public OAuth1SignatureType getSignatureType() { - return signatureType; - } - public String getScope() { return scope; } diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java b/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java deleted file mode 100644 index 5e6dd91a7..000000000 --- a/scribejava-core/src/main/java/com/github/scribejava/core/model/SignatureType.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.scribejava.core.model; - -/** - * @deprecated renamed to {@link com.github.scribejava.core.builder.api.OAuth1SignatureType} - */ -@Deprecated -public enum SignatureType { - - Header, - QueryString -} diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java index 455ed542d..ad9e6eda0 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth10aService.java @@ -180,9 +180,7 @@ private String getSignature(OAuthRequest request, String tokenSecret) { protected void appendSignature(OAuthRequest request) { final OAuthConfig config = getConfig(); - @SuppressWarnings("deprecation") - final OAuth1SignatureType signatureType - = config.getSignatureType() == null ? api.getSignatureType() : config.getSignatureType(); + final OAuth1SignatureType signatureType = api.getSignatureType(); switch (signatureType) { case Header: config.log("using Http Header signature"); diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 8174a8e51..1f87a1704 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -58,24 +58,6 @@ public final Future getAccessTokenAsync(String code) { return getAccessToken(code, null); } - /** - * Start the request to retrieve the access token. The optionally provided callback will be called with the Token - * when it is available. - * - * @param code code - * @param callback optional callback - * @return Future - * @deprecated user {@link #getAccessToken(java.lang.String, - * com.github.scribejava.core.model.OAuthAsyncRequestCallback) } - */ - @Deprecated - public final Future getAccessTokenAsync(String code, - OAuthAsyncRequestCallback callback) { - final OAuthRequest request = createAccessTokenRequest(code); - - return sendAccessTokenRequestAsync(request, callback); - } - public final OAuth2AccessToken getAccessToken(String code) throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createAccessTokenRequest(code); @@ -120,22 +102,6 @@ public final Future refreshAccessTokenAsync(String refreshTok return refreshAccessToken(refreshToken, null); } - /** - * - * @param refreshToken refreshToken - * @param callback callback - * @return future - * @deprecated use {@link #refreshAccessToken(java.lang.String, - * com.github.scribejava.core.model.OAuthAsyncRequestCallback)} - */ - @Deprecated - public final Future refreshAccessTokenAsync(String refreshToken, - OAuthAsyncRequestCallback callback) { - final OAuthRequest request = createRefreshTokenRequest(refreshToken); - - return sendAccessTokenRequestAsync(request, callback); - } - public final OAuth2AccessToken refreshAccessToken(String refreshToken) throws IOException, InterruptedException, ExecutionException { final OAuthRequest request = createRefreshTokenRequest(refreshToken); diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java index 6654c15b4..3aa88699a 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java @@ -6,7 +6,6 @@ import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthConstants; -import com.github.scribejava.core.builder.api.OAuth1SignatureType; import com.github.scribejava.core.oauth.OAuth20Service; public class ServiceBuilderTest { @@ -21,7 +20,6 @@ public void setUp() { } @Test - @SuppressWarnings("deprecation") public void shouldReturnConfigDefaultValues() { builder.apiKey("key").apiSecret("secret").build(api); @@ -29,7 +27,6 @@ public void shouldReturnConfigDefaultValues() { assertEquals(config.getApiKey(), "key"); assertEquals(config.getApiSecret(), "secret"); assertEquals(config.getCallback(), OAuthConstants.OUT_OF_BAND); - assertEquals(config.getSignatureType(), null); } @Test @@ -42,17 +39,6 @@ public void shouldAcceptValidCallbackUrl() { assertEquals(config.getCallback(), "http://example.com"); } - @Test - @SuppressWarnings("deprecation") - public void shouldAcceptASignatureType() { - builder.apiKey("key").apiSecret("secret").signatureType(OAuth1SignatureType.QueryString).build(api); - - final OAuthConfig config = api.getConfig(); - assertEquals(config.getApiKey(), "key"); - assertEquals(config.getApiSecret(), "secret"); - assertEquals(config.getSignatureType(), OAuth1SignatureType.QueryString); - } - @Test(expected = IllegalArgumentException.class) public void shouldNotAcceptNullAsCallback() { builder.apiKey("key").apiSecret("secret").callback(null).build(api); From 97c03a04f3173bf9fe9eb09aeaa9b26d3d1a637a Mon Sep 17 00:00:00 2001 From: KungfuPancake Date: Sun, 23 Apr 2017 17:13:34 +0200 Subject: [PATCH 232/250] Only add secret key if set --- .../java/com/github/scribejava/core/oauth/OAuth20Service.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 1f87a1704..75ac7166b 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -123,7 +123,9 @@ protected OAuthRequest createRefreshTokenRequest(String refreshToken) { final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint()); final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); - request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + if (config.getApiSecret() != null) { + request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + } request.addParameter(OAuthConstants.REFRESH_TOKEN, refreshToken); request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.REFRESH_TOKEN); return request; From 4fcfe672ea3c5f1abc2fcf46b6c9ec6b5c63669e Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 24 Apr 2017 10:08:21 +0300 Subject: [PATCH 233/250] add javadoc for JDKHttpFuture --- .../github/scribejava/core/httpclient/jdk/JDKHttpFuture.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java index 14d95ec80..5de4dbc87 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java @@ -5,6 +5,10 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +/** + * Fake Future. Just to have Future API for the default JDK Http client. It's NOT Async in any way. Just facade.
+ * That's it. Sync execution with Async methods. + */ public class JDKHttpFuture implements Future { private final Exception exception; From 99359dfbbf06f6dd6dc66992f3d095ccdc7ce8d1 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 24 Apr 2017 10:13:17 +0300 Subject: [PATCH 234/250] add more javadoc for JDKHttpFuture --- .../github/scribejava/core/httpclient/jdk/JDKHttpFuture.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java index 5de4dbc87..1922d3aef 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpFuture.java @@ -7,7 +7,7 @@ /** * Fake Future. Just to have Future API for the default JDK Http client. It's NOT Async in any way. Just facade.
- * That's it. Sync execution with Async methods. + * That's it. Sync execution with Async methods. This class does NOT provide any async executions. */ public class JDKHttpFuture implements Future { From 4ebafd508cbab78810cc735d27dd75d82a069a48 Mon Sep 17 00:00:00 2001 From: Roger Hu Date: Mon, 24 Apr 2017 01:31:01 -0700 Subject: [PATCH 235/250] Allow perms to be specified in Flickr Api (read, write, or delete) --- .../com/github/scribejava/apis/FlickrApi.java | 33 ++++++++- .../apis/examples/FlickrExampleWithPerms.java | 72 +++++++++++++++++++ 2 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java index 0e1db4ea7..e3dcc1795 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java @@ -10,7 +10,29 @@ */ public class FlickrApi extends DefaultApi10a { - protected FlickrApi() { + private static final String AUTHORIZE_URL = "https://www.flickr.com/services/oauth/authorize?oauth_token=%s"; + + public enum FLICKR_PERM { + READ, WRITE, DELETE + }; + + private String permString; /* read, write, or delete (delete includes read/write) */ + + public FlickrApi() { + permString = null; + } + + public FlickrApi(FLICKR_PERM perm) { + switch(perm) { + case READ: + this.permString = "read"; + break; + case WRITE: + this.permString = "write"; + break; + case DELETE: + this.permString = "delete"; + } } private static class InstanceHolder { @@ -21,6 +43,7 @@ public static FlickrApi instance() { return InstanceHolder.INSTANCE; } + /** * {@inheritDoc} */ @@ -34,7 +57,13 @@ public String getAccessTokenEndpoint() { */ @Override public String getAuthorizationUrl(OAuth1RequestToken requestToken) { - return "https://www.flickr.com/services/oauth/authorize?oauth_token=" + requestToken.getToken(); + String authUrl = String.format(AUTHORIZE_URL, requestToken.getToken()); + + if (permString != null) { + authUrl += "&perms=" + permString; + } + + return authUrl; } /** diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java new file mode 100644 index 000000000..aba762e82 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java @@ -0,0 +1,72 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; + +import java.io.IOException; +import java.util.Scanner; +import java.util.concurrent.ExecutionException; + +public final class FlickrExampleWithPerms { + + private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/"; + + private FlickrExampleWithPerms() { + } + + public static void main(String... args) throws IOException, InterruptedException, ExecutionException { + // Replace these with your own api key and secret + final String apiKey = "your_app_id"; + final String apiSecret = "your_api_secret"; + + final OAuth10aService service = new ServiceBuilder() + .apiKey(apiKey) + .apiSecret(apiSecret) + .build(new FlickrApi(FlickrApi.FLICKR_PERM.DELETE)); + final Scanner in = new Scanner(System.in); + + System.out.println("=== Flickr's OAuth Workflow ==="); + System.out.println(); + + // Obtain the Request Token + System.out.println("Fetching the Request Token..."); + final OAuth1RequestToken requestToken = service.getRequestToken(); + System.out.println("Got the Request Token!"); + System.out.println(); + + System.out.println("Now go and authorize ScribeJava here:"); + final String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println(authorizationUrl); + System.out.println("And paste the verifier here"); + System.out.print(">>"); + final String oauthVerifier = in.nextLine(); + System.out.println(); + + // Trade the Request Token and Verfier for the Access Token + System.out.println("Trading the Request Token for an Access Token..."); + final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); + System.out.println("Got the Access Token!"); + System.out.println("(if your curious it looks like this: " + accessToken + + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); + System.out.println(); + + // Now let's go and ask for a protected resource! + System.out.println("Now we're going to access a protected resource..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + request.addQuerystringParameter("method", "flickr.test.login"); + service.signRequest(accessToken, request); + final Response response = service.execute(request); + System.out.println("Got it! Lets see what we found..."); + System.out.println(); + System.out.println(response.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); + } +} From a85af76a38cb083875f9dd30777c163d2b8c89f4 Mon Sep 17 00:00:00 2001 From: Nikolaj Viguro Date: Tue, 2 May 2017 20:14:59 +0300 Subject: [PATCH 236/250] In POST request body params does not calculated in signature --- .../service/OdnoklassnikiServiceImpl.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java index 9de7f8fa2..70f18c781 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java @@ -1,15 +1,22 @@ package com.github.scribejava.apis.service; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import org.apache.commons.codec.CharEncoding; -import static org.apache.commons.codec.digest.DigestUtils.md5Hex; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Parameter; +import com.github.scribejava.core.model.ParameterList; import com.github.scribejava.core.oauth.OAuth20Service; -import java.util.Arrays; + +import org.apache.commons.codec.CharEncoding; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.apache.commons.codec.digest.DigestUtils.md5Hex; public class OdnoklassnikiServiceImpl extends OAuth20Service { @@ -23,20 +30,24 @@ public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { try { final String tokenDigest = md5Hex(accessToken.getAccessToken() + getConfig().getApiSecret()); - final String completeUrl = request.getCompleteUrl(); - final int queryIndex = completeUrl.indexOf('?'); - if (queryIndex != -1) { - final String[] params = completeUrl.substring(queryIndex + 1).split("&"); - Arrays.sort(params); - final StringBuilder builder = new StringBuilder(); - for (String param : params) { - builder.append(param); - } - - final String sigSource = URLDecoder.decode(builder.toString(), CharEncoding.UTF_8) + tokenDigest; - request.addQuerystringParameter("sig", md5Hex(sigSource).toLowerCase()); + ParameterList queryParams = request.getQueryStringParams(); + ParameterList bodyParams = request.getBodyParams(); + queryParams.addAll(bodyParams); + Collections.sort(queryParams.getParams()); + + List params = new ArrayList<>(); + for(Parameter param : queryParams.getParams()) { + params.add(param.getKey().concat("=").concat(param.getValue())); } + final StringBuilder builder = new StringBuilder(); + for (String param : params) { + builder.append(param); + } + + final String sigSource = URLDecoder.decode(builder.toString(), CharEncoding.UTF_8) + tokenDigest; + request.addQuerystringParameter("sig", md5Hex(sigSource).toLowerCase()); + super.signRequest(accessToken, request); } catch (UnsupportedEncodingException unex) { throw new IllegalStateException(unex); From c1d9a5464177ea7955cfc26529cfb49eb409504f Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 14:43:51 +0300 Subject: [PATCH 237/250] omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) --- changelog | 1 + .../com/github/scribejava/core/oauth/OAuth20Service.java | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/changelog b/changelog index 0378202e7..5f47b7951 100644 --- a/changelog +++ b/changelog @@ -1,4 +1,5 @@ [SNAPSHOT] + * omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) [4.1.0] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java index 75ac7166b..4565a4165 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/oauth/OAuth20Service.java @@ -123,8 +123,9 @@ protected OAuthRequest createRefreshTokenRequest(String refreshToken) { final OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getRefreshTokenEndpoint()); final OAuthConfig config = getConfig(); request.addParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); - if (config.getApiSecret() != null) { - request.addParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + final String apiSecret = config.getApiSecret(); + if (apiSecret != null) { + request.addParameter(OAuthConstants.CLIENT_SECRET, apiSecret); } request.addParameter(OAuthConstants.REFRESH_TOKEN, refreshToken); request.addParameter(OAuthConstants.GRANT_TYPE, OAuthConstants.REFRESH_TOKEN); From 00b9d73052e538caaec40751ad9f8ffd5a34c623 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 15:03:47 +0300 Subject: [PATCH 238/250] allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) --- changelog | 1 + .../com/github/scribejava/apis/FlickrApi.java | 22 +++--- .../apis/examples/FlickrExample.java | 10 +-- .../apis/examples/FlickrExampleWithPerms.java | 72 ------------------- 4 files changed, 15 insertions(+), 90 deletions(-) delete mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java diff --git a/changelog b/changelog index 5f47b7951..3ba477b86 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) + * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) [4.1.0] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java index e3dcc1795..b4a8b37b7 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java @@ -12,27 +12,21 @@ public class FlickrApi extends DefaultApi10a { private static final String AUTHORIZE_URL = "https://www.flickr.com/services/oauth/authorize?oauth_token=%s"; - public enum FLICKR_PERM { + public enum FlickrPerm { READ, WRITE, DELETE }; - private String permString; /* read, write, or delete (delete includes read/write) */ + /** + * read, write, or delete (delete includes read/write) + */ + private final String permString; - public FlickrApi() { + protected FlickrApi() { permString = null; } - public FlickrApi(FLICKR_PERM perm) { - switch(perm) { - case READ: - this.permString = "read"; - break; - case WRITE: - this.permString = "write"; - break; - case DELETE: - this.permString = "delete"; - } + public FlickrApi(FlickrPerm perm) { + permString = perm.name().toLowerCase(); } private static class InstanceHolder { diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index 7165844bf..f7240f397 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -1,15 +1,16 @@ package com.github.scribejava.apis.examples; -import java.util.Scanner; -import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; + import java.io.IOException; +import java.util.Scanner; import java.util.concurrent.ExecutionException; public final class FlickrExample { @@ -23,10 +24,11 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; + final OAuth10aService service = new ServiceBuilder() .apiKey(apiKey) .apiSecret(apiSecret) - .build(FlickrApi.instance()); + .build(new FlickrApi(FlickrApi.FlickrPerm.DELETE)); final Scanner in = new Scanner(System.in); System.out.println("=== Flickr's OAuth Workflow ==="); @@ -40,7 +42,7 @@ public static void main(String... args) throws IOException, InterruptedException System.out.println("Now go and authorize ScribeJava here:"); final String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println(authorizationUrl + "&perms=read"); + System.out.println(authorizationUrl); System.out.println("And paste the verifier here"); System.out.print(">>"); final String oauthVerifier = in.nextLine(); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java deleted file mode 100644 index aba762e82..000000000 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExampleWithPerms.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.github.scribejava.apis.examples; - -import com.github.scribejava.apis.FlickrApi; -import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.OAuth1AccessToken; -import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verb; -import com.github.scribejava.core.oauth.OAuth10aService; - -import java.io.IOException; -import java.util.Scanner; -import java.util.concurrent.ExecutionException; - -public final class FlickrExampleWithPerms { - - private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/"; - - private FlickrExampleWithPerms() { - } - - public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - // Replace these with your own api key and secret - final String apiKey = "your_app_id"; - final String apiSecret = "your_api_secret"; - - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) - .apiSecret(apiSecret) - .build(new FlickrApi(FlickrApi.FLICKR_PERM.DELETE)); - final Scanner in = new Scanner(System.in); - - System.out.println("=== Flickr's OAuth Workflow ==="); - System.out.println(); - - // Obtain the Request Token - System.out.println("Fetching the Request Token..."); - final OAuth1RequestToken requestToken = service.getRequestToken(); - System.out.println("Got the Request Token!"); - System.out.println(); - - System.out.println("Now go and authorize ScribeJava here:"); - final String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println(authorizationUrl); - System.out.println("And paste the verifier here"); - System.out.print(">>"); - final String oauthVerifier = in.nextLine(); - System.out.println(); - - // Trade the Request Token and Verfier for the Access Token - System.out.println("Trading the Request Token for an Access Token..."); - final OAuth1AccessToken accessToken = service.getAccessToken(requestToken, oauthVerifier); - System.out.println("Got the Access Token!"); - System.out.println("(if your curious it looks like this: " + accessToken - + ", 'rawResponse'='" + accessToken.getRawResponse() + "')"); - System.out.println(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - request.addQuerystringParameter("method", "flickr.test.login"); - service.signRequest(accessToken, request); - final Response response = service.execute(request); - System.out.println("Got it! Lets see what we found..."); - System.out.println(); - System.out.println(response.getBody()); - - System.out.println(); - System.out.println("Thats it man! Go and build something awesome with ScribeJava! :)"); - } -} From 04f69677cd00c1106ce63f52bcaeaf642a4ffc37 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 15:10:15 +0300 Subject: [PATCH 239/250] use instance method for FlickrApi instead of constructor --- .../src/main/java/com/github/scribejava/apis/FlickrApi.java | 5 ++++- .../com/github/scribejava/apis/examples/FlickrExample.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java index b4a8b37b7..f5ecca530 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/FlickrApi.java @@ -25,7 +25,7 @@ protected FlickrApi() { permString = null; } - public FlickrApi(FlickrPerm perm) { + protected FlickrApi(FlickrPerm perm) { permString = perm.name().toLowerCase(); } @@ -37,6 +37,9 @@ public static FlickrApi instance() { return InstanceHolder.INSTANCE; } + public static FlickrApi instance(FlickrPerm perm) { + return perm == null ? instance() : new FlickrApi(perm); + } /** * {@inheritDoc} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index f7240f397..353431f46 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -28,7 +28,7 @@ public static void main(String... args) throws IOException, InterruptedException final OAuth10aService service = new ServiceBuilder() .apiKey(apiKey) .apiSecret(apiSecret) - .build(new FlickrApi(FlickrApi.FlickrPerm.DELETE)); + .build(FlickrApi.instance(FlickrApi.FlickrPerm.DELETE)); final Scanner in = new Scanner(System.in); System.out.println("=== Flickr's OAuth Workflow ==="); From 6e3d2a2f00dcb46043c5b496ba02d4083384dbea Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 15:19:35 +0300 Subject: [PATCH 240/250] improve LinkedInApi interface --- .../com/github/scribejava/apis/LinkedInApi.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java index 2d876ec5f..a9a4b5a99 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java @@ -10,11 +10,22 @@ public class LinkedInApi extends DefaultApi10a { private final String scopesAsString; + /** + * @deprecated use {@link #instance() } + */ + @Deprecated + //TODO: make protected in the next release public LinkedInApi() { scopesAsString = null; } + /** + * @deprecated use {@link #instance(java.lang.String...) } + */ + @Deprecated + //TODO: make protected in the next release public LinkedInApi(String... scopes) { + //TODO: deprecated check if (scopes == null || scopes.length == 0) { scopesAsString = null; } else { @@ -35,6 +46,10 @@ public static LinkedInApi instance() { return InstanceHolder.INSTANCE; } + public static LinkedInApi instance(String... scopes) { + return scopes == null || scopes.length == 0 ? instance() : new LinkedInApi(scopes); + } + @Override public String getAccessTokenEndpoint() { return "https://api.linkedin.com/uas/oauth/accessToken"; From 17e9220b72965a67726011e0f7255d9e2cb6cf4d Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 17:29:45 +0300 Subject: [PATCH 241/250] do not open OutputStream for output while sending empty body in HTTP requests in the default JDK Http client --- .../scribejava/core/httpclient/jdk/JDKHttpClient.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java index 205c842b9..761f8be2a 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/httpclient/jdk/JDKHttpClient.java @@ -151,12 +151,15 @@ private static void addHeaders(HttpURLConnection connection, Map } private static void addBody(HttpURLConnection connection, byte[] content) throws IOException { - connection.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length)); + final int contentLength = content.length; + connection.setRequestProperty(CONTENT_LENGTH, String.valueOf(contentLength)); if (connection.getRequestProperty(CONTENT_TYPE) == null) { connection.setRequestProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); } - connection.setDoOutput(true); - connection.getOutputStream().write(content); + if (contentLength > 0) { + connection.setDoOutput(true); + connection.getOutputStream().write(content); + } } } From 85e8e621dcb0d3e5457472e5a4c023fe6466c967 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 17:50:13 +0300 Subject: [PATCH 242/250] OdnoklassnikiService should consider params in a body while signing the request (thanks to https://github.com/MrNeuronix) --- changelog | 1 + .../github/scribejava/apis/LinkedInApi.java | 1 + .../apis/service/OdnoklassnikiServiceImpl.java | 18 ++++++------------ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/changelog b/changelog index 3ba477b86..e4253e62c 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,7 @@ [SNAPSHOT] * omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) + * OdnoklassnikiService should consider params in a body while signing the request (thanks to https://github.com/MrNeuronix) [4.1.0] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java index a9a4b5a99..fcefa5755 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java @@ -20,6 +20,7 @@ public LinkedInApi() { } /** + * @param scopes scopes * @deprecated use {@link #instance(java.lang.String...) } */ @Deprecated diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java index 70f18c781..fa9ae2e56 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/OdnoklassnikiServiceImpl.java @@ -12,7 +12,6 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -30,19 +29,14 @@ public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { try { final String tokenDigest = md5Hex(accessToken.getAccessToken() + getConfig().getApiSecret()); - ParameterList queryParams = request.getQueryStringParams(); - ParameterList bodyParams = request.getBodyParams(); - queryParams.addAll(bodyParams); - Collections.sort(queryParams.getParams()); - - List params = new ArrayList<>(); - for(Parameter param : queryParams.getParams()) { - params.add(param.getKey().concat("=").concat(param.getValue())); - } + final ParameterList queryParams = request.getQueryStringParams(); + queryParams.addAll(request.getBodyParams()); + final List allParams = queryParams.getParams(); + Collections.sort(allParams); final StringBuilder builder = new StringBuilder(); - for (String param : params) { - builder.append(param); + for (Parameter param : allParams) { + builder.append(param.getKey()).append('=').append(param.getValue()); } final String sigSource = URLDecoder.decode(builder.toString(), CharEncoding.UTF_8) + tokenDigest; From 9b0883436014a35d387b39989ec714f936c0f671 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 15 May 2017 18:20:46 +0300 Subject: [PATCH 243/250] update dependencies --- pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 4 ++-- .../github/scribejava/httpclient/okhttp/OkHttpHttpClient.java | 4 +++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 4b61d03ae..7a5758bf4 100644 --- a/pom.xml +++ b/pom.xml @@ -132,7 +132,7 @@ com.puppycrawl.tools checkstyle - 7.6.1 + 7.7
diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index e3da50259..a0bd4f8fb 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -23,7 +23,7 @@ org.asynchttpclient async-http-client - 2.0.31 + 2.0.32 diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 89cf81ef0..04d81c9d3 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -23,12 +23,12 @@ com.squareup.okhttp3 okhttp - 3.6.0 + 3.8.0 com.squareup.okhttp3 mockwebserver - 3.6.0 + 3.8.0 test diff --git a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java index 1199c87de..66d2daee0 100644 --- a/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java +++ b/scribejava-httpclient-okhttp/src/main/java/com/github/scribejava/httpclient/okhttp/OkHttpHttpClient.java @@ -22,6 +22,7 @@ import java.util.concurrent.ExecutionException; import okhttp3.Cache; import okhttp3.Headers; +import okhttp3.ResponseBody; public class OkHttpHttpClient implements HttpClient { @@ -166,8 +167,9 @@ static Response convertResponse(okhttp3.Response okHttpResponse) { headersMap.put(name, headers.get(name)); } + final ResponseBody body = okHttpResponse.body(); return new Response(okHttpResponse.code(), okHttpResponse.message(), headersMap, - okHttpResponse.body().byteStream()); + body == null ? null : body.byteStream()); } } From 87bce806ac3aaf5ae8b9c865a671c2cc989ac36a Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 16 May 2017 11:29:33 +0300 Subject: [PATCH 244/250] prepare 4.1.1 release --- README.md | 4 ++-- changelog | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e1fdf095e..808dc634e 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ You can pull ScribeJava from the central maven repository, just add these to you com.github.scribejava scribejava-apis - 4.1.0 + 4.1.1 ``` @@ -109,7 +109,7 @@ And in case you need just core classes (that's it, without any external API (FB, com.github.scribejava scribejava-core - 4.1.0 + 4.1.1 ``` diff --git a/changelog b/changelog index e4253e62c..55270bac7 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,8 @@ -[SNAPSHOT] +[4.1.1] * omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) * OdnoklassnikiService should consider params in a body while signing the request (thanks to https://github.com/MrNeuronix) + * do not open OutputStream for output while sending empty body in HTTP requests in the default JDK Http client [4.1.0] * make client_secret optional in OAuth2 while requesting AccessToken (if set to null, it's not required by OAuth2 specs) From 2bbc8b065770461bd7aeae186ec93099bf0d4344 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 16 May 2017 11:30:48 +0300 Subject: [PATCH 245/250] [maven-release-plugin] prepare release scribejava-4.1.1 --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 7a5758bf4..9dbab96f4 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 4.1.1-SNAPSHOT + 4.1.1 ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - HEAD + scribejava-4.1.1 diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 237f2586f..6d87b5a2f 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1-SNAPSHOT + 4.1.1 ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 4101caf4b..59179571f 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1-SNAPSHOT + 4.1.1 ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index a0bd4f8fb..565f3d3c0 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1-SNAPSHOT + 4.1.1 ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index 1f8283d29..de40985f8 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1-SNAPSHOT + 4.1.1 ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 04d81c9d3..5414b3fa1 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1-SNAPSHOT + 4.1.1 ../pom.xml From 6c5b9b33e1ae25495ebf334d91e9ff1e46d330eb Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 16 May 2017 11:31:02 +0300 Subject: [PATCH 246/250] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- scribejava-apis/pom.xml | 2 +- scribejava-core/pom.xml | 2 +- scribejava-httpclient-ahc/pom.xml | 2 +- scribejava-httpclient-ning/pom.xml | 2 +- scribejava-httpclient-okhttp/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 9dbab96f4..79f339291 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.github.scribejava scribejava pom - 4.1.1 + 4.1.2-SNAPSHOT ScribeJava OAuth Library The best OAuth library out there https://github.com/scribejava/scribejava @@ -33,7 +33,7 @@ scm:git:git://github.com/scribejava/scribejava.git scm:git:git@github.com:scribejava/scribejava.git https://github.com/scribejava/scribejava - scribejava-4.1.1 + HEAD diff --git a/scribejava-apis/pom.xml b/scribejava-apis/pom.xml index 6d87b5a2f..b12ba4c48 100644 --- a/scribejava-apis/pom.xml +++ b/scribejava-apis/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1 + 4.1.2-SNAPSHOT ../pom.xml diff --git a/scribejava-core/pom.xml b/scribejava-core/pom.xml index 59179571f..f41d33f58 100644 --- a/scribejava-core/pom.xml +++ b/scribejava-core/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1 + 4.1.2-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ahc/pom.xml b/scribejava-httpclient-ahc/pom.xml index 565f3d3c0..1a42399a4 100644 --- a/scribejava-httpclient-ahc/pom.xml +++ b/scribejava-httpclient-ahc/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1 + 4.1.2-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-ning/pom.xml b/scribejava-httpclient-ning/pom.xml index de40985f8..462ca93db 100644 --- a/scribejava-httpclient-ning/pom.xml +++ b/scribejava-httpclient-ning/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1 + 4.1.2-SNAPSHOT ../pom.xml diff --git a/scribejava-httpclient-okhttp/pom.xml b/scribejava-httpclient-okhttp/pom.xml index 5414b3fa1..0427e8d9a 100644 --- a/scribejava-httpclient-okhttp/pom.xml +++ b/scribejava-httpclient-okhttp/pom.xml @@ -5,7 +5,7 @@ com.github.scribejava scribejava - 4.1.1 + 4.1.2-SNAPSHOT ../pom.xml From 9640a74c12e300400ba1bf6e48e0d477b0a727c8 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 16 May 2017 11:59:26 +0300 Subject: [PATCH 247/250] drop deprecated methods --- .../github/scribejava/apis/LinkedInApi.java | 28 ++++--------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java index fcefa5755..f30b44d17 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi.java @@ -10,32 +10,16 @@ public class LinkedInApi extends DefaultApi10a { private final String scopesAsString; - /** - * @deprecated use {@link #instance() } - */ - @Deprecated - //TODO: make protected in the next release - public LinkedInApi() { + protected LinkedInApi() { scopesAsString = null; } - /** - * @param scopes scopes - * @deprecated use {@link #instance(java.lang.String...) } - */ - @Deprecated - //TODO: make protected in the next release - public LinkedInApi(String... scopes) { - //TODO: deprecated check - if (scopes == null || scopes.length == 0) { - scopesAsString = null; - } else { - final StringBuilder builder = new StringBuilder(); - for (String scope : scopes) { - builder.append('+').append(scope); - } - scopesAsString = "?scope=" + builder.substring(1); + protected LinkedInApi(String... scopes) { + final StringBuilder builder = new StringBuilder(); + for (String scope : scopes) { + builder.append('+').append(scope); } + scopesAsString = "?scope=" + builder.substring(1); } private static class InstanceHolder { From f889a1d741000bc6072ea34aa143de9fc703540c Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Tue, 16 May 2017 12:04:24 +0300 Subject: [PATCH 248/250] fix LinkedIn Example --- .../scribejava/apis/examples/LinkedInExampleWithScopes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 3ab8bb006..2b26f11ea 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -28,7 +28,7 @@ public static void main(String... args) throws IOException, InterruptedException final OAuth10aService service = new ServiceBuilder() .apiKey(clientId) .apiSecret(clientSecret) - .build(new LinkedInApi("foo", "bar", "baz")); + .build(LinkedInApi.instance("foo", "bar", "baz")); final Scanner in = new Scanner(System.in); System.out.println("=== LinkedIn's OAuth Workflow ==="); From 30824b340cc68c6b5670450e3c295a3a108a76ee Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Mon, 29 May 2017 17:21:51 +0300 Subject: [PATCH 249/250] LinkedIn use Header to sign OAuth2 requests --- changelog | 3 +++ .../github/scribejava/apis/LinkedInApi20.java | 14 -------------- .../apis/service/LinkedIn20ServiceImpl.java | 19 ------------------- 3 files changed, 3 insertions(+), 33 deletions(-) delete mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java diff --git a/changelog b/changelog index 55270bac7..b1bfaadb7 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +[SNAPSHOT] + * LinkedIn use Header to sign OAuth2 requests + [4.1.1] * omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) * allow perms to be specified in Flickr Api (read, write, or delete) (thanks to https://github.com/rogerhu) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java index 8fa239c5d..0d22d705c 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/LinkedInApi20.java @@ -1,10 +1,6 @@ package com.github.scribejava.apis; -import com.github.scribejava.apis.service.LinkedIn20ServiceImpl; import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.builder.api.OAuth2SignatureType; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.oauth.OAuth20Service; public class LinkedInApi20 extends DefaultApi20 { @@ -28,14 +24,4 @@ public String getAccessTokenEndpoint() { protected String getAuthorizationBaseUrl() { return "https://www.linkedin.com/oauth/v2/authorization"; } - - @Override - public OAuth20Service createService(OAuthConfig config) { - return new LinkedIn20ServiceImpl(this, config); - } - - @Override - public OAuth2SignatureType getSignatureType() { - return OAuth2SignatureType.BEARER_URI_QUERY_PARAMETER; - } } diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java deleted file mode 100644 index 4e26c6635..000000000 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/service/LinkedIn20ServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.github.scribejava.apis.service; - -import com.github.scribejava.core.builder.api.DefaultApi20; -import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthConfig; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.oauth.OAuth20Service; - -public class LinkedIn20ServiceImpl extends OAuth20Service { - - public LinkedIn20ServiceImpl(DefaultApi20 api, OAuthConfig config) { - super(api, config); - } - - @Override - public void signRequest(OAuth2AccessToken accessToken, OAuthRequest request) { - request.addQuerystringParameter("oauth2_access_token", accessToken.getAccessToken()); - } -} From d242f45cb1f1a90d0cbb7ee78a0379aecc014ed2 Mon Sep 17 00:00:00 2001 From: Stas Gromov Date: Fri, 2 Jun 2017 15:58:36 +0300 Subject: [PATCH 250/250] upgrade ServiceBuilder to check apiKey preconditions compile-tim (not run-time) --- changelog | 1 + .../apis/examples/AWeberExample.java | 3 +- .../apis/examples/Box20Example.java | 3 +- .../scribejava/apis/examples/DiggExample.java | 3 +- .../examples/FacebookAsyncNingExample.java | 3 +- .../apis/examples/FacebookExample.java | 3 +- .../apis/examples/FlickrExample.java | 3 +- .../apis/examples/Foursquare2Example.java | 3 +- .../apis/examples/FoursquareExample.java | 3 +- .../apis/examples/FreelancerExample.java | 3 +- .../apis/examples/GeniusExample.java | 3 +- .../examples/GitHubAsyncOkHttpExample.java | 3 +- .../apis/examples/GitHubExample.java | 3 +- .../examples/Google20AsyncAHCExample.java | 3 +- .../apis/examples/Google20Example.java | 3 +- .../scribejava/apis/examples/HHExample.java | 3 +- .../apis/examples/ImgurExample.java | 3 +- .../apis/examples/Kaixin20Example.java | 3 +- .../apis/examples/LinkedIn20Example.java | 4 +-- .../apis/examples/LinkedInExample.java | 3 +- .../examples/LinkedInExampleWithScopes.java | 3 +- .../scribejava/apis/examples/LiveExample.java | 3 +- .../apis/examples/MailruAsyncExample.java | 3 +- .../apis/examples/MailruExample.java | 3 +- .../apis/examples/MeetupExample.java | 3 +- .../apis/examples/MisfitExample.java | 3 +- .../apis/examples/NaverExample.java | 3 +- .../apis/examples/NeteaseWeiboExample.java | 3 +- .../apis/examples/OdnoklassnikiExample.java | 3 +- .../apis/examples/PinterestExample.java | 3 +- .../apis/examples/Px500Example.java | 3 +- .../apis/examples/RenrenExample.java | 3 +- .../apis/examples/SalesforceExample.java | 3 +- .../examples/SalesforceNingAsyncExample.java | 3 +- .../apis/examples/SinaWeibo2Example.java | 3 +- .../apis/examples/SinaWeiboExample.java | 3 +- .../apis/examples/SkyrockExample.java | 3 +- .../apis/examples/SohuWeiboExample.java | 3 +- .../apis/examples/StackExchangeExample.java | 3 +- .../TheThingsNetworkV1StagingExample.java | 3 +- .../TheThingsNetworkV2PreviewExample.java | 3 +- .../apis/examples/TrelloExample.java | 3 +- .../apis/examples/TumblrExample.java | 3 +- .../apis/examples/TutByExample.java | 3 +- .../apis/examples/TwitterExample.java | 3 +- .../apis/examples/ViadeoExample.java | 3 +- .../apis/examples/VkontakteExample.java | 3 +- .../VkontakteExternalHttpExample.java | 3 +- .../scribejava/apis/examples/XingExample.java | 3 +- .../apis/examples/YahooExample.java | 3 +- .../service/OdnoklassnikiServiceTest.java | 3 +- .../core/builder/ServiceBuilder.java | 30 ++++++++++++------- .../core/builder/ServiceBuilderTest.java | 2 +- .../core/oauth/OAuth20ServiceTest.java | 9 ++---- 54 files changed, 76 insertions(+), 117 deletions(-) diff --git a/changelog b/changelog index b1bfaadb7..a66b68f9a 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,6 @@ [SNAPSHOT] * LinkedIn use Header to sign OAuth2 requests + * upgrade ServiceBuilder to check apiKey preconditions compile-tim (not run-time) [4.1.1] * omit the client_secret parameter if it is an empty string while refreshing token (thanks to https://github.com/KungfuPancake) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java index d79bd77b2..d304dc6d4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/AWeberExample.java @@ -24,8 +24,7 @@ private AWeberExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey(CONSUMER_KEY) + final OAuth10aService service = new ServiceBuilder(CONSUMER_KEY) .apiSecret(CONSUMER_SECRET) .build(AWeberApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java index e2f5d6f2c..de8a1c1ed 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Box20Example.java @@ -27,8 +27,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "security_token" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("https://example.com/callback") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java index 6afd1db07..aafbea10c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/DiggExample.java @@ -24,8 +24,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "myKey"; final String apiSecret = "mySecret"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth10aService service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .build(DiggApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java index bf916d083..ae8879790 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookAsyncNingExample.java @@ -35,8 +35,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(1_000) .build()); - try (OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + try (OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java index 54f56181a..521020e29 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FacebookExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java index 353431f46..e5809874f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FlickrExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth10aService service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .build(FlickrApi.instance(FlickrApi.FlickrPerm.DELETE)); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java index 1874e5deb..33e6206ef 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Foursquare2Example.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .callback("http://localhost:9000/") .build(Foursquare2Api.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java index 59956cafd..afaaca188 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FoursquareExample.java @@ -20,8 +20,7 @@ private FoursquareExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .build(FoursquareApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java index 45986edf1..a17f896de 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/FreelancerExample.java @@ -24,8 +24,7 @@ private FreelancerExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .scope(SCOPE) .build(FreelancerApi.Sandbox.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java index 59c2d872a..af515b79c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GeniusExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "100"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .scope("me") .state(secretState) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java index ed8189390..596a14a45 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubAsyncOkHttpExample.java @@ -27,8 +27,7 @@ public static void main(String... args) throws IOException, ExecutionException, final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - try (OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + try (OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java index 28d5bc5c4..8c3444d92 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java index 970c5d534..7ac82e7e9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20AsyncAHCExample.java @@ -37,8 +37,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(1_000) .build()); - try (OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + try (OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .scope("profile") // replace with desired scope .state(secretState) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java index 770703321..e9e2adf27 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Google20Example.java @@ -27,8 +27,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .scope("profile") // replace with desired scope .state(secretState) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java index c19ba50c3..e892eace3 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/HHExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback("http://your.site.com/callback") .build(HHApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java index fd8c59c31..35f6d9a31 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ImgurExample.java @@ -24,8 +24,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .build(ImgurApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java index 50a134c7d..6d61a613b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Kaixin20Example.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your api key"; final String apiSecret = "your api secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .callback("http://your.domain.com/handle") .build(KaixinApi20.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java index cf34a9ae0..8553c3498 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedIn20Example.java @@ -23,8 +23,8 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId).apiSecret(clientSecret) + final OAuth20Service service = new ServiceBuilder(clientId) + .apiSecret(clientSecret) .scope("r_basicprofile r_emailaddress") // replace with desired scope .callback("http://example.com/callback") .state("some_params") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java index 6f9654e7f..02ae520c1 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExample.java @@ -21,8 +21,7 @@ private LinkedInExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .build(LinkedInApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java index 2b26f11ea..a8247f65c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LinkedInExampleWithScopes.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client id"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(clientId) + final OAuth10aService service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .build(LinkedInApi.instance("foo", "bar", "baz")); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java index a93643eda..c693b0e73 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/LiveExample.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = ""; final String apiSecret = ""; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .scope("wl.basic") .callback("http://localhost:9000/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java index 38613c019..2c566e99b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruAsyncExample.java @@ -35,8 +35,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx .setReadTimeout(10_000) .build()); - try (OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + try (OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") .httpClientConfig(clientConfig) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java index 9fb743b05..f6c620d0f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MailruExample.java @@ -24,8 +24,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") .build(MailruApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java index f7c41894a..c8d6ea911 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MeetupExample.java @@ -20,8 +20,7 @@ private MeetupExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .build(MeetupApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java index 1caa28eb1..ed6c1dd7f 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/MisfitExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your client id"; final String apiSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .callback("http://example.com/callback/") .scope("public,birthday,email,tracking,session,sleep") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java index 3a85e8845..5d2d5548e 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NaverExample.java @@ -26,8 +26,7 @@ public static void main(String... args) throws IOException, InterruptedException final String clientId = "your client id"; final String clientSecret = "your client secret"; final String secretState = "secret" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java index cde99f609..866c2167b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/NeteaseWeiboExample.java @@ -24,8 +24,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your key"; final String apiSecret = "your secret"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth10aService service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .build(NeteaseWeibooApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java index c87fad63c..8ea048fe8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/OdnoklassnikiExample.java @@ -26,8 +26,7 @@ public static void main(String... args) throws IOException, InterruptedException final String publicKey = "your api public key"; final String secretKey = "your api secret key"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(secretKey) .callback("http://your.site.com/callback") .build(OdnoklassnikiApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index 16a8f6e65..1fec439b4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_app_secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .scope("read_public,write_public,read_relationships,write_relationships") .callback("https://localhost:9000/") // Add as valid callback in developer portal diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java index 2ab55085c..820a0e821 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/Px500Example.java @@ -20,8 +20,7 @@ private Px500Example() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your-api-key") + final OAuth10aService service = new ServiceBuilder("your-api-key") .apiSecret("your-api-secret") .build(Px500Api.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java index 021c9b0d4..1eea7e581 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/RenrenExample.java @@ -32,8 +32,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your api key"; final String apiSecret = "your api secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .scope("status_update publish_feed") .callback("http://your.doman.com/oauth/renren") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java index 925819a7b..30f4aab85 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceExample.java @@ -39,8 +39,7 @@ public static void main(String... args) throws IOException, NoSuchAlgorithmExcep // When you plan to connect to a Sandbox environment you've to use SalesforceApi.sandbox() API instance // new ServiceBuilder.....build(SalesforceApi.sandbox()); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback("https://www.example.com/callback") .build(SalesforceApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java index 36a060123..d057df0d9 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SalesforceNingAsyncExample.java @@ -44,8 +44,7 @@ public static void main(String... args) throws InterruptedException, ExecutionEx //IT's important! Salesforce upper require TLS v1.1 or 1.2 SalesforceApi.initTLSv11orUpper(); - try (OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + try (OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .httpClientConfig(clientConfig) .callback("https://www.example.com/callback") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java index d99a20b1c..a2bacaff4 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeibo2Example.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your_api_key"; final String apiSecret = "your_api_secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .callback("http://www.dajie.com/oauth/sina") .build(SinaWeiboApi20.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java index 18edbb49e..289f4eb50 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SinaWeiboExample.java @@ -24,8 +24,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your key"; final String apiSecret = "your secret"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth10aService service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .build(SinaWeiboApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java index a9c957541..fcb2f592a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SkyrockExample.java @@ -20,8 +20,7 @@ private SkyrockExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your-api-key") + final OAuth10aService service = new ServiceBuilder("your-api-key") .apiSecret("your-api-secret") .build(SkyrockApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java index 81202256d..0cb93b91a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/SohuWeiboExample.java @@ -24,8 +24,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your_key"; final String apiSecret = "your_secret"; - final OAuth10aService service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth10aService service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .build(SohuWeiboApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java index ed3eea0db..04858eab6 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/StackExchangeExample.java @@ -30,8 +30,7 @@ public static void main(String... args) throws IOException, InterruptedException // Enter one of Stack Exchange site names the user has account with. final String site = "stackoverflow"; final String secretState = "secret" + new Random().nextInt(999_999); - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback("http://www.example.com/oauth_callback/") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java index e154dc634..057f9b27c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV1StagingExample.java @@ -29,8 +29,7 @@ public static void main(String... args) throws IOException, InterruptedException final String secretState = "secret" + new Random().nextInt(999_999); final String redirectURI = "https://your_redirect_uri"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback(redirectURI) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java index 4feb220c3..acb791c1c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TheThingsNetworkV2PreviewExample.java @@ -29,8 +29,7 @@ public static void main(String... args) throws IOException, InterruptedException final String secretState = "secret" + new Random().nextInt(999_999); final String redirectURI = "https://your_redirect_uri"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .state(secretState) .callback(redirectURI) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java index e847d7b94..dea9fc659 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TrelloExample.java @@ -22,8 +22,7 @@ private TrelloExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey(API_KEY) + final OAuth10aService service = new ServiceBuilder(API_KEY) .apiSecret(API_SECRET) .build(TrelloApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java index edc12efa7..ec21d3bfb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TumblrExample.java @@ -20,8 +20,7 @@ private TumblrExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("MY_CONSUMER_KEY") + final OAuth10aService service = new ServiceBuilder("MY_CONSUMER_KEY") .apiSecret("MY_CONSUMER_SECRET") // OOB forbidden. We need an url and the better is on the tumblr website ! .callback("http://www.tumblr.com/connect/login_success.html") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java index 06e035abb..daa5f0122 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TutByExample.java @@ -25,8 +25,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback("http://www.example.com/oauth_callback/") .build(TutByApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java index 6cd012bb7..620eb7820 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/TwitterExample.java @@ -20,8 +20,7 @@ private TwitterExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .build(TwitterApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java index d0b5cfaeb..09dcde65a 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/ViadeoExample.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your own api key and secret final String apiKey = "your_app_id"; final String apiSecret = "your_api_secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(apiKey) + final OAuth20Service service = new ServiceBuilder(apiKey) .apiSecret(apiSecret) .callback("http://www.example.com/oauth_callback/") .build(ViadeoApi.instance()); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java index fb806492d..240f78e7c 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExample.java @@ -23,8 +23,7 @@ public static void main(String... args) throws IOException, InterruptedException // Replace these with your client id and secret final String clientId = "your client id"; final String clientSecret = "your client secret"; - final OAuth20Service service = new ServiceBuilder() - .apiKey(clientId) + final OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .scope("wall,offline") // replace with desired scope .callback("http://your.site.com/callback") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java index 2cd858236..d16b714d8 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/VkontakteExternalHttpExample.java @@ -39,9 +39,8 @@ public static void main(String... args) throws IOException, InterruptedException //wrap it final AhcHttpClient wrappedAHCHttpClient = new AhcHttpClient(ahcHttpClient); - final OAuth20Service service = new ServiceBuilder() + final OAuth20Service service = new ServiceBuilder(clientId) .httpClient(wrappedAHCHttpClient) - .apiKey(clientId) .apiSecret(clientSecret) .scope("wall,offline") // replace with desired scope .callback("http://your.site.com/callback") diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java index 3ec67e472..9929c6152 100755 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/XingExample.java @@ -20,8 +20,7 @@ private XingExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .build(XingApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java index aa6691cdb..581600a3b 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/YahooExample.java @@ -21,8 +21,7 @@ private YahooExample() { } public static void main(String... args) throws IOException, InterruptedException, ExecutionException { - final OAuth10aService service = new ServiceBuilder() - .apiKey("your client id") + final OAuth10aService service = new ServiceBuilder("your client id") .apiSecret("your client secret") .build(YahooApi.instance()); final Scanner in = new Scanner(System.in); diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java index af14b9744..0dded23fb 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/service/OdnoklassnikiServiceTest.java @@ -17,8 +17,7 @@ public class OdnoklassnikiServiceTest { private static final String URL = "https://api.ok.ru/fb.do?method=friends.get&fields=uid%2C" + "first_name%2Clast_name%2Cpic_2&application_key=AAAAAAAAAAAAAAAA&format=json"; - private final OAuth20Service service = new ServiceBuilder() - .apiKey("0000000000") + private final OAuth20Service service = new ServiceBuilder("0000000000") .apiSecret("CCCCCCCCCCCCCCCCCCCCCCCC") .scope("VALUABLE_ACCESS") .callback("http://your.site.com/callback") diff --git a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java index d44b784fd..6ae14b1c9 100644 --- a/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java +++ b/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java @@ -15,7 +15,7 @@ */ public class ServiceBuilder { - private String callback; + private String callback = OAuthConstants.OUT_OF_BAND; private String apiKey; private String apiSecret; private String scope; @@ -27,8 +27,16 @@ public class ServiceBuilder { private HttpClientConfig httpClientConfig; private HttpClient httpClient; + /** + * + * @deprecated use {@link #ServiceBuilder(java.lang.String) } + */ + @Deprecated public ServiceBuilder() { - callback = OAuthConstants.OUT_OF_BAND; + } + + public ServiceBuilder(String apiKey) { + apiKey(apiKey); } /** @@ -49,7 +57,7 @@ public ServiceBuilder callback(String callback) { * @param apiKey The api key for your application * @return the {@link ServiceBuilder} instance for method chaining */ - public ServiceBuilder apiKey(String apiKey) { + public final ServiceBuilder apiKey(String apiKey) { Preconditions.checkEmptyString(apiKey, "Invalid Api key"); this.apiKey = apiKey; return this; @@ -130,16 +138,16 @@ public ServiceBuilder debug() { return this; } + /** + * + * @deprecated apiKey will be required param for the ServiceBuilder constructor + * {@link #ServiceBuilder(java.lang.String) } + */ + @Deprecated public void checkPreconditions() { Preconditions.checkEmptyString(apiKey, "You must provide an api key"); } - private OAuthConfig createConfig() { - checkPreconditions(); - return new OAuthConfig(apiKey, apiSecret, callback, scope, debugStream, state, responseType, userAgent, - httpClientConfig, httpClient); - } - /** * Returns the fully configured {@link S} * @@ -148,6 +156,8 @@ private OAuthConfig createConfig() { * @return fully configured {@link S} */ public > S build(BaseApi api) { - return api.createService(createConfig()); + checkPreconditions(); + return api.createService(new OAuthConfig(apiKey, apiSecret, callback, scope, debugStream, state, responseType, + userAgent, httpClientConfig, httpClient)); } } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java index 3aa88699a..c7d4a4dac 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/builder/ServiceBuilderTest.java @@ -15,7 +15,7 @@ public class ServiceBuilderTest { @Before public void setUp() { - builder = new ServiceBuilder(); + builder = new ServiceBuilder("will override api_key by another later in test"); api = ApiMock.instance(); } diff --git a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java index 3115fd832..581fc5a63 100644 --- a/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java +++ b/scribejava-core/src/test/java/com/github/scribejava/core/oauth/OAuth20ServiceTest.java @@ -20,8 +20,7 @@ public class OAuth20ServiceTest { @Test public void shouldProduceCorrectRequestSync() throws IOException, InterruptedException, ExecutionException { - final OAuth20Service service = new ServiceBuilder() - .apiKey("your_api_key") + final OAuth20Service service = new ServiceBuilder("your_api_key") .apiSecret("your_api_secret") .build(new OAuth20ApiUnit()); @@ -49,8 +48,7 @@ public void shouldProduceCorrectRequestSync() throws IOException, InterruptedExc @Test public void shouldProduceCorrectRequestAsync() throws ExecutionException, InterruptedException { - final OAuth20Service service = new ServiceBuilder() - .apiKey("your_api_key") + final OAuth20Service service = new ServiceBuilder("your_api_key") .apiSecret("your_api_secret") .build(new OAuth20ApiUnit()); @@ -78,8 +76,7 @@ public void shouldProduceCorrectRequestAsync() throws ExecutionException, Interr @Test public void testOAuthExtractAuthorization() { - final OAuth20Service service = new ServiceBuilder() - .apiKey("your_api_key") + final OAuth20Service service = new ServiceBuilder("your_api_key") .apiSecret("your_api_secret") .build(new OAuth20ApiUnit());