diff --git a/.gitignore b/.gitignore index a9a50de0e..3268079a4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ scribe.iml # Binaries -target \ No newline at end of file +target +bin diff --git a/pom.xml b/pom.xml index 9cd54e371..574f67c9f 100644 --- a/pom.xml +++ b/pom.xml @@ -1,20 +1,14 @@ 4.0.0 - org.scribe + cc.denglu scribe jar - 1.3.6 + 1.3.6-mod Scribe OAuth Library The best OAuth library out there http://github.com/fernandezpablo85/scribe-java - - org.sonatype.oss - oss-parent - 5 - - github @@ -41,26 +35,15 @@ http://github.com/fernandezpablo85/scribe-java.git - - - internal.repo - Temporary Staging Repository - file://${project.build.directory}/mvn-repo - - - junit junit - 4.8.1 test commons-codec commons-codec - 1.4 - compile true @@ -74,45 +57,27 @@ 1.5 - - com.github.github - site-maven-plugin - 0.9 - - Maven artifacts for ${project.version} - true - ${project.build.directory}/mvn-repo - refs/heads/mvn-repo - **/* - scribe-java - fernandezpablo85 - - - - - site - - deploy - - - - - org.codehaus.mojo - findbugs-maven-plugin - 2.5.2 - - - failing-on-high - compile - - check - - - Low - - - - + + + deploymentRepo + Local Repository + http://192.168.2.209:8081/nexus/content/repositories/releases/ + + + + + + junit + junit + 4.8.1 + + + commons-codec + commons-codec + 1.4 + + + diff --git a/src/main/java/org/scribe/builder/ServiceBuilder.java b/src/main/java/org/scribe/builder/ServiceBuilder.java index 27f3c8f63..e118c6f8c 100644 --- a/src/main/java/org/scribe/builder/ServiceBuilder.java +++ b/src/main/java/org/scribe/builder/ServiceBuilder.java @@ -22,6 +22,8 @@ public class ServiceBuilder private Api api; private String scope; private SignatureType signatureType; + private String state; + private String referenceId; private OutputStream debugStream; /** @@ -141,6 +143,24 @@ public ServiceBuilder signatureType(SignatureType type) return this; } + /** + * @param oauth 2.0 status + */ + public ServiceBuilder state(String state) + { + this.state = state; + return this; + } + + /** + * 外部referenceId,如application_id + */ + public ServiceBuilder referenceId(String referenceId) + { + this.referenceId = referenceId; + return this; + } + public ServiceBuilder debugStream(OutputStream stream) { Preconditions.checkNotNull(stream, "debug stream can't be null"); @@ -164,6 +184,6 @@ public OAuthService build() Preconditions.checkNotNull(api, "You must specify a valid api through the provider() method"); Preconditions.checkEmptyString(apiKey, "You must provide an api key"); Preconditions.checkEmptyString(apiSecret, "You must provide an api secret"); - return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, debugStream)); + return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType, scope, state, referenceId, debugStream)); } } diff --git a/src/main/java/org/scribe/builder/api/AWeberApi.java b/src/main/java/org/scribe/builder/api/AWeberApi.java index 53ae1fc7f..5e25cbb43 100644 --- a/src/main/java/org/scribe/builder/api/AWeberApi.java +++ b/src/main/java/org/scribe/builder/api/AWeberApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class AWeberApi extends DefaultApi10a @@ -21,7 +22,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/ConstantContactApi.java b/src/main/java/org/scribe/builder/api/ConstantContactApi.java index 0588bc40c..ff65ce9dd 100644 --- a/src/main/java/org/scribe/builder/api/ConstantContactApi.java +++ b/src/main/java/org/scribe/builder/api/ConstantContactApi.java @@ -13,7 +13,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/DefaultApi10a.java b/src/main/java/org/scribe/builder/api/DefaultApi10a.java index 7506986b1..ef06629c3 100644 --- a/src/main/java/org/scribe/builder/api/DefaultApi10a.java +++ b/src/main/java/org/scribe/builder/api/DefaultApi10a.java @@ -124,7 +124,7 @@ public Verb getRequestTokenVerb() * @param requestToken the request token you need to authorize * @return the URL where you should redirect your users */ - public abstract String getAuthorizationUrl(Token requestToken); + public abstract String getAuthorizationUrl(Token requestToken, OAuthConfig config); /** * Returns the {@link OAuthService} for this Api diff --git a/src/main/java/org/scribe/builder/api/DiggApi.java b/src/main/java/org/scribe/builder/api/DiggApi.java index b69253eb9..55331cd47 100644 --- a/src/main/java/org/scribe/builder/api/DiggApi.java +++ b/src/main/java/org/scribe/builder/api/DiggApi.java @@ -21,7 +21,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/DropBoxApi.java b/src/main/java/org/scribe/builder/api/DropBoxApi.java index 86f4a71a1..90817fe08 100644 --- a/src/main/java/org/scribe/builder/api/DropBoxApi.java +++ b/src/main/java/org/scribe/builder/api/DropBoxApi.java @@ -11,7 +11,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return "https://www.dropbox.com/1/oauth/authorize?oauth_token="+requestToken.getToken(); } diff --git a/src/main/java/org/scribe/builder/api/EvernoteApi.java b/src/main/java/org/scribe/builder/api/EvernoteApi.java index 05ee502ff..541d3dff6 100644 --- a/src/main/java/org/scribe/builder/api/EvernoteApi.java +++ b/src/main/java/org/scribe/builder/api/EvernoteApi.java @@ -1,55 +1,50 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; -/** - * OAuth API for Evernote - * - * @author Norbert Potocki - */ public class EvernoteApi extends DefaultApi10a { - protected String serviceUrl() { - return "https://www.evernote.com"; - } + private static final String AUTHORIZATION_URL = "https://www.evernote.com/OAuth.action?oauth_token=%s"; @Override - public String getRequestTokenEndpoint() + public String getRequestTokenEndpoint() { - return serviceUrl() + "/oauth"; + return "https://www.evernote.com/oauth"; } - @Override - public String getAccessTokenEndpoint() - { - return serviceUrl() + "/oauth"; - } + @Override + public String getAccessTokenEndpoint() + { + return "https://www.evernote.com/oauth"; + } + + @Override + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) + { + return String.format(AUTHORIZATION_URL, requestToken.getToken()); + } - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(serviceUrl() + "/OAuth.action?oauth_token=%s", requestToken.getToken()); - } + public static class Sandbox extends EvernoteApi + { + private static final String SANDBOX_URL = "https://sandbox.evernote.com"; - /** - * Sandbox endpoint - */ - public static class Sandbox extends EvernoteApi - { - @Override - protected String serviceUrl() { - return "https://sandbox.evernote.com"; - } - } + @Override + public String getRequestTokenEndpoint() + { + return SANDBOX_URL + "/oauth"; + } - /** - * Yinxiang Biji endpoint - */ - public static class Yinxiang extends EvernoteApi - { - @Override - protected String serviceUrl() { - return "https://app.yinxiang.com"; - } - } + @Override + public String getAccessTokenEndpoint() + { + return SANDBOX_URL + "/oauth"; + } + + @Override + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) + { + return String.format(SANDBOX_URL + "/OAuth.action?oauth_token=%s", requestToken.getToken()); + } + } } diff --git a/src/main/java/org/scribe/builder/api/FlickrApi.java b/src/main/java/org/scribe/builder/api/FlickrApi.java index a63043610..873f5b88c 100644 --- a/src/main/java/org/scribe/builder/api/FlickrApi.java +++ b/src/main/java/org/scribe/builder/api/FlickrApi.java @@ -24,7 +24,7 @@ public String getAccessTokenEndpoint() * {@inheritDoc} */ @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return "http://www.flickr.com/services/oauth/authorize?oauth_token=" + requestToken.getToken(); } diff --git a/src/main/java/org/scribe/builder/api/FoursquareApi.java b/src/main/java/org/scribe/builder/api/FoursquareApi.java index 060a76b76..4fd2a7f88 100644 --- a/src/main/java/org/scribe/builder/api/FoursquareApi.java +++ b/src/main/java/org/scribe/builder/api/FoursquareApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class FoursquareApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/FreelancerApi.java b/src/main/java/org/scribe/builder/api/FreelancerApi.java index 482e66fd1..b0a938aab 100644 --- a/src/main/java/org/scribe/builder/api/FreelancerApi.java +++ b/src/main/java/org/scribe/builder/api/FreelancerApi.java @@ -31,7 +31,7 @@ public Verb getRequestTokenVerb() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } @@ -53,7 +53,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(SANDBOX_AUTHORIZATION_URL + "?oauth_token=%s", requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/GetGlueApi.java b/src/main/java/org/scribe/builder/api/GetGlueApi.java index 3a7560f0f..1dfa98c16 100644 --- a/src/main/java/org/scribe/builder/api/GetGlueApi.java +++ b/src/main/java/org/scribe/builder/api/GetGlueApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class GetGlueApi extends DefaultApi10a @@ -21,7 +22,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/GoogleApi.java b/src/main/java/org/scribe/builder/api/GoogleApi.java index 9c86e5e1a..dd3493292 100644 --- a/src/main/java/org/scribe/builder/api/GoogleApi.java +++ b/src/main/java/org/scribe/builder/api/GoogleApi.java @@ -31,7 +31,7 @@ public Verb getRequestTokenVerb() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/ImgUrApi.java b/src/main/java/org/scribe/builder/api/ImgUrApi.java index 06dd6910d..8e57ebbff 100644 --- a/src/main/java/org/scribe/builder/api/ImgUrApi.java +++ b/src/main/java/org/scribe/builder/api/ImgUrApi.java @@ -24,7 +24,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format("https://api.imgur.com/oauth/authorize?oauth_token=%s", requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/KaixinApi.java b/src/main/java/org/scribe/builder/api/KaixinApi.java index 5b0e0d5dc..a2965e96d 100644 --- a/src/main/java/org/scribe/builder/api/KaixinApi.java +++ b/src/main/java/org/scribe/builder/api/KaixinApi.java @@ -1,40 +1,42 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; +import org.scribe.model.Verb; -public class KaixinApi extends DefaultApi10a +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"; + 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"; - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } + @Override + public String getRequestTokenEndpoint() + { + return REQUEST_TOKEN_URL; + } - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } + @Override + public String getAccessTokenEndpoint() + { + return ACCESS_TOKEN_URL; + } - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } + @Override + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) + { + return String.format(AUTHORIZE_URL, requestToken.getToken()); + } - @Override - public Verb getRequestTokenVerb() - { - return Verb.GET; - } + @Override + public Verb getRequestTokenVerb() + { + return Verb.GET; + } - @Override - public Verb getAccessTokenVerb() - { - return Verb.GET; - } + @Override + public Verb getAccessTokenVerb() + { + return Verb.GET; + } } diff --git a/src/main/java/org/scribe/builder/api/LinkedInApi.java b/src/main/java/org/scribe/builder/api/LinkedInApi.java index ee6becd85..4d02b04e8 100644 --- a/src/main/java/org/scribe/builder/api/LinkedInApi.java +++ b/src/main/java/org/scribe/builder/api/LinkedInApi.java @@ -43,7 +43,7 @@ private String scopesAsString() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/LoveFilmApi.java b/src/main/java/org/scribe/builder/api/LoveFilmApi.java index 81a5bb874..4806f8044 100644 --- a/src/main/java/org/scribe/builder/api/LoveFilmApi.java +++ b/src/main/java/org/scribe/builder/api/LoveFilmApi.java @@ -1,6 +1,6 @@ package org.scribe.builder.api; -import org.scribe.model.Token; +import org.scribe.model.*; public class LoveFilmApi extends DefaultApi10a { @@ -21,7 +21,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/MeetupApi.java b/src/main/java/org/scribe/builder/api/MeetupApi.java index 8f63e39e1..a56771015 100644 --- a/src/main/java/org/scribe/builder/api/MeetupApi.java +++ b/src/main/java/org/scribe/builder/api/MeetupApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; /** @@ -23,7 +24,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/MendeleyApi.java b/src/main/java/org/scribe/builder/api/MendeleyApi.java index c6e0eced7..e6ad1bf84 100644 --- a/src/main/java/org/scribe/builder/api/MendeleyApi.java +++ b/src/main/java/org/scribe/builder/api/MendeleyApi.java @@ -24,7 +24,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/MisoApi.java b/src/main/java/org/scribe/builder/api/MisoApi.java index a6d88d3df..8c6784065 100644 --- a/src/main/java/org/scribe/builder/api/MisoApi.java +++ b/src/main/java/org/scribe/builder/api/MisoApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class MisoApi extends DefaultApi10a @@ -21,7 +22,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/NetProspexApi.java b/src/main/java/org/scribe/builder/api/NetProspexApi.java index 8257de751..17037b35d 100644 --- a/src/main/java/org/scribe/builder/api/NetProspexApi.java +++ b/src/main/java/org/scribe/builder/api/NetProspexApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class NetProspexApi extends DefaultApi10a @@ -21,7 +22,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java b/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java index fae38ac30..7aad79ef8 100644 --- a/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java +++ b/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java @@ -1,6 +1,7 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; public class NeteaseWeibooApi extends DefaultApi10a { @@ -10,7 +11,7 @@ public class NeteaseWeibooApi extends DefaultApi10a private static final String AUTHENTICATE_URL = "http://api.t.163.com/oauth/authenticate?oauth_token=%s"; @Override - public String getRequestTokenEndpoint() + public String getRequestTokenEndpoint() { return REQUEST_TOKEN_URL; } @@ -29,14 +30,14 @@ public String getAccessTokenEndpoint() * * via http://open.t.163.com/wiki/index.php?title=%E8%AF%B7%E6%B1%82%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83Token(oauth/authorize) */ - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } /** * this method is for web client with callback url - * if you're creating a desktop client please call getAuthorizationUrl + * if you're creating a desktop client please call getAuthorizationUrl * * via http://open.t.163.com/wiki/index.php?title=%E8%AF%B7%E6%B1%82%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83Token(oauth/authenticate) */ diff --git a/src/main/java/org/scribe/builder/api/PlurkApi.java b/src/main/java/org/scribe/builder/api/PlurkApi.java index 22b1ddb75..8388e2758 100644 --- a/src/main/java/org/scribe/builder/api/PlurkApi.java +++ b/src/main/java/org/scribe/builder/api/PlurkApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class PlurkApi extends DefaultApi10a @@ -15,7 +16,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } @@ -31,7 +32,7 @@ public static class Mobile extends PlurkApi private static final String AUTHORIZATION_URL = "http://www.plurk.com/m/authorize?oauth_token=%s"; @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/Px500Api.java b/src/main/java/org/scribe/builder/api/Px500Api.java index f7f3b0e0a..b3db00b3d 100644 --- a/src/main/java/org/scribe/builder/api/Px500Api.java +++ b/src/main/java/org/scribe/builder/api/Px500Api.java @@ -19,7 +19,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/QWeiboApi.java b/src/main/java/org/scribe/builder/api/QWeiboApi.java index e16f28836..2c8f36cc5 100644 --- a/src/main/java/org/scribe/builder/api/QWeiboApi.java +++ b/src/main/java/org/scribe/builder/api/QWeiboApi.java @@ -1,28 +1,29 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; -public class QWeiboApi extends DefaultApi10a +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"; + 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"; - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } + @Override + public String getRequestTokenEndpoint() + { + return REQUEST_TOKEN_URL; + } - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } + @Override + public String getAccessTokenEndpoint() + { + return ACCESS_TOKEN_URL; + } - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } + @Override + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) + { + return String.format(AUTHORIZE_URL, requestToken.getToken()); + } } diff --git a/src/main/java/org/scribe/builder/api/SapoApi.java b/src/main/java/org/scribe/builder/api/SapoApi.java index 9771daf4c..2275b3e84 100644 --- a/src/main/java/org/scribe/builder/api/SapoApi.java +++ b/src/main/java/org/scribe/builder/api/SapoApi.java @@ -21,7 +21,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/SimpleGeoApi.java b/src/main/java/org/scribe/builder/api/SimpleGeoApi.java index 3e19df70a..a814ea420 100644 --- a/src/main/java/org/scribe/builder/api/SimpleGeoApi.java +++ b/src/main/java/org/scribe/builder/api/SimpleGeoApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; /** @@ -22,7 +23,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return ENDPOINT; } diff --git a/src/main/java/org/scribe/builder/api/SinaWeiboApi.java b/src/main/java/org/scribe/builder/api/SinaWeiboApi.java index 14951d31b..eb3f316d2 100644 --- a/src/main/java/org/scribe/builder/api/SinaWeiboApi.java +++ b/src/main/java/org/scribe/builder/api/SinaWeiboApi.java @@ -1,6 +1,7 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; public class SinaWeiboApi extends DefaultApi10a { @@ -21,7 +22,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/SkyrockApi.java b/src/main/java/org/scribe/builder/api/SkyrockApi.java index b0e76a303..c23fe39a7 100644 --- a/src/main/java/org/scribe/builder/api/SkyrockApi.java +++ b/src/main/java/org/scribe/builder/api/SkyrockApi.java @@ -28,7 +28,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(API_ENDPOINT + AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/SohuWeiboApi.java b/src/main/java/org/scribe/builder/api/SohuWeiboApi.java index 1f927b7a5..a88a221c4 100644 --- a/src/main/java/org/scribe/builder/api/SohuWeiboApi.java +++ b/src/main/java/org/scribe/builder/api/SohuWeiboApi.java @@ -1,6 +1,7 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; public class SohuWeiboApi extends DefaultApi10a { @@ -21,7 +22,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/TrelloApi.java b/src/main/java/org/scribe/builder/api/TrelloApi.java index 9e46730d4..7b1bb561f 100644 --- a/src/main/java/org/scribe/builder/api/TrelloApi.java +++ b/src/main/java/org/scribe/builder/api/TrelloApi.java @@ -19,7 +19,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/TumblrApi.java b/src/main/java/org/scribe/builder/api/TumblrApi.java index ee680ee8a..20c8a0784 100644 --- a/src/main/java/org/scribe/builder/api/TumblrApi.java +++ b/src/main/java/org/scribe/builder/api/TumblrApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class TumblrApi extends DefaultApi10a @@ -21,7 +22,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/TwitterApi.java b/src/main/java/org/scribe/builder/api/TwitterApi.java index 86494c54d..322fe472a 100644 --- a/src/main/java/org/scribe/builder/api/TwitterApi.java +++ b/src/main/java/org/scribe/builder/api/TwitterApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class TwitterApi extends DefaultApi10a @@ -11,32 +12,56 @@ public class TwitterApi extends DefaultApi10a @Override public String getAccessTokenEndpoint() { - return "https://" + ACCESS_TOKEN_RESOURCE; + return "http://" + ACCESS_TOKEN_RESOURCE; } @Override public String getRequestTokenEndpoint() { - return "https://" + REQUEST_TOKEN_RESOURCE; + return "http://" + REQUEST_TOKEN_RESOURCE; } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } + public static class SSL extends TwitterApi + { + @Override + public String getAccessTokenEndpoint() + { + return "https://" + ACCESS_TOKEN_RESOURCE; + } + + @Override + public String getRequestTokenEndpoint() + { + return "https://" + REQUEST_TOKEN_RESOURCE; + } + } + /** * Twitter 'friendlier' authorization endpoint for OAuth. + * + * Uses SSL. */ - public static class Authenticate extends TwitterApi + public static class Authenticate extends SSL { private static final String AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate?oauth_token=%s"; @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHENTICATE_URL, requestToken.getToken()); } } + + /** + * Just an alias to the default (SSL) authorization endpoint. + * + * Need to include this for symmetry with 'Authenticate' only. + */ + public static class Authorize extends SSL{} } diff --git a/src/main/java/org/scribe/builder/api/UbuntuOneApi.java b/src/main/java/org/scribe/builder/api/UbuntuOneApi.java index 2a72c3afe..af3bbed66 100644 --- a/src/main/java/org/scribe/builder/api/UbuntuOneApi.java +++ b/src/main/java/org/scribe/builder/api/UbuntuOneApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; import org.scribe.services.*; @@ -20,7 +21,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/VimeoApi.java b/src/main/java/org/scribe/builder/api/VimeoApi.java index 231895dab..bf46bd078 100644 --- a/src/main/java/org/scribe/builder/api/VimeoApi.java +++ b/src/main/java/org/scribe/builder/api/VimeoApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class VimeoApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/XingApi.java b/src/main/java/org/scribe/builder/api/XingApi.java index ec8823e67..6691318d5 100755 --- a/src/main/java/org/scribe/builder/api/XingApi.java +++ b/src/main/java/org/scribe/builder/api/XingApi.java @@ -19,7 +19,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/YahooApi.java b/src/main/java/org/scribe/builder/api/YahooApi.java index e8a29a738..bdb42602b 100644 --- a/src/main/java/org/scribe/builder/api/YahooApi.java +++ b/src/main/java/org/scribe/builder/api/YahooApi.java @@ -1,5 +1,6 @@ package org.scribe.builder.api; +import org.scribe.model.OAuthConfig; import org.scribe.model.Token; public class YahooApi extends DefaultApi10a @@ -19,7 +20,7 @@ public String getRequestTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZE_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/builder/api/YammerApi.java b/src/main/java/org/scribe/builder/api/YammerApi.java index e06543d97..1c03db29a 100644 --- a/src/main/java/org/scribe/builder/api/YammerApi.java +++ b/src/main/java/org/scribe/builder/api/YammerApi.java @@ -20,7 +20,7 @@ public String getAccessTokenEndpoint() } @Override - public String getAuthorizationUrl(Token requestToken) + public String getAuthorizationUrl(Token requestToken, OAuthConfig config) { return String.format(AUTHORIZATION_URL, requestToken.getToken()); } diff --git a/src/main/java/org/scribe/model/OAuthConfig.java b/src/main/java/org/scribe/model/OAuthConfig.java index 51811d765..e397642fe 100644 --- a/src/main/java/org/scribe/model/OAuthConfig.java +++ b/src/main/java/org/scribe/model/OAuthConfig.java @@ -14,20 +14,24 @@ public class OAuthConfig private final String callback; private final SignatureType signatureType; private final String scope; + private final String state; + private final String referenceId; private final OutputStream debugStream; public OAuthConfig(String key, String secret) { - this(key, secret, null, null, null, null); + this(key, secret, null, null, null, null, null, null); } - public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, OutputStream stream) + public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, String state, String refID, OutputStream stream) { this.apiKey = key; this.apiSecret = secret; this.callback = callback; this.signatureType = type; this.scope = scope; + this.state = state; + this.referenceId = refID; this.debugStream = stream; } @@ -60,6 +64,16 @@ public boolean hasScope() { return scope != null; } + + public String getState() + { + return state; + } + + public String getReferenceId() + { + return referenceId; + } public void log(String message) { diff --git a/src/main/java/org/scribe/model/OAuthConstants.java b/src/main/java/org/scribe/model/OAuthConstants.java index c442deeb7..26ab2cd65 100644 --- a/src/main/java/org/scribe/model/OAuthConstants.java +++ b/src/main/java/org/scribe/model/OAuthConstants.java @@ -32,7 +32,6 @@ private OAuthConstants(){} public static final String CALLBACK = "oauth_callback"; public static final String VERSION = "oauth_version"; public static final String NONCE = "oauth_nonce"; - public static final String REALM = "realm"; public static final String PARAM_PREFIX = "oauth_"; public static final String TOKEN = "oauth_token"; public static final String TOKEN_SECRET = "oauth_token_secret"; @@ -41,9 +40,12 @@ private OAuthConstants(){} public static final String HEADER = "Authorization"; public static final Token EMPTY_TOKEN = new Token("", ""); public static final String SCOPE = "scope"; + public static final String REALM = "realm"; //OAuth 2.0 + public static final String GRANT_TYPE = "grant_type"; public static final String ACCESS_TOKEN = "access_token"; + public static final String REFRESH_TOKEN = "refresh_token"; public static final String CLIENT_ID = "client_id"; public static final String CLIENT_SECRET = "client_secret"; public static final String REDIRECT_URI = "redirect_uri"; diff --git a/src/main/java/org/scribe/model/OAuthRequest.java b/src/main/java/org/scribe/model/OAuthRequest.java index d3b2e5ac4..6d27d9c92 100644 --- a/src/main/java/org/scribe/model/OAuthRequest.java +++ b/src/main/java/org/scribe/model/OAuthRequest.java @@ -42,13 +42,13 @@ public void addOAuthParameter(String key, String value) private String checkKey(String key) { - if (key.startsWith(OAUTH_PREFIX) || key.equals(OAuthConstants.SCOPE)) + if (key.startsWith(OAUTH_PREFIX) || key.equals(OAuthConstants.SCOPE) || key.equals(OAuthConstants.REALM)) { return key; } else { - throw new IllegalArgumentException(String.format("OAuth parameters must either be '%s' or start with '%s'", OAuthConstants.SCOPE, OAUTH_PREFIX)); + throw new IllegalArgumentException(String.format("OAuth parameters must either be '%s', '%s' or start with '%s'", OAuthConstants.SCOPE, OAuthConstants.REALM, OAUTH_PREFIX)); } } diff --git a/src/main/java/org/scribe/model/Parameter.java b/src/main/java/org/scribe/model/Parameter.java index f22e30066..124efe1a9 100644 --- a/src/main/java/org/scribe/model/Parameter.java +++ b/src/main/java/org/scribe/model/Parameter.java @@ -44,4 +44,14 @@ public int compareTo(Parameter parameter) return keyDiff != 0 ? keyDiff : value.compareTo(parameter.value); } + + public String getKey() + { + return this.key; + } + + public String getValue() + { + return this.value; + } } diff --git a/src/main/java/org/scribe/model/ParameterList.java b/src/main/java/org/scribe/model/ParameterList.java index 747b399f6..016fa4c54 100644 --- a/src/main/java/org/scribe/model/ParameterList.java +++ b/src/main/java/org/scribe/model/ParameterList.java @@ -111,4 +111,9 @@ public ParameterList sort() Collections.sort(sorted.params); return sorted; } + + public List getParams() + { + return this.params; + } } diff --git a/src/main/java/org/scribe/model/Request.java b/src/main/java/org/scribe/model/Request.java index e48578e21..92481a593 100644 --- a/src/main/java/org/scribe/model/Request.java +++ b/src/main/java/org/scribe/model/Request.java @@ -82,10 +82,21 @@ private void createConnection() throws IOException if (connection == null) { System.setProperty("http.keepAlive", connectionKeepAlive ? "true" : "false"); - connection = (HttpURLConnection) new URL(completeUrl).openConnection(); - connection.setInstanceFollowRedirects(followRedirects); + if (this.checkProxyable()) + { + Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7552)); + connection = (HttpURLConnection) new URL(completeUrl).openConnection(proxy); + } + else + { + connection = (HttpURLConnection) new URL(completeUrl).openConnection(); + } } } + + private boolean checkProxyable() { + return this.url.matches("^http(s)?://(www|graph)\\.facebook\\.com/.*$") || this.url.matches("^http(s)?://api\\.twitter\\.com/.*$"); + } /** * Returns the complete url (host + resource + encoded querystring parameters). @@ -99,8 +110,15 @@ public String getCompleteUrl() Response doSend(RequestTuner tuner) throws IOException { + if (connection.getURL().getProtocol().toLowerCase().contains("https")) + { + try + { + Response.trustAllHttpsCertificates(); + } catch (Exception e) {} + } connection.setRequestMethod(this.verb.name()); - if (connectTimeout != null) + if (connectTimeout != null) { connection.setConnectTimeout(connectTimeout.intValue()); } diff --git a/src/main/java/org/scribe/model/Response.java b/src/main/java/org/scribe/model/Response.java index d433922c6..35044f00d 100644 --- a/src/main/java/org/scribe/model/Response.java +++ b/src/main/java/org/scribe/model/Response.java @@ -4,6 +4,9 @@ import java.net.*; import java.util.*; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSession; + import org.scribe.exceptions.*; import org.scribe.utils.*; @@ -26,6 +29,13 @@ public class Response { try { + if (connection.getURL().getProtocol().toLowerCase().contains("https")) + { + try + { + Response.trustAllHttpsCertificates(); + } catch (Exception e) {} + } connection.connect(); code = connection.getResponseCode(); message = connection.getResponseMessage(); @@ -123,4 +133,41 @@ public String getHeader(String name) return headers.get(name); } + HostnameVerifier hv = new HostnameVerifier() { + public boolean verify(String urlHostName, SSLSession session) { + return true; + } + }; + + public static void trustAllHttpsCertificates() throws Exception { + javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; + javax.net.ssl.TrustManager tm = new miTM(); + trustAllCerts[0] = tm; + javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, null); + javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } + + static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) { + return true; + } + + public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { + return; + } + + public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws java.security.cert.CertificateException { + return; + } + } + } \ No newline at end of file diff --git a/src/main/java/org/scribe/model/SignatureType.java b/src/main/java/org/scribe/model/SignatureType.java index 3440a361f..04fe63bc6 100644 --- a/src/main/java/org/scribe/model/SignatureType.java +++ b/src/main/java/org/scribe/model/SignatureType.java @@ -3,5 +3,6 @@ public enum SignatureType { Header, - QueryString + QueryString, + PostBody } diff --git a/src/main/java/org/scribe/model/Token.java b/src/main/java/org/scribe/model/Token.java index 4d8c0eeb5..f13decc50 100644 --- a/src/main/java/org/scribe/model/Token.java +++ b/src/main/java/org/scribe/model/Token.java @@ -11,9 +11,9 @@ public class Token implements Serializable { private static final long serialVersionUID = 715000866082812683L; - - private final String token; - private final String secret; + + protected final String token; + protected final String secret; private final String rawResponse; /** diff --git a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java index 2b207f566..bc728abe7 100644 --- a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java @@ -17,8 +17,9 @@ public class OAuth10aServiceImpl implements OAuthService { private static final String VERSION = "1.0"; - private OAuthConfig config; - private DefaultApi10a api; + protected OAuthConfig config; + protected DefaultApi10a api; + protected String scope; /** * Default constructor @@ -64,7 +65,7 @@ public Token getRequestToken(RequestTuner tuner) return api.getRequestTokenExtractor().extract(body); } - private void addOAuthParams(OAuthRequest request, Token token) + protected void addOAuthParams(OAuthRequest request, Token token) { request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); @@ -140,10 +141,10 @@ public String getVersion() */ public String getAuthorizationUrl(Token requestToken) { - return api.getAuthorizationUrl(requestToken); + return api.getAuthorizationUrl(requestToken, this.config); } - private String getSignature(OAuthRequest request, Token token) + protected String getSignature(OAuthRequest request, Token token) { config.log("generating signature..."); config.log("using base64 encoder: " + Base64Encoder.type()); @@ -155,7 +156,7 @@ private String getSignature(OAuthRequest request, Token token) return signature; } - private void appendSignature(OAuthRequest request) + protected void appendSignature(OAuthRequest request) { switch (config.getSignatureType()) { @@ -173,9 +174,21 @@ private void appendSignature(OAuthRequest request) request.addQuerystringParameter(entry.getKey(), entry.getValue()); } break; + case PostBody: + for (Map.Entry entry : request.getOauthParameters().entrySet()) + { + request.addBodyParameter(entry.getKey(), entry.getValue()); + } + break; } } + @Override + public OAuthConfig getConfig() + { + return this.config; + } + private static class TimeoutTuner extends RequestTuner { private final int duration; diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index 6262c3700..122fdee0a 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -7,8 +7,8 @@ public class OAuth20ServiceImpl implements OAuthService { private static final String VERSION = "2.0"; - private final DefaultApi20 api; - private final OAuthConfig config; + protected final DefaultApi20 api; + protected final OAuthConfig config; /** * Default constructor @@ -28,6 +28,7 @@ public OAuth20ServiceImpl(DefaultApi20 api, OAuthConfig config) public Token getAccessToken(Token requestToken, Verifier verifier) { OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParameter(OAuthConstants.GRANT_TYPE, "authorization_code"); request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); request.addQuerystringParameter(OAuthConstants.CODE, verifier.getValue()); @@ -69,4 +70,19 @@ public String getAuthorizationUrl(Token requestToken) return api.getAuthorizationUrl(config); } + @Override + public OAuthConfig getConfig() + { + return this.config; + } + + public Token refreshToken(Token refreshToken, String sessionHandle) + { + OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParameter(OAuthConstants.GRANT_TYPE, "refresh_token"); + request.addQuerystringParameter(OAuthConstants.REFRESH_TOKEN, refreshToken.getToken()); + if(config.hasScope()) request.addQuerystringParameter(OAuthConstants.SCOPE, config.getScope()); + Response response = request.send(); + return api.getAccessTokenExtractor().extract(response.getBody()); + } } diff --git a/src/main/java/org/scribe/oauth/OAuthService.java b/src/main/java/org/scribe/oauth/OAuthService.java index 0c9c57e9b..23f45d8e1 100644 --- a/src/main/java/org/scribe/oauth/OAuthService.java +++ b/src/main/java/org/scribe/oauth/OAuthService.java @@ -50,4 +50,10 @@ public interface OAuthService * @return the URL where you should redirect your users */ public String getAuthorizationUrl(Token requestToken); + + /** + * Return oauth configuration for this service instance + * @return + */ + public OAuthConfig getConfig(); } diff --git a/src/test/java/org/scribe/examples/FoursquareExample.java b/src/test/java/org/scribe/examples/FoursquareExample.java deleted file mode 100644 index b227488c7..000000000 --- a/src/test/java/org/scribe/examples/FoursquareExample.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.scribe.examples; - -import java.util.Scanner; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -public class FoursquareExample -{ - private static final String PROTECTED_RESOURCE_URL = "http://api.foursquare.com/v1/user"; - - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(FoursquareApi.class) - .apiKey("FEGFXJUFANVVDHVSNUAMUKTTXCP1AJQD53E33XKJ44YP1S4I") - .apiSecret("AYWKUL5SWPNC0CTQ202QXRUG2NLZYXMRA34ZSDW4AUYBG2RC") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Foursquare's OAuth Workflow ==="); - System.out.println(); - - // Obtain the Request Token - System.out.println("Fetching the Request Token..."); - Token requestToken = service.getRequestToken(); - System.out.println("Got the Request Token!"); - System.out.println(); - - System.out.println("Now go and authorize Scribe here:"); - System.out.println(service.getAuthorizationUrl(requestToken)); - System.out.println("And paste the verifier here"); - System.out.print(">>"); - 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..."); - Token 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(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - Response response = request.send(); - 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 Scribe! :)"); - } - -} \ No newline at end of file diff --git a/src/test/java/org/scribe/examples/GoogleExample.java b/src/test/java/org/scribe/examples/GoogleExample.java deleted file mode 100644 index fef1b43c9..000000000 --- a/src/test/java/org/scribe/examples/GoogleExample.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.scribe.examples; - -import java.util.*; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -public 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) - { - OAuthService service = new ServiceBuilder() - .provider(GoogleApi.class) - .apiKey("anonymous") - .apiSecret("anonymous") - .scope(SCOPE) - .build(); - 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..."); - Token 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 Scribe here:"); - System.out.println(AUTHORIZE_URL + requestToken.getToken()); - System.out.println("And paste the verifier here"); - System.out.print(">>"); - 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..."); - Token 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(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - request.addHeader("GData-Version", "3.0"); - 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 Scribe! :)"); - - } -} \ No newline at end of file diff --git a/src/test/java/org/scribe/examples/LinkedInExample.java b/src/test/java/org/scribe/examples/LinkedInExample.java deleted file mode 100644 index 703cc8275..000000000 --- a/src/test/java/org/scribe/examples/LinkedInExample.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.scribe.examples; - -import java.util.Scanner; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -public 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) - { - OAuthService service = new ServiceBuilder() - .provider(LinkedInApi.class) - .apiKey("CiEgwWDkA5BFpNrc0RfGyVuSlOh4tig5kOTZ9q97qcXNrFl7zqk-Ts7DqRGaKDCV") - .apiSecret("dhho4dfoCmiQXrkw4yslork5XWLFnPSuMR-8gscPVjY4jqFFHPYWJKgpFl4uLTM6") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== LinkedIn's OAuth Workflow ==="); - System.out.println(); - - // Obtain the Request Token - System.out.println("Fetching the Request Token..."); - Token requestToken = service.getRequestToken(); - System.out.println("Got the Request Token!"); - System.out.println(); - - System.out.println("Now go and authorize Scribe here:"); - System.out.println(service.getAuthorizationUrl(requestToken)); - System.out.println("And paste the verifier here"); - System.out.print(">>"); - 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..."); - Token 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(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - Response response = request.send(); - 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 Scribe! :)"); - } - -} diff --git a/src/test/java/org/scribe/examples/TwitterExample.java b/src/test/java/org/scribe/examples/TwitterExample.java index 7573ed603..28d9bea54 100644 --- a/src/test/java/org/scribe/examples/TwitterExample.java +++ b/src/test/java/org/scribe/examples/TwitterExample.java @@ -9,11 +9,10 @@ public class TwitterExample { - private static final String PROTECTED_RESOURCE_URL = "https://api.twitter.com/1.1/account/verify_credentials.json"; + private static final String PROTECTED_RESOURCE_URL = "https://api.twitter.com/1/statuses/update.json"; public static void main(String[] args) { - // If you choose to use a callback, "oauth_verifier" will be the return value by Twitter (request param) OAuthService service = new ServiceBuilder() .provider(TwitterApi.class) .apiKey("6icbcAXyZx67r8uTAUM5Qw") @@ -46,7 +45,7 @@ public static void main(String[] args) // Now let's go and ask for a protected resource! System.out.println("Now we're going to access a protected resource..."); - OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL); request.addBodyParameter("status", "this is sparta! *"); service.signRequest(accessToken, request); Response response = request.send(); @@ -55,7 +54,7 @@ public static void main(String[] args) System.out.println(response.getBody()); System.out.println(); - System.out.println("That's it man! Go and build something awesome with Scribe! :)"); + System.out.println("Thats it man! Go and build something awesome with Scribe! :)"); } -} +} \ No newline at end of file diff --git a/src/test/java/org/scribe/examples/YahooExample.java b/src/test/java/org/scribe/examples/YahooExample.java deleted file mode 100644 index 2e3f336f0..000000000 --- a/src/test/java/org/scribe/examples/YahooExample.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.scribe.examples; - -import java.util.Scanner; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -public 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) - { - OAuthService service = new ServiceBuilder() - .provider(YahooApi.class) - .apiKey("dj0yJmk9TXZDWVpNVVdGaVFmJmQ9WVdrOWMweHZXbkZLTkhVbWNHbzlNVEl5TWprd05qUTJNZy0tJnM9Y29uc3VtZXJzZWNyZXQmeD0wMw--") - .apiSecret("262be559f92a2be20c4c039419018f2b48cdfce9") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Yahoo's OAuth Workflow ==="); - System.out.println(); - - // Obtain the Request Token - System.out.println("Fetching the Request Token..."); - Token requestToken = service.getRequestToken(); - System.out.println("Got the Request Token!"); - System.out.println(); - - System.out.println("Now go and authorize Scribe here:"); - System.out.println(service.getAuthorizationUrl(requestToken)); - System.out.println("And paste the verifier here"); - System.out.print(">>"); - 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..."); - Token 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(); - - // Now let's go and ask for a protected resource! - System.out.println("Now we're going to access a protected resource..."); - OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); - service.signRequest(accessToken, request); - 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 Scribe! :)"); - - } -} diff --git a/src/test/java/org/scribe/extractors/HeaderExtractorTest.java b/src/test/java/org/scribe/extractors/HeaderExtractorTest.java deleted file mode 100644 index bdc727cd8..000000000 --- a/src/test/java/org/scribe/extractors/HeaderExtractorTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.scribe.extractors; - -import static org.junit.Assert.*; - -import org.junit.*; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.test.helpers.*; - -public class HeaderExtractorTest -{ - - private HeaderExtractorImpl extractor; - private OAuthRequest request; - - @Before - public void setup() - { - request = ObjectMother.createSampleOAuthRequest(); - extractor = new HeaderExtractorImpl(); - } - - @Test - public void shouldExtractStandardHeader() - { - String expected = "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\""; - String header = extractor.extract(request); - assertEquals(expected, header); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldExceptionIfRequestIsNull() - { - OAuthRequest nullRequest = null; - extractor.extract(nullRequest); - } - - @Test(expected = OAuthParametersMissingException.class) - public void shouldExceptionIfRequestHasNoOAuthParams() - { - OAuthRequest emptyRequest = new OAuthRequest(Verb.GET, "http://example.com"); - extractor.extract(emptyRequest); - } -} diff --git a/src/test/java/org/scribe/model/OAuthRequestTest.java b/src/test/java/org/scribe/model/OAuthRequestTest.java deleted file mode 100644 index 1ea2f2fb9..000000000 --- a/src/test/java/org/scribe/model/OAuthRequestTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.scribe.model; - -import static org.junit.Assert.*; - -import org.junit.*; - -public class OAuthRequestTest -{ - - private OAuthRequest request; - - @Before - public void setup() - { - request = new OAuthRequest(Verb.GET, "http://example.com"); - } - - @Test - public void shouldAddOAuthParamters() - { - request.addOAuthParameter(OAuthConstants.TOKEN, "token"); - request.addOAuthParameter(OAuthConstants.NONCE, "nonce"); - request.addOAuthParameter(OAuthConstants.TIMESTAMP, "ts"); - request.addOAuthParameter(OAuthConstants.SCOPE, "feeds"); - - assertEquals(4, request.getOauthParameters().size()); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfParameterIsNotOAuth() - { - request.addOAuthParameter("otherParam", "value"); - } -} diff --git a/src/test/java/org/scribe/model/ResponseTest.java b/src/test/java/org/scribe/model/ResponseTest.java deleted file mode 100644 index a58fc0355..000000000 --- a/src/test/java/org/scribe/model/ResponseTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.scribe.model; - -import static org.junit.Assert.*; - -import java.io.*; - -import org.junit.*; - -public class ResponseTest -{ - - private Response response; - private ConnectionStub connection; - - @Before - public void setup() throws Exception - { - 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() - { - assertEquals("contents", response.getBody()); - assertEquals(1, connection.getTimesCalledInpuStream()); - } - - @Test - public void shouldParseBodyContentsOnlyOnce() - { - assertEquals("contents", response.getBody()); - assertEquals("contents", response.getBody()); - assertEquals("contents", response.getBody()); - assertEquals(1, connection.getTimesCalledInpuStream()); - } - - @Test - public void shouldHandleAConnectionWithErrors() throws Exception - { - Response errResponse = new Response(new FaultyConnection()); - assertEquals(400, errResponse.getCode()); - assertEquals("errors", errResponse.getBody()); - } - - private static class FaultyConnection extends ConnectionStub - { - - public FaultyConnection() throws Exception - { - super(); - } - - @Override - public InputStream getErrorStream() - { - return new ByteArrayInputStream("errors".getBytes()); - } - - @Override - public int getResponseCode() throws IOException - { - return 400; - } - } -} diff --git a/src/test/java/org/scribe/services/HMACSha1SignatureServiceTest.java b/src/test/java/org/scribe/services/HMACSha1SignatureServiceTest.java deleted file mode 100644 index ec058a773..000000000 --- a/src/test/java/org/scribe/services/HMACSha1SignatureServiceTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.scribe.services; - -import static org.junit.Assert.*; - -import org.junit.*; -import org.scribe.exceptions.*; - -public class HMACSha1SignatureServiceTest -{ - - private HMACSha1SignatureService service; - - @Before - public void setup() - { - service = new HMACSha1SignatureService(); - } - - @Test - public void shouldReturnSignatureMethodString() - { - String expected = "HMAC-SHA1"; - assertEquals(expected, service.getSignatureMethod()); - } - - @Test - public void shouldReturnSignature() - { - String apiSecret = "api secret"; - String tokenSecret = "token secret"; - String baseString = "base string"; - String signature = "uGymw2KHOTWI699YEaoi5xyLT50="; - assertEquals(signature, service.getSignature(baseString, apiSecret, tokenSecret)); - } - - @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfBaseStringIsNull() - { - service.getSignature(null, "apiSecret", "tokenSecret"); - } - - @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfBaseStringIsEmpty() - { - service.getSignature(" ", "apiSecret", "tokenSecret"); - } - - @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfApiSecretIsNull() - { - service.getSignature("base string", null, "tokenSecret"); - } - - @Test(expected = OAuthException.class) - public void shouldThrowExceptionIfApiSecretIsEmpty() - { - service.getSignature("base string", " ", "tokenSecret"); - } -} diff --git a/src/test/java/org/scribe/services/TimestampServiceTest.java b/src/test/java/org/scribe/services/TimestampServiceTest.java deleted file mode 100644 index 352b962ca..000000000 --- a/src/test/java/org/scribe/services/TimestampServiceTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.scribe.services; - -import static org.junit.Assert.*; - -import org.junit.*; - -public class TimestampServiceTest -{ - - private TimestampServiceImpl service; - private TimestampServiceImpl.Timer timerStub; - - @Before - public void setup() - { - service = new TimestampServiceImpl(); - timerStub = new TimerStub(); - service.setTimer(timerStub); - } - - @Test - public void shouldReturnTimestampInSeconds() - { - String expected = "1000"; - assertEquals(expected, service.getTimestampInSeconds()); - } - - @Test - public void shouldReturnNonce() - { - String expected = "1042"; - assertEquals(expected, service.getNonce()); - } - - private static class TimerStub extends TimestampServiceImpl.Timer - { - - @Override - public Long getMilis() - { - return 1000000L; - } - - @Override - public Integer getRandomInteger() - { - return 42; - } - } -} diff --git a/src/test/java/org/scribe/utils/StreamUtilsTest.java b/src/test/java/org/scribe/utils/StreamUtilsTest.java deleted file mode 100644 index 976914d05..000000000 --- a/src/test/java/org/scribe/utils/StreamUtilsTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.scribe.utils; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import org.junit.Test; - -import static org.junit.Assert.*; - -public class StreamUtilsTest -{ - - @Test - public void shouldCorrectlyDecodeAStream() - { - String value = "expected"; - InputStream is = new ByteArrayInputStream(value.getBytes()); - String decoded = StreamUtils.getStreamContents(is); - assertEquals("expected", decoded); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldFailForNullParameter() - { - InputStream is = null; - StreamUtils.getStreamContents(is); - fail("Must throw exception before getting here"); - } -}