diff --git a/.externalToolBuilders/Scribe Builder.launch b/.externalToolBuilders/Scribe Builder.launch new file mode 100644 index 000000000..4f6129480 --- /dev/null +++ b/.externalToolBuilders/Scribe Builder.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index a9a50de0e..2c3c951ae 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ scribe.iml # Binaries -target \ No newline at end of file +target +build \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index c966b9e63..aafc5b872 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,4 @@ language: java # need to override travis 'install' since it will try gpg sign and fail. -install: mvn clean package -DskipTests=true +install: true diff --git a/README.textile b/README.textile index e1726c94f..831d45684 100644 --- a/README.textile +++ b/README.textile @@ -1,95 +1,7 @@ -h2. Welcome to the home of Scribe, the simple OAuth Java lib! +h2. This is a fork of scribe for java 1.4 -!https://secure.travis-ci.org/fernandezpablo85/scribe-java.png?branch=master(travis-ci-status)! +I updated the code to make it compile with a 1.4 compiler. +I also abstracted the default java HTTP out so I can rely on a separate HTTP provider in the package. -h2. Before submitting a pull request "please read this":https://github.com/fernandezpablo85/scribe-java/wiki/Scribe-scope-revised - -h1. Why use Scribe? - -h3. Dead Simple - -Who said OAuth was difficult? Configuring scribe is __so easy your grandma can do it__! check it out: - -@OAuthService service = new ServiceBuilder()@ - @.provider(LinkedInApi.class)@ - @.apiKey(YOUR_API_KEY)@ - @.apiSecret(YOUR_API_SECRET)@ - @.build();@ - -That **single line** (added newlines for readability) is the only thing you need to configure scribe with LinkedIn's OAuth API for example. - -h3. Threadsafe - -Hit Scribe as hard and with many threads as you like. - -h3. Supports all major 1.0a and 2.0 OAuth APIs out-of-the-box - -* Google - -* Facebook - -* Yahoo - -* LinkedIn - -* Twitter - -* Foursquare - -* Evernote - -* Vimeo - -* Yammer - -* Windows Live - -* and many more! check the "examples folder":http://github.com/fernandezpablo85/scribe-java/tree/master/src/test/java/org/scribe/examples - -h3. Small and modular - -Scribe's code is small (about 1k LOC) and simple to understand. No smart-ass or "clever" hacks here. - -h3. Android-Ready - -Works out of the box with android(TM) applications. - -h3. Stable & bulletproof - -Good test coverage to keep you safe from harm. - -When something bad actually happens, Scribe's meaningful error messages will tell you exactly what went wrong, when and where. - -h3. Pull it from Maven! (new) - -You can pull scribe from a maven repository, just add this to your __pom.xml__ file: - -@@ - @org.scribe@ - @scribe@ - @1.3.5@ -@@ - -h1. Getting started in less than 2 minutes - -Check the "Getting Started":http://wiki.github.com/fernandezpablo85/scribe-java/getting-started page and start rocking! - -h1. Please Read the "FAQ":http://wiki.github.com/fernandezpablo85/scribe-java/faq before creating an issue :) - -h1. Questions? - -Feel free to drop me an email, but there's already a "StackOverflow":http://stackoverflow.com tag for "scribe":http://stackoverflow.com/questions/tagged/scribe you should use. I'm subscribed to it so I'll pick the question immediately. - -Note that it really helps to run scribe on "debug mode":https://github.com/fernandezpablo85/scribe-java/wiki/debug-mode (since 1.3.0), to get additional info. To do this simply call the @.debug()@ method on the @ServiceBuilder@. - -h1. Forks - -Looking for a scribe variation? check the "Fork List":https://github.com/fernandezpablo85/scribe-java/wiki/Forks - -If you have a useful fork that should be listed there please contact me (see About me). - -h1. About me - -"LinkedIn profile":http://www.linkedin.com/in/fernandezpablo85 - -Follow me: "@fernandezpablo":http://twitter.com/fernandezpablo +Please see the original product for more information. If you find an issue in my translation of the project, +please let me know. thanks! diff --git a/build.xml b/build.xml new file mode 100644 index 000000000..ef4de3cdd --- /dev/null +++ b/build.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dist/scribe.jar b/dist/scribe.jar new file mode 100644 index 000000000..2f26e7bf9 Binary files /dev/null and b/dist/scribe.jar differ diff --git a/lib/commons-codec-1.5.jar b/lib/commons-codec-1.5.jar new file mode 100644 index 000000000..e9013fed7 Binary files /dev/null and b/lib/commons-codec-1.5.jar differ diff --git a/lib/commons-lang-2.6.jar b/lib/commons-lang-2.6.jar new file mode 100644 index 000000000..98467d3a6 Binary files /dev/null and b/lib/commons-lang-2.6.jar differ diff --git a/lib/jakarta-regexp-1.5.jar b/lib/jakarta-regexp-1.5.jar new file mode 100644 index 000000000..652bc822c Binary files /dev/null and b/lib/jakarta-regexp-1.5.jar differ diff --git a/pom.xml b/pom.xml deleted file mode 100644 index a276ae1bb..000000000 --- a/pom.xml +++ /dev/null @@ -1,98 +0,0 @@ - - 4.0.0 - org.scribe - scribe - jar - 1.3.5 - Scribe OAuth Library - The best OAuth library out there - http://github.com/fernandezpablo85/scribe-java - - - org.sonatype.oss - oss-parent - 5 - - - - - fernandezpablo85 - Pablo Fernandez - fernandezpablo85@gmail.com - -3 - - - - - - MIT - http://github.com/fernandezpablo85/scribe-java/blob/master/LICENSE.txt - - - - - scm:http://github.com/fernandezpablo85/scribe-java.git - scm:http://github.com/fernandezpablo85/scribe-java.git - http://github.com/fernandezpablo85/scribe-java.git - - - - - junit - junit - 4.8.1 - test - - - commons-codec - commons-codec - 1.4 - compile - true - - - - - - maven-compiler-plugin - 3.0 - - 1.5 - 1.5 - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.4 - - - sign-artifacts - verify - - sign - - - - - - org.codehaus.mojo - findbugs-maven-plugin - 2.5.2 - - - failing-on-high - compile - - check - - - Low - - - - - - - diff --git a/src/apis/examples/AWeberExample.java b/src/apis/examples/AWeberExample.java new file mode 100644 index 000000000..667efca0b --- /dev/null +++ b/src/apis/examples/AWeberExample.java @@ -0,0 +1,62 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public 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/"; + + private static final String CONSUMER_KEY = ""; + private static final String CONSUMER_SECRET = ""; + + public static void main(final String[] args) { + final OAuthService service = new ServiceBuilder().provider(AWeberApi.class) + .apiKey(CONSUMER_KEY).apiSecret(CONSUMER_SECRET).build(); + + final Scanner in = new Scanner(System.in); + + System.out.println("=== AWeber's OAuth Workflow ==="); + System.out.println(); + + // Obtain the Request Token + System.out.println("Fetching the Request Token..."); + final 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(">>"); + 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 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, ACCOUNT_RESOURCE_URL); + 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.getBody()); + + System.out.println(); + System.out + .println("Thats it man! Go and build something awesome with AWeber and Scribe! :)"); + } + +} \ No newline at end of file diff --git a/src/apis/examples/DiggExample.java b/src/apis/examples/DiggExample.java new file mode 100644 index 000000000..63a70f09d --- /dev/null +++ b/src/apis/examples/DiggExample.java @@ -0,0 +1,65 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public 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(final String[] args) { + // Replace these with your own api key and secret + final String apiKey = "myKey"; + final String apiSecret = "mySecret"; + final OAuthService service = new ServiceBuilder().provider(DiggApi.class).apiKey(apiKey) + .apiSecret(apiSecret).build(); + 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 Token requestToken = service.getRequestToken(); + System.out.println("Got the Request Token!"); + System.out.println(); + + // 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 Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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 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..."); + 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(); + 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/apis/examples/FacebookExample.java b/src/apis/examples/FacebookExample.java new file mode 100644 index 000000000..4f28362e5 --- /dev/null +++ b/src/apis/examples/FacebookExample.java @@ -0,0 +1,60 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class FacebookExample { + private static final String NETWORK_NAME = "Facebook"; + private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/me"; + private static final Token EMPTY_TOKEN = null; + + public static void main(final String[] args) { + // Replace these with your own api key and secret + final String apiKey = "your_app_id"; + final String apiSecret = "your_api_secret"; + final OAuthService service = new ServiceBuilder().provider(FacebookApi.class) + .apiKey(apiKey).apiSecret(apiSecret) + .callback("http://www.example.com/oauth_callback/").build(); + 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(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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 Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + 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 Scribe! :)"); + + } +} \ No newline at end of file diff --git a/src/apis/examples/FlickrExample.java b/src/apis/examples/FlickrExample.java new file mode 100644 index 000000000..232d1f67c --- /dev/null +++ b/src/apis/examples/FlickrExample.java @@ -0,0 +1,59 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class FlickrExample { + private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/"; + + public static void main(final String[] args) { + // Replace these with your own api key and secret + final String apiKey = "your_app_id"; + final String apiSecret = "your_api_secret"; + final OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey) + .apiSecret(apiSecret).build(); + 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 Token requestToken = service.getRequestToken(); + System.out.println("Got the Request Token!"); + System.out.println(); + + System.out.println("Now go and authorize Scribe here:"); + final String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println(authorizationUrl + "&perms=read"); + 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 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..."); + 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(); + 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/apis/examples/Foursquare2Example.java b/src/apis/examples/Foursquare2Example.java new file mode 100644 index 000000000..9c3056a90 --- /dev/null +++ b/src/apis/examples/Foursquare2Example.java @@ -0,0 +1,59 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class Foursquare2Example { + private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; + private static final Token EMPTY_TOKEN = null; + + public static void main(final String[] args) { + // Replace these with your own api key and secret + final String apiKey = "FEGFXJUFANVVDHVSNUAMUKTTXCP1AJQD53E33XKJ44YP1S4I"; + final String apiSecret = "AYWKUL5SWPNC0CTQ202QXRUG2NLZYXMRA34ZSDW4AUYBG2RC"; + final OAuthService service = new ServiceBuilder().provider(Foursquare2Api.class) + .apiKey(apiKey).apiSecret(apiSecret).callback("http://localhost:9000/").build(); + final Scanner in = new Scanner(System.in); + + System.out.println("=== Foursquare2's OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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 Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + + accessToken.getToken()); + 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 Scribe! :)"); + + } +} diff --git a/src/apis/examples/FoursquareExample.java b/src/apis/examples/FoursquareExample.java new file mode 100644 index 000000000..65b661a95 --- /dev/null +++ b/src/apis/examples/FoursquareExample.java @@ -0,0 +1,56 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class FoursquareExample { + private static final String PROTECTED_RESOURCE_URL = "http://api.foursquare.com/v1/user"; + + public static void main(final String[] args) { + final OAuthService service = new ServiceBuilder().provider(FoursquareApi.class) + .apiKey("FEGFXJUFANVVDHVSNUAMUKTTXCP1AJQD53E33XKJ44YP1S4I") + .apiSecret("AYWKUL5SWPNC0CTQ202QXRUG2NLZYXMRA34ZSDW4AUYBG2RC").build(); + final 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..."); + final 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(">>"); + 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 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + 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.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/apis/examples/FreelancerExample.java b/src/apis/examples/FreelancerExample.java new file mode 100644 index 000000000..cb522f5c2 --- /dev/null +++ b/src/apis/examples/FreelancerExample.java @@ -0,0 +1,64 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.SignatureType; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class FreelancerExample { + + private static final String NETWORK_NAME = "Freelancer"; + private static final String AUTHORIZE_URL = "http://www.sandbox.freelancer.com/users/api-token/auth.php?oauth_token="; + 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(final String[] args) { + final OAuthService service = new ServiceBuilder().provider(FreelancerApi.Sandbox.class) + .signatureType(SignatureType.QueryString) + .apiKey("7f5a168a0bfdbd15b4a9ea2a969661c731cdea56") + .apiSecret("7bb8961b94873802f1c5344f671a518e087f5785").scope(SCOPE).build(); + 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 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(">>"); + 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 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..."); + 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(); + 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/apis/examples/GoogleExample.java b/src/apis/examples/GoogleExample.java new file mode 100644 index 000000000..f2b7264e0 --- /dev/null +++ b/src/apis/examples/GoogleExample.java @@ -0,0 +1,61 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +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(final String[] args) { + final OAuthService service = new ServiceBuilder().provider(GoogleApi.class) + .apiKey("anonymous").apiSecret("anonymous").scope(SCOPE).build(); + 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 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(">>"); + 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 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..."); + 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(); + 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/apis/examples/ImgUrExample.java b/src/apis/examples/ImgUrExample.java new file mode 100644 index 000000000..5e784cc85 --- /dev/null +++ b/src/apis/examples/ImgUrExample.java @@ -0,0 +1,58 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class ImgUrExample { + private static final String PROTECTED_RESOURCE_URL = "http://api.imgur.com/2/account.json"; + + public static void main(final String[] args) { + // Replace these with your own api key and secret (you'll need an read/write api key) + final String apiKey = "your_app_id"; + final String apiSecret = "your_api_secret"; + final OAuthService service = new ServiceBuilder().provider(ImgUrApi.class).apiKey(apiKey) + .apiSecret(apiSecret).build(); + final Scanner in = new Scanner(System.in); + + System.out.println("=== ImgUr's OAuth Workflow ==="); + System.out.println(); + + // Obtain the Request Token + System.out.println("Fetching the Request Token..."); + final Token requestToken = service.getRequestToken(); + System.out.println("Got the Request Token!"); + System.out.println(); + + System.out.println("Now go and authorize Scribe here:"); + final String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println(authorizationUrl); + 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 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + 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.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with Scribe! :)"); + } +} diff --git a/src/apis/examples/Kaixin20Example.java b/src/apis/examples/Kaixin20Example.java new file mode 100644 index 000000000..cdef9b0b1 --- /dev/null +++ b/src/apis/examples/Kaixin20Example.java @@ -0,0 +1,60 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class Kaixin20Example { + private static final String NETWORK_NAME = "Kaixin"; + private static final String PROTECTED_RESOURCE_URL = "https://api.kaixin001.com/users/me.json"; + private static final Token EMPTY_TOKEN = null; + + public static void main(final String[] args) { + // Replace these with your own api key and secret + final String apiKey = "your api key"; + final String apiSecret = "your api secret"; + final OAuthService service = new ServiceBuilder().provider(KaixinApi20.class) + .apiKey(apiKey).apiSecret(apiSecret).callback("http://your.domain.com/handle") + .build(); + 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(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + final Verifier verifier = new Verifier(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 Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + 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 Scribe! :)"); + + } +} diff --git a/src/apis/examples/LinkedInExample.java b/src/apis/examples/LinkedInExample.java new file mode 100644 index 000000000..3cf2cba5a --- /dev/null +++ b/src/apis/examples/LinkedInExample.java @@ -0,0 +1,57 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class LinkedInExample { + private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)"; + + public static void main(final String[] args) { + final OAuthService service = new ServiceBuilder().provider(LinkedInApi.class) + .apiKey("CiEgwWDkA5BFpNrc0RfGyVuSlOh4tig5kOTZ9q97qcXNrFl7zqk-Ts7DqRGaKDCV") + .apiSecret("dhho4dfoCmiQXrkw4yslork5XWLFnPSuMR-8gscPVjY4jqFFHPYWJKgpFl4uLTM6") + .build(); + final 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..."); + final 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(">>"); + 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 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + 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.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with Scribe! :)"); + } + +} diff --git a/src/apis/examples/LinkedInExampleWithScopes.java b/src/apis/examples/LinkedInExampleWithScopes.java new file mode 100644 index 000000000..70d7113cf --- /dev/null +++ b/src/apis/examples/LinkedInExampleWithScopes.java @@ -0,0 +1,58 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class LinkedInExampleWithScopes { + private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)"; + + public static void main(final String[] args) { + final OAuthService service = new ServiceBuilder() + .provider(LinkedInApi.withScopes("foo", "bar", "baz")) + .apiKey("CiEgwWDkA5BFpNrc0RfGyVuSlOh4tig5kOTZ9q97qcXNrFl7zqk-Ts7DqRGaKDCV") + .apiSecret("dhho4dfoCmiQXrkw4yslork5XWLFnPSuMR-8gscPVjY4jqFFHPYWJKgpFl4uLTM6") + .build(); + final 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..."); + final 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(">>"); + 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 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); + 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.getBody()); + + System.out.println(); + System.out.println("Thats it man! Go and build something awesome with Scribe! :)"); + } + +} diff --git a/src/apis/examples/LiveExample.java b/src/apis/examples/LiveExample.java new file mode 100644 index 000000000..d5683999c --- /dev/null +++ b/src/apis/examples/LiveExample.java @@ -0,0 +1,59 @@ +package org.scribe.examples; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class LiveExample { + private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; + private static final Token EMPTY_TOKEN = null; + + public static void main(final String[] args) { + // Replace these with your own api key and secret + final String apiKey = ""; + final String apiSecret = ""; + final OAuthService service = new ServiceBuilder().provider(LiveApi.class).apiKey(apiKey) + .apiSecret(apiSecret).scope("wl.basic").callback("http://localhost:9000/").build(); + final Scanner in = new Scanner(System.in); + + System.out.println("=== Windows Live's OAuth Workflow ==="); + System.out.println(); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + final String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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 Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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..."); + final OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL + + accessToken.getToken()); + 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 Scribe! :)"); + + } +} diff --git a/src/test/java/org/scribe/examples/LoveFilmExample.java b/src/apis/examples/LoveFilmExample.java similarity index 97% rename from src/test/java/org/scribe/examples/LoveFilmExample.java rename to src/apis/examples/LoveFilmExample.java index 9e800161e..e94057133 100644 --- a/src/test/java/org/scribe/examples/LoveFilmExample.java +++ b/src/apis/examples/LoveFilmExample.java @@ -1,64 +1,64 @@ -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 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 - String apiKey = "your_key"; - String apiSecret = "your_secret"; - OAuthService service = new ServiceBuilder().provider(LoveFilmApi.class).apiKey(apiKey).apiSecret(apiSecret).build(); - 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."); - Token requestToken = service.getRequestToken(); - System.out.println("Got it ... "); - System.out.println(requestToken.getToken()); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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! :)"); - - } -} +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 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 + String apiKey = "your_key"; + String apiSecret = "your_secret"; + OAuthService service = new ServiceBuilder().provider(LoveFilmApi.class).apiKey(apiKey).apiSecret(apiSecret).build(); + 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."); + Token requestToken = service.getRequestToken(); + System.out.println("Got it ... "); + System.out.println(requestToken.getToken()); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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/examples/MeetupExample.java b/src/apis/examples/MeetupExample.java similarity index 97% rename from src/test/java/org/scribe/examples/MeetupExample.java rename to src/apis/examples/MeetupExample.java index 2185b5c27..1331c4588 100644 --- a/src/test/java/org/scribe/examples/MeetupExample.java +++ b/src/apis/examples/MeetupExample.java @@ -1,62 +1,62 @@ -package org.scribe.examples; - -import java.util.Scanner; - -import org.scribe.builder.ServiceBuilder; -import org.scribe.builder.api.MeetupApi; -import org.scribe.model.OAuthRequest; -import org.scribe.model.Response; -import org.scribe.model.Token; -import org.scribe.model.Verb; -import org.scribe.model.Verifier; -import org.scribe.oauth.OAuthService; - -public class MeetupExample -{ - private static final String PROTECTED_RESOURCE_URL = "http://api.meetup.com/2/member/self"; - - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(MeetupApi.class) - .apiKey("j1khkp0dus323ftve0sdcv6ffe") - .apiSecret("6s6gt6q59gvfjtsvgcmht62gq4") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Meetup'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! :)"); - } -} +package org.scribe.examples; + +import java.util.Scanner; + +import org.scribe.builder.ServiceBuilder; +import org.scribe.builder.api.MeetupApi; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.model.Verifier; +import org.scribe.oauth.OAuthService; + +public class MeetupExample +{ + private static final String PROTECTED_RESOURCE_URL = "http://api.meetup.com/2/member/self"; + + public static void main(String[] args) + { + OAuthService service = new ServiceBuilder() + .provider(MeetupApi.class) + .apiKey("j1khkp0dus323ftve0sdcv6ffe") + .apiSecret("6s6gt6q59gvfjtsvgcmht62gq4") + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== Meetup'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/NeteaseWeiboExample.java b/src/apis/examples/NeteaseWeiboExample.java similarity index 97% rename from src/test/java/org/scribe/examples/NeteaseWeiboExample.java rename to src/apis/examples/NeteaseWeiboExample.java index e65335e76..63a64ab91 100644 --- a/src/test/java/org/scribe/examples/NeteaseWeiboExample.java +++ b/src/apis/examples/NeteaseWeiboExample.java @@ -1,68 +1,68 @@ -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 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) - { - // Replace these with your own api key and secret - String apiKey = "your key"; - String apiSecret = "your secret"; - OAuthService service = new ServiceBuilder() - .provider(NeteaseWeibooApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .build(); - 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."); - Token requestToken = service.getRequestToken(); - System.out.println("Got it ... "); - System.out.println(requestToken.getToken()); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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! :)"); - } -} +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 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) + { + // Replace these with your own api key and secret + String apiKey = "your key"; + String apiSecret = "your secret"; + OAuthService service = new ServiceBuilder() + .provider(NeteaseWeibooApi.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .build(); + 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."); + Token requestToken = service.getRequestToken(); + System.out.println("Got it ... "); + System.out.println(requestToken.getToken()); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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/examples/Px500Example.java b/src/apis/examples/Px500Example.java similarity index 97% rename from src/test/java/org/scribe/examples/Px500Example.java rename to src/apis/examples/Px500Example.java index cdbe44997..8e7710764 100644 --- a/src/test/java/org/scribe/examples/Px500Example.java +++ b/src/apis/examples/Px500Example.java @@ -1,60 +1,60 @@ -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 Px500Example -{ - private static final String PROTECTED_RESOURCE_URL = "https://api.500px.com/v1/"; - - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(Px500Api.class) - .apiKey("your-api-key") - .apiSecret("your-api-secret") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== 500Px'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! :)"); - - } - +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 Px500Example +{ + private static final String PROTECTED_RESOURCE_URL = "https://api.500px.com/v1/"; + + public static void main(String[] args) + { + OAuthService service = new ServiceBuilder() + .provider(Px500Api.class) + .apiKey("your-api-key") + .apiSecret("your-api-secret") + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== 500Px'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/RenrenExample.java b/src/apis/examples/RenrenExample.java similarity index 97% rename from src/test/java/org/scribe/examples/RenrenExample.java rename to src/apis/examples/RenrenExample.java index ae13375b8..e45233687 100644 --- a/src/test/java/org/scribe/examples/RenrenExample.java +++ b/src/apis/examples/RenrenExample.java @@ -1,108 +1,108 @@ -package org.scribe.examples; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; -import java.nio.charset.*; -import java.security.*; -import java.util.*; - -public class RenrenExample -{ - private static final String NETWORK_NAME = "Renren"; - private static final String PROTECTED_RESOURCE_URL = "http://api.renren.com/restserver.do"; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "your api key"; - String apiSecret = "your api secret"; - OAuthService service = new ServiceBuilder() - .provider(RenrenApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .scope("status_update publish_feed") - .callback("http://your.doman.com/oauth/renren") - .build(); - 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..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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.POST, PROTECTED_RESOURCE_URL); - Map parameters = new HashMap(); - parameters.put("method", "users.getInfo"); - parameters.put("format", "json"); - parameters.put("v", "1.0"); - - List sigString = new ArrayList(parameters.size() + 1); - for (Map.Entry entry : parameters.entrySet()) - { - request.addQuerystringParameter(entry.getKey(), entry.getValue()); - sigString.add(String.format("%s=%s", entry.getKey(), entry.getValue())); - } - sigString.add(String.format("%s=%s", OAuthConstants.ACCESS_TOKEN, accessToken.getToken())); - Collections.sort(sigString); - StringBuilder b = new StringBuilder(); - for (String param : sigString) - { - b.append(param); - } - b.append(apiSecret); - System.out.println("Sig string: " + b.toString()); - request.addQuerystringParameter("sig", md5(b.toString())); - 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! :)"); - - } - - public static String md5(String orgString) - { - try - { - java.security.MessageDigest md = MessageDigest.getInstance("MD5"); - byte[] array = md.digest(orgString.getBytes(Charset.forName("UTF-8"))); - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < array.length; ++i) - { - sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); - } - return sb.toString(); - } - catch (NoSuchAlgorithmException e) - { - e.printStackTrace(); - } - return null; - } - -} +package org.scribe.examples; + +import org.scribe.builder.*; +import org.scribe.builder.api.*; +import org.scribe.model.*; +import org.scribe.oauth.*; +import java.nio.charset.*; +import java.security.*; +import java.util.*; + +public class RenrenExample +{ + private static final String NETWORK_NAME = "Renren"; + private static final String PROTECTED_RESOURCE_URL = "http://api.renren.com/restserver.do"; + private static final Token EMPTY_TOKEN = null; + + public static void main(String[] args) + { + // Replace these with your own api key and secret + String apiKey = "your api key"; + String apiSecret = "your api secret"; + OAuthService service = new ServiceBuilder() + .provider(RenrenApi.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .scope("status_update publish_feed") + .callback("http://your.doman.com/oauth/renren") + .build(); + 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..."); + String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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.POST, PROTECTED_RESOURCE_URL); + Map parameters = new HashMap(); + parameters.put("method", "users.getInfo"); + parameters.put("format", "json"); + parameters.put("v", "1.0"); + + List sigString = new ArrayList(parameters.size() + 1); + for (Map.Entry entry : parameters.entrySet()) + { + request.addQuerystringParameter(entry.getKey(), entry.getValue()); + sigString.add(String.format("%s=%s", entry.getKey(), entry.getValue())); + } + sigString.add(String.format("%s=%s", OAuthConstants.ACCESS_TOKEN, accessToken.getToken())); + Collections.sort(sigString); + StringBuilder b = new StringBuilder(); + for (String param : sigString) + { + b.append(param); + } + b.append(apiSecret); + System.out.println("Sig string: " + b.toString()); + request.addQuerystringParameter("sig", md5(b.toString())); + 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! :)"); + + } + + public static String md5(String orgString) + { + try + { + java.security.MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] array = md.digest(orgString.getBytes(Charset.forName("UTF-8"))); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < array.length; ++i) + { + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString(); + } + catch (NoSuchAlgorithmException e) + { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/test/java/org/scribe/examples/SinaWeibo2Example.java b/src/apis/examples/SinaWeibo2Example.java similarity index 97% rename from src/test/java/org/scribe/examples/SinaWeibo2Example.java rename to src/apis/examples/SinaWeibo2Example.java index 89b14e117..01f926d73 100644 --- a/src/test/java/org/scribe/examples/SinaWeibo2Example.java +++ b/src/apis/examples/SinaWeibo2Example.java @@ -1,63 +1,63 @@ -package org.scribe.examples; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; -import java.util.*; - -public 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 static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "your_api_key"; - String apiSecret = "your_api_secret"; - OAuthService service = new ServiceBuilder() - .provider(SinaWeiboApi20.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .callback("http://www.dajie.com/oauth/sina") - .build(); - 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..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - Verifier verifier = new Verifier(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..."); - Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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! :)"); - - } -} +package org.scribe.examples; + +import org.scribe.builder.*; +import org.scribe.builder.api.*; +import org.scribe.model.*; +import org.scribe.oauth.*; +import java.util.*; + +public 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 static final Token EMPTY_TOKEN = null; + + public static void main(String[] args) + { + // Replace these with your own api key and secret + String apiKey = "your_api_key"; + String apiSecret = "your_api_secret"; + OAuthService service = new ServiceBuilder() + .provider(SinaWeiboApi20.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .callback("http://www.dajie.com/oauth/sina") + .build(); + 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..."); + String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code here"); + System.out.print(">>"); + Verifier verifier = new Verifier(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..."); + Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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/examples/SinaWeiboExample.java b/src/apis/examples/SinaWeiboExample.java similarity index 97% rename from src/test/java/org/scribe/examples/SinaWeiboExample.java rename to src/apis/examples/SinaWeiboExample.java index 2dc4b7c04..6b9401635 100644 --- a/src/test/java/org/scribe/examples/SinaWeiboExample.java +++ b/src/apis/examples/SinaWeiboExample.java @@ -1,68 +1,68 @@ -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 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) - { - // Replace these with your own api key and secret - String apiKey = "your key"; - String apiSecret = "your secret"; - OAuthService service = new ServiceBuilder() - .provider(SinaWeiboApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .build(); - 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."); - Token requestToken = service.getRequestToken(); - System.out.println("Got it ... "); - System.out.println(requestToken.getToken()); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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! :)"); - } -} +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 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) + { + // Replace these with your own api key and secret + String apiKey = "your key"; + String apiSecret = "your secret"; + OAuthService service = new ServiceBuilder() + .provider(SinaWeiboApi.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .build(); + 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."); + Token requestToken = service.getRequestToken(); + System.out.println("Got it ... "); + System.out.println(requestToken.getToken()); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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/examples/SkyrockExample.java b/src/apis/examples/SkyrockExample.java similarity index 97% rename from src/test/java/org/scribe/examples/SkyrockExample.java rename to src/apis/examples/SkyrockExample.java index 422d067e5..313fbd63f 100644 --- a/src/test/java/org/scribe/examples/SkyrockExample.java +++ b/src/apis/examples/SkyrockExample.java @@ -1,61 +1,61 @@ -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 SkyrockExample -{ - private static final String PROTECTED_RESOURCE_URL = "https://api.skyrock.com/v2/user/get.json"; - - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(SkyrockApi.class) - .apiKey("your-api-key") - .apiSecret("your-api-secret") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Skyrock'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! :)"); - - } - -} +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 SkyrockExample +{ + private static final String PROTECTED_RESOURCE_URL = "https://api.skyrock.com/v2/user/get.json"; + + public static void main(String[] args) + { + OAuthService service = new ServiceBuilder() + .provider(SkyrockApi.class) + .apiKey("your-api-key") + .apiSecret("your-api-secret") + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== Skyrock'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/examples/SohuWeiboExample.java b/src/apis/examples/SohuWeiboExample.java similarity index 97% rename from src/test/java/org/scribe/examples/SohuWeiboExample.java rename to src/apis/examples/SohuWeiboExample.java index 49dd9fb72..248d0d189 100644 --- a/src/test/java/org/scribe/examples/SohuWeiboExample.java +++ b/src/apis/examples/SohuWeiboExample.java @@ -1,68 +1,68 @@ -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 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) - { - // Replace these with your own api key and secret - String apiKey = "your_key"; - String apiSecret = "your_secret"; - OAuthService service = new ServiceBuilder() - .provider(SohuWeiboApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .build(); - 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."); - Token requestToken = service.getRequestToken(); - System.out.println("Got it ... "); - System.out.println(requestToken.getToken()); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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! :)"); - } -} +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 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) + { + // Replace these with your own api key and secret + String apiKey = "your_key"; + String apiSecret = "your_secret"; + OAuthService service = new ServiceBuilder() + .provider(SohuWeiboApi.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .build(); + 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."); + Token requestToken = service.getRequestToken(); + System.out.println("Got it ... "); + System.out.println(requestToken.getToken()); + + // Obtain the Authorization URL + System.out.println("Fetching the Authorization URL..."); + String authorizationUrl = service.getAuthorizationUrl(requestToken); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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/examples/TrelloExample.java b/src/apis/examples/TrelloExample.java similarity index 97% rename from src/test/java/org/scribe/examples/TrelloExample.java rename to src/apis/examples/TrelloExample.java index 9888f5e90..5f82676fa 100644 --- a/src/test/java/org/scribe/examples/TrelloExample.java +++ b/src/apis/examples/TrelloExample.java @@ -1,60 +1,60 @@ -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 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"; - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(TrelloApi.class) - .apiKey(API_KEY) - .apiSecret(API_SECRET) - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Trello'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! :)"); - } - -} +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 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"; + public static void main(String[] args) + { + OAuthService service = new ServiceBuilder() + .provider(TrelloApi.class) + .apiKey(API_KEY) + .apiSecret(API_SECRET) + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== Trello'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/apis/examples/TwitterExample.java similarity index 97% rename from src/test/java/org/scribe/examples/TwitterExample.java rename to src/apis/examples/TwitterExample.java index b68aee087..b93ecbad3 100644 --- a/src/test/java/org/scribe/examples/TwitterExample.java +++ b/src/apis/examples/TwitterExample.java @@ -1,61 +1,61 @@ -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 TwitterExample -{ - private static final String PROTECTED_RESOURCE_URL = "http://api.twitter.com/1.1/account/verify_credentials.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") - .apiSecret("SCCAdUUc6LXxiazxH3N0QfpNUvlUy84mZ2XZKiv39s") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Twitter'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.POST, PROTECTED_RESOURCE_URL); - request.addBodyParameter("status", "this is sparta! *"); - 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! :)"); - } - +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 TwitterExample +{ + private static final String PROTECTED_RESOURCE_URL = "http://api.twitter.com/1.1/account/verify_credentials.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") + .apiSecret("SCCAdUUc6LXxiazxH3N0QfpNUvlUy84mZ2XZKiv39s") + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== Twitter'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.POST, PROTECTED_RESOURCE_URL); + request.addBodyParameter("status", "this is sparta! *"); + 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/ViadeoExample.java b/src/apis/examples/ViadeoExample.java similarity index 97% rename from src/test/java/org/scribe/examples/ViadeoExample.java rename to src/apis/examples/ViadeoExample.java index ebb438532..0189b9594 100644 --- a/src/test/java/org/scribe/examples/ViadeoExample.java +++ b/src/apis/examples/ViadeoExample.java @@ -1,64 +1,64 @@ -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 ViadeoExample -{ - private static final String NETWORK_NAME = "Viadeo"; - private static final String PROTECTED_RESOURCE_URL = "https://api.viadeo.com/me?user_detail=full"; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "your_app_id"; - String apiSecret = "your_api_secret"; - OAuthService service = new ServiceBuilder() - .provider(ViadeoApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .callback("http://www.example.com/oauth_callback/") - .build(); - 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..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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! :)"); - - } -} +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 ViadeoExample +{ + private static final String NETWORK_NAME = "Viadeo"; + private static final String PROTECTED_RESOURCE_URL = "https://api.viadeo.com/me?user_detail=full"; + private static final Token EMPTY_TOKEN = null; + + public static void main(String[] args) + { + // Replace these with your own api key and secret + String apiKey = "your_app_id"; + String apiSecret = "your_api_secret"; + OAuthService service = new ServiceBuilder() + .provider(ViadeoApi.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .callback("http://www.example.com/oauth_callback/") + .build(); + 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..."); + String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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/examples/VkontakteExample.java b/src/apis/examples/VkontakteExample.java similarity index 97% rename from src/test/java/org/scribe/examples/VkontakteExample.java rename to src/apis/examples/VkontakteExample.java index f9e4134e7..2d0d51efe 100644 --- a/src/test/java/org/scribe/examples/VkontakteExample.java +++ b/src/apis/examples/VkontakteExample.java @@ -1,68 +1,68 @@ -package org.scribe.examples; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -import java.util.*; - -/** - * @author Boris G. Tsirkin - * @since 20.4.2011 - */ -public class VkontakteExample -{ - private static final String NETWORK_NAME = "Vkontakte.ru"; - private static final String PROTECTED_RESOURCE_URL = "https://api.vkontakte.ru/method/friends.get"; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - final String clientId = "your app id"; - final String apiSecret = "your api secret"; - OAuthService service = new ServiceBuilder() - .provider(VkontakteApi.class) - .apiKey(clientId) - .apiSecret(apiSecret) - .scope("friends,wall,offline") // replace with desired scope - .callback("http://your.site.com/callback") - .build(); - 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..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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! :)"); - } -} +package org.scribe.examples; + +import org.scribe.builder.*; +import org.scribe.builder.api.*; +import org.scribe.model.*; +import org.scribe.oauth.*; + +import java.util.*; + +/** + * @author Boris G. Tsirkin + * @since 20.4.2011 + */ +public class VkontakteExample +{ + private static final String NETWORK_NAME = "Vkontakte.ru"; + private static final String PROTECTED_RESOURCE_URL = "https://api.vkontakte.ru/method/friends.get"; + private static final Token EMPTY_TOKEN = null; + + public static void main(String[] args) + { + // Replace these with your own api key and secret + final String clientId = "your app id"; + final String apiSecret = "your api secret"; + OAuthService service = new ServiceBuilder() + .provider(VkontakteApi.class) + .apiKey(clientId) + .apiSecret(apiSecret) + .scope("friends,wall,offline") // replace with desired scope + .callback("http://your.site.com/callback") + .build(); + 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..."); + String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); + System.out.println("Got the Authorization URL!"); + System.out.println("Now go and authorize Scribe here:"); + System.out.println(authorizationUrl); + System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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/examples/XingExample.java b/src/apis/examples/XingExample.java similarity index 97% rename from src/test/java/org/scribe/examples/XingExample.java rename to src/apis/examples/XingExample.java index 93d7080c4..bea0c3b6a 100755 --- a/src/test/java/org/scribe/examples/XingExample.java +++ b/src/apis/examples/XingExample.java @@ -1,59 +1,59 @@ -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 XingExample -{ - private static final String PROTECTED_RESOURCE_URL = "https://api.xing.com/v1/users/me"; - - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(XingApi.class) - .apiKey("097ccfd3ef25a1cb6d75") - .apiSecret("e43364b2afd5d92f2ec28951a75bd8075f9cc221") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Xing'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! :)"); - } - -} +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 XingExample +{ + private static final String PROTECTED_RESOURCE_URL = "https://api.xing.com/v1/users/me"; + + public static void main(String[] args) + { + OAuthService service = new ServiceBuilder() + .provider(XingApi.class) + .apiKey("097ccfd3ef25a1cb6d75") + .apiSecret("e43364b2afd5d92f2ec28951a75bd8075f9cc221") + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== Xing'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/YahooExample.java b/src/apis/examples/YahooExample.java similarity index 97% rename from src/test/java/org/scribe/examples/YahooExample.java rename to src/apis/examples/YahooExample.java index 2e3f336f0..95e80c6da 100644 --- a/src/test/java/org/scribe/examples/YahooExample.java +++ b/src/apis/examples/YahooExample.java @@ -1,60 +1,60 @@ -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! :)"); - - } -} +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/apis/org/scribe/builder/api/AWeberApi.java b/src/apis/org/scribe/builder/api/AWeberApi.java new file mode 100644 index 000000000..28c4c093c --- /dev/null +++ b/src/apis/org/scribe/builder/api/AWeberApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class AWeberApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://auth.aweber.com/1.0/oauth/authorize?oauth_token="; + private static final String REQUEST_TOKEN_ENDPOINT = "https://auth.aweber.com/1.0/oauth/request_token"; + private static final String ACCESS_TOKEN_ENDPOINT = "https://auth.aweber.com/1.0/oauth/access_token"; + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_ENDPOINT; + } + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_ENDPOINT; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/DiggApi.java b/src/apis/org/scribe/builder/api/DiggApi.java new file mode 100644 index 000000000..03486f5c2 --- /dev/null +++ b/src/apis/org/scribe/builder/api/DiggApi.java @@ -0,0 +1,22 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class DiggApi extends DefaultApi10a { + + private static final String AUTHORIZE_URL = "http://digg.com/oauth/authorize?oauth_token="; + private static final String BASE_URL = "http://services.digg.com/oauth/"; + + public String getRequestTokenEndpoint() { + return BASE_URL + "request_token"; + } + + public String getAccessTokenEndpoint() { + return BASE_URL + "access_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + +} diff --git a/src/main/java/org/scribe/builder/api/DropBoxApi.java b/src/apis/org/scribe/builder/api/DropBoxApi.java similarity index 93% rename from src/main/java/org/scribe/builder/api/DropBoxApi.java rename to src/apis/org/scribe/builder/api/DropBoxApi.java index 86f4a71a1..641278857 100644 --- a/src/main/java/org/scribe/builder/api/DropBoxApi.java +++ b/src/apis/org/scribe/builder/api/DropBoxApi.java @@ -4,19 +4,19 @@ public class DropBoxApi extends DefaultApi10a { - @Override + public String getAccessTokenEndpoint() { return "https://api.dropbox.com/1/oauth/access_token"; } - @Override + public String getAuthorizationUrl(Token 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/src/apis/org/scribe/builder/api/EvernoteApi.java b/src/apis/org/scribe/builder/api/EvernoteApi.java new file mode 100644 index 000000000..3ac9b707b --- /dev/null +++ b/src/apis/org/scribe/builder/api/EvernoteApi.java @@ -0,0 +1,35 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class EvernoteApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://www.evernote.com/OAuth.action?oauth_token="; + + public String getRequestTokenEndpoint() { + return "https://www.evernote.com/oauth"; + } + + public String getAccessTokenEndpoint() { + return "https://www.evernote.com/oauth"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public static class Sandbox extends EvernoteApi { + private static final String SANDBOX_URL = "https://sandbox.evernote.com"; + + public String getRequestTokenEndpoint() { + return SANDBOX_URL + "/oauth"; + } + + public String getAccessTokenEndpoint() { + return SANDBOX_URL + "/oauth"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return SANDBOX_URL + "/OAuth.action?oauth_token=" + requestToken.getToken(); + } + } +} diff --git a/src/apis/org/scribe/builder/api/FacebookApi.java b/src/apis/org/scribe/builder/api/FacebookApi.java new file mode 100644 index 000000000..afe17fed4 --- /dev/null +++ b/src/apis/org/scribe/builder/api/FacebookApi.java @@ -0,0 +1,29 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.model.OAuthConfig; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; + +public class FacebookApi extends DefaultApi20 { + private static final String AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?client_id=%clientId%&redirect_uri=%redirectUri%"; + private static final String SCOPED_PARAMETER = "&scope="; + + public String getAccessTokenEndpoint() { + return "https://graph.facebook.com/oauth/access_token"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + Preconditions.checkValidUrl(config.getCallback(), + "Must provide a valid url as callback. Facebook does not support OOB"); + + // Append scope if present + String result = StringUtils.replace(AUTHORIZE_URL, "%clientId%", config.getApiKey()); + result = StringUtils.replace(result, "redirectUri", + OAuthEncoder.encode(config.getCallback())); + if (config.hasScope()) { + result = result + SCOPED_PARAMETER + config.getScope(); + } + return result; + } +} diff --git a/src/main/java/org/scribe/builder/api/FlickrApi.java b/src/apis/org/scribe/builder/api/FlickrApi.java similarity index 95% rename from src/main/java/org/scribe/builder/api/FlickrApi.java rename to src/apis/org/scribe/builder/api/FlickrApi.java index a63043610..f606d2fbe 100644 --- a/src/main/java/org/scribe/builder/api/FlickrApi.java +++ b/src/apis/org/scribe/builder/api/FlickrApi.java @@ -14,7 +14,7 @@ public class FlickrApi extends DefaultApi10a /** * {@inheritDoc} */ - @Override + public String getAccessTokenEndpoint() { return "http://www.flickr.com/services/oauth/access_token"; @@ -23,7 +23,7 @@ public String getAccessTokenEndpoint() /** * {@inheritDoc} */ - @Override + public String getAuthorizationUrl(Token requestToken) { return "http://www.flickr.com/services/oauth/authorize?oauth_token=" + requestToken.getToken(); @@ -32,7 +32,7 @@ public String getAuthorizationUrl(Token requestToken) /** * {@inheritDoc} */ - @Override + public String getRequestTokenEndpoint() { return "http://www.flickr.com/services/oauth/request_token"; diff --git a/src/apis/org/scribe/builder/api/Foursquare2Api.java b/src/apis/org/scribe/builder/api/Foursquare2Api.java new file mode 100644 index 000000000..63f2cb0b7 --- /dev/null +++ b/src/apis/org/scribe/builder/api/Foursquare2Api.java @@ -0,0 +1,28 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; + +public class Foursquare2Api extends DefaultApi20 { + private static final String AUTHORIZE_URL = "https://foursquare.com/oauth2/authenticate?client_id=%clientId%&response_type=code&redirect_uri=%redirectUri%"; + + public String getAccessTokenEndpoint() { + return "https://foursquare.com/oauth2/access_token?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + Preconditions.checkValidUrl(config.getCallback(), + "Must provide a valid url as callback. Foursquare2 does not support OOB"); + final String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "redirectUri", OAuthEncoder.encode(config.getCallback())); + return result; + } + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } +} diff --git a/src/apis/org/scribe/builder/api/FoursquareApi.java b/src/apis/org/scribe/builder/api/FoursquareApi.java new file mode 100644 index 000000000..c27ffc33b --- /dev/null +++ b/src/apis/org/scribe/builder/api/FoursquareApi.java @@ -0,0 +1,19 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class FoursquareApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "http://foursquare.com/oauth/authorize?oauth_token=%s"; + + public String getAccessTokenEndpoint() { + return "http://foursquare.com/oauth/access_token"; + } + + public String getRequestTokenEndpoint() { + return "http://foursquare.com/oauth/request_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/FreelancerApi.java b/src/apis/org/scribe/builder/api/FreelancerApi.java new file mode 100644 index 000000000..4c37316d4 --- /dev/null +++ b/src/apis/org/scribe/builder/api/FreelancerApi.java @@ -0,0 +1,44 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.model.Verb; + +public class FreelancerApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "http://www.freelancer.com/users/api-token/auth.php?oauth_token="; + + public String getAccessTokenEndpoint() { + return "http://api.freelancer.com/RequestAccessToken/requestAccessToken.xml?"; + } + + public String getRequestTokenEndpoint() { + return "http://api.freelancer.com/RequestRequestToken/requestRequestToken.xml"; + } + + public Verb getAccessTokenVerb() { + return Verb.GET; + } + + public Verb getRequestTokenVerb() { + return Verb.GET; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public static class Sandbox extends FreelancerApi { + private static final String SANDBOX_AUTHORIZATION_URL = "http://www.sandbox.freelancer.com/users/api-token/auth.php"; + + public String getRequestTokenEndpoint() { + return "http://api.sandbox.freelancer.com/RequestRequestToken/requestRequestToken.xml"; + } + + public String getAccessTokenEndpoint() { + return "http://api.sandbox.freelancer.com/RequestAccessToken/requestAccessToken.xml?"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return SANDBOX_AUTHORIZATION_URL + "?oauth_token=" + requestToken.getToken(); + } + } +} diff --git a/src/apis/org/scribe/builder/api/GetGlueApi.java b/src/apis/org/scribe/builder/api/GetGlueApi.java new file mode 100644 index 000000000..07fbb7784 --- /dev/null +++ b/src/apis/org/scribe/builder/api/GetGlueApi.java @@ -0,0 +1,22 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class GetGlueApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "http://getglue.com/oauth/authorize?oauth_token="; + 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"; + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_RESOURCE; + } + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_RESOURCE; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + +} diff --git a/src/apis/org/scribe/builder/api/GoogleApi.java b/src/apis/org/scribe/builder/api/GoogleApi.java new file mode 100644 index 000000000..703d5ae7e --- /dev/null +++ b/src/apis/org/scribe/builder/api/GoogleApi.java @@ -0,0 +1,28 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.model.Verb; + +public class GoogleApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token="; + + public String getAccessTokenEndpoint() { + return "https://www.google.com/accounts/OAuthGetAccessToken"; + } + + public String getRequestTokenEndpoint() { + return "https://www.google.com/accounts/OAuthGetRequestToken"; + } + + public Verb getAccessTokenVerb() { + return Verb.GET; + } + + public Verb getRequestTokenVerb() { + return Verb.GET; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/ImgUrApi.java b/src/apis/org/scribe/builder/api/ImgUrApi.java new file mode 100644 index 000000000..b039262d2 --- /dev/null +++ b/src/apis/org/scribe/builder/api/ImgUrApi.java @@ -0,0 +1,24 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +/** + * OAuth API for ImgUr + * + * @author David Wursteisen + * @see ImgUr API + */ +public class ImgUrApi extends DefaultApi10a { + + public String getRequestTokenEndpoint() { + return "https://api.imgur.com/oauth/request_token"; + } + + public String getAccessTokenEndpoint() { + return "https://api.imgur.com/oauth/access_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return "https://api.imgur.com/oauth/authorize?oauth_token=" + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/KaixinApi.java b/src/apis/org/scribe/builder/api/KaixinApi.java new file mode 100644 index 000000000..2e90af598 --- /dev/null +++ b/src/apis/org/scribe/builder/api/KaixinApi.java @@ -0,0 +1,30 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.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="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public Verb getRequestTokenVerb() { + return Verb.GET; + } + + public Verb getAccessTokenVerb() { + return Verb.GET; + } +} diff --git a/src/apis/org/scribe/builder/api/KaixinApi20.java b/src/apis/org/scribe/builder/api/KaixinApi20.java new file mode 100644 index 000000000..5f2d0aab4 --- /dev/null +++ b/src/apis/org/scribe/builder/api/KaixinApi20.java @@ -0,0 +1,34 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.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=%clientId%&redirect_uri=%redirectUri%&response_type=code"; + private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope="; + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } + + public String getAccessTokenEndpoint() { + return "https://api.kaixin001.com/oauth2/access_token?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "%redirectUri%", OAuthEncoder.encode(config.getCallback())); + // Append scope if present + if (config.hasScope()) { + result = SCOPED_AUTHORIZE_URL + OAuthEncoder.encode(config.getScope()); + } + return result; + } +} diff --git a/src/apis/org/scribe/builder/api/LinkedInApi.java b/src/apis/org/scribe/builder/api/LinkedInApi.java new file mode 100644 index 000000000..4e59dcd62 --- /dev/null +++ b/src/apis/org/scribe/builder/api/LinkedInApi.java @@ -0,0 +1,53 @@ +package org.scribe.builder.api; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.scribe.model.Token; + +public class LinkedInApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://api.linkedin.com/uas/oauth/authenticate?oauth_token="; + private static final String REQUEST_TOKEN_URL = "https://api.linkedin.com/uas/oauth/requestToken"; + + private final Set/**/scopes; + + public LinkedInApi() { + scopes = new HashSet();//.emptySet(); + } + + public LinkedInApi(final Set/**/scopes) { + this.scopes = Collections.unmodifiableSet(scopes); + } + + public String getAccessTokenEndpoint() { + return "https://api.linkedin.com/uas/oauth/accessToken"; + } + + public String getRequestTokenEndpoint() { + return scopes.isEmpty() ? REQUEST_TOKEN_URL : REQUEST_TOKEN_URL + "?scope=" + + scopesAsString(); + } + + private String scopesAsString() { + final StringBuilder builder = new StringBuilder(); + final Iterator i = scopes.iterator(); + while (i.hasNext()) { + final String scope = (String) i.next(); + builder.append("+" + scope); + } + return builder.substring(1); + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public static LinkedInApi withScopes(final String[] scopes) { + final Set/**/scopeSet = new HashSet/**/(Arrays.asList(scopes)); + return new LinkedInApi(scopeSet); + } + +} diff --git a/src/apis/org/scribe/builder/api/LiveApi.java b/src/apis/org/scribe/builder/api/LiveApi.java new file mode 100644 index 000000000..51d784c21 --- /dev/null +++ b/src/apis/org/scribe/builder/api/LiveApi.java @@ -0,0 +1,31 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.utils.OAuthEncoder; + +public class LiveApi extends DefaultApi20 { + + private static final String AUTHORIZE_URL = "https://oauth.live.com/authorize?client_id=%clientId%&redirect_uri=%responseUri%&response_type=code"; + private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope="; + + public String getAccessTokenEndpoint() { + return "https://oauth.live.com/token?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "%redirectUri%", OAuthEncoder.encode(config.getCallback())); + // Append scope if present + if (config.hasScope()) { + result = SCOPED_AUTHORIZE_URL + OAuthEncoder.encode(config.getScope()); + } + return result; + } + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } +} \ No newline at end of file diff --git a/src/apis/org/scribe/builder/api/LoveFilmApi.java b/src/apis/org/scribe/builder/api/LoveFilmApi.java new file mode 100644 index 000000000..fa4cb5135 --- /dev/null +++ b/src/apis/org/scribe/builder/api/LoveFilmApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +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="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/MeetupApi.java b/src/apis/org/scribe/builder/api/MeetupApi.java new file mode 100644 index 000000000..c97fa5e0e --- /dev/null +++ b/src/apis/org/scribe/builder/api/MeetupApi.java @@ -0,0 +1,23 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +/** + * OAuth access to the Meetup.com API. + * For more information visit http://www.meetup.com/api + */ +public class MeetupApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "http://www.meetup.com/authenticate?oauth_token="; + + public String getRequestTokenEndpoint() { + return "http://api.meetup.com/oauth/request/"; + } + + public String getAccessTokenEndpoint() { + return "http://api.meetup.com/oauth/access/"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/MendeleyApi.java b/src/apis/org/scribe/builder/api/MendeleyApi.java new file mode 100644 index 000000000..cbcaa4ec7 --- /dev/null +++ b/src/apis/org/scribe/builder/api/MendeleyApi.java @@ -0,0 +1,33 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.model.Verb; + +/** + * @author Arieh "Vainolo" Bibliowicz + * @see http://apidocs.mendeley.com/home/authentication + */ +public class MendeleyApi extends DefaultApi10a { + + private static final String AUTHORIZE_URL = "http://api.mendeley.com/oauth/authorize?oauth_token="; + + public String getRequestTokenEndpoint() { + return "http://api.mendeley.com/oauth/request_token/"; + } + + public String getAccessTokenEndpoint() { + return "http://api.mendeley.com/oauth/access_token/"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public Verb getAccessTokenVerb() { + return Verb.GET; + } + + public Verb getRequestTokenVerb() { + return Verb.GET; + } +} diff --git a/src/apis/org/scribe/builder/api/MisoApi.java b/src/apis/org/scribe/builder/api/MisoApi.java new file mode 100644 index 000000000..57d231729 --- /dev/null +++ b/src/apis/org/scribe/builder/api/MisoApi.java @@ -0,0 +1,22 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class MisoApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "http://gomiso.com/oauth/authorize?oauth_token="; + 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"; + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_RESOURCE; + } + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_RESOURCE; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + +} diff --git a/src/apis/org/scribe/builder/api/NetProspexApi.java b/src/apis/org/scribe/builder/api/NetProspexApi.java new file mode 100644 index 000000000..afd550029 --- /dev/null +++ b/src/apis/org/scribe/builder/api/NetProspexApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +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="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/NeteaseWeibooApi.java b/src/apis/org/scribe/builder/api/NeteaseWeibooApi.java new file mode 100644 index 000000000..4e13977d5 --- /dev/null +++ b/src/apis/org/scribe/builder/api/NeteaseWeibooApi.java @@ -0,0 +1,39 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class NeteaseWeibooApi extends DefaultApi10a { + private static final String REQUEST_TOKEN_URL = "http://api.t.163.com/oauth/request_token"; + private static final String ACCESS_TOKEN_URL = "http://api.t.163.com/oauth/access_token"; + private static final String AUTHORIZE_URL = "http://api.t.163.com/oauth/authorize?oauth_token="; + private static final String AUTHENTICATE_URL = "http://api.t.163.com/oauth/authenticate?oauth_token="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + /** + * 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) + */ + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + /** + * this method is for web client with callback url + * 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) + */ + public String getAuthenticateUrl(final Token requestToken) { + return AUTHENTICATE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/PlurkApi.java b/src/apis/org/scribe/builder/api/PlurkApi.java new file mode 100644 index 000000000..4577f34e2 --- /dev/null +++ b/src/apis/org/scribe/builder/api/PlurkApi.java @@ -0,0 +1,29 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class PlurkApi extends DefaultApi10a { + private static final String REQUEST_TOKEN_URL = "http://www.plurk.com/OAuth/request_token"; + private static final String AUTHORIZE_URL = "http://www.plurk.com/OAuth/authorize?oauth_token="; + private static final String ACCESS_TOKEN_URL = "http://www.plurk.com/OAuth/access_token"; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public static class Mobile extends PlurkApi { + private static final String AUTHORIZE_URL = "http://www.plurk.com/m/authorize?oauth_token="; + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + } +} diff --git a/src/apis/org/scribe/builder/api/Px500Api.java b/src/apis/org/scribe/builder/api/Px500Api.java new file mode 100644 index 000000000..ae605fcd3 --- /dev/null +++ b/src/apis/org/scribe/builder/api/Px500Api.java @@ -0,0 +1,19 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class Px500Api extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://api.500px.com/v1/oauth/authorize?oauth_token="; + + public String getAccessTokenEndpoint() { + return "https://api.500px.com/v1/oauth/access_token"; + } + + public String getRequestTokenEndpoint() { + return "https://api.500px.com/v1/oauth/request_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} \ No newline at end of file diff --git a/src/apis/org/scribe/builder/api/QWeiboApi.java b/src/apis/org/scribe/builder/api/QWeiboApi.java new file mode 100644 index 000000000..9c556569d --- /dev/null +++ b/src/apis/org/scribe/builder/api/QWeiboApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +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="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/RenrenApi.java b/src/apis/org/scribe/builder/api/RenrenApi.java new file mode 100644 index 000000000..e79300bb3 --- /dev/null +++ b/src/apis/org/scribe/builder/api/RenrenApi.java @@ -0,0 +1,33 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.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=%clientId%&redirect_uri=%redirectUri%&response_type=code"; + private static final String SCOPED_PARAMETER = "&scope="; + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } + + public String getAccessTokenEndpoint() { + return "https://graph.renren.com/oauth/token?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "redirectUri", OAuthEncoder.encode(config.getCallback())); + // Append scope if present + if (config.hasScope()) { + result = result + SCOPED_PARAMETER + OAuthEncoder.encode(config.getScope()); + } + return result; + } +} diff --git a/src/apis/org/scribe/builder/api/SapoApi.java b/src/apis/org/scribe/builder/api/SapoApi.java new file mode 100644 index 000000000..b714d824b --- /dev/null +++ b/src/apis/org/scribe/builder/api/SapoApi.java @@ -0,0 +1,30 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.model.Verb; + +public class SapoApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://id.sapo.pt/oauth/authorize?oauth_token="; + 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"; + + public String getAccessTokenEndpoint() { + return ACCESS_URL; + } + + public String getRequestTokenEndpoint() { + return REQUEST_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public Verb getRequestTokenVerb() { + return Verb.GET; + } + + public Verb getAccessTokenVerb() { + return Verb.GET; + } +} \ No newline at end of file diff --git a/src/main/java/org/scribe/builder/api/SimpleGeoApi.java b/src/apis/org/scribe/builder/api/SimpleGeoApi.java similarity index 93% rename from src/main/java/org/scribe/builder/api/SimpleGeoApi.java rename to src/apis/org/scribe/builder/api/SimpleGeoApi.java index 3e19df70a..b548e056f 100644 --- a/src/main/java/org/scribe/builder/api/SimpleGeoApi.java +++ b/src/apis/org/scribe/builder/api/SimpleGeoApi.java @@ -9,19 +9,19 @@ public class SimpleGeoApi extends DefaultApi10a { private static final String ENDPOINT = "these are not used since SimpleGeo uses 2 legged OAuth"; - @Override + public String getRequestTokenEndpoint() { return ENDPOINT; } - @Override + public String getAccessTokenEndpoint() { return ENDPOINT; } - @Override + public String getAuthorizationUrl(Token requestToken) { return ENDPOINT; diff --git a/src/apis/org/scribe/builder/api/SinaWeiboApi.java b/src/apis/org/scribe/builder/api/SinaWeiboApi.java new file mode 100644 index 000000000..add472709 --- /dev/null +++ b/src/apis/org/scribe/builder/api/SinaWeiboApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class SinaWeiboApi extends DefaultApi10a { + private static final String REQUEST_TOKEN_URL = "http://api.t.sina.com.cn/oauth/request_token"; + private static final String ACCESS_TOKEN_URL = "http://api.t.sina.com.cn/oauth/access_token"; + private static final String AUTHORIZE_URL = "http://api.t.sina.com.cn/oauth/authorize?oauth_token="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/SinaWeiboApi20.java b/src/apis/org/scribe/builder/api/SinaWeiboApi20.java new file mode 100644 index 000000000..e4b2abc99 --- /dev/null +++ b/src/apis/org/scribe/builder/api/SinaWeiboApi20.java @@ -0,0 +1,38 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Verb; +import org.scribe.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=%clientId%&redirect_uri=%redirectUri%&response_type=code"; + private static final String SCOPED_PARAMETER = "&scope="; + + public Verb getAccessTokenVerb() { + return Verb.POST; + } + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } + + public String getAccessTokenEndpoint() { + return "https://api.weibo.com/oauth2/access_token?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "redirectUri", OAuthEncoder.encode(config.getCallback())); + // Append scope if present + if (config.hasScope()) { + result = result + SCOPED_PARAMETER + OAuthEncoder.encode(config.getScope()); + } + return result; + } +} diff --git a/src/apis/org/scribe/builder/api/SkyrockApi.java b/src/apis/org/scribe/builder/api/SkyrockApi.java new file mode 100644 index 000000000..0e301901c --- /dev/null +++ b/src/apis/org/scribe/builder/api/SkyrockApi.java @@ -0,0 +1,28 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +/** + * OAuth API for Skyrock. + * + * @author Nicolas Quiénot + * @see Skyrock.com API + */ +public class SkyrockApi extends DefaultApi10a { + private static final String API_ENDPOINT = "https://api.skyrock.com/v2"; + private static final String REQUEST_TOKEN_RESOURCE = "/oauth/initiate"; + private static final String AUTHORIZE_URL = "/oauth/authorize?oauth_token="; + private static final String ACCESS_TOKEN_RESOURCE = "/oauth/token"; + + public String getAccessTokenEndpoint() { + return API_ENDPOINT + ACCESS_TOKEN_RESOURCE; + } + + public String getRequestTokenEndpoint() { + return API_ENDPOINT + REQUEST_TOKEN_RESOURCE; + } + + public String getAuthorizationUrl(final Token requestToken) { + return API_ENDPOINT + AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/SohuWeiboApi.java b/src/apis/org/scribe/builder/api/SohuWeiboApi.java new file mode 100644 index 000000000..c89912cce --- /dev/null +++ b/src/apis/org/scribe/builder/api/SohuWeiboApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class SohuWeiboApi extends DefaultApi10a { + private static final String REQUEST_TOKEN_URL = "http://api.t.sohu.com/oauth/request_token"; + private static final String ACCESS_TOKEN_URL = "http://api.t.sohu.com/oauth/access_token"; + private static final String AUTHORIZE_URL = "http://api.t.sohu.com/oauth/authorize?oauth_token="; + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_URL; + } + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_URL; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/TrelloApi.java b/src/apis/org/scribe/builder/api/TrelloApi.java new file mode 100644 index 000000000..7cdebf173 --- /dev/null +++ b/src/apis/org/scribe/builder/api/TrelloApi.java @@ -0,0 +1,20 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class TrelloApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://trello.com/1/OAuthAuthorizeToken?oauth_token="; + + public String getAccessTokenEndpoint() { + return "https://trello.com/1/OAuthGetAccessToken"; + } + + public String getRequestTokenEndpoint() { + return "https://trello.com/1/OAuthGetRequestToken"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + +} diff --git a/src/apis/org/scribe/builder/api/TumblrApi.java b/src/apis/org/scribe/builder/api/TumblrApi.java new file mode 100644 index 000000000..58e8d73cb --- /dev/null +++ b/src/apis/org/scribe/builder/api/TumblrApi.java @@ -0,0 +1,21 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class TumblrApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://www.tumblr.com/oauth/authorize?oauth_token="; + private static final String REQUEST_TOKEN_RESOURCE = "http://www.tumblr.com/oauth/request_token"; + private static final String ACCESS_TOKEN_RESOURCE = "http://www.tumblr.com/oauth/access_token"; + + public String getAccessTokenEndpoint() { + return ACCESS_TOKEN_RESOURCE; + } + + public String getRequestTokenEndpoint() { + return REQUEST_TOKEN_RESOURCE; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/TwitterApi.java b/src/apis/org/scribe/builder/api/TwitterApi.java new file mode 100644 index 000000000..a9000c695 --- /dev/null +++ b/src/apis/org/scribe/builder/api/TwitterApi.java @@ -0,0 +1,53 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class TwitterApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize?oauth_token="; + private static final String REQUEST_TOKEN_RESOURCE = "api.twitter.com/oauth/request_token"; + private static final String ACCESS_TOKEN_RESOURCE = "api.twitter.com/oauth/access_token"; + + public String getAccessTokenEndpoint() { + return "http://" + ACCESS_TOKEN_RESOURCE; + } + + public String getRequestTokenEndpoint() { + return "http://" + REQUEST_TOKEN_RESOURCE; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public static class SSL extends TwitterApi { + + public String getAccessTokenEndpoint() { + return "https://" + ACCESS_TOKEN_RESOURCE; + } + + public String getRequestTokenEndpoint() { + return "https://" + REQUEST_TOKEN_RESOURCE; + } + } + + /** + * Twitter 'friendlier' authorization endpoint for OAuth. + * + * Uses SSL. + */ + public static class Authenticate extends SSL { + private static final String AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate?oauth_token="; + + public String getAuthorizationUrl(final Token requestToken) { + return 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/apis/org/scribe/builder/api/UbuntuOneApi.java b/src/apis/org/scribe/builder/api/UbuntuOneApi.java new file mode 100644 index 000000000..95af23d89 --- /dev/null +++ b/src/apis/org/scribe/builder/api/UbuntuOneApi.java @@ -0,0 +1,32 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.services.PlaintextSignatureService; +import org.scribe.services.SignatureService; + +/** + * @author Julio Gutierrez + * + * Sep 6, 2012 + */ +public class UbuntuOneApi extends DefaultApi10a { + + private static final String AUTHORIZE_URL = "https://one.ubuntu.com/oauth/authorize/?oauth_token="; + + public String getAccessTokenEndpoint() { + return "https://one.ubuntu.com/oauth/access/"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public String getRequestTokenEndpoint() { + return "https://one.ubuntu.com/oauth/request/"; + } + + public SignatureService getSignatureService() { + return new PlaintextSignatureService(); + } + +} diff --git a/src/apis/org/scribe/builder/api/ViadeoApi.java b/src/apis/org/scribe/builder/api/ViadeoApi.java new file mode 100644 index 000000000..70e0a807e --- /dev/null +++ b/src/apis/org/scribe/builder/api/ViadeoApi.java @@ -0,0 +1,33 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; + +public class ViadeoApi extends DefaultApi20 { + private static final String AUTHORIZE_URL = "https://secure.viadeo.com/oauth-provider/authorize2?client_id=%clientId%&redirect_uri=%redirectUri%&response_type=code"; + private static final String SCOPED_PARAMETER = "&scope="; + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } + + public String getAccessTokenEndpoint() { + return "https://secure.viadeo.com/oauth-provider/access_token2?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + Preconditions.checkValidUrl(config.getCallback(), + "Must provide a valid url as callback. Viadeo does not support OOB"); + String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "redirectUri", OAuthEncoder.encode(config.getCallback())); + // Append scope if present + if (config.hasScope()) { + result = result + SCOPED_PARAMETER + OAuthEncoder.encode(config.getScope()); + } + return result; + } +} diff --git a/src/apis/org/scribe/builder/api/VimeoApi.java b/src/apis/org/scribe/builder/api/VimeoApi.java new file mode 100644 index 000000000..6abb059ab --- /dev/null +++ b/src/apis/org/scribe/builder/api/VimeoApi.java @@ -0,0 +1,19 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class VimeoApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "http://vimeo.com/oauth/authorize?oauth_token="; + + public String getAccessTokenEndpoint() { + return "http://vimeo.com/oauth/access_token"; + } + + public String getRequestTokenEndpoint() { + return "http://vimeo.com/oauth/request_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/VkontakteApi.java b/src/apis/org/scribe/builder/api/VkontakteApi.java new file mode 100644 index 000000000..744403098 --- /dev/null +++ b/src/apis/org/scribe/builder/api/VkontakteApi.java @@ -0,0 +1,37 @@ +package org.scribe.builder.api; + +import org.apache.commons.lang.StringUtils; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.extractors.JsonTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; + +/** + * @author Boris G. Tsirkin + * @since 20.4.2011 + */ +public class VkontakteApi extends DefaultApi20 { + private static final String AUTHORIZE_URL = "https://oauth.vk.com/authorize?client_id=%clientId%&redirect_uri=%redirectUri%&response_type=code"; + private static final String SCOPED_PARAMETER = "&scope="; + + public String getAccessTokenEndpoint() { + return "https://api.vkontakte.ru/oauth/access_token"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + Preconditions.checkValidUrl(config.getCallback(), + "Valid url is required for a callback. Vkontakte does not support OOB"); + String result = StringUtils.replace(AUTHORIZE_URL, "clientId", config.getApiKey()); + StringUtils.replace(result, "redirectUri", OAuthEncoder.encode(config.getCallback())); + // Append scope if present + if (config.hasScope()) { + result = result + SCOPED_PARAMETER + OAuthEncoder.encode(config.getScope()); + } + return result; + } + + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } +} diff --git a/src/apis/org/scribe/builder/api/XingApi.java b/src/apis/org/scribe/builder/api/XingApi.java new file mode 100755 index 000000000..f4dcfc08e --- /dev/null +++ b/src/apis/org/scribe/builder/api/XingApi.java @@ -0,0 +1,20 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class XingApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://api.xing.com/v1/authorize?oauth_token="; + + public String getAccessTokenEndpoint() { + return "https://api.xing.com/v1/access_token"; + } + + public String getRequestTokenEndpoint() { + return "https://api.xing.com/v1/request_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + +} diff --git a/src/apis/org/scribe/builder/api/YahooApi.java b/src/apis/org/scribe/builder/api/YahooApi.java new file mode 100644 index 000000000..dd592b3ea --- /dev/null +++ b/src/apis/org/scribe/builder/api/YahooApi.java @@ -0,0 +1,19 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; + +public class YahooApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://api.login.yahoo.com/oauth/v2/request_auth?oauth_token="; + + public String getAccessTokenEndpoint() { + return "https://api.login.yahoo.com/oauth/v2/get_token"; + } + + public String getRequestTokenEndpoint() { + return "https://api.login.yahoo.com/oauth/v2/get_request_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } +} diff --git a/src/apis/org/scribe/builder/api/YammerApi.java b/src/apis/org/scribe/builder/api/YammerApi.java new file mode 100644 index 000000000..0e4d6804b --- /dev/null +++ b/src/apis/org/scribe/builder/api/YammerApi.java @@ -0,0 +1,25 @@ +package org.scribe.builder.api; + +import org.scribe.model.Token; +import org.scribe.services.PlaintextSignatureService; +import org.scribe.services.SignatureService; + +public class YammerApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://www.yammer.com/oauth/authorize?oauth_token="; + + public String getRequestTokenEndpoint() { + return "https://www.yammer.com/oauth/request_token"; + } + + public String getAccessTokenEndpoint() { + return "https://www.yammer.com/oauth/access_token"; + } + + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } + + public SignatureService getSignatureService() { + return new PlaintextSignatureService(); + } +} diff --git a/src/main/java/org/scribe/builder/ServiceBuilder.java b/src/main/java/org/scribe/builder/ServiceBuilder.java index 27f3c8f63..343547126 100644 --- a/src/main/java/org/scribe/builder/ServiceBuilder.java +++ b/src/main/java/org/scribe/builder/ServiceBuilder.java @@ -1,11 +1,15 @@ package org.scribe.builder; -import java.io.*; -import org.scribe.builder.api.*; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.oauth.*; -import org.scribe.utils.*; +import java.io.OutputStream; + +import org.scribe.builder.api.Api; +import org.scribe.exceptions.OAuthException; +import org.scribe.model.OAuthConfig; +import org.scribe.model.OAuthConstants; +import org.scribe.model.OAuthRequestCreatorFactory; +import org.scribe.model.SignatureType; +import org.scribe.oauth.OAuthService; +import org.scribe.utils.Preconditions; /** * Implementation of the Builder pattern, with a fluent interface that creates a @@ -14,156 +18,155 @@ * @author Pablo Fernandez * */ -public class ServiceBuilder -{ - private String apiKey; - private String apiSecret; - private String callback; - private Api api; - private String scope; - private SignatureType signatureType; - private OutputStream debugStream; - - /** - * Default constructor - */ - public ServiceBuilder() - { - this.callback = OAuthConstants.OUT_OF_BAND; - this.signatureType = SignatureType.Header; - this.debugStream = null; - } - - /** - * Configures the {@link Api} - * - * @param apiClass the class of one of the existent {@link Api}s on org.scribe.api package - * @return the {@link ServiceBuilder} instance for method chaining - */ - public ServiceBuilder provider(Class apiClass) - { - this.api = createApi(apiClass); - return this; - } - - private Api createApi(Class apiClass) - { - Preconditions.checkNotNull(apiClass, "Api class cannot be null"); - Api api; - try - { - api = apiClass.newInstance(); +public class ServiceBuilder { + private String apiKey; + private String apiSecret; + private String callback; + private Api api; + private String scope; + private SignatureType signatureType; + private OutputStream debugStream; + private OAuthRequestCreatorFactory requestCreatorFactory; + + /** + * Default constructor + */ + public ServiceBuilder() { + callback = OAuthConstants.OUT_OF_BAND; + signatureType = SignatureType.Header; + debugStream = null; + } + + /** + * Configures the {@link Api} + * + * @param apiClass the class of one of the existent {@link Api}s on org.scribe.api package + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder provider(final Class/**/apiClass) { + api = createApi(apiClass); + return this; } - catch(Exception e) - { - throw new OAuthException("Error while creating the Api object", e); + + private Api createApi(final Class/**/apiClass) { + Preconditions.checkNotNull(apiClass, "Api class cannot be null"); + final Api api; + try { + final Object o = apiClass.newInstance(); + if (o instanceof Api) { + api = (Api) o; + } else { + throw new IllegalArgumentException(String.valueOf(apiClass) + " is not an API"); + } + } catch (final Exception e) { + throw new OAuthException("Error while creating the Api object", e); + } + return api; + } + + /** + * Configures the {@link Api} + * + * Overloaded version. Let's you use an instance instead of a class. + * + * @param api instance of {@link Api}s + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder provider(final Api api) { + Preconditions.checkNotNull(api, "Api cannot be null"); + this.api = api; + return this; + } + + public ServiceBuilder OAuthRequestCreator(final OAuthRequestCreatorFactory requestCreatorFactory) { + Preconditions.checkNotNull(requestCreatorFactory, "requestCreatorFactory cannot be null"); + this.requestCreatorFactory = requestCreatorFactory; + return this; + } + + /** + * 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(final 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(final 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(final 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(final String scope) { + Preconditions.checkEmptyString(scope, "Invalid OAuth scope"); + this.scope = scope; + return this; + } + + /** + * Configures the signature type, choose between header, querystring, etc. Defaults to Header + * + * @param scope The OAuth scope + * @return the {@link ServiceBuilder} instance for method chaining + */ + public ServiceBuilder signatureType(final SignatureType type) { + Preconditions.checkNotNull(type, "Signature type can't be null"); + signatureType = type; + return this; + } + + public ServiceBuilder debugStream(final OutputStream stream) { + Preconditions.checkNotNull(stream, "debug stream can't be null"); + debugStream = stream; + return this; + } + + public ServiceBuilder debug() { + this.debugStream(System.out); + return this; + } + + /** + * Returns the fully configured {@link OAuthService} + * + * @return fully configured {@link OAuthService} + */ + 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"); + final OAuthConfig config = new OAuthConfig(apiKey, apiSecret, callback, signatureType, + scope, debugStream, requestCreatorFactory); + return api.createService(config); } - return api; - } - - /** - * Configures the {@link Api} - * - * Overloaded version. Let's you use an instance instead of a class. - * - * @param api instance of {@link Api}s - * @return the {@link ServiceBuilder} instance for method chaining - */ - public ServiceBuilder provider(Api api) - { - Preconditions.checkNotNull(api, "Api cannot be null"); - this.api = api; - return this; - } - - /** - * 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 signature type, choose between header, querystring, etc. Defaults to Header - * - * @param scope The OAuth scope - * @return the {@link ServiceBuilder} instance for method chaining - */ - public ServiceBuilder signatureType(SignatureType type) - { - Preconditions.checkNotNull(type, "Signature type can't be null"); - this.signatureType = type; - return this; - } - - public ServiceBuilder debugStream(OutputStream stream) - { - Preconditions.checkNotNull(stream, "debug stream can't be null"); - this.debugStream = stream; - return this; - } - - public ServiceBuilder debug() - { - this.debugStream(System.out); - return this; - } - - /** - * Returns the fully configured {@link OAuthService} - * - * @return fully configured {@link OAuthService} - */ - 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)); - } } diff --git a/src/main/java/org/scribe/builder/api/AWeberApi.java b/src/main/java/org/scribe/builder/api/AWeberApi.java deleted file mode 100644 index 53ae1fc7f..000000000 --- a/src/main/java/org/scribe/builder/api/AWeberApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class AWeberApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://auth.aweber.com/1.0/oauth/authorize?oauth_token=%s"; - private static final String REQUEST_TOKEN_ENDPOINT = "https://auth.aweber.com/1.0/oauth/request_token"; - private static final String ACCESS_TOKEN_ENDPOINT = "https://auth.aweber.com/1.0/oauth/access_token"; - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_ENDPOINT; - } - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_ENDPOINT; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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..2bad4f2ff 100644 --- a/src/main/java/org/scribe/builder/api/ConstantContactApi.java +++ b/src/main/java/org/scribe/builder/api/ConstantContactApi.java @@ -1,26 +1,19 @@ package org.scribe.builder.api; -import org.scribe.model.*; +import org.scribe.model.Token; -public class ConstantContactApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://oauth.constantcontact.com/ws/oauth/confirm_access?oauth_token=%s"; +public class ConstantContactApi extends DefaultApi10a { + private static final String AUTHORIZE_URL = "https://oauth.constantcontact.com/ws/oauth/confirm_access?oauth_token="; - @Override - public String getAccessTokenEndpoint() - { - return "https://oauth.constantcontact.com/ws/oauth/access_token"; - } + public String getAccessTokenEndpoint() { + return "https://oauth.constantcontact.com/ws/oauth/access_token"; + } - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } + public String getAuthorizationUrl(final Token requestToken) { + return AUTHORIZE_URL + requestToken.getToken(); + } - @Override - public String getRequestTokenEndpoint() - { - return "https://oauth.constantcontact.com/ws/oauth/request_token"; - } + public String getRequestTokenEndpoint() { + return "https://oauth.constantcontact.com/ws/oauth/request_token"; + } } diff --git a/src/main/java/org/scribe/builder/api/ConstantContactApi2.java b/src/main/java/org/scribe/builder/api/ConstantContactApi2.java index b5e4cac27..e87101af2 100644 --- a/src/main/java/org/scribe/builder/api/ConstantContactApi2.java +++ b/src/main/java/org/scribe/builder/api/ConstantContactApi2.java @@ -1,55 +1,52 @@ package org.scribe.builder.api; -import java.util.regex.*; -import org.scribe.exceptions.*; -import org.scribe.extractors.*; -import org.scribe.model.*; -import org.scribe.utils.*; - -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"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://oauth2.constantcontact.com/oauth2/oauth/token?grant_type=authorization_code"; - } - - @Override - 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 AccessTokenExtractor getAccessTokenExtractor() - { - return new AccessTokenExtractor() - { - - public Token extract(String response) - { - Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string"); - - String regex = "\"access_token\"\\s*:\\s*\"([^&\"]+)\""; - Matcher matcher = Pattern.compile(regex).matcher(response); - if (matcher.find()) - { - String token = OAuthEncoder.decode(matcher.group(1)); - return new Token(token, "", response); - } - else - { - throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" + response + "'", null); - } - } - }; - } +import org.apache.commons.lang.StringUtils; +import org.apache.regexp.RE; +import org.scribe.exceptions.OAuthException; +import org.scribe.extractors.AccessTokenExtractor; +import org.scribe.model.OAuthConfig; +import org.scribe.model.Token; +import org.scribe.model.Verb; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; + +public class ConstantContactApi2 extends DefaultApi20 { + private static final String AUTHORIZE_URL = "https://oauth2.constantcontact.com/oauth2/oauth/siteowner/authorize?client_id=%clienId%&response_type=code&redirect_uri=%redirectUri%"; + + public String getAccessTokenEndpoint() { + return "https://oauth2.constantcontact.com/oauth2/oauth/token?grant_type=authorization_code"; + } + + public String getAuthorizationUrl(final OAuthConfig config) { + String string = StringUtils.replace(AUTHORIZE_URL, "%clientId%", config.getApiKey()); + string = StringUtils.replace(string, "%redirectUri%", + OAuthEncoder.encode(config.getCallback())); + return string; + } + + public Verb getAccessTokenVerb() { + return Verb.POST; + } + + public AccessTokenExtractor getAccessTokenExtractor() { + return new AccessTokenExtractor() { + + public Token extract(final String response) { + Preconditions + .checkEmptyString(response, + "ResponseHttpImpl body is incorrect. Can't extract a token from an empty string"); + + final String regex = "\"access_token\"\\s*:\\s*\"([^&\"]+)\""; + final RE re = new RE(regex); + if (re.match(response)) { + final String token = OAuthEncoder.decode(re.getParen(1)); + return new Token(token, "", response); + } else { + throw new OAuthException( + "ResponseHttpImpl body is incorrect. Can't extract a token from this: '" + + response + "'", null); + } + } + }; + } } \ No newline at end of file diff --git a/src/main/java/org/scribe/builder/api/DiggApi.java b/src/main/java/org/scribe/builder/api/DiggApi.java deleted file mode 100644 index b69253eb9..000000000 --- a/src/main/java/org/scribe/builder/api/DiggApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class DiggApi extends DefaultApi10a -{ - - private static final String AUTHORIZATION_URL = "http://digg.com/oauth/authorize?oauth_token=%s"; - private static final String BASE_URL = "http://services.digg.com/oauth/"; - - @Override - public String getRequestTokenEndpoint() - { - return BASE_URL + "request_token"; - } - - @Override - public String getAccessTokenEndpoint() - { - return BASE_URL + "access_token"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - -} diff --git a/src/main/java/org/scribe/builder/api/EvernoteApi.java b/src/main/java/org/scribe/builder/api/EvernoteApi.java deleted file mode 100644 index 007f48b1e..000000000 --- a/src/main/java/org/scribe/builder/api/EvernoteApi.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class EvernoteApi extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "https://www.evernote.com/OAuth.action?oauth_token=%s"; - - @Override - public String getRequestTokenEndpoint() - { - return "https://www.evernote.com/oauth"; - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://www.evernote.com/oauth"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - public static class Sandbox extends EvernoteApi - { - private static final String SANDBOX_URL = "https://sandbox.evernote.com"; - - @Override - public String getRequestTokenEndpoint() - { - return SANDBOX_URL + "/oauth"; - } - - @Override - public String getAccessTokenEndpoint() - { - return SANDBOX_URL + "/oauth"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(SANDBOX_URL + "/OAuth.action?oauth_token=%s", requestToken.getToken()); - } - } -} diff --git a/src/main/java/org/scribe/builder/api/FacebookApi.java b/src/main/java/org/scribe/builder/api/FacebookApi.java deleted file mode 100644 index 996a651e1..000000000 --- a/src/main/java/org/scribe/builder/api/FacebookApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -import org.scribe.utils.*; - -public class FacebookApi extends DefaultApi20 -{ - private static final String AUTHORIZE_URL = "https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s"; - private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://graph.facebook.com/oauth/access_token"; - } - - @Override - public String getAuthorizationUrl(OAuthConfig config) - { - Preconditions.checkValidUrl(config.getCallback(), "Must provide a valid url as callback. Facebook 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())); - } - } -} diff --git a/src/main/java/org/scribe/builder/api/Foursquare2Api.java b/src/main/java/org/scribe/builder/api/Foursquare2Api.java deleted file mode 100644 index d11def9d7..000000000 --- a/src/main/java/org/scribe/builder/api/Foursquare2Api.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.*; -import org.scribe.model.*; -import org.scribe.utils.*; - -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"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://foursquare.com/oauth2/access_token?grant_type=authorization_code"; - } - - @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())); - } - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } -} diff --git a/src/main/java/org/scribe/builder/api/FoursquareApi.java b/src/main/java/org/scribe/builder/api/FoursquareApi.java deleted file mode 100644 index 060a76b76..000000000 --- a/src/main/java/org/scribe/builder/api/FoursquareApi.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class FoursquareApi extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "http://foursquare.com/oauth/authorize?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "http://foursquare.com/oauth/access_token"; - } - - @Override - public String getRequestTokenEndpoint() - { - return "http://foursquare.com/oauth/request_token"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 482e66fd1..000000000 --- a/src/main/java/org/scribe/builder/api/FreelancerApi.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class FreelancerApi extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "http://www.freelancer.com/users/api-token/auth.php?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "http://api.freelancer.com/RequestAccessToken/requestAccessToken.xml?"; - } - - @Override - public String getRequestTokenEndpoint() - { - return "http://api.freelancer.com/RequestRequestToken/requestRequestToken.xml"; - } - - @Override - public Verb getAccessTokenVerb() - { - return Verb.GET; - } - - @Override - public Verb getRequestTokenVerb() - { - return Verb.GET; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - public static class Sandbox extends FreelancerApi - { - private static final String SANDBOX_AUTHORIZATION_URL = "http://www.sandbox.freelancer.com/users/api-token/auth.php"; - - @Override - public String getRequestTokenEndpoint() - { - return "http://api.sandbox.freelancer.com/RequestRequestToken/requestRequestToken.xml"; - } - - @Override - public String getAccessTokenEndpoint() - { - return "http://api.sandbox.freelancer.com/RequestAccessToken/requestAccessToken.xml?"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 3a7560f0f..000000000 --- a/src/main/java/org/scribe/builder/api/GetGlueApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -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"; - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 9c86e5e1a..000000000 --- a/src/main/java/org/scribe/builder/api/GoogleApi.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class GoogleApi extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=%s"; - - @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(Token requestToken) - { - 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 deleted file mode 100644 index 06dd6910d..000000000 --- a/src/main/java/org/scribe/builder/api/ImgUrApi.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -/** - * OAuth API for ImgUr - * - * @author David Wursteisen - * @see ImgUr API - */ -public class ImgUrApi extends DefaultApi10a -{ - - @Override - public String getRequestTokenEndpoint() - { - return "https://api.imgur.com/oauth/request_token"; - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.imgur.com/oauth/access_token"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 5b0e0d5dc..000000000 --- a/src/main/java/org/scribe/builder/api/KaixinApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -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"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_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 Verb getRequestTokenVerb() - { - return Verb.GET; - } - - @Override - public Verb getAccessTokenVerb() - { - return Verb.GET; - } -} diff --git a/src/main/java/org/scribe/builder/api/KaixinApi20.java b/src/main/java/org/scribe/builder/api/KaixinApi20.java deleted file mode 100644 index 9e27bcb33..000000000 --- a/src/main/java/org/scribe/builder/api/KaixinApi20.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.*; -import org.scribe.model.*; -import org.scribe.utils.*; - -/** - * 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"; - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.kaixin001.com/oauth2/access_token?grant_type=authorization_code"; - } - - @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())); - } - } -} diff --git a/src/main/java/org/scribe/builder/api/LinkedInApi.java b/src/main/java/org/scribe/builder/api/LinkedInApi.java deleted file mode 100644 index ee6becd85..000000000 --- a/src/main/java/org/scribe/builder/api/LinkedInApi.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; -import java.util.*; - -public class LinkedInApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://api.linkedin.com/uas/oauth/authenticate?oauth_token=%s"; - private static final String REQUEST_TOKEN_URL = "https://api.linkedin.com/uas/oauth/requestToken"; - - private final Set scopes; - - public LinkedInApi() - { - scopes = Collections.emptySet(); - } - - public LinkedInApi(Set scopes) - { - this.scopes = Collections.unmodifiableSet(scopes); - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.linkedin.com/uas/oauth/accessToken"; - } - - @Override - public String getRequestTokenEndpoint() - { - return scopes.isEmpty() ? REQUEST_TOKEN_URL : REQUEST_TOKEN_URL + "?scope=" + scopesAsString(); - } - - private String scopesAsString() - { - StringBuilder builder = new StringBuilder(); - for(String scope : scopes) - { - builder.append("+" + scope); - } - return builder.substring(1); - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - - public static LinkedInApi withScopes(String... scopes) - { - Set scopeSet = new HashSet(Arrays.asList(scopes)); - return new LinkedInApi(scopeSet); - } - -} diff --git a/src/main/java/org/scribe/builder/api/LiveApi.java b/src/main/java/org/scribe/builder/api/LiveApi.java deleted file mode 100644 index 18140f603..000000000 --- a/src/main/java/org/scribe/builder/api/LiveApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.*; -import org.scribe.model.*; -import org.scribe.utils.*; - -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"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://oauth.live.com/token?grant_type=authorization_code"; - } - - @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())); - } - } - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } -} \ No newline at end of file diff --git a/src/main/java/org/scribe/builder/api/LoveFilmApi.java b/src/main/java/org/scribe/builder/api/LoveFilmApi.java deleted file mode 100644 index 81a5bb874..000000000 --- a/src/main/java/org/scribe/builder/api/LoveFilmApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -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"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 8f63e39e1..000000000 --- a/src/main/java/org/scribe/builder/api/MeetupApi.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -/** - * OAuth access to the Meetup.com API. - * For more information visit http://www.meetup.com/api - */ -public class MeetupApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "http://www.meetup.com/authenticate?oauth_token=%s"; - - @Override - public String getRequestTokenEndpoint() - { - return "http://api.meetup.com/oauth/request/"; - } - - @Override - public String getAccessTokenEndpoint() - { - return "http://api.meetup.com/oauth/access/"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index c6e0eced7..000000000 --- a/src/main/java/org/scribe/builder/api/MendeleyApi.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -/** - * @author Arieh "Vainolo" Bibliowicz - * @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"; - - @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(Token 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/src/main/java/org/scribe/builder/api/MisoApi.java b/src/main/java/org/scribe/builder/api/MisoApi.java deleted file mode 100644 index a6d88d3df..000000000 --- a/src/main/java/org/scribe/builder/api/MisoApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -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"; - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 8257de751..000000000 --- a/src/main/java/org/scribe/builder/api/NetProspexApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -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"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index fae38ac30..000000000 --- a/src/main/java/org/scribe/builder/api/NeteaseWeibooApi.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class NeteaseWeibooApi extends DefaultApi10a -{ - private static final String REQUEST_TOKEN_URL = "http://api.t.163.com/oauth/request_token"; - private static final String ACCESS_TOKEN_URL = "http://api.t.163.com/oauth/access_token"; - private static final String AUTHORIZE_URL = "http://api.t.163.com/oauth/authorize?oauth_token=%s"; - private static final String AUTHENTICATE_URL = "http://api.t.163.com/oauth/authenticate?oauth_token=%s"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - 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) - */ - public String getAuthorizationUrl(Token requestToken) - { - 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 - * - * 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) - */ - public String getAuthenticateUrl(Token requestToken) - { - return String.format(AUTHENTICATE_URL, requestToken.getToken()); - } -} diff --git a/src/main/java/org/scribe/builder/api/PlurkApi.java b/src/main/java/org/scribe/builder/api/PlurkApi.java deleted file mode 100644 index 22b1ddb75..000000000 --- a/src/main/java/org/scribe/builder/api/PlurkApi.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class PlurkApi extends DefaultApi10a -{ - private static final String REQUEST_TOKEN_URL = "http://www.plurk.com/OAuth/request_token"; - private static final String 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"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(Token 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"; - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index f7f3b0e0a..000000000 --- a/src/main/java/org/scribe/builder/api/Px500Api.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class Px500Api extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "https://api.500px.com/v1/oauth/authorize?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.500px.com/v1/oauth/access_token"; - } - - @Override - public String getRequestTokenEndpoint() - { - return "https://api.500px.com/v1/oauth/request_token"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } -} \ No newline at end of file diff --git a/src/main/java/org/scribe/builder/api/QWeiboApi.java b/src/main/java/org/scribe/builder/api/QWeiboApi.java deleted file mode 100644 index e16f28836..000000000 --- a/src/main/java/org/scribe/builder/api/QWeiboApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -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"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } -} diff --git a/src/main/java/org/scribe/builder/api/RenrenApi.java b/src/main/java/org/scribe/builder/api/RenrenApi.java deleted file mode 100644 index b31337ba4..000000000 --- a/src/main/java/org/scribe/builder/api/RenrenApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.*; -import org.scribe.model.*; -import org.scribe.utils.*; - -/** - * 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"; - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://graph.renren.com/oauth/token?grant_type=authorization_code"; - } - - @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())); - } - } -} diff --git a/src/main/java/org/scribe/builder/api/SapoApi.java b/src/main/java/org/scribe/builder/api/SapoApi.java deleted file mode 100644 index 9771daf4c..000000000 --- a/src/main/java/org/scribe/builder/api/SapoApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class SapoApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://id.sapo.pt/oauth/authorize?oauth_token=%s"; - private static final String ACCESS_URL = "https://id.sapo.pt/oauth/access_token"; - private static final String REQUEST_URL = "https://id.sapo.pt/oauth/request_token"; - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_URL; - } - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_URL; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } - - @Override - public Verb getRequestTokenVerb() - { - return Verb.GET; - } - - @Override - public Verb getAccessTokenVerb() - { - return Verb.GET; - } -} \ No newline at end of file diff --git a/src/main/java/org/scribe/builder/api/SinaWeiboApi.java b/src/main/java/org/scribe/builder/api/SinaWeiboApi.java deleted file mode 100644 index 14951d31b..000000000 --- a/src/main/java/org/scribe/builder/api/SinaWeiboApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class SinaWeiboApi extends DefaultApi10a -{ - private static final String REQUEST_TOKEN_URL = "http://api.t.sina.com.cn/oauth/request_token"; - private static final String ACCESS_TOKEN_URL = "http://api.t.sina.com.cn/oauth/access_token"; - private static final String AUTHORIZE_URL = "http://api.t.sina.com.cn/oauth/authorize?oauth_token=%s"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHORIZE_URL, requestToken.getToken()); - } -} diff --git a/src/main/java/org/scribe/builder/api/SinaWeiboApi20.java b/src/main/java/org/scribe/builder/api/SinaWeiboApi20.java deleted file mode 100644 index e0744c432..000000000 --- a/src/main/java/org/scribe/builder/api/SinaWeiboApi20.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.*; -import org.scribe.model.*; -import org.scribe.utils.*; - -/** - * 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"; - - @Override - public Verb getAccessTokenVerb() - { - return Verb.POST; - } - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.weibo.com/oauth2/access_token?grant_type=authorization_code"; - } - - @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())); - } - } -} diff --git a/src/main/java/org/scribe/builder/api/SkyrockApi.java b/src/main/java/org/scribe/builder/api/SkyrockApi.java deleted file mode 100644 index b0e76a303..000000000 --- a/src/main/java/org/scribe/builder/api/SkyrockApi.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -/** - * OAuth API for Skyrock. - * - * @author Nicolas Quiénot - * @see Skyrock.com API - */ -public class SkyrockApi extends DefaultApi10a -{ - private static final String API_ENDPOINT = "https://api.skyrock.com/v2"; - private static final String REQUEST_TOKEN_RESOURCE = "/oauth/initiate"; - private static final String AUTHORIZE_URL = "/oauth/authorize?oauth_token=%s"; - private static final String ACCESS_TOKEN_RESOURCE = "/oauth/token"; - - @Override - public String getAccessTokenEndpoint() - { - return API_ENDPOINT + ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() - { - return API_ENDPOINT + REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 1f927b7a5..000000000 --- a/src/main/java/org/scribe/builder/api/SohuWeiboApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class SohuWeiboApi extends DefaultApi10a -{ - private static final String REQUEST_TOKEN_URL = "http://api.t.sohu.com/oauth/request_token"; - private static final String ACCESS_TOKEN_URL = "http://api.t.sohu.com/oauth/access_token"; - private static final String AUTHORIZE_URL = "http://api.t.sohu.com/oauth/authorize?oauth_token=%s"; - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_URL; - } - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_URL; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index 9e46730d4..000000000 --- a/src/main/java/org/scribe/builder/api/TrelloApi.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class TrelloApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://trello.com/1/OAuthAuthorizeToken?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://trello.com/1/OAuthGetAccessToken"; - } - - @Override - public String getRequestTokenEndpoint() - { - return "https://trello.com/1/OAuthGetRequestToken"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index ee680ee8a..000000000 --- a/src/main/java/org/scribe/builder/api/TumblrApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class TumblrApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://www.tumblr.com/oauth/authorize?oauth_token=%s"; - private static final String REQUEST_TOKEN_RESOURCE = "http://www.tumblr.com/oauth/request_token"; - private static final String ACCESS_TOKEN_RESOURCE = "http://www.tumblr.com/oauth/access_token"; - - @Override - public String getAccessTokenEndpoint() - { - return ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() - { - return REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index a83c28e71..000000000 --- a/src/main/java/org/scribe/builder/api/TwitterApi.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class TwitterApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize?oauth_token=%s"; - private static final String REQUEST_TOKEN_RESOURCE = "api.twitter.com/oauth/request_token"; - private static final String ACCESS_TOKEN_RESOURCE = "api.twitter.com/oauth/access_token"; - - @Override - public String getAccessTokenEndpoint() - { - return "http://" + ACCESS_TOKEN_RESOURCE; - } - - @Override - public String getRequestTokenEndpoint() - { - return "http://" + REQUEST_TOKEN_RESOURCE; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 SSL - { - private static final String AUTHENTICATE_URL = "https://api.twitter.com/oauth/authenticate?oauth_token=%s"; - - @Override - public String getAuthorizationUrl(Token requestToken) - { - return String.format(AUTHENTICATE_URL, requestToken.getToken()); - } - } - - /** - * Just an alias to the default (SSL) authorization endpoint. - * - * Need to include this for symmetry with 'Authenticate' only. - */ - public static class Authorize extends SSL{} -} diff --git a/src/main/java/org/scribe/builder/api/UbuntuOneApi.java b/src/main/java/org/scribe/builder/api/UbuntuOneApi.java deleted file mode 100644 index 2a72c3afe..000000000 --- a/src/main/java/org/scribe/builder/api/UbuntuOneApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; -import org.scribe.services.*; - -/** - * @author Julio Gutierrez - * - * Sep 6, 2012 - */ -public class UbuntuOneApi extends DefaultApi10a -{ - - private static final String AUTHORIZATION_URL = "https://one.ubuntu.com/oauth/authorize/?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://one.ubuntu.com/oauth/access/"; - } - - @Override - public String getAuthorizationUrl(Token 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/src/main/java/org/scribe/builder/api/ViadeoApi.java b/src/main/java/org/scribe/builder/api/ViadeoApi.java deleted file mode 100644 index 0f5e77e76..000000000 --- a/src/main/java/org/scribe/builder/api/ViadeoApi.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.AccessTokenExtractor; -import org.scribe.model.OAuthConfig; -import org.scribe.utils.OAuthEncoder; -import org.scribe.utils.Preconditions; - -import org.scribe.extractors.JsonTokenExtractor; - -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"; - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } - - @Override - public String getAccessTokenEndpoint() - { - return "https://secure.viadeo.com/oauth-provider/access_token2?grant_type=authorization_code"; - } - - @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())); - } - } -} diff --git a/src/main/java/org/scribe/builder/api/VimeoApi.java b/src/main/java/org/scribe/builder/api/VimeoApi.java deleted file mode 100644 index 231895dab..000000000 --- a/src/main/java/org/scribe/builder/api/VimeoApi.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class VimeoApi extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "http://vimeo.com/oauth/authorize?oauth_token=%s"; - - @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(Token requestToken) - { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } -} diff --git a/src/main/java/org/scribe/builder/api/VkontakteApi.java b/src/main/java/org/scribe/builder/api/VkontakteApi.java deleted file mode 100644 index e12f39559..000000000 --- a/src/main/java/org/scribe/builder/api/VkontakteApi.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.extractors.*; -import org.scribe.utils.*; -import org.scribe.model.*; - -/** - * @author Boris G. Tsirkin - * @since 20.4.2011 - */ -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); - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.vkontakte.ru/oauth/access_token"; - } - - @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())); - } - } - - @Override - public AccessTokenExtractor getAccessTokenExtractor() - { - return new JsonTokenExtractor(); - } -} diff --git a/src/main/java/org/scribe/builder/api/XingApi.java b/src/main/java/org/scribe/builder/api/XingApi.java deleted file mode 100755 index ec8823e67..000000000 --- a/src/main/java/org/scribe/builder/api/XingApi.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; - -public class XingApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://api.xing.com/v1/authorize?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.xing.com/v1/access_token"; - } - - @Override - public String getRequestTokenEndpoint() - { - return "https://api.xing.com/v1/request_token"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index e8a29a738..000000000 --- a/src/main/java/org/scribe/builder/api/YahooApi.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.Token; - -public class YahooApi extends DefaultApi10a -{ - private static final String AUTHORIZE_URL = "https://api.login.yahoo.com/oauth/v2/request_auth?oauth_token=%s"; - - @Override - public String getAccessTokenEndpoint() - { - return "https://api.login.yahoo.com/oauth/v2/get_token"; - } - - @Override - public String getRequestTokenEndpoint() - { - return "https://api.login.yahoo.com/oauth/v2/get_request_token"; - } - - @Override - public String getAuthorizationUrl(Token requestToken) - { - 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 deleted file mode 100644 index e06543d97..000000000 --- a/src/main/java/org/scribe/builder/api/YammerApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.scribe.builder.api; - -import org.scribe.model.*; -import org.scribe.services.*; - -public class YammerApi extends DefaultApi10a -{ - private static final String AUTHORIZATION_URL = "https://www.yammer.com/oauth/authorize?oauth_token=%s"; - - @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(Token requestToken) - { - return String.format(AUTHORIZATION_URL, requestToken.getToken()); - } - - @Override - public SignatureService getSignatureService() - { - return new PlaintextSignatureService(); - } -} diff --git a/src/main/java/org/scribe/exceptions/OAuthConnectionException.java b/src/main/java/org/scribe/exceptions/OAuthConnectionException.java index 918de810c..3708715e0 100644 --- a/src/main/java/org/scribe/exceptions/OAuthConnectionException.java +++ b/src/main/java/org/scribe/exceptions/OAuthConnectionException.java @@ -3,12 +3,16 @@ /** * @author: Pablo Fernandez */ -public class OAuthConnectionException extends OAuthException -{ - private static final String MSG = "There was a problem while creating a connection to the remote service."; - - public OAuthConnectionException(Exception e) - { - super(MSG, e); - } +public class OAuthConnectionException extends OAuthException { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private static final String MSG = "There was a problem while creating a connection to the remote service."; + + public OAuthConnectionException(final Exception e) { + super(MSG, e); + } } diff --git a/src/main/java/org/scribe/exceptions/OAuthParametersMissingException.java b/src/main/java/org/scribe/exceptions/OAuthParametersMissingException.java index 8407ce493..2a1eb1684 100644 --- a/src/main/java/org/scribe/exceptions/OAuthParametersMissingException.java +++ b/src/main/java/org/scribe/exceptions/OAuthParametersMissingException.java @@ -1,26 +1,23 @@ package org.scribe.exceptions; -import org.scribe.model.*; +import org.scribe.model.OAuthRequest; /** * Specialized exception that represents a missing OAuth parameter. * * @author Pablo Fernandez */ -public class OAuthParametersMissingException extends OAuthException -{ +public class OAuthParametersMissingException extends OAuthException { - private static final long serialVersionUID = 1745308760111976671L; - private static final String MSG = "Could not find oauth parameters in request: %s. " - + "OAuth parameters must be specified with the addOAuthParameter() method"; + private static final long serialVersionUID = 1745308760111976671L; - /** - * Default constructor. - * - * @param request OAuthRequest that caused the error - */ - public OAuthParametersMissingException(OAuthRequest request) - { - super(String.format(MSG, request)); - } + /** + * Default constructor. + * + * @param request OAuthRequest that caused the error + */ + public OAuthParametersMissingException(final OAuthRequest request) { + super("Could not find oauth parameters in request: " + String.valueOf(request) + ". " + + "OAuth parameters must be specified with the addOAuthParameter() method"); + } } diff --git a/src/main/java/org/scribe/exceptions/OAuthSignatureException.java b/src/main/java/org/scribe/exceptions/OAuthSignatureException.java index 94692be5d..aceb37f9c 100644 --- a/src/main/java/org/scribe/exceptions/OAuthSignatureException.java +++ b/src/main/java/org/scribe/exceptions/OAuthSignatureException.java @@ -5,20 +5,18 @@ * * @author Pablo Fernandez */ -public class OAuthSignatureException extends OAuthException -{ - private static final long serialVersionUID = 1L; - private static final String MSG = "Error while signing string: %s"; - - /** - * Default constructor - * - * @param stringToSign plain string that gets signed (HMAC-SHA, etc) - * @param e original exception - */ - public OAuthSignatureException(String stringToSign, Exception e) - { - super(String.format(MSG, stringToSign), e); - } +public class OAuthSignatureException extends OAuthException { + private static final long serialVersionUID = 1L; + private static final String MSG = "Error while signing string: "; + + /** + * Default constructor + * + * @param stringToSign plain string that gets signed (HMAC-SHA, etc) + * @param e original exception + */ + public OAuthSignatureException(final String stringToSign, final Exception e) { + super(MSG + String.valueOf(stringToSign), e); + } } diff --git a/src/main/java/org/scribe/extractors/AccessTokenExtractor.java b/src/main/java/org/scribe/extractors/AccessTokenExtractor.java index 3c0dd34d6..8da755ab8 100644 --- a/src/main/java/org/scribe/extractors/AccessTokenExtractor.java +++ b/src/main/java/org/scribe/extractors/AccessTokenExtractor.java @@ -10,7 +10,7 @@ public interface AccessTokenExtractor { /** - * Extracts the access token from the contents of an Http Response + * Extracts the access token from the contents of an Http ResponseHttpImpl * * @param response the contents of the response * @return OAuth access token diff --git a/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java b/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java index ca21a0d1f..c358cb13d 100644 --- a/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java +++ b/src/main/java/org/scribe/extractors/BaseStringExtractorImpl.java @@ -1,8 +1,10 @@ package org.scribe.extractors; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.utils.*; +import org.scribe.exceptions.OAuthParametersMissingException; +import org.scribe.model.OAuthRequest; +import org.scribe.model.ParameterList; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; /** * Default implementation of {@link BaseStringExtractor}. Conforms to OAuth 1.0a @@ -10,39 +12,40 @@ * @author Pablo Fernandez * */ -public class BaseStringExtractorImpl implements BaseStringExtractor -{ +public class BaseStringExtractorImpl implements BaseStringExtractor { - private static final String AMPERSAND_SEPARATED_STRING = "%s&%s&%s"; + private static final String AMPERSAND_SEPARATOR = "&"; - /** - * {@inheritDoc} - */ - public String extract(OAuthRequest request) - { - checkPreconditions(request); - String verb = OAuthEncoder.encode(request.getVerb().name()); - String url = OAuthEncoder.encode(request.getSanitizedUrl()); - String params = getSortedAndEncodedParams(request); - return String.format(AMPERSAND_SEPARATED_STRING, verb, url, params); - } + /** + * {@inheritDoc} + */ + public String extract(final OAuthRequest request) { + checkPreconditions(request); + final String verb = OAuthEncoder.encode(request.getVerb().name()); + final String url = OAuthEncoder.encode(request.getUrl()); + final String params = getSortedAndEncodedParams(request); + final StringBuffer buffer = new StringBuffer(); + buffer.append(verb); + buffer.append(AMPERSAND_SEPARATOR); + buffer.append(url); + buffer.append(AMPERSAND_SEPARATOR); + buffer.append(params); + return buffer.toString(); + } - private String getSortedAndEncodedParams(OAuthRequest request) - { - ParameterList params = new ParameterList(); - params.addAll(request.getQueryStringParams()); - params.addAll(request.getBodyParams()); - params.addAll(new ParameterList(request.getOauthParameters())); - return params.sort().asOauthBaseString(); - } + private String getSortedAndEncodedParams(final OAuthRequest request) { + final ParameterList params = new ParameterList(); + params.addAll(request.getQueryStringParams()); + params.addAll(request.getBodyParams()); + params.addAll(new ParameterList(request.getOauthParameters())); + return params.sort().asOauthBaseString(); + } - private void checkPreconditions(OAuthRequest request) - { - Preconditions.checkNotNull(request, "Cannot extract base string from null object"); + private void checkPreconditions(final OAuthRequest request) { + Preconditions.checkNotNull(request, "Cannot extract base string from null object"); - if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) - { - throw new OAuthParametersMissingException(request); + if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) { + throw new OAuthParametersMissingException(request); + } } - } } diff --git a/src/main/java/org/scribe/extractors/HeaderExtractor.java b/src/main/java/org/scribe/extractors/HeaderExtractor.java index 2bc1f8bd4..e41080eb4 100644 --- a/src/main/java/org/scribe/extractors/HeaderExtractor.java +++ b/src/main/java/org/scribe/extractors/HeaderExtractor.java @@ -13,7 +13,7 @@ public interface HeaderExtractor * Generates an OAuth 'Authorization' Http header to include in requests as the signature. * * @param request the OAuthRequest to inspect and generate the header - * @return the Http header value + * @return the Http header name */ String extract(OAuthRequest request); } diff --git a/src/main/java/org/scribe/extractors/HeaderExtractorImpl.java b/src/main/java/org/scribe/extractors/HeaderExtractorImpl.java index 02094693f..a448f168d 100644 --- a/src/main/java/org/scribe/extractors/HeaderExtractorImpl.java +++ b/src/main/java/org/scribe/extractors/HeaderExtractorImpl.java @@ -1,10 +1,13 @@ package org.scribe.extractors; -import java.util.*; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.utils.*; +import org.scribe.exceptions.OAuthParametersMissingException; +import org.scribe.model.OAuthRequest; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; /** * Default implementation of {@link HeaderExtractor}. Conforms to OAuth 1.0a @@ -12,40 +15,41 @@ * @author Pablo Fernandez * */ -public class HeaderExtractorImpl implements HeaderExtractor -{ - private static final String PARAM_SEPARATOR = ", "; - private static final String PREAMBLE = "OAuth "; - public static final int ESTIMATED_PARAM_LENGTH = 20; +public class HeaderExtractorImpl implements HeaderExtractor { + private static final String PARAM_SEPARATOR = ", "; + private static final String PREAMBLE = "OAuth "; + public static final int ESTIMATED_PARAM_LENGTH = 20; - /** - * {@inheritDoc} - */ - public String extract(OAuthRequest request) - { - checkPreconditions(request); - Map parameters = request.getOauthParameters(); - StringBuilder header = new StringBuilder(parameters.size() * ESTIMATED_PARAM_LENGTH); - header.append(PREAMBLE); - for (Map.Entry entry : parameters.entrySet()) - { - if(header.length() > PREAMBLE.length()) - { - header.append(PARAM_SEPARATOR); - } - header.append(String.format("%s=\"%s\"", entry.getKey(), OAuthEncoder.encode(entry.getValue()))); + /** + * {@inheritDoc} + */ + public String extract(final OAuthRequest request) { + checkPreconditions(request); + final Map/**/parameters = request.getOauthParameters(); + final StringBuilder header = new StringBuilder(parameters.size() * ESTIMATED_PARAM_LENGTH); + header.append(PREAMBLE); + final Iterator i = parameters.entrySet().iterator(); + while (i.hasNext()) { + final Map.Entry/**/entry = (Entry) i.next(); + if (header.length() > PREAMBLE.length()) { + header.append(PARAM_SEPARATOR); + } + final StringBuffer buffer = new StringBuffer(); + buffer.append(entry.getKey()); + buffer.append("=\""); + buffer.append(OAuthEncoder.encode((String) entry.getValue())); + buffer.append("\""); + header.append(buffer.toString()); + } + return header.toString(); } - return header.toString(); - } - private void checkPreconditions(OAuthRequest request) - { - Preconditions.checkNotNull(request, "Cannot extract a header from a null object"); + private void checkPreconditions(final OAuthRequest request) { + Preconditions.checkNotNull(request, "Cannot extract a header from a null object"); - if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) - { - throw new OAuthParametersMissingException(request); + if (request.getOauthParameters() == null || request.getOauthParameters().size() <= 0) { + throw new OAuthParametersMissingException(request); + } } - } } diff --git a/src/main/java/org/scribe/extractors/JsonTokenExtractor.java b/src/main/java/org/scribe/extractors/JsonTokenExtractor.java index 801cd6296..214480f0f 100644 --- a/src/main/java/org/scribe/extractors/JsonTokenExtractor.java +++ b/src/main/java/org/scribe/extractors/JsonTokenExtractor.java @@ -1,27 +1,24 @@ package org.scribe.extractors; -import java.util.regex.*; +import org.apache.regexp.RE; +import org.apache.regexp.REUtil; +import org.scribe.exceptions.OAuthException; +import org.scribe.model.Token; +import org.scribe.utils.Preconditions; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.utils.*; +public class JsonTokenExtractor implements AccessTokenExtractor { + private static final String ACCESS_TOKEN_PATTERN = "\"access_token\":\\s*\"(\\S*?)\""; -public class JsonTokenExtractor implements AccessTokenExtractor -{ - private Pattern accessTokenPattern = Pattern.compile("\"access_token\":\\s*\"(\\S*?)\""); + public Token extract(final String response) { - public Token extract(String response) - { - Preconditions.checkEmptyString(response, "Cannot extract a token from a null or empty String"); - Matcher matcher = accessTokenPattern.matcher(response); - if(matcher.find()) - { - return new Token(matcher.group(1), "", response); + Preconditions.checkEmptyString(response, + "Cannot extract a token from a null or empty String"); + final RE accessTokenPattern = REUtil.createRE(ACCESS_TOKEN_PATTERN); + if (accessTokenPattern.match(response)) { + return new Token(accessTokenPattern.getParen(1), "", response); + } else { + throw new OAuthException("Cannot extract an acces token. ResponseHttpImpl was: " + + response); + } } - else - { - throw new OAuthException("Cannot extract an acces token. Response was: " + response); - } - } - } \ No newline at end of file diff --git a/src/main/java/org/scribe/extractors/RequestTokenExtractor.java b/src/main/java/org/scribe/extractors/RequestTokenExtractor.java index 1830212b6..3bc9f4d85 100644 --- a/src/main/java/org/scribe/extractors/RequestTokenExtractor.java +++ b/src/main/java/org/scribe/extractors/RequestTokenExtractor.java @@ -10,7 +10,7 @@ public interface RequestTokenExtractor { /** - * Extracts the request token from the contents of an Http Response + * Extracts the request token from the contents of an Http ResponseHttpImpl * * @param response the contents of the response * @return OAuth access token diff --git a/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java b/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java index 1eb22ad63..62f4bfa1c 100644 --- a/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java +++ b/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java @@ -1,36 +1,34 @@ package org.scribe.extractors; -import java.util.regex.*; +import org.scribe.exceptions.OAuthException; +import org.scribe.model.Token; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.utils.*; +public class TokenExtractor20Impl implements AccessTokenExtractor { + private static final String PARAM = "access_token"; + private static final String EMPTY_SECRET = ""; -/** - * Default implementation of {@AccessTokenExtractor}. Conforms to OAuth 2.0 - * - */ -public class TokenExtractor20Impl implements AccessTokenExtractor -{ - private static final String TOKEN_REGEX = "access_token=([^&]+)"; - private static final String EMPTY_SECRET = ""; + /** + * {@inheritDoc} + */ + public Token extract(final String response) { + Preconditions.checkEmptyString(response, + "ResponseHttpImpl body is incorrect. Can't extract a token from an empty string"); - /** - * {@inheritDoc} - */ - public Token extract(String response) - { - Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string"); + final int start = response.indexOf(PARAM + "="); + if (start >= 0) { + int end = response.indexOf("&", start); + if (end < 0) { + end = response.length() - 1; + } + final String token = OAuthEncoder.decode(response.substring(start + PARAM.length() + 1, + end)); + return new Token(token, EMPTY_SECRET, response); + } - Matcher matcher = Pattern.compile(TOKEN_REGEX).matcher(response); - if (matcher.find()) - { - String token = OAuthEncoder.decode(matcher.group(1)); - return new Token(token, EMPTY_SECRET, response); - } - else - { - throw new OAuthException("Response body is incorrect. Can't extract a token from this: '" + response + "'", null); + throw new OAuthException( + "ResponseHttpImpl body is incorrect. Can't extract a token from this: '" + response + + "'", null); } - } } diff --git a/src/main/java/org/scribe/extractors/TokenExtractorImpl.java b/src/main/java/org/scribe/extractors/TokenExtractorImpl.java index ba1784b9b..6a7c5a1e5 100644 --- a/src/main/java/org/scribe/extractors/TokenExtractorImpl.java +++ b/src/main/java/org/scribe/extractors/TokenExtractorImpl.java @@ -1,44 +1,35 @@ package org.scribe.extractors; -import java.util.regex.*; +import org.scribe.exceptions.OAuthException; +import org.scribe.model.Token; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; -import org.scribe.exceptions.*; -import org.scribe.model.*; -import org.scribe.utils.*; +public class TokenExtractorImpl implements RequestTokenExtractor, AccessTokenExtractor { -/** - * Default implementation of {@RequestTokenExtractor} and {@AccessTokenExtractor}. Conforms to OAuth 1.0a - * - * The process for extracting access and request tokens is similar so this class can do both things. - * - * @author Pablo Fernandez - */ -public class TokenExtractorImpl implements RequestTokenExtractor, AccessTokenExtractor -{ - private static final Pattern TOKEN_REGEX = Pattern.compile("oauth_token=([^&]+)"); - private static final Pattern SECRET_REGEX = Pattern.compile("oauth_token_secret=([^&]*)"); - - /** - * {@inheritDoc} - */ - public Token extract(String response) - { - Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string"); - String token = extract(response, TOKEN_REGEX); - String secret = extract(response, SECRET_REGEX); - return new Token(token, secret, response); - } - - private String extract(String response, Pattern p) - { - Matcher matcher = p.matcher(response); - if (matcher.find() && matcher.groupCount() >= 1) - { - return OAuthEncoder.decode(matcher.group(1)); + /** + * {@inheritDoc} + */ + public Token extract(final String response) { + Preconditions.checkEmptyString(response, + "ResponseHttpImpl body is incorrect. Can't extract a token from an empty string"); + final String token = extract(response, "oauth_token"); + final String secret = extract(response, "oauth_token_secret"); + return new Token(token, secret, response); } - else - { - throw new OAuthException("Response body is incorrect. Can't extract token and secret from this: '" + response + "'", null); + + public static String extract(final String response, final String param) { + final int start = response.indexOf(param + "="); + if (start >= 0) { + int end = response.indexOf("&", start); + if (end < 0) { + end = response.length() - 1; + } + return OAuthEncoder.decode(response.substring(start + param.length() + 1, end)); + } + throw new OAuthException( + "ResponseHttpImpl body is incorrect. Can't extract a token from this: '" + response + + "'", null); } - } + } diff --git a/src/main/java/org/scribe/model/OAuthConfig.java b/src/main/java/org/scribe/model/OAuthConfig.java index 374c95894..48cc95474 100644 --- a/src/main/java/org/scribe/model/OAuthConfig.java +++ b/src/main/java/org/scribe/model/OAuthConfig.java @@ -1,79 +1,87 @@ package org.scribe.model; -import java.io.*; +import java.io.OutputStream; /** * Parameter object that groups OAuth config values * * @author Pablo Fernandez */ -public class OAuthConfig -{ - private final String apiKey; - private final String apiSecret; - private final String callback; - private final SignatureType signatureType; - private final String scope; - private final OutputStream debugStream; - - public OAuthConfig(String key, String secret) - { - this(key, secret, null, null, null, null); - } +public class OAuthConfig { + private final String apiKey; + private final String apiSecret; + private final String callback; + private final SignatureType signatureType; + private final String scope; + private final OutputStream debugStream; + private OAuthRequestCreatorFactory requestCreator; - public OAuthConfig(String key, String secret, String callback, SignatureType type, String scope, OutputStream stream) - { - this.apiKey = key; - this.apiSecret = secret; - this.callback = callback; - this.signatureType = type; - this.scope = scope; - this.debugStream = stream; - } + public OAuthConfig(final String key, final String secret) { + this(key, secret, null, null, null, null); + } - public String getApiKey() - { - return apiKey; - } + public OAuthConfig(final String key, final String secret, final String callback, + final SignatureType type, final String scope, final OutputStream stream, + final OAuthRequestCreatorFactory requestCreator) { + this(key, secret, callback, type, scope, stream); + this.requestCreator = requestCreator; + } - public String getApiSecret() - { - return apiSecret; - } + public OAuthConfig(final String key, final String secret, final String callback, + final SignatureType type, final String scope, final OutputStream stream) { + apiKey = key; + apiSecret = secret; + this.callback = callback; + signatureType = type; + this.scope = scope; + debugStream = stream; + } - public String getCallback() - { - return callback; - } + public String getApiKey() { + return apiKey; + } - public SignatureType getSignatureType() - { - return signatureType; - } + public String getApiSecret() { + return apiSecret; + } - public String getScope() - { - return scope; - } + public String getCallback() { + return callback; + } - public boolean hasScope() - { - return scope != null; - } + public SignatureType getSignatureType() { + return signatureType; + } + + public String getScope() { + return scope; + } + + public boolean hasScope() { + return scope != null; + } + + public void log(String message) { + if (debugStream != null) { + message = message + "\n"; + try { + debugStream.write(message.getBytes("UTF8")); + } catch (final Exception e) { + throw new RuntimeException( + "there were problems while writting to the debug stream", e); + } + } + } - public void log(String message) - { - if (debugStream != null) - { - message = message + "\n"; - try - { - debugStream.write(message.getBytes("UTF8")); - } - catch (Exception e) - { - throw new RuntimeException("there were problems while writting to the debug stream", e); - } + /** + * @return + */ + public OAuthRequestCreatorFactory getOAuthRequestCreatorFactory() { + synchronized (this) { + if (requestCreator == null) { + requestCreator = new DefaultOAuthRequestCreatorFactory(); + } + } + return requestCreator; } - } } diff --git a/src/main/java/org/scribe/model/OAuthRequest.java b/src/main/java/org/scribe/model/OAuthRequest.java index 43892278f..5f185d39a 100644 --- a/src/main/java/org/scribe/model/OAuthRequest.java +++ b/src/main/java/org/scribe/model/OAuthRequest.java @@ -1,69 +1,174 @@ package org.scribe.model; -import java.util.*; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; /** - * The representation of an OAuth HttpRequest. + * The representation of an OAuth Request is a Bridge to the request object. The user can provide the underlying request object * - * Adds OAuth-related functionality to the {@link Request} - * - * @author Pablo Fernandez + * @author Duane Musser */ -public class OAuthRequest extends Request -{ - private static final String OAUTH_PREFIX = "oauth_"; - private Map oauthParameters; - - /** - * Default constructor. - * - * @param verb Http verb/method - * @param url resource URL - */ - public OAuthRequest(Verb verb, String url) - { - super(verb, url); - this.oauthParameters = new HashMap(); - } - - /** - * 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)) - { - return key; - } - else - { - throw new IllegalArgumentException(String.format("OAuth parameters must either be '%s' or start with '%s'", OAuthConstants.SCOPE, OAUTH_PREFIX)); - } - } - - /** - * Returns the {@link Map} containing the key-value pair of parameters. - * - * @return parameters as map - */ - public Map getOauthParameters() - { - return oauthParameters; - } - - @Override - public String toString() - { - return String.format("@OAuthRequest(%s, %s)", getVerb(), getUrl()); - } +public class OAuthRequest implements Request { + /** + * + */ + private static final String NOT_INTIALIZED = "Not intialized! Make sure RequestFactortImpl is provided."; + private static final String OAUTH_PREFIX = "oauth_"; + private final Map/**/oauthParameters; + + private final Request request; + + public OAuthRequest(final Request request) { + super(); + this.request = request; + oauthParameters = new HashMap/**/(); + } + + /** + * Adds an OAuth parameter. + * + * @param key name of the parameter + * @param name name of the parameter + * + * @throws IllegalArgumentException if the parameter is not an OAuth parameter + */ + public void addOAuthParameter(final String key, final String value) { + oauthParameters.put(checkKey(key), value); + } + + private String checkKey(final String key) { + if (key.startsWith(OAUTH_PREFIX) || key.equals(OAuthConstants.SCOPE)) { + return key; + } else { + throw new IllegalArgumentException("OAuth parameters must either be '" + + OAuthConstants.SCOPE + "' or start with '" + OAUTH_PREFIX + "'"); + } + } + + /** + * Returns the {@link Map} containing the key-name pair of parameters. + * + * @return parameters as map + */ + public Map/**/getOauthParameters() { + return oauthParameters; + } + + public String toString() { + return "@OAuthRequest(" + String.valueOf(getVerb()) + ", " + String.valueOf(getUrl()) + ")"; + } + + /** + * @see org.scribe.model.Request#addHeader(java.lang.String, java.lang.String) + */ + public void addHeader(final String key, final String value) { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + request.addHeader(key, value); + } + + /** + * @see org.scribe.model.Request#addBodyParameter(java.lang.String, java.lang.String) + */ + public void addBodyParameter(final String key, final String value) { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + request.addBodyParameter(key, value); + } + + /** + * @see org.scribe.model.Request#addQuerystringParameter(java.lang.String, java.lang.String) + */ + public void addQuerystringParameter(final String key, final String value) { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + request.addQuerystringParameter(key, value); + } + + /** + * @see org.scribe.model.Request#getQueryStringParams() + */ + public ParameterList getQueryStringParams() { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + return request.getQueryStringParams(); + } + + /** + * @see org.scribe.model.Request#getBodyParams() + */ + public ParameterList getBodyParams() { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + return request.getBodyParams(); + } + + /** + * @see org.scribe.model.Request#getUrl() + */ + public String getUrl() { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + return request.getUrl(); + } + + /** + * @see org.scribe.model.Request#getVerb() + */ + public Verb getVerb() { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + return request.getVerb(); + } + + /** + * @see org.scribe.model.Request#getHeaders() + */ + public Map getHeaders() { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + return request.getHeaders(); + } + + /** + * @throws IOException + * @see org.scribe.model.Request#send() + */ + public Response send() throws IOException { + if (request == null) { + throw new IllegalAccessError(NOT_INTIALIZED); + } + return request.send(); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#addPayload(java.lang.String) + */ + public void addPayload(final String payload) throws IOException { + request.addPayload(payload); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#addPayload(byte[]) + */ + public void addPayload(final byte[] payload) throws IOException { + request.addPayload(payload); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getPayload() + */ + public String getPayload() { + return request.getPayload(); + } + } diff --git a/src/main/java/org/scribe/model/Parameter.java b/src/main/java/org/scribe/model/Parameter.java index f8f3b81f6..f91a28cb0 100644 --- a/src/main/java/org/scribe/model/Parameter.java +++ b/src/main/java/org/scribe/model/Parameter.java @@ -1,47 +1,53 @@ package org.scribe.model; -import org.scribe.utils.*; +import org.scribe.utils.OAuthEncoder; /** * @author: Pablo Fernandez */ -public class Parameter implements Comparable +public class Parameter implements Comparable/**/ { - private static final String UTF = "UTF8"; - - private final String key; - private final String value; - - public Parameter(String key, String value) - { - this.key = key; - this.value = value; - } - - public String asUrlEncodedPair() - { - return OAuthEncoder.encode(key).concat("=").concat(OAuthEncoder.encode(value)); - } - - public boolean equals(Object other) - { - if(other == null) return false; - if(other == this) return true; - if(!(other instanceof Parameter)) return false; - - Parameter otherParam = (Parameter) other; - return otherParam.key.equals(key) && otherParam.value.equals(value); - } - - public int hashCode() - { - return key.hashCode() + value.hashCode(); - } - - public int compareTo(Parameter parameter) - { - int keyDiff = key.compareTo(parameter.key); - - return keyDiff != 0 ? keyDiff : value.compareTo(parameter.value); - } + private final String key; + private final String value; + + public Parameter(final String key, final String value) { + this.key = key; + this.value = value; + } + + public String asUrlEncodedPair() { + return OAuthEncoder.encode(key).concat("=").concat(OAuthEncoder.encode(value)); + } + + public boolean equals(final Object other) { + if (other == null) { + return false; + } + if (other == this) { + return true; + } + if (!(other instanceof Parameter)) { + return false; + } + + final Parameter otherParam = (Parameter) other; + return otherParam.key.equals(key) && otherParam.value.equals(value); + } + + public int hashCode() { + return key.hashCode() + value.hashCode(); + } + + public int compareTo(final Object o) { + if (o instanceof Parameter) { + return compareTo((Parameter) o); + } + return 1; + } + + public int compareTo(final Parameter parameter) { + final int keyDiff = key.compareTo(parameter.key); + + return keyDiff != 0 ? keyDiff : value.compareTo(parameter.value); + } } diff --git a/src/main/java/org/scribe/model/ParameterList.java b/src/main/java/org/scribe/model/ParameterList.java index b365cbaf6..1d1f59f96 100644 --- a/src/main/java/org/scribe/model/ParameterList.java +++ b/src/main/java/org/scribe/model/ParameterList.java @@ -2,113 +2,106 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.lang.StringUtils; import org.scribe.utils.OAuthEncoder; import org.scribe.utils.Preconditions; /** * @author: Pablo Fernandez */ -public class ParameterList -{ - private static final char QUERY_STRING_SEPARATOR = '?'; - private static final String PARAM_SEPARATOR = "&"; - private static final String PAIR_SEPARATOR = "="; - private static final String EMPTY_STRING = ""; - - private final List params; - - public ParameterList() - { - params = new ArrayList(); - } - - ParameterList(List params) - { - this.params = new ArrayList(params); - } - - public ParameterList(Map map) - { - this(); - for(Map.Entry entry : map.entrySet()) - { - params.add(new Parameter(entry.getKey(), entry.getValue())); +public class ParameterList { + private static final String QUERY_STRING_SEPARATOR = "?"; + private static final String PARAM_SEPARATOR = "&"; + private static final String PAIR_SEPARATOR = "="; + private static final String EMPTY_STRING = ""; + + private final List/**/params; + + public ParameterList() { + params = new ArrayList/**/(); } - } - - public void add(String key, String value) - { - params.add(new Parameter(key, value)); - } - - public String appendTo(String url) - { - Preconditions.checkNotNull(url, "Cannot append to null URL"); - String queryString = asFormUrlEncodedString(); - if (queryString.equals(EMPTY_STRING)) - { - return url; + + ParameterList(final List/**/params) { + this.params = new ArrayList/**/(params); } - else - { - url += url.indexOf(QUERY_STRING_SEPARATOR) != -1 ? PARAM_SEPARATOR : QUERY_STRING_SEPARATOR; - url += queryString; - return url; + + public ParameterList(final Map/**/map) { + this(); + final Iterator i = map.entrySet().iterator(); + while (i.hasNext()) { + final Map.Entry/**/entry = (Entry) i.next(); + params.add(new Parameter((String) entry.getKey(), (String) entry.getValue())); + } } - } - public String asOauthBaseString() - { - return OAuthEncoder.encode(asFormUrlEncodedString()); - } + public void add(final String key, final String value) { + params.add(new Parameter(key, value)); + } - public String asFormUrlEncodedString() - { - if (params.size() == 0) return EMPTY_STRING; + public String appendTo(String url) { + Preconditions.checkNotNull(url, "Cannot append to null URL"); + final String queryString = asFormUrlEncodedString(); + if (EMPTY_STRING.equals(queryString)) { + return url; + } else { + url += url.indexOf(QUERY_STRING_SEPARATOR) < 0 ? QUERY_STRING_SEPARATOR + : PARAM_SEPARATOR; + url += queryString; + return url; + } + } - StringBuilder builder = new StringBuilder(); - for(Parameter p : params) - { - builder.append('&').append(p.asUrlEncodedPair()); + public String asOauthBaseString() { + return OAuthEncoder.encode(asFormUrlEncodedString()); } - return builder.toString().substring(1); - } - - public void addAll(ParameterList other) - { - params.addAll(other.params); - } - - public void addQuerystring(String queryString) - { - if (queryString != null && queryString.length() > 0) - { - for (String param : queryString.split(PARAM_SEPARATOR)) - { - String pair[] = param.split(PAIR_SEPARATOR); - String key = OAuthEncoder.decode(pair[0]); - String value = pair.length > 1 ? OAuthEncoder.decode(pair[1]) : EMPTY_STRING; - params.add(new Parameter(key, value)); - } + + public String asFormUrlEncodedString() { + if (params.size() == 0) { + return EMPTY_STRING; + } + + final StringBuffer builder = new StringBuffer(); + final Iterator i = params.iterator(); + while (i.hasNext()) { + final Parameter p = (Parameter) i.next(); + builder.append('&').append(p.asUrlEncodedPair()); + } + return builder.toString().substring(1); + } + + public void addAll(final ParameterList other) { + params.addAll(other.params); + } + + public void addQuerystring(final String queryString) { + if (queryString != null && queryString.length() > 0) { + final String[] vals = StringUtils.split(queryString, PARAM_SEPARATOR); + for (int i = 0; i < vals.length; i++) { + final String param = vals[i]; + final String pair[] = StringUtils.split(param, PAIR_SEPARATOR); + final String key = OAuthEncoder.decode(pair[0]); + final String value = pair.length > 1 ? OAuthEncoder.decode(pair[1]) : EMPTY_STRING; + params.add(new Parameter(key, value)); + } + } + } + + public boolean contains(final Parameter param) { + return params.contains(param); + } + + public int size() { + return params.size(); + } + + public ParameterList sort() { + final ParameterList sorted = new ParameterList(params); + Collections.sort(sorted.params); + return sorted; } - } - - public boolean contains(Parameter param) - { - return params.contains(param); - } - - public int size() - { - return params.size(); - } - - public ParameterList sort() - { - ParameterList sorted = new ParameterList(params); - Collections.sort(sorted.params); - return sorted; - } } diff --git a/src/main/java/org/scribe/model/Request.java b/src/main/java/org/scribe/model/Request.java index 0202db0a2..a015233ab 100644 --- a/src/main/java/org/scribe/model/Request.java +++ b/src/main/java/org/scribe/model/Request.java @@ -1,382 +1,112 @@ -package org.scribe.model; - -import java.io.*; -import java.net.*; -import java.nio.charset.*; -import java.util.*; -import java.util.concurrent.*; - -import org.scribe.exceptions.*; - -/** - * Represents an HTTP Request object - * - * @author Pablo Fernandez - */ -public class Request -{ - private static final String CONTENT_LENGTH = "Content-Length"; - private static final String CONTENT_TYPE = "Content-Type"; - private static RequestTuner NOOP = new RequestTuner() { - @Override public void tune(Request _){} - }; - public static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded"; - - private String url; - private Verb verb; - private ParameterList querystringParams; - private ParameterList bodyParams; - private Map headers; - private String payload = null; - private HttpURLConnection connection; - private String charset; - private byte[] bytePayload = null; - private boolean connectionKeepAlive = false; - private boolean followRedirects = true; - private Long connectTimeout = null; - private Long readTimeout = null; - - /** - * Creates a new Http Request - * - * @param verb Http Verb (GET, POST, etc) - * @param url url with optional querystring parameters. - */ - public Request(Verb verb, String url) - { - this.verb = verb; - this.url = url; - this.querystringParams = new ParameterList(); - this.bodyParams = new ParameterList(); - this.headers = new HashMap(); - } - - /** - * Execute the request and return a {@link Response} - * - * @return Http Response - * @throws RuntimeException - * if the connection cannot be created. - */ - public Response send(RequestTuner tuner) - { - try - { - createConnection(); - return doSend(tuner); - } - catch (Exception e) - { - throw new OAuthConnectionException(e); - } - } - - public Response send() - { - return send(NOOP); - } - - private void createConnection() throws IOException - { - String completeUrl = getCompleteUrl(); - if (connection == null) - { - System.setProperty("http.keepAlive", connectionKeepAlive ? "true" : "false"); - connection = (HttpURLConnection) new URL(completeUrl).openConnection(); - connection.setInstanceFollowRedirects(followRedirects); - } - } - - /** - * Returns the complete url (host + resource + encoded querystring parameters). - * - * @return the complete url. - */ - public String getCompleteUrl() - { - return querystringParams.appendTo(url); - } - - Response doSend(RequestTuner tuner) throws IOException - { - connection.setRequestMethod(this.verb.name()); - if (connectTimeout != null) - { - connection.setConnectTimeout(connectTimeout.intValue()); - } - if (readTimeout != null) - { - connection.setReadTimeout(readTimeout.intValue()); - } - addHeaders(connection); - if (verb.equals(Verb.PUT) || verb.equals(Verb.POST)) - { - addBody(connection, getByteBodyContents()); - } - tuner.tune(this); - return new Response(connection); - } - - void addHeaders(HttpURLConnection conn) - { - for (String key : headers.keySet()) - conn.setRequestProperty(key, headers.get(key)); - } - - void addBody(HttpURLConnection conn, byte[] content) throws IOException - { - conn.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length)); - - // Set default content type if none is set. - if (conn.getRequestProperty(CONTENT_TYPE) == null) - { - conn.setRequestProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - conn.setDoOutput(true); - conn.getOutputStream().write(content); - } - - /** - * 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); - } - - /** - * Add 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; - } - - /** - * Overloaded version for byte arrays - * - * @param payload - */ - public void addPayload(byte[] payload) - { - this.bytePayload = payload.clone(); - } - - /** - * 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 - { - ParameterList result = new ParameterList(); - 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() - { - return url.replaceAll("\\?.*", "").replace("\\:\\d{4}", ""); - } - - /** - * Returns the body of the request - * - * @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); - } - } - - byte[] getByteBodyContents() - { - if (bytePayload != null) return bytePayload; - String body = (payload != null) ? payload : bodyParams.asFormUrlEncodedString(); - try - { - return body.getBytes(getCharset()); - } - catch(UnsupportedEncodingException uee) - { - throw new OAuthException("Unsupported Charset: "+getCharset(), uee); - } - } - - /** - * Returns the HTTP Verb - * - * @return the verb - */ - public Verb getVerb() - { - return verb; - } - - /** - * Returns the connection headers as a {@link Map} - * - * @return map of headers - */ - public Map getHeaders() - { - return headers; - } - - /** - * Returns the connection charset. Defaults to {@link Charset} defaultCharset if not set - * - * @return charset - */ - public String getCharset() - { - return charset == null ? Charset.defaultCharset().name() : charset; - } - - /** - * Sets the connect timeout for the underlying {@link HttpURLConnection} - * - * @param duration duration of the timeout - * - * @param unit unit of time (milliseconds, seconds, etc) - */ - public void setConnectTimeout(int duration, TimeUnit unit) - { - this.connectTimeout = unit.toMillis(duration); - } - - /** - * Sets the read timeout for the underlying {@link HttpURLConnection} - * - * @param duration duration of the timeout - * - * @param unit unit of time (milliseconds, seconds, etc) - */ - public void setReadTimeout(int duration, TimeUnit unit) - { - this.readTimeout = unit.toMillis(duration); - } - - /** - * Set the charset of the body of the request - * - * @param charsetName name of the charset of the request - */ - public void setCharset(String charsetName) - { - this.charset = charsetName; - } - - /** - * Sets whether the underlying Http Connection is persistent or not. - * - * @see http://download.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html - * @param connectionKeepAlive - */ - public void setConnectionKeepAlive(boolean connectionKeepAlive) - { - this.connectionKeepAlive = connectionKeepAlive; - } - - /** - * 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 - */ - public void setFollowRedirects(boolean followRedirects) - { - this.followRedirects = followRedirects; - } - - /* - * We need this in order to stub the connection object for test cases - */ - void setConnection(HttpURLConnection connection) - { - this.connection = connection; - } - - @Override - public String toString() - { - return String.format("@Request(%s %s)", getVerb(), getUrl()); - } -} +/** + * + */ +package org.scribe.model; + +import java.io.IOException; +import java.util.Map; + +import org.scribe.exceptions.OAuthException; + +/** + * @author DMusser + * + */ +public interface Request { + + public static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded"; + + /** + * Execute the request and return a {@link ResponseHttpImpl} + * + * @return Response + * @throws IOException + */ + public Response send() throws IOException; + + /** + * Add an HTTP Header to the RequestHttpImpl + * + * @param key the header name + * @param name the header name + */ + public void addHeader(final String key, final String value); + + /** + * Add a body Parameter (for POST/ PUT Requests) + * + * @param key the parameter name + * @param name the parameter name + */ + public void addBodyParameter(final String key, final String value); + + /** + * Add a QueryString parameter + * + * @param key the parameter name + * @param name the parameter name + */ + public void addQuerystringParameter(final String key, final String value); + + /** + * Add 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(final String payload) throws IOException; + + /** + * Overloaded version for byte arrays + * + * @param payload + */ + public void addPayload(final byte[] payload) throws IOException; + + /** + * + * @return + */ + public String getPayload(); + + /** + * 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(); + + /** + * Obtains a {@link ParameterList} of the body parameters. + * + * @return a {@link ParameterList}containing the body parameters. + */ + public ParameterList getBodyParams(); + + /** + * Obtains the URL of the HTTP RequestHttpImpl. + * + * @return the original URL of the HTTP RequestHttpImpl + */ + public String getUrl(); + + /** + * Returns the HTTP Verb + * + * @return the verb + */ + public Verb getVerb(); + + /** + * Returns the connection headers as a {@link Map} + * + * @return map of headers + */ + public Map/**/getHeaders(); + +} \ No newline at end of file diff --git a/src/main/java/org/scribe/model/RequestHttpImpl.java b/src/main/java/org/scribe/model/RequestHttpImpl.java new file mode 100644 index 000000000..6598564a9 --- /dev/null +++ b/src/main/java/org/scribe/model/RequestHttpImpl.java @@ -0,0 +1,183 @@ +package org.scribe.model; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.scribe.exceptions.OAuthException; + +/** + * Represents an HTTP RequestHttpImpl object + */ +public class RequestHttpImpl implements Request { + + private static final String CONTENT_LENGTH = "Content-Length"; + private static final String CONTENT_TYPE = "Content-Type"; + private final String url; + private final Verb verb; + private final ParameterList querystringParams; + private final ParameterList bodyParams; + private final Map/**/headers; + private String charset; + private String content = null; + + private HttpURLConnection connection; + + /** + * Creates a new Http RequestHttpImpl + * + * @param verb Http Verb (GET, POST, etc) + * @param url url with optional querystring parameters. + */ + public RequestHttpImpl(final Verb verb, final String url) { + super(); + this.verb = verb; + this.url = url; + querystringParams = new ParameterList(); + bodyParams = new ParameterList(); + headers = new HashMap/**/(); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getCompleteUrl() + */ + public String getCompleteUrl() { + return querystringParams.appendTo(url); + } + + void addHeaders(final HttpURLConnection conn) { + final Iterator i = headers.keySet().iterator(); + while (i.hasNext()) { + final String key = (String) i.next(); + conn.setRequestProperty(key, (String) headers.get(key)); + } + } + + public void addPayload(final byte[] content) throws IOException { + addPayload(new String(content)); + } + + public void addPayload(final String content) throws IOException { + this.content = content; + } + + public String getPayload() { + return content; + } + + /** + * TODO implement + */ + public Response send() throws IOException { + connection.setRequestProperty(CONTENT_LENGTH, String.valueOf(content.length())); + + // Set default content type if none is set. + if (connection.getRequestProperty(CONTENT_TYPE) == null) { + connection.setRequestProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + connection.setDoOutput(true); + // connection.getOutputStream().write(content); + final Response response = new ResponseHttpImpl(connection); + return response; + // return null; + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#addHeader(java.lang.String, java.lang.String) + */ + public void addHeader(final String key, final String value) { + headers.put(key, value); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#addBodyParameter(java.lang.String, java.lang.String) + */ + public void addBodyParameter(final String key, final String value) { + bodyParams.add(key, value); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#addQuerystringParameter(java.lang.String, java.lang.String) + */ + public void addQuerystringParameter(final String key, final String value) { + querystringParams.add(key, value); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getQueryStringParams() + */ + 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 (final MalformedURLException mue) { + throw new OAuthException("Malformed URL", mue); + } + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getBodyParams() + */ + public ParameterList getBodyParams() { + return bodyParams; + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getUrl() + */ + public String getUrl() { + return url; + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getSanitizedUrl() + */ + public String getSanitizedUrl() { + return StringUtils.replace(StringUtils.replace(url, "\\?.*", ""), "\\:\\d{4}", ""); + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getVerb() + */ + public Verb getVerb() { + return verb; + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getHeaders() + */ + public Map/**/getHeaders() { + return headers; + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#getCharset() + */ + public String getCharset() { + return charset == null ? Charset.defaultCharset().name() : charset; + } + + /* (non-Javadoc) + * @see org.scribe.model.Request#toString() + */ + public String toString() { + return "@RequestHttpImpl(" + String.valueOf(getVerb()) + " " + getUrl() + ")"; + } + + /** + * @return + */ + public String getBodyContents() { + return getPayload(); + } + +} diff --git a/src/main/java/org/scribe/model/Response.java b/src/main/java/org/scribe/model/Response.java index d433922c6..711c28f59 100644 --- a/src/main/java/org/scribe/model/Response.java +++ b/src/main/java/org/scribe/model/Response.java @@ -1,126 +1,63 @@ -package org.scribe.model; - -import java.io.*; -import java.net.*; -import java.util.*; - -import org.scribe.exceptions.*; -import org.scribe.utils.*; - /** - * Represents an HTTP Response. * - * @author Pablo Fernandez */ -public class Response -{ - private static final String EMPTY = ""; - - private int code; - private String message; - private String body; - private InputStream stream; - private Map headers; - - 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() - { - body = StreamUtils.getStreamContents(getStream()); - return body; - } - - private Map parseHeaders(HttpURLConnection conn) - { - Map headers = new HashMap(); - for (String key : conn.getHeaderFields().keySet()) - { - headers.put(key, conn.getHeaderFields().get(key).get(0)); - } - return headers; - } - - public boolean isSuccessful() - { - return getCode() >= 200 && getCode() < 400; - } - - /** - * Obtains the HTTP Response body - * - * @return response body - */ - public String getBody() - { - return body != null ? body : parseBodyContents(); - } - - /** - * Obtains the meaningful stream of the HttpUrlConnection, either inputStream - * or errorInputStream, depending on the status code - * - * @return input stream / error stream - */ - public InputStream getStream() - { - return stream; - } - - /** - * Obtains the HTTP status code - * - * @return the status code - */ - public int getCode() - { - return code; - } - - /** - * Obtains the HTTP status message. - * Returns null if the message can not be discerned from the response (not valid HTTP) - * - * @return the status message - */ - public String getMessage() - { - return message; - } +package org.scribe.model; - /** - * Obtains a {@link Map} containing the HTTP Response Headers - * - * @return headers - */ - public Map getHeaders() - { - return headers; - } +import java.io.InputStream; +import java.util.Map; - /** - * Obtains a single HTTP Header value, or null if undefined - * - * @param name the header name. - * - * @return header value or null. - */ - public String getHeader(String name) - { - return headers.get(name); - } +/** + * @author DMusser + * + */ +public interface Response { + + public boolean isSuccessful(); + + /** + * Obtains the HTTP ResponseHttpImpl body + * + * @return response body + */ + public String getBody(); + + /** + * Obtains the meaningful stream of the HttpUrlConnection, either inputStream + * or errorInputStream, depending on the status code + * + * @return input stream / error stream + */ + public InputStream getStream(); + + /** + * Obtains the HTTP status code + * + * @return the status code + */ + public int getCode(); + + /** + * Obtains the HTTP status message. + * Returns null if the message can not be discerned from the response (not valid HTTP) + * + * @return the status message + */ + public String getMessage(); + + /** + * Obtains a {@link Map} containing the HTTP ResponseHttpImpl Headers + * + * @return headers + */ + public Map/**/getHeaders(); + + /** + * Obtains a single HTTP Header name, or null if undefined + * + * @param name the header name. + * + * @return header name or null. + */ + public String getHeader(final String name); } \ No newline at end of file diff --git a/src/main/java/org/scribe/model/ResponseHttpImpl.java b/src/main/java/org/scribe/model/ResponseHttpImpl.java new file mode 100644 index 000000000..8d60df56d --- /dev/null +++ b/src/main/java/org/scribe/model/ResponseHttpImpl.java @@ -0,0 +1,104 @@ +package org.scribe.model; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.UnknownHostException; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.scribe.exceptions.OAuthException; +import org.scribe.utils.StreamUtils; + +/** + * Represents an HTTP ResponseHttpImpl. + * + * @author Pablo Fernandez + */ +public class ResponseHttpImpl implements Response { + + private int code; + private String message; + private String body; + private InputStream stream; + private Map/**/headers; + + ResponseHttpImpl(final HttpURLConnection connection) throws IOException { + try { + connection.connect(); + code = connection.getResponseCode(); + message = connection.getResponseMessage(); + headers = parseHeaders(connection); + stream = isSuccessful() ? connection.getInputStream() : connection.getErrorStream(); + } catch (final UnknownHostException e) { + throw new OAuthException("The IP address of a host could not be determined.", e); + } + } + + private String parseBodyContents() { + body = StreamUtils.getStreamContents(getStream()); + return body; + } + + private Map/**/parseHeaders(final HttpURLConnection conn) { + final Map/**/headers = new HashMap/**/(); + final Iterator i = conn.getHeaderFields().keySet().iterator(); + while (i.hasNext()) { + final String key = (String) i.next(); + headers.put(key, ((Collection) conn.getHeaderFields().get(key)).toArray()[0]); + } + return headers; + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#isSuccessful() + */ + public boolean isSuccessful() { + return getCode() >= 200 && getCode() < 400; + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#getBody() + */ + public String getBody() { + return body != null ? body : parseBodyContents(); + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#getStream() + */ + public InputStream getStream() { + return stream; + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#getCode() + */ + public int getCode() { + return code; + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#getMessage() + */ + public String getMessage() { + return message; + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#getHeaders() + */ + public Map/**/getHeaders() { + return headers; + } + + /* (non-Javadoc) + * @see org.scribe.model.Response#getHeader(java.lang.String) + */ + public String getHeader(final String name) { + return (String) headers.get(name); + } + +} \ 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..670accae5 100644 --- a/src/main/java/org/scribe/model/SignatureType.java +++ b/src/main/java/org/scribe/model/SignatureType.java @@ -1,7 +1,58 @@ package org.scribe.model; -public enum SignatureType -{ - Header, - QueryString +public class SignatureType { + public static final SignatureType Header = new SignatureType("Header"); + public static final SignatureType QueryString = new SignatureType("QueryString"); + + final String name; + + public SignatureType(final String string) { + super(); + name = string; + } + + public String name() { + return name; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Verb other = (Verb) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString() { + return name; + } } diff --git a/src/main/java/org/scribe/model/Token.java b/src/main/java/org/scribe/model/Token.java index 4d8c0eeb5..b30bb5c35 100644 --- a/src/main/java/org/scribe/model/Token.java +++ b/src/main/java/org/scribe/model/Token.java @@ -1,98 +1,89 @@ package org.scribe.model; -import java.io.*; -import org.scribe.utils.*; +import java.io.Serializable; + +import org.scribe.utils.Preconditions; /** * Represents an OAuth token (either request or access token) and its secret * * @author Pablo Fernandez */ -public class Token implements Serializable -{ - private static final long serialVersionUID = 715000866082812683L; - - private final String token; - private final String secret; - private final String rawResponse; - - /** - * Default constructor - * - * @param token token value. Can't be null. - * @param secret token secret. Can't be null. - */ - public Token(String token, String secret) - { - this(token, secret, null); - } - - public Token(String token, String secret, String rawResponse) - { - Preconditions.checkNotNull(token, "Token can't be null"); - Preconditions.checkNotNull(secret, "Secret can't be null"); - - this.token = token; - this.secret = secret; - this.rawResponse = rawResponse; - } - - public String getToken() - { - return token; - } - - public String getSecret() - { - return secret; - } - - public String getRawResponse() - { - if (rawResponse == null) - { - throw new IllegalStateException("This token object was not constructed by scribe and does not have a rawResponse"); +public class Token implements Serializable { + private static final long serialVersionUID = 715000866082812683L; + + private final String token; + private final String secret; + private final String rawResponse; + + /** + * Default constructor + * + * @param token token name. Can't be null. + * @param secret token secret. Can't be null. + */ + public Token(final String token, final String secret) { + this(token, secret, null); + } + + public Token(final String token, final String secret, final String rawResponse) { + Preconditions.checkNotNull(token, "Token can't be null"); + Preconditions.checkNotNull(secret, "Secret can't be null"); + + this.token = token; + this.secret = secret; + this.rawResponse = rawResponse; + } + + public String getToken() { + return token; + } + + public String getSecret() { + return secret; + } + + public String getRawResponse() { + if (rawResponse == null) { + throw new IllegalStateException( + "This token object was not constructed by scribe and does not have a rawResponse"); + } + return rawResponse; + } + + public String toString() { + return "Token[" + String.valueOf(token) + String.valueOf(secret) + "]"; + } + + /** + * Returns true if the token is empty (token = "", secret = "") + */ + public boolean isEmpty() { + return "".equals(token) && "".equals(secret); + } + + /** + * Factory method that returns an empty token (token = "", secret = ""). + * + * Useful for two legged OAuth. + */ + public static Token empty() { + return new Token("", ""); + } + + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + final Token that = (Token) o; + return token.equals(that.token) && secret.equals(that.secret); + } + + public int hashCode() { + return 31 * token.hashCode() + secret.hashCode(); } - return rawResponse; - } - - @Override - public String toString() - { - return String.format("Token[%s , %s]", token, secret); - } - - /** - * Returns true if the token is empty (token = "", secret = "") - */ - public boolean isEmpty() - { - return "".equals(this.token) && "".equals(this.secret); - } - - /** - * Factory method that returns an empty token (token = "", secret = ""). - * - * Useful for two legged OAuth. - */ - public static Token empty() - { - return new Token("", ""); - } - - @Override - public boolean equals(Object o) - { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Token that = (Token) o; - return token.equals(that.token) && secret.equals(that.secret); - } - - @Override - public int hashCode() - { - return 31 * token.hashCode() + secret.hashCode(); - } } diff --git a/src/main/java/org/scribe/model/Verb.java b/src/main/java/org/scribe/model/Verb.java index 0c22f6690..daa9f75e3 100644 --- a/src/main/java/org/scribe/model/Verb.java +++ b/src/main/java/org/scribe/model/Verb.java @@ -5,7 +5,70 @@ * * @author Pablo Fernandez */ -public enum Verb -{ - GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, PATCH +public class Verb { + + public static final Verb GET = new Verb("GET"); + public static final Verb POST = new Verb("POST"); + public static final Verb PUT = new Verb("PUT"); + public static final Verb DELETE = new Verb("DELETE"); + public static final Verb HEAD = new Verb("HEAD"); + public static final Verb OPTIONS = new Verb("OPTIONS"); + public static final Verb TRACE = new Verb("TRACE"); + public static final Verb PATCH = new Verb("PATCH"); + + final String name; + + /** + * @param string + */ + public Verb(final String string) { + super(); + name = string; + } + + public String name() { + return name; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Verb other = (Verb) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString() { + return name; + } + } diff --git a/src/main/java/org/scribe/model/Verifier.java b/src/main/java/org/scribe/model/Verifier.java index 45f0e4ea3..df3ea34f1 100644 --- a/src/main/java/org/scribe/model/Verifier.java +++ b/src/main/java/org/scribe/model/Verifier.java @@ -15,7 +15,7 @@ public class Verifier /** * Default constructor. * - * @param value verifier value + * @param name verifier name */ public Verifier(String value) { diff --git a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java index abde25399..5e064ff31 100644 --- a/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth10aServiceImpl.java @@ -1,190 +1,177 @@ package org.scribe.oauth; -import java.util.*; - -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.services.*; -import org.scribe.utils.*; -import java.util.concurrent.TimeUnit; +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; + +import org.scribe.builder.api.DefaultApi10a; +import org.scribe.model.OAuthConfig; +import org.scribe.model.OAuthConstants; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.SignatureType; +import org.scribe.model.Token; +import org.scribe.model.Verifier; +import org.scribe.services.Base64Encoder; +import org.scribe.utils.MapUtils; /** * OAuth 1.0a implementation of {@link OAuthService} * * @author Pablo Fernandez */ -public class OAuth10aServiceImpl implements OAuthService -{ - private static final String VERSION = "1.0"; - - private OAuthConfig config; - private DefaultApi10a api; - - /** - * Default constructor - * - * @param api OAuth1.0a api information - * @param config OAuth 1.0a configuration param object - */ - public OAuth10aServiceImpl(DefaultApi10a api, OAuthConfig config) - { - this.api = api; - this.config = config; - } - - /** - * {@inheritDoc} - */ - public Token getRequestToken(int timeout, TimeUnit unit) - { - return getRequestToken(new TimeoutTuner(timeout, unit)); - } - - public Token getRequestToken() - { - return getRequestToken(2, TimeUnit.SECONDS); - } - - public Token getRequestToken(RequestTuner tuner) - { - config.log("obtaining request token from " + api.getRequestTokenEndpoint()); - OAuthRequest request = new OAuthRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); - - config.log("setting oauth_callback to " + config.getCallback()); - request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback()); - addOAuthParams(request, OAuthConstants.EMPTY_TOKEN); - appendSignature(request); - - config.log("sending request..."); - Response response = request.send(tuner); - String body = response.getBody(); - - config.log("response status code: " + response.getCode()); - config.log("response body: " + body); - return api.getRequestTokenExtractor().extract(body); - } - - private void addOAuthParams(OAuthRequest request, Token token) - { - request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService().getTimestampInSeconds()); - request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); - 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()); - request.addOAuthParameter(OAuthConstants.SIGNATURE, getSignature(request, token)); - - config.log("appended additional OAuth parameters: " + MapUtils.toString(request.getOauthParameters())); - } - - /** - * {@inheritDoc} - */ - public Token getAccessToken(Token requestToken, Verifier verifier, int timeout, TimeUnit unit) - { - return getAccessToken(requestToken, verifier, new TimeoutTuner(timeout, unit)); - } - - public Token getAccessToken(Token requestToken, Verifier verifier) - { - return getAccessToken(requestToken, verifier, 2, TimeUnit.SECONDS); - } - - public Token getAccessToken(Token requestToken, Verifier verifier, RequestTuner tuner) - { - config.log("obtaining access token from " + api.getAccessTokenEndpoint()); - OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); - 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); - appendSignature(request); - Response response = request.send(tuner); - return api.getAccessTokenExtractor().extract(response.getBody()); - } - - /** - * {@inheritDoc} - */ - public void signRequest(Token token, OAuthRequest request) - { - config.log("signing request: " + request.getCompleteUrl()); - - // Do not append the token if empty. This is for two legged OAuth calls. - if (!token.isEmpty()) - { - request.addOAuthParameter(OAuthConstants.TOKEN, token.getToken()); +public class OAuth10aServiceImpl implements OAuthService { + private static final String VERSION = "1.0"; + + protected final OAuthConfig config; + protected final DefaultApi10a api; + + /** + * Default constructor + * + * @param api OAuth1.0a api information + * @param config OAuth 1.0a configuration param object + */ + public OAuth10aServiceImpl(final DefaultApi10a api, final OAuthConfig config) { + this.api = api; + this.config = config; + } + + public Token getRequestToken() throws IOException { + return getRequestToken(null); + } + + public Token getRequestToken(final Map parameters) throws IOException { + config.log("obtaining request token from " + api.getRequestTokenEndpoint()); + final OAuthRequest request = config + .getOAuthRequestCreatorFactory() + .createRequestTokenRequest(api.getRequestTokenVerb(), api.getRequestTokenEndpoint()); + if (parameters != null && parameters.size() > 0) { + final Iterator i = parameters.keySet().iterator(); + while (i.hasNext()) { + final String key = (String) i.next(); + final String value = (String) parameters.get(key); + if (value != null) { + request.addQuerystringParameter(key, value); + } + } + } + config.log("setting oauth_callback to " + config.getCallback()); + request.addOAuthParameter(OAuthConstants.CALLBACK, config.getCallback()); + addOAuthParams(request, OAuthConstants.EMPTY_TOKEN); + appendSignature(request); + + config.log("sending request..."); + final Response response = request.send(); + final String body = response.getBody(); + + config.log("response status code: " + response.getCode()); + config.log("response body: " + body); + return api.getRequestTokenExtractor().extract(body); + } + + protected void addOAuthParams(final OAuthRequest request, final Token token) { + request.addOAuthParameter(OAuthConstants.TIMESTAMP, api.getTimestampService() + .getTimestampInSeconds()); + request.addOAuthParameter(OAuthConstants.NONCE, api.getTimestampService().getNonce()); + 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()); + } + request.addOAuthParameter(OAuthConstants.SIGNATURE, getSignature(request, token)); + + config.log("appended additional OAuth parameters: " + + MapUtils.toString(request.getOauthParameters())); + } + + /** + * {@inheritDoc} + */ + public Token getAccessToken(final Token requestToken, final Verifier verifier) { + config.log("obtaining access token from " + api.getAccessTokenEndpoint()); + final OAuthRequest request = config.getOAuthRequestCreatorFactory() + .createAccessTokenRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addOAuthParameter(OAuthConstants.TOKEN, requestToken.getToken()); + if (verifier != null) { + request.addOAuthParameter(OAuthConstants.VERIFIER, verifier.getValue()); + } + config.log("setting token to: " + requestToken + " and verifier to: " + verifier); + addOAuthParams(request, requestToken); + appendSignature(request); + try { + final Response response = request.send(); + return api.getAccessTokenExtractor().extract(response.getBody()); + } catch (final IOException e) { + e.printStackTrace(); + return null; + } + } + + /** + * {@inheritDoc} + */ + public Token getAccessToken(final Token requestToken) { + return getAccessToken(requestToken, null); } - config.log("setting token to: " + token); - addOAuthParams(request, token); - appendSignature(request); - } - - /** - * {@inheritDoc} - */ - public String getVersion() - { - return VERSION; - } - - /** - * {@inheritDoc} - */ - public String getAuthorizationUrl(Token requestToken) - { - return api.getAuthorizationUrl(requestToken); - } - - private String getSignature(OAuthRequest request, Token token) - { - config.log("generating signature..."); - config.log("using base64 encoder: " + Base64Encoder.type()); - String baseString = api.getBaseStringExtractor().extract(request); - String signature = api.getSignatureService().getSignature(baseString, config.getApiSecret(), token.getSecret()); - - config.log("base string is: " + baseString); - config.log("signature is: " + signature); - return signature; - } - - private void appendSignature(OAuthRequest request) - { - switch (config.getSignatureType()) - { - case Header: - config.log("using Http Header signature"); - - String oauthHeader = api.getHeaderExtractor().extract(request); - request.addHeader(OAuthConstants.HEADER, oauthHeader); - break; - case QueryString: - config.log("using Querystring signature"); - - for (Map.Entry entry : request.getOauthParameters().entrySet()) - { - request.addQuerystringParameter(entry.getKey(), entry.getValue()); + + /** + * {@inheritDoc} + */ + public void signRequest(final Token token, final OAuthRequest request) { + config.log("signing request: " + request.getUrl()); + + // Do not append the token if empty. This is for two legged OAuth calls. + if (!token.isEmpty()) { + request.addOAuthParameter(OAuthConstants.TOKEN, token.getToken()); } - break; + config.log("setting token to: " + token); + addOAuthParams(request, token); + appendSignature(request); } - } - private static class TimeoutTuner extends RequestTuner - { - private final int duration; - private final TimeUnit unit; + /** + * {@inheritDoc} + */ + public String getVersion() { + return VERSION; + } + + /** + * {@inheritDoc} + */ + public String getAuthorizationUrl(final Token requestToken) { + return api.getAuthorizationUrl(requestToken); + } - public TimeoutTuner(int duration, TimeUnit unit) - { - this.duration = duration; - this.unit = unit; + protected String getSignature(final OAuthRequest request, final Token token) { + 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.getSecret()); + + config.log("base string is: " + baseString); + config.log("signature is: " + signature); + return signature; } - @Override - public void tune(Request request) - { - request.setReadTimeout(duration, unit); + protected void appendSignature(final OAuthRequest request) { + if (SignatureType.Header.equals(config.getSignatureType())) { + config.log("using Http Header signature"); + + final String oauthHeader = api.getHeaderExtractor().extract(request); + request.addHeader(OAuthConstants.HEADER, oauthHeader); + } else if (SignatureType.QueryString.equals(config.getSignatureType())) { + config.log("using Querystring signature"); + final Iterator i = request.getOauthParameters().entrySet().iterator(); + while (i.hasNext()) { + final Map.Entry/**/entry = (Map.Entry) i.next(); + request.addQuerystringParameter((String) entry.getKey(), (String) entry.getValue()); + } + } } - } + } diff --git a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java index 6262c3700..11e1388ce 100644 --- a/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java +++ b/src/main/java/org/scribe/oauth/OAuth20ServiceImpl.java @@ -1,72 +1,95 @@ package org.scribe.oauth; -import org.scribe.builder.api.*; -import org.scribe.model.*; +import java.io.IOException; -public class OAuth20ServiceImpl implements OAuthService -{ - private static final String VERSION = "2.0"; - - private final DefaultApi20 api; - private final OAuthConfig config; - - /** - * Default constructor - * - * @param api OAuth2.0 api information - * @param config OAuth 2.0 configuration param object - */ - public OAuth20ServiceImpl(DefaultApi20 api, OAuthConfig config) - { - this.api = api; - this.config = config; - } +import org.scribe.builder.api.DefaultApi20; +import org.scribe.model.OAuthConfig; +import org.scribe.model.OAuthConstants; +import org.scribe.model.OAuthRequest; +import org.scribe.model.Response; +import org.scribe.model.Token; +import org.scribe.model.Verifier; - /** - * {@inheritDoc} - */ - public Token getAccessToken(Token requestToken, Verifier verifier) - { - OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); - request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); - request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); - request.addQuerystringParameter(OAuthConstants.CODE, verifier.getValue()); - request.addQuerystringParameter(OAuthConstants.REDIRECT_URI, config.getCallback()); - if(config.hasScope()) request.addQuerystringParameter(OAuthConstants.SCOPE, config.getScope()); - Response response = request.send(); - return api.getAccessTokenExtractor().extract(response.getBody()); - } +public class OAuth20ServiceImpl implements OAuthService { + private static final String VERSION = "2.0"; - /** - * {@inheritDoc} - */ - public Token getRequestToken() - { - throw new UnsupportedOperationException("Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there"); - } + private final DefaultApi20 api; + private final OAuthConfig config; - /** - * {@inheritDoc} - */ - public String getVersion() - { - return VERSION; - } + /** + * Default constructor + * + * @param api OAuth2.0 api information + * @param config OAuth 2.0 configuration param object + */ + public OAuth20ServiceImpl(final DefaultApi20 api, final OAuthConfig config) { + this.api = api; + this.config = config; + } - /** - * {@inheritDoc} - */ - public void signRequest(Token accessToken, OAuthRequest request) - { - request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getToken()); - } + /** + * {@inheritDoc} + * @throws IOException + */ + public Token getAccessToken(final Token requestToken, final Verifier verifier) + throws IOException { + final OAuthRequest request = config.getOAuthRequestCreatorFactory() + .createAccessTokenRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); + request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + request.addQuerystringParameter(OAuthConstants.CODE, verifier.getValue()); + request.addQuerystringParameter(OAuthConstants.REDIRECT_URI, config.getCallback()); + if (config.hasScope()) { + request.addQuerystringParameter(OAuthConstants.SCOPE, config.getScope()); + } + final Response response = request.send(); + return api.getAccessTokenExtractor().extract(response.getBody()); + } - /** - * {@inheritDoc} - */ - public String getAuthorizationUrl(Token requestToken) - { - return api.getAuthorizationUrl(config); - } + /** + * {@inheritDoc} + */ + public Token getRequestToken() { + throw new UnsupportedOperationException( + "Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there"); + } + + /** + * {@inheritDoc} + */ + public String getVersion() { + return VERSION; + } + + /** + * {@inheritDoc} + */ + public void signRequest(final Token accessToken, final OAuthRequest request) { + request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN, accessToken.getToken()); + } + + /** + * {@inheritDoc} + */ + public String getAuthorizationUrl(final Token requestToken) { + return api.getAuthorizationUrl(config); + } + + /** + * {@inheritDoc} + * @throws IOException + */ + public Token getAccessToken(final Token requestToken) throws IOException { + final OAuthRequest request = config.getOAuthRequestCreatorFactory() + .createAccessTokenRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint()); + request.addQuerystringParameter(OAuthConstants.CLIENT_ID, config.getApiKey()); + request.addQuerystringParameter(OAuthConstants.CLIENT_SECRET, config.getApiSecret()); + request.addQuerystringParameter(OAuthConstants.REDIRECT_URI, config.getCallback()); + if (config.hasScope()) { + request.addQuerystringParameter(OAuthConstants.SCOPE, config.getScope()); + } + final 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..f219d8b00 100644 --- a/src/main/java/org/scribe/oauth/OAuthService.java +++ b/src/main/java/org/scribe/oauth/OAuthService.java @@ -1,6 +1,10 @@ package org.scribe.oauth; -import org.scribe.model.*; +import java.io.IOException; + +import org.scribe.model.OAuthRequest; +import org.scribe.model.Token; +import org.scribe.model.Verifier; /** * The main Scribe object. @@ -9,45 +13,55 @@ * * @author Pablo Fernandez */ -public interface OAuthService -{ - /** - * Retrieve the request token. - * - * @return request token - */ - public Token getRequestToken(); - - /** - * Retrieve the access token - * - * @param requestToken request token (obtained previously) - * @param verifier verifier code - * @return access token - */ - public Token getAccessToken(Token requestToken, Verifier verifier); - - /** - * Signs am OAuth request - * - * @param accessToken access token (obtained previously) - * @param request request to sign - */ - public void signRequest(Token accessToken, OAuthRequest request); - - /** - * Returns the OAuth version of the service. - * - * @return oauth version as string - */ - public String getVersion(); - - /** - * 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 - */ - public String getAuthorizationUrl(Token requestToken); +public interface OAuthService { + /** + * Retrieve the request token. + * + * @return request token + * @throws IOException + */ + public Token getRequestToken() throws IOException; + + /** + * Retrieve the access token + * + * @param requestToken request token (obtained previously) + * @param verifier verifier code + * @return access token + * @throws IOException + */ + public Token getAccessToken(Token requestToken, Verifier verifier) throws IOException; + + /** + * Retrieve the access token + * + * @param requestToken request token (obtained previously) + * @return access token + * @throws IOException + */ + public Token getAccessToken(Token requestToken) throws IOException; + + /** + * Signs am OAuth request + * + * @param accessToken access token (obtained previously) + * @param request request to sign + */ + public void signRequest(Token accessToken, OAuthRequest request); + + /** + * Returns the OAuth version of the service. + * + * @return oauth version as string + */ + public String getVersion(); + + /** + * 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 + */ + public String getAuthorizationUrl(Token requestToken); } diff --git a/src/main/java/org/scribe/services/CommonsEncoder.java b/src/main/java/org/scribe/services/CommonsEncoder.java index 4269a69cc..926d966bd 100644 --- a/src/main/java/org/scribe/services/CommonsEncoder.java +++ b/src/main/java/org/scribe/services/CommonsEncoder.java @@ -8,7 +8,7 @@ public class CommonsEncoder extends Base64Encoder { - @Override + public String encode(byte[] bytes) { try @@ -21,7 +21,7 @@ public String encode(byte[] bytes) } } - @Override + public String getType() { return "CommonsCodec"; diff --git a/src/main/java/org/scribe/services/DatatypeConverterEncoder.java b/src/main/java/org/scribe/services/DatatypeConverterEncoder.java index d147eba50..b99e4a6db 100644 --- a/src/main/java/org/scribe/services/DatatypeConverterEncoder.java +++ b/src/main/java/org/scribe/services/DatatypeConverterEncoder.java @@ -1,18 +1,14 @@ package org.scribe.services; -import javax.xml.bind.*; +import org.apache.commons.codec.binary.Base64; -public class DatatypeConverterEncoder extends Base64Encoder -{ - @Override - public String encode(byte[] bytes) - { - return DatatypeConverter.printBase64Binary(bytes); - } +public class DatatypeConverterEncoder extends Base64Encoder { - @Override - public String getType() - { - return "DatatypeConverter"; - } + public String encode(final byte[] bytes) { + return String.valueOf(Base64.encodeBase64(bytes)); + } + + public String getType() { + return "DatatypeConverter"; + } } diff --git a/src/main/java/org/scribe/services/HMACSha1SignatureService.java b/src/main/java/org/scribe/services/HMACSha1SignatureService.java index 560c2e676..bca26ed44 100644 --- a/src/main/java/org/scribe/services/HMACSha1SignatureService.java +++ b/src/main/java/org/scribe/services/HMACSha1SignatureService.java @@ -1,10 +1,12 @@ package org.scribe.services; -import javax.crypto.*; -import javax.crypto.spec.*; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; -import org.scribe.exceptions.*; -import org.scribe.utils.*; +import org.apache.commons.lang.StringUtils; +import org.scribe.exceptions.OAuthSignatureException; +import org.scribe.utils.OAuthEncoder; +import org.scribe.utils.Preconditions; /** * HMAC-SHA1 implementation of {@SignatureService} @@ -12,50 +14,44 @@ * @author Pablo Fernandez * */ -public class HMACSha1SignatureService implements SignatureService -{ - private static final String EMPTY_STRING = ""; - private static final String CARRIAGE_RETURN = "\r\n"; - private static final String UTF8 = "UTF-8"; - private static final String HMAC_SHA1 = "HmacSHA1"; - private static final String METHOD = "HMAC-SHA1"; +public class HMACSha1SignatureService implements SignatureService { + private static final String EMPTY_STRING = ""; + private static final String CARRIAGE_RETURN = "\r\n"; + private static final String UTF8 = "UTF-8"; + private static final String HMAC_SHA1 = "HmacSHA1"; + private static final String METHOD = "HMAC-SHA1"; - /** - * {@inheritDoc} - */ - public String getSignature(String baseString, String apiSecret, String tokenSecret) - { - try - { - Preconditions.checkEmptyString(baseString, "Base string cant be null or empty string"); - Preconditions.checkEmptyString(apiSecret, "Api secret cant be null or empty string"); - return doSign(baseString, OAuthEncoder.encode(apiSecret) + '&' + OAuthEncoder.encode(tokenSecret)); - } - catch (Exception e) - { - throw new OAuthSignatureException(baseString, e); + /** + * {@inheritDoc} + */ + public String getSignature(final String baseString, final String apiSecret, + final String tokenSecret) { + try { + Preconditions.checkEmptyString(baseString, "Base string cant be null or empty string"); + Preconditions.checkEmptyString(apiSecret, "Api secret cant be null or empty string"); + return doSign(baseString, + OAuthEncoder.encode(apiSecret) + '&' + OAuthEncoder.encode(tokenSecret)); + } catch (final Exception e) { + throw new OAuthSignatureException(baseString, e); + } } - } - private String doSign(String toSign, String keyString) throws Exception - { - SecretKeySpec key = new SecretKeySpec((keyString).getBytes(UTF8), HMAC_SHA1); - Mac mac = Mac.getInstance(HMAC_SHA1); - mac.init(key); - byte[] bytes = mac.doFinal(toSign.getBytes(UTF8)); - return bytesToBase64String(bytes).replace(CARRIAGE_RETURN, EMPTY_STRING); - } + private String doSign(final String toSign, final String keyString) throws Exception { + final SecretKeySpec key = new SecretKeySpec((keyString).getBytes(UTF8), HMAC_SHA1); + final Mac mac = Mac.getInstance(HMAC_SHA1); + mac.init(key); + final byte[] bytes = mac.doFinal(toSign.getBytes(UTF8)); + return StringUtils.replace(bytesToBase64String(bytes), CARRIAGE_RETURN, EMPTY_STRING); + } - private String bytesToBase64String(byte[] bytes) - { - return Base64Encoder.getInstance().encode(bytes); - } + private String bytesToBase64String(final byte[] bytes) { + return Base64Encoder.getInstance().encode(bytes); + } - /** - * {@inheritDoc} - */ - public String getSignatureMethod() - { - return METHOD; - } + /** + * {@inheritDoc} + */ + public String getSignatureMethod() { + return METHOD; + } } diff --git a/src/main/java/org/scribe/services/TimestampService.java b/src/main/java/org/scribe/services/TimestampService.java index 221a226b4..40f7b4dda 100644 --- a/src/main/java/org/scribe/services/TimestampService.java +++ b/src/main/java/org/scribe/services/TimestampService.java @@ -17,7 +17,7 @@ public interface TimestampService public String getTimestampInSeconds(); /** - * Returns a nonce (unique value for each request) + * Returns a nonce (unique name for each request) * * @return nonce */ diff --git a/src/main/java/org/scribe/services/TimestampServiceImpl.java b/src/main/java/org/scribe/services/TimestampServiceImpl.java index 486e93c64..733c0d5f4 100644 --- a/src/main/java/org/scribe/services/TimestampServiceImpl.java +++ b/src/main/java/org/scribe/services/TimestampServiceImpl.java @@ -1,68 +1,60 @@ package org.scribe.services; -import java.util.*; +import java.util.Random; /** * Implementation of {@link TimestampService} using plain java classes. * * @author Pablo Fernandez */ -public class TimestampServiceImpl implements TimestampService -{ - private Timer timer; - - /** - * Default constructor. - */ - public TimestampServiceImpl() - { - timer = new Timer(); - } - - /** - * {@inheritDoc} - */ - public String getNonce() - { - Long ts = getTs(); - return String.valueOf(ts + timer.getRandomInteger()); - } +public class TimestampServiceImpl implements TimestampService { + private Timer timer; + + /** + * Default constructor. + */ + public TimestampServiceImpl() { + timer = new Timer(); + } - /** - * {@inheritDoc} - */ - public String getTimestampInSeconds() - { - return String.valueOf(getTs()); - } + /** + * {@inheritDoc} + */ + public String getNonce() { + final long ts = getTs(); + return String.valueOf(ts + timer.getRandomInteger()); + } - private Long getTs() - { - return timer.getMilis() / 1000; - } + /** + * {@inheritDoc} + */ + public String getTimestampInSeconds() { + return String.valueOf(getTs()); + } - void setTimer(Timer timer) - { - this.timer = timer; - } + private long getTs() { + return timer.getMilis() / 1000; + } - /** - * Inner class that uses {@link System} for generating the timestamps. - * - * @author Pablo Fernandez - */ - static class Timer - { - private final Random rand = new Random(); - Long getMilis() - { - return System.currentTimeMillis(); + void setTimer(final Timer timer) { + this.timer = timer; } - Integer getRandomInteger() - { - return rand.nextInt(); + /** + * Inner class that uses {@link System} for generating the timestamps. + * + * @author Pablo Fernandez + */ + static class Timer { + private final Random rand = new Random(); + + long getMilis() { + return System.currentTimeMillis(); + } + + int getRandomInteger() { + return rand.nextInt(); + } } - } } diff --git a/src/main/java/org/scribe/utils/MapUtils.java b/src/main/java/org/scribe/utils/MapUtils.java index ee09d16b3..16941a4e9 100644 --- a/src/main/java/org/scribe/utils/MapUtils.java +++ b/src/main/java/org/scribe/utils/MapUtils.java @@ -1,24 +1,32 @@ package org.scribe.utils; +import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; /** * @author: Pablo Fernandez */ -public class MapUtils -{ - private MapUtils(){} +public class MapUtils { + private MapUtils() { + } + + public static/**/String toString(final Map/**/map) { + if (map == null) { + return ""; + } + if (map.isEmpty()) { + return "{}"; + } - public static String toString(Map map) - { - if (map == null) return ""; - if (map.isEmpty()) return "{}"; + final StringBuilder result = new StringBuilder(); - StringBuilder result = new StringBuilder(); - for(Map.Entry entry : map.entrySet()) - { - result.append(String.format(", %s -> %s ", entry.getKey().toString(), entry.getValue().toString())); + final Iterator i = map.entrySet().iterator(); + while (i.hasNext()) { + final Map.Entry/**/entry = (Entry) i.next(); + result.append(", " + String.valueOf(entry.getKey()) + " -> " + + String.valueOf(entry.getValue()) + " "); + } + return "{" + result.substring(1) + "}"; } - return "{" + result.substring(1) + "}"; - } } diff --git a/src/main/java/org/scribe/utils/OAuthEncoder.java b/src/main/java/org/scribe/utils/OAuthEncoder.java index 7fdbc84cc..d4355cfa1 100644 --- a/src/main/java/org/scribe/utils/OAuthEncoder.java +++ b/src/main/java/org/scribe/utils/OAuthEncoder.java @@ -1,64 +1,61 @@ package org.scribe.utils; -import java.io.*; -import java.net.*; -import java.util.*; -import java.util.regex.*; -import org.scribe.exceptions.*; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.scribe.exceptions.OAuthException; /** * @author: Pablo Fernandez */ -public class OAuthEncoder -{ - private static String CHARSET = "UTF-8"; - private static final Map ENCODING_RULES; - - static - { - Map rules = new HashMap(); - rules.put("*", "%2A"); - rules.put("+", "%20"); - rules.put("%7E", "~"); - ENCODING_RULES = Collections.unmodifiableMap(rules); - } +public class OAuthEncoder { + private static String CHARSET = "UTF-8"; + private static final Map/**/ENCODING_RULES; - private OAuthEncoder(){} - - public static String encode(String plain) - { - Preconditions.checkNotNull(plain, "Cannot encode null object"); - String encoded = ""; - try - { - encoded = URLEncoder.encode(plain, CHARSET); - } - catch (UnsupportedEncodingException uee) - { - throw new OAuthException("Charset not found while encoding string: " + CHARSET, uee); + static { + final Map/**/rules = new HashMap/**/(); + rules.put("*", "%2A"); + rules.put("+", "%20"); + rules.put("%7E", "~"); + ENCODING_RULES = Collections.unmodifiableMap(rules); } - for(Map.Entry rule : ENCODING_RULES.entrySet()) - { - encoded = applyRule(encoded, rule.getKey(), rule.getValue()); + + private OAuthEncoder() { } - return encoded; - } - private static String applyRule(String encoded, String toReplace, String replacement) - { - return encoded.replaceAll(Pattern.quote(toReplace), replacement); - } + public static String encode(final String plain) { + Preconditions.checkNotNull(plain, "Cannot encode null object"); + String encoded = ""; + try { + encoded = URLEncoder.encode(plain, CHARSET); + } catch (final UnsupportedEncodingException uee) { + throw new OAuthException("Charset not found while encoding string: " + CHARSET, uee); + } + final Iterator i = ENCODING_RULES.entrySet().iterator(); + while (i.hasNext()) { + final Map.Entry/**/rule = (Map.Entry) i.next(); + encoded = applyRule(encoded, (String) rule.getKey(), (String) rule.getValue()); + } + return encoded; + } - public static String decode(String encoded) - { - Preconditions.checkNotNull(encoded, "Cannot decode null object"); - try - { - return URLDecoder.decode(encoded, CHARSET); + private static String applyRule(final String encoded, final String toReplace, + final String replacement) { + return StringUtils.replace(encoded, toReplace, replacement); } - catch(UnsupportedEncodingException uee) - { - throw new OAuthException("Charset not found while decoding string: " + CHARSET, uee); + + public static String decode(final String encoded) { + Preconditions.checkNotNull(encoded, "Cannot decode null object"); + try { + return URLDecoder.decode(encoded, CHARSET); + } catch (final UnsupportedEncodingException uee) { + throw new OAuthException("Charset not found while decoding string: " + CHARSET, uee); + } } - } } diff --git a/src/main/java/org/scribe/utils/Preconditions.java b/src/main/java/org/scribe/utils/Preconditions.java index d4dd1be8c..87ff9096c 100644 --- a/src/main/java/org/scribe/utils/Preconditions.java +++ b/src/main/java/org/scribe/utils/Preconditions.java @@ -1,7 +1,6 @@ package org.scribe.utils; -import java.util.regex.Pattern; - +import org.apache.regexp.REUtil; import org.scribe.model.OAuthConstants; /** @@ -9,80 +8,73 @@ * * @author Pablo Fernandez */ -public class Preconditions -{ - private static final String DEFAULT_MESSAGE = "Received an invalid parameter"; - - // scheme = alpha *( alpha | digit | "+" | "-" | "." ) - private static final Pattern URL_PATTERN = Pattern.compile("^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+"); +public class Preconditions { + private static final String DEFAULT_MESSAGE = "Received an invalid parameter"; + + // scheme = alpha *( alpha | digit | "+" | "-" | "." ) + private static final String URL_PATTERN = "^[a-zA-Z][a-zA-Z0-9+.-]*://\\S+"; - private Preconditions(){} + private Preconditions() { + } - /** - * Checks that an object is not null. - * - * @param object any object - * @param errorMsg error message - * - * @throws IllegalArgumentException if the object is null - */ - public static void checkNotNull(Object object, String errorMsg) - { - check(object != null, errorMsg); - } + /** + * Checks that an object is not null. + * + * @param object any object + * @param errorMsg error message + * + * @throws IllegalArgumentException if the object is null + */ + public static void checkNotNull(final Object object, final String errorMsg) { + check(object != null, errorMsg); + } - /** - * Checks that a string is not null or empty - * - * @param string any string - * @param errorMsg error message - * - * @throws IllegalArgumentException if the string is null or empty - */ - public static void checkEmptyString(String string, String errorMsg) - { - check(string != null && !string.trim().equals(""), errorMsg); - } + /** + * Checks that a string is not null or empty + * + * @param string any string + * @param errorMsg error message + * + * @throws IllegalArgumentException if the string is null or empty + */ + public static void checkEmptyString(final String string, final String errorMsg) { + check(string != null && !string.trim().equals(""), errorMsg); + } - /** - * Checks that a URL is valid - * - * @param url any string - * @param errorMsg error message - */ - 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 - */ - public static void checkValidOAuthCallback(String url, String errorMsg) - { - checkEmptyString(url, errorMsg); - if(url.toLowerCase().compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) - { - check(isUrl(url), errorMsg); + /** + * Checks that a URL is valid + * + * @param url any string + * @param errorMsg error message + */ + public static void checkValidUrl(final String url, final String errorMsg) { + checkEmptyString(url, errorMsg); + check(isUrl(url), errorMsg); } - } - - private static boolean isUrl(String url) - { - return URL_PATTERN.matcher(url).matches(); - } - - private static void check(boolean requirements, String error) - { - String message = (error == null || error.trim().length() <= 0) ? DEFAULT_MESSAGE : error; - if (!requirements) - { - throw new IllegalArgumentException(message); + + /** + * Checks that a URL is a valid OAuth callback + * + * @param url any string + * @param errorMsg error message + */ + public static void checkValidOAuthCallback(final String url, final String errorMsg) { + checkEmptyString(url, errorMsg); + if (url.toLowerCase().compareToIgnoreCase(OAuthConstants.OUT_OF_BAND) != 0) { + check(isUrl(url), errorMsg); + } } - } - + + private static boolean isUrl(final String url) { + return REUtil.createRE(URL_PATTERN).match(url); + } + + private static void check(final boolean requirements, final String error) { + final String message = (error == null || error.trim().length() <= 0) ? DEFAULT_MESSAGE + : error; + if (!requirements) { + throw new IllegalArgumentException(message); + } + } + } diff --git a/src/main/java/org/scribe/utils/StreamUtils.java b/src/main/java/org/scribe/utils/StreamUtils.java index 30dd8bc54..b6da47ff8 100644 --- a/src/main/java/org/scribe/utils/StreamUtils.java +++ b/src/main/java/org/scribe/utils/StreamUtils.java @@ -1,44 +1,43 @@ package org.scribe.utils; -import java.io.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; /** * Utils to deal with Streams. * * @author Pablo Fernandez */ -public class StreamUtils -{ - private StreamUtils(){} +public class StreamUtils { + private StreamUtils() { + } - /** - * Returns the stream contents as an UTF-8 encoded string - * - * @param is input stream - * @return string contents - */ - public static String getStreamContents(InputStream is) - { - Preconditions.checkNotNull(is, "Cannot get String from a null object"); - try - { - final char[] buffer = new char[0x10000]; - StringBuilder out = new StringBuilder(); - 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); + /** + * Returns the stream contents as an UTF-8 encoded string + * + * @param is input stream + * @return string contents + */ + public static String getStreamContents(final InputStream is) { + Preconditions.checkNotNull(is, "Cannot get String from a null object"); + try { + final char[] buffer = new char[0x10000]; + final StringBuilder out = new StringBuilder(); + final 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); + in.close(); + return out.toString(); + } catch (final IOException ioe) { + ioe.printStackTrace(); + throw new IllegalStateException("Error while reading response body"); } - } while (read >= 0); - in.close(); - return out.toString(); - } catch (IOException ioe) - { - throw new IllegalStateException("Error while reading response body", ioe); } - } } diff --git a/src/test/java/org/scribe/builder/ServiceBuilderTest.java b/src/test/java/org/scribe/builder/ServiceBuilderTest.java index 8112d79b3..94323848d 100644 --- a/src/test/java/org/scribe/builder/ServiceBuilderTest.java +++ b/src/test/java/org/scribe/builder/ServiceBuilderTest.java @@ -1,73 +1,70 @@ -package org.scribe.builder; - -import static org.junit.Assert.*; - -import org.junit.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -public class ServiceBuilderTest -{ - private ServiceBuilder builder; - - @Before - public void setup() - { - builder = new ServiceBuilder(); - } - - @Test - public void shouldReturnConfigDefaultValues() - { - builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").build(); - assertEquals(ApiMock.config.getApiKey(), "key"); - assertEquals(ApiMock.config.getApiSecret(), "secret"); - assertEquals(ApiMock.config.getCallback(), OAuthConstants.OUT_OF_BAND); - assertEquals(ApiMock.config.getSignatureType(), SignatureType.Header); - } - - @Test - public void shouldAcceptValidCallbackUrl() - { - builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").callback("http://example.com").build(); - assertEquals(ApiMock.config.getApiKey(), "key"); - assertEquals(ApiMock.config.getApiSecret(), "secret"); - assertEquals(ApiMock.config.getCallback(), "http://example.com"); - } - - @Test - public void shouldAcceptASignatureType() - { - builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").signatureType(SignatureType.QueryString).build(); - assertEquals(ApiMock.config.getApiKey(), "key"); - assertEquals(ApiMock.config.getApiSecret(), "secret"); - assertEquals(ApiMock.config.getSignatureType(), SignatureType.QueryString); - } - - @Test(expected=IllegalArgumentException.class) - public void shouldNotAcceptNullAsCallback() - { - builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").callback(null).build(); - } - - @Test - public void shouldAcceptAnScope() - { - builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").scope("rss-api").build(); - assertEquals(ApiMock.config.getApiKey(), "key"); - assertEquals(ApiMock.config.getApiSecret(), "secret"); - assertEquals(ApiMock.config.getScope(), "rss-api"); - } - - public static class ApiMock implements Api - { - public static OAuthConfig config; - - public OAuthService createService(OAuthConfig config) - { - ApiMock.config = config; - return null; - } - } -} +package org.scribe.builder; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.scribe.builder.ServiceBuilder; +import org.scribe.builder.api.Api; +import org.scribe.model.OAuthConfig; +import org.scribe.model.OAuthConstants; +import org.scribe.model.SignatureType; +import org.scribe.oauth.OAuthService; + +public class ServiceBuilderTest { + private ServiceBuilder builder; + + @Before + public void setup() { + builder = new ServiceBuilder(); + } + + @Test + public void shouldReturnConfigDefaultValues() { + builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").build(); + assertEquals(ApiMock.config.getApiKey(), "key"); + assertEquals(ApiMock.config.getApiSecret(), "secret"); + assertEquals(ApiMock.config.getCallback(), OAuthConstants.OUT_OF_BAND); + assertEquals(ApiMock.config.getSignatureType(), SignatureType.Header); + } + + @Test + public void shouldAcceptValidCallbackUrl() { + builder.provider(ApiMock.class).apiKey("key").apiSecret("secret") + .callback("http://example.com").build(); + assertEquals(ApiMock.config.getApiKey(), "key"); + assertEquals(ApiMock.config.getApiSecret(), "secret"); + assertEquals(ApiMock.config.getCallback(), "http://example.com"); + } + + @Test + public void shouldAcceptASignatureType() { + builder.provider(ApiMock.class).apiKey("key").apiSecret("secret") + .signatureType(SignatureType.QueryString).build(); + assertEquals(ApiMock.config.getApiKey(), "key"); + assertEquals(ApiMock.config.getApiSecret(), "secret"); + assertEquals(ApiMock.config.getSignatureType(), SignatureType.QueryString); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldNotAcceptNullAsCallback() { + builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").callback(null).build(); + } + + @Test + public void shouldAcceptAnScope() { + builder.provider(ApiMock.class).apiKey("key").apiSecret("secret").scope("rss-api").build(); + assertEquals(ApiMock.config.getApiKey(), "key"); + assertEquals(ApiMock.config.getApiSecret(), "secret"); + assertEquals(ApiMock.config.getScope(), "rss-api"); + } + + public static class ApiMock implements Api { + public static OAuthConfig config; + + public OAuthService createService(final OAuthConfig config) { + ApiMock.config = config; + return null; + } + } +} diff --git a/src/test/java/org/scribe/examples/AWeberExample.java b/src/test/java/org/scribe/examples/AWeberExample.java deleted file mode 100644 index 2d86d6130..000000000 --- a/src/test/java/org/scribe/examples/AWeberExample.java +++ /dev/null @@ -1,65 +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 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/"; - - private static final String CONSUMER_KEY = ""; - private static final String CONSUMER_SECRET = ""; - - public static void main(String[] args) - { - OAuthService service = new ServiceBuilder() - .provider(AWeberApi.class) - .apiKey(CONSUMER_KEY) - .apiSecret(CONSUMER_SECRET) - .build(); - - Scanner in = new Scanner(System.in); - - System.out.println("=== AWeber'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, ACCOUNT_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 AWeber and Scribe! :)"); - } - -} \ No newline at end of file diff --git a/src/test/java/org/scribe/examples/DiggExample.java b/src/test/java/org/scribe/examples/DiggExample.java deleted file mode 100644 index 63fea8b6a..000000000 --- a/src/test/java/org/scribe/examples/DiggExample.java +++ /dev/null @@ -1,65 +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 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) - { - // Replace these with your own api key and secret - String apiKey = "myKey"; - String apiSecret = "mySecret"; - OAuthService service = new ServiceBuilder().provider(DiggApi.class).apiKey(apiKey).apiSecret(apiSecret).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(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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.POST, PROTECTED_RESOURCE_URL); - request.addBodyParameter("comment_id", "20100729223726:4fef610331ee46a3b5cbd740bf71313e"); - 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! :)"); - - } -} \ No newline at end of file diff --git a/src/test/java/org/scribe/examples/FacebookExample.java b/src/test/java/org/scribe/examples/FacebookExample.java deleted file mode 100644 index d5dc3cb50..000000000 --- a/src/test/java/org/scribe/examples/FacebookExample.java +++ /dev/null @@ -1,64 +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 FacebookExample -{ - private static final String NETWORK_NAME = "Facebook"; - private static final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/me"; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "your_app_id"; - String apiSecret = "your_api_secret"; - OAuthService service = new ServiceBuilder() - .provider(FacebookApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .callback("http://www.example.com/oauth_callback/") - .build(); - 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..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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! :)"); - - } -} \ No newline at end of file diff --git a/src/test/java/org/scribe/examples/FlickrExample.java b/src/test/java/org/scribe/examples/FlickrExample.java deleted file mode 100644 index ac38ad32f..000000000 --- a/src/test/java/org/scribe/examples/FlickrExample.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.scribe.examples; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -import java.util.*; - -public class FlickrExample -{ - private static final String PROTECTED_RESOURCE_URL = "http://api.flickr.com/services/rest/"; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "your_app_id"; - String apiSecret = "your_api_secret"; - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(apiSecret).build(); - 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..."); - Token requestToken = service.getRequestToken(); - System.out.println("Got the Request Token!"); - System.out.println(); - - System.out.println("Now go and authorize Scribe here:"); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println(authorizationUrl + "&perms=read"); - 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); - request.addQuerystringParameter("method", "flickr.test.login"); - 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/Foursquare2Example.java b/src/test/java/org/scribe/examples/Foursquare2Example.java deleted file mode 100644 index 35495a895..000000000 --- a/src/test/java/org/scribe/examples/Foursquare2Example.java +++ /dev/null @@ -1,63 +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 Foursquare2Example -{ - private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "FEGFXJUFANVVDHVSNUAMUKTTXCP1AJQD53E33XKJ44YP1S4I"; - String apiSecret = "AYWKUL5SWPNC0CTQ202QXRUG2NLZYXMRA34ZSDW4AUYBG2RC"; - OAuthService service = new ServiceBuilder() - .provider(Foursquare2Api.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .callback("http://localhost:9000/") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Foursquare2's OAuth Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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 + accessToken.getToken()); - 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/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/FreelancerExample.java b/src/test/java/org/scribe/examples/FreelancerExample.java deleted file mode 100644 index d1d540723..000000000 --- a/src/test/java/org/scribe/examples/FreelancerExample.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 FreelancerExample -{ - - private static final String NETWORK_NAME = "Freelancer"; - private static final String AUTHORIZE_URL = "http://www.sandbox.freelancer.com/users/api-token/auth.php?oauth_token="; - 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) - { - OAuthService service = new ServiceBuilder() - .provider(FreelancerApi.Sandbox.class) - .signatureType(SignatureType.QueryString) - .apiKey("7f5a168a0bfdbd15b4a9ea2a969661c731cdea56") - .apiSecret("7bb8961b94873802f1c5344f671a518e087f5785") - .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! :)"); - } -} 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/ImgUrExample.java b/src/test/java/org/scribe/examples/ImgUrExample.java deleted file mode 100644 index 93fe91cb7..000000000 --- a/src/test/java/org/scribe/examples/ImgUrExample.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.scribe.examples; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; - -import java.util.*; - -public class ImgUrExample -{ - private static final String PROTECTED_RESOURCE_URL = "http://api.imgur.com/2/account.json"; - - public static void main(String[] args) - { - // Replace these with your own api key and secret (you'll need an read/write api key) - String apiKey = "your_app_id"; - String apiSecret = "your_api_secret"; - OAuthService service = new ServiceBuilder().provider(ImgUrApi.class).apiKey(apiKey).apiSecret(apiSecret).build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== ImgUr'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:"); - String authorizationUrl = service.getAuthorizationUrl(requestToken); - System.out.println(authorizationUrl); - 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/Kaixin20Example.java b/src/test/java/org/scribe/examples/Kaixin20Example.java deleted file mode 100644 index b3e9d66ba..000000000 --- a/src/test/java/org/scribe/examples/Kaixin20Example.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.scribe.examples; - -import org.scribe.builder.*; -import org.scribe.builder.api.*; -import org.scribe.model.*; -import org.scribe.oauth.*; -import java.util.*; - -public class Kaixin20Example -{ - private static final String NETWORK_NAME = "Kaixin"; - private static final String PROTECTED_RESOURCE_URL = "https://api.kaixin001.com/users/me.json"; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = "your api key"; - String apiSecret = "your api secret"; - OAuthService service = new ServiceBuilder() - .provider(KaixinApi20.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .callback("http://your.domain.com/handle") - .build(); - 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..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code here"); - System.out.print(">>"); - Verifier verifier = new Verifier(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..."); - Token accessToken = service.getAccessToken(EMPTY_TOKEN, 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/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/LinkedInExampleWithScopes.java b/src/test/java/org/scribe/examples/LinkedInExampleWithScopes.java deleted file mode 100644 index b8e8b2881..000000000 --- a/src/test/java/org/scribe/examples/LinkedInExampleWithScopes.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 LinkedInExampleWithScopes -{ - 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.withScopes("foo", "bar", "baz")) - .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/LiveExample.java b/src/test/java/org/scribe/examples/LiveExample.java deleted file mode 100644 index ade5a6ba9..000000000 --- a/src/test/java/org/scribe/examples/LiveExample.java +++ /dev/null @@ -1,64 +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 LiveExample -{ - private static final String PROTECTED_RESOURCE_URL = "https://api.foursquare.com/v2/users/self/friends?oauth_token="; - private static final Token EMPTY_TOKEN = null; - - public static void main(String[] args) - { - // Replace these with your own api key and secret - String apiKey = ""; - String apiSecret = ""; - OAuthService service = new ServiceBuilder() - .provider(LiveApi.class) - .apiKey(apiKey) - .apiSecret(apiSecret) - .scope("wl.basic") - .callback("http://localhost:9000/") - .build(); - Scanner in = new Scanner(System.in); - - System.out.println("=== Windows Live's OAuth Workflow ==="); - System.out.println(); - - // Obtain the Authorization URL - System.out.println("Fetching the Authorization URL..."); - String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN); - System.out.println("Got the Authorization URL!"); - System.out.println("Now go and authorize Scribe here:"); - System.out.println(authorizationUrl); - System.out.println("And paste the authorization code 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(EMPTY_TOKEN, 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 + accessToken.getToken()); - 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/BaseStringExtractorTest.java b/src/test/java/org/scribe/extractors/BaseStringExtractorTest.java index edc101d15..e209a7bbf 100644 --- a/src/test/java/org/scribe/extractors/BaseStringExtractorTest.java +++ b/src/test/java/org/scribe/extractors/BaseStringExtractorTest.java @@ -1,52 +1,51 @@ -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 BaseStringExtractorTest -{ - - private BaseStringExtractorImpl extractor; - private OAuthRequest request; - - @Before - public void setup() - { - request = ObjectMother.createSampleOAuthRequest(); - extractor = new BaseStringExtractorImpl(); - } - - @Test - public void shouldExtractBaseStringFromOAuthRequest() - { - String expected = "GET&http%3A%2F%2Fexample.com&oauth_callback%3Dhttp%253A%252F%252Fexample%252Fcallback%26oauth_consumer_key%3DAS%2523%2524%255E%252A%2540%2526%26oauth_signature%3DOAuth-Signature%26oauth_timestamp%3D123456"; - String baseString = extractor.extract(request); - assertEquals(expected, baseString); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionIfRquestIsNull() - { - OAuthRequest nullRequest = null; - extractor.extract(nullRequest); - } - - @Test(expected = OAuthParametersMissingException.class) - public void shouldThrowExceptionIfRquestHasNoOAuthParameters() - { - OAuthRequest request = new OAuthRequest(Verb.GET, "http://example.com"); - extractor.extract(request); - } - - @Test - public void shouldProperlyEncodeSpaces() - { - String expected = "GET&http%3A%2F%2Fexample.com&body%3Dthis%2520param%2520has%2520whitespace%26oauth_callback%3Dhttp%253A%252F%252Fexample%252Fcallback%26oauth_consumer_key%3DAS%2523%2524%255E%252A%2540%2526%26oauth_signature%3DOAuth-Signature%26oauth_timestamp%3D123456"; - request.addBodyParameter("body", "this param has whitespace"); - assertEquals(expected, extractor.extract(request)); - } -} +package org.scribe.extractors; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.scribe.exceptions.OAuthParametersMissingException; +import org.scribe.extractors.BaseStringExtractorImpl; +import org.scribe.model.OAuthRequest; +import org.scribe.model.RequestHttpImpl; +import org.scribe.model.Verb; +import org.scribe.test.helpers.ObjectMother; + +public class BaseStringExtractorTest { + + private BaseStringExtractorImpl extractor; + private OAuthRequest request; + + @Before + public void setup() { + request = ObjectMother.createSampleOAuthRequest(); + extractor = new BaseStringExtractorImpl(); + } + + @Test + public void shouldExtractBaseStringFromOAuthRequest() { + final String expected = "GET&http%3A%2F%2Fexample.com&oauth_callback%3Dhttp%253A%252F%252Fexample%252Fcallback%26oauth_consumer_key%3DAS%2523%2524%255E%252A%2540%2526%26oauth_signature%3DOAuth-Signature%26oauth_timestamp%3D123456"; + final String baseString = extractor.extract(request); + assertEquals(expected, baseString); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionIfRquestIsNull() { + final OAuthRequest nullRequest = null; + extractor.extract(nullRequest); + } + + @Test(expected = OAuthParametersMissingException.class) + public void shouldThrowExceptionIfRquestHasNoOAuthParameters() { + final RequestHttpImpl httpRequest = new RequestHttpImpl(Verb.GET, "http://example.com"); + final OAuthRequest request = new OAuthRequest(httpRequest); + extractor.extract(request); + } + + @Test + public void shouldProperlyEncodeSpaces() { + final String expected = "GET&http%3A%2F%2Fexample.com&body%3Dthis%2520param%2520has%2520whitespace%26oauth_callback%3Dhttp%253A%252F%252Fexample%252Fcallback%26oauth_consumer_key%3DAS%2523%2524%255E%252A%2540%2526%26oauth_signature%3DOAuth-Signature%26oauth_timestamp%3D123456"; + request.addBodyParameter("body", "this param has whitespace"); + assertEquals(expected, extractor.extract(request)); + } +} diff --git a/src/test/java/org/scribe/extractors/HeaderExtractorTest.java b/src/test/java/org/scribe/extractors/HeaderExtractorTest.java index bdc727cd8..932253a46 100644 --- a/src/test/java/org/scribe/extractors/HeaderExtractorTest.java +++ b/src/test/java/org/scribe/extractors/HeaderExtractorTest.java @@ -1,45 +1,45 @@ -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); - } -} +package org.scribe.extractors; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.scribe.exceptions.OAuthParametersMissingException; +import org.scribe.model.OAuthRequest; +import org.scribe.model.RequestHttpImpl; +import org.scribe.model.Verb; +import org.scribe.test.helpers.ObjectMother; + +public class HeaderExtractorTest { + + private HeaderExtractorImpl extractor; + private OAuthRequest request; + + @Before + public void setup() { + request = ObjectMother.createSampleOAuthRequest(); + extractor = new HeaderExtractorImpl(); + } + + @Test + public void shouldExtractStandardHeader() { + final 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\""; + final String header = extractor.extract(request); + assertEquals(expected, header); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldExceptionIfRequestIsNull() { + final OAuthRequest nullRequest = null; + extractor.extract(nullRequest); + } + + @Test(expected = OAuthParametersMissingException.class) + public void shouldExceptionIfRequestHasNoOAuthParams() { + final RequestHttpImpl httpRequest = new RequestHttpImpl(Verb.GET, "http://example.com"); + final OAuthRequest emptyRequest = new OAuthRequest(httpRequest); + extractor.extract(emptyRequest); + } +} diff --git a/src/test/java/org/scribe/model/ConnectionStub.java b/src/test/java/org/scribe/model/ConnectionStub.java index 7e9331397..3eaac8b88 100644 --- a/src/test/java/org/scribe/model/ConnectionStub.java +++ b/src/test/java/org/scribe/model/ConnectionStub.java @@ -1,86 +1,74 @@ -package org.scribe.model; - -import java.io.*; -import java.net.*; -import java.util.*; - -public class ConnectionStub extends HttpURLConnection -{ - - private Map headers = new HashMap(); - private Map> responseHeaders = new HashMap>(); - private int inputStreamCalled = 0; - - public ConnectionStub() throws Exception - { - 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 - { - inputStreamCalled++; - return new ByteArrayInputStream("contents".getBytes()); - } - - public int getTimesCalledInpuStream() - { - return inputStreamCalled; - } - - @Override - public OutputStream getOutputStream() throws IOException - { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - baos.write("contents".getBytes()); - return baos; - } - - @Override - public Map> getHeaderFields() - { - return responseHeaders; - } - - public void addResponseHeader(String key, String value) - { - responseHeaders.put(key, Arrays.asList(value)); - } - - public void connect() throws IOException - { - } - - public void disconnect() - { - } - - public boolean usingProxy() - { - return false; - } - -} +package org.scribe.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.URL; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ConnectionStub extends HttpURLConnection { + + private final Map headers = new HashMap(); + private final Map> responseHeaders = new HashMap>(); + private int inputStreamCalled = 0; + + public ConnectionStub() throws Exception { + super(new URL("http://example.com")); + } + + public void setRequestProperty(final String key, final String value) { + headers.put(key, value); + } + + public String getRequestProperty(final String s) { + return headers.get(s); + } + + public Map getHeaders() { + return headers; + } + + public int getResponseCode() throws IOException { + return 200; + } + + public InputStream getInputStream() throws IOException { + inputStreamCalled++; + return new ByteArrayInputStream("contents".getBytes()); + } + + public int getTimesCalledInpuStream() { + return inputStreamCalled; + } + + public OutputStream getOutputStream() throws IOException { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + baos.write("contents".getBytes()); + return baos; + } + + public Map> getHeaderFields() { + return responseHeaders; + } + + public void addResponseHeader(final String key, final String value) { + responseHeaders.put(key, Arrays.asList(value)); + } + + public void connect() throws IOException { + } + + public void disconnect() { + } + + public boolean usingProxy() { + return false; + } + +} diff --git a/src/test/java/org/scribe/model/OAuthRequestTest.java b/src/test/java/org/scribe/model/OAuthRequestTest.java index 1ea2f2fb9..3114f9397 100644 --- a/src/test/java/org/scribe/model/OAuthRequestTest.java +++ b/src/test/java/org/scribe/model/OAuthRequestTest.java @@ -1,34 +1,32 @@ -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"); - } -} +package org.scribe.model; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +public class OAuthRequestTest { + + private OAuthRequest request; + + @Before + public void setup() { + final RequestHttpImpl httpRequest = new RequestHttpImpl(Verb.GET, "http://example.com"); + request = new OAuthRequest(httpRequest); + } + + @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/ParameterListTest.java b/src/test/java/org/scribe/model/ParameterListTest.java index 657e8e218..a16b70c5e 100644 --- a/src/test/java/org/scribe/model/ParameterListTest.java +++ b/src/test/java/org/scribe/model/ParameterListTest.java @@ -1,91 +1,83 @@ -package org.scribe.model; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotSame; - -/** - * @author: Pablo Fernandez - */ -public class ParameterListTest -{ - private ParameterList params; - - @Before - public void setup() - { - this.params = new ParameterList(); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionWhenAppendingNullMapToQuerystring() - { - String url = null; - params.appendTo(url); - } - - @Test - public void shouldAppendNothingToQuerystringIfGivenEmptyMap() - { - String url = "http://www.example.com"; - Assert.assertEquals(url, params.appendTo(url)); - } - - @Test - public void shouldAppendParametersToSimpleUrl() - { - String url = "http://www.example.com"; - String expectedUrl = "http://www.example.com?param1=value1¶m2=value%20with%20spaces"; - - params.add("param1", "value1"); - params.add("param2", "value with spaces"); - - url = params.appendTo(url); - Assert.assertEquals(url, expectedUrl); - } - - @Test - public void shouldAppendParametersToUrlWithQuerystring() - { - String url = "http://www.example.com?already=present"; - String expectedUrl = "http://www.example.com?already=present¶m1=value1¶m2=value%20with%20spaces"; - - params.add("param1", "value1"); - params.add("param2", "value with spaces"); - - url = params.appendTo(url); - Assert.assertEquals(url, expectedUrl); - } - - @Test - public void shouldProperlySortParameters() - { - params.add("param1", "v1"); - params.add("param6", "v2"); - params.add("a_param", "v3"); - params.add("param2", "v4"); - Assert.assertEquals("a_param=v3¶m1=v1¶m2=v4¶m6=v2", params.sort().asFormUrlEncodedString()); - } - - @Test - public void shouldProperlySortParametersWithTheSameName() - { - params.add("param1", "v1"); - params.add("param6", "v2"); - params.add("a_param", "v3"); - params.add("param1", "v4"); - Assert.assertEquals("a_param=v3¶m1=v1¶m1=v4¶m6=v2", params.sort().asFormUrlEncodedString()); - } - - @Test - public void shouldNotModifyTheOriginalParameterList() - { - params.add("param1", "v1"); - params.add("param6", "v2"); - - assertNotSame(params, params.sort()); - } -} +package org.scribe.model; + +import static org.junit.Assert.assertNotSame; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * @author: Pablo Fernandez + */ +public class ParameterListTest { + private ParameterList params; + + @Before + public void setup() { + params = new ParameterList(); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionWhenAppendingNullMapToQuerystring() { + final String url = null; + params.appendTo(url); + } + + @Test + public void shouldAppendNothingToQuerystringIfGivenEmptyMap() { + final String url = "http://www.example.com"; + Assert.assertEquals(url, params.appendTo(url)); + } + + @Test + public void shouldAppendParametersToSimpleUrl() { + String url = "http://www.example.com"; + final String expectedUrl = "http://www.example.com?param1=value1¶m2=value%20with%20spaces"; + + params.add("param1", "value1"); + params.add("param2", "value with spaces"); + + url = params.appendTo(url); + Assert.assertEquals(url, expectedUrl); + } + + @Test + public void shouldAppendParametersToUrlWithQuerystring() { + String url = "http://www.example.com?already=present"; + final String expectedUrl = "http://www.example.com?already=present¶m1=value1¶m2=value%20with%20spaces"; + + params.add("param1", "value1"); + params.add("param2", "value with spaces"); + + url = params.appendTo(url); + Assert.assertEquals(url, expectedUrl); + } + + @Test + public void shouldProperlySortParameters() { + params.add("param1", "v1"); + params.add("param6", "v2"); + params.add("a_param", "v3"); + params.add("param2", "v4"); + Assert.assertEquals("a_param=v3¶m1=v1¶m2=v4¶m6=v2", params.sort() + .asFormUrlEncodedString()); + } + + @Test + public void shouldProperlySortParametersWithTheSameName() { + params.add("param1", "v1"); + params.add("param6", "v2"); + params.add("a_param", "v3"); + params.add("param1", "v4"); + Assert.assertEquals("a_param=v3¶m1=v1¶m1=v4¶m6=v2", params.sort() + .asFormUrlEncodedString()); + } + + @Test + public void shouldNotModifyTheOriginalParameterList() { + params.add("param1", "v1"); + params.add("param6", "v2"); + + assertNotSame(params, params.sort()); + } +} diff --git a/src/test/java/org/scribe/model/RequestTest.java b/src/test/java/org/scribe/model/RequestTest.java index c473e779c..e8690a6ff 100644 --- a/src/test/java/org/scribe/model/RequestTest.java +++ b/src/test/java/org/scribe/model/RequestTest.java @@ -1,128 +1,125 @@ -package org.scribe.model; - -import static org.junit.Assert.*; - -import org.junit.*; - -public class RequestTest -{ - private Request getRequest; - private Request postRequest; - private ConnectionStub connection; - - @Before - public void setup() throws Exception - { - connection = new ConnectionStub(); - postRequest = new Request(Verb.POST, "http://example.com"); - postRequest.addBodyParameter("param", "value"); - postRequest.addBodyParameter("param with spaces", "value with spaces"); - postRequest.setConnection(connection); - getRequest = new Request(Verb.GET, "http://example.com?qsparam=value&other+param=value+with+spaces"); - getRequest.setConnection(connection); - } - - @Test - public void shouldSetRequestVerb() - { - getRequest.send(); - assertEquals("GET", connection.getRequestMethod()); - } - - @Test - public void shouldGetQueryStringParameters() - { - assertEquals(2, getRequest.getQueryStringParams().size()); - assertEquals(0, postRequest.getQueryStringParams().size()); - 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", postRequest.getBodyContents()); - postRequest.send(); - assertTrue(connection.getHeaders().containsKey("Content-Length")); - } - - @Test - public void shouldSetPayloadAndHeaders() - { - postRequest.addPayload("PAYLOAD"); - postRequest.send(); - assertEquals("PAYLOAD", postRequest.getBodyContents()); - assertTrue(connection.getHeaders().containsKey("Content-Length")); - } - - @Test - public void shouldAllowAddingQuerystringParametersAfterCreation() - { - Request request = new Request(Verb.GET, "http://example.com?one=val"); - request.addQuerystringParameter("two", "other val"); - request.addQuerystringParameter("more", "params"); - assertEquals(3, request.getQueryStringParams().size()); - } - - @Test - public void shouldReturnTheCompleteUrl() - { - Request request = new Request(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()); - } - - @Test - public void shouldHandleQueryStringSpaceEncodingProperly() - { - assertTrue(getRequest.getQueryStringParams().contains(new Parameter("other param","value with spaces"))); - } - - @Test - public void shouldAutomaticallyAddContentTypeForPostRequestsWithBytePayload() - { - postRequest.addPayload("PAYLOAD".getBytes()); - postRequest.send(); - assertEquals(Request.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); - } - - @Test - public void shouldAutomaticallyAddContentTypeForPostRequestsWithStringPayload() - { - postRequest.addPayload("PAYLOAD"); - postRequest.send(); - assertEquals(Request.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); - } - - @Test - public void shouldAutomaticallyAddContentTypeForPostRequestsWithBodyParameters() - { - postRequest.send(); - assertEquals(Request.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")); - } +package org.scribe.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; + +import org.junit.Before; +import org.junit.Test; + +public class RequestTest { + private RequestHttpImpl getRequest; + private RequestHttpImpl postRequest; + private ConnectionStub connection; + + @Before + public void setup() throws Exception { + connection = new ConnectionStub(); + postRequest = new RequestHttpImpl(Verb.POST, "http://example.com"); + postRequest.addBodyParameter("param", "value"); + postRequest.addBodyParameter("param with spaces", "value with spaces"); + // postRequest.setConnection(connection); + getRequest = new RequestHttpImpl(Verb.GET, + "http://example.com?qsparam=value&other+param=value+with+spaces"); + // getRequest.setConnection(connection); + } + + @Test + public void shouldSetRequestVerb() throws IOException { + getRequest.send(); + assertEquals("GET", connection.getRequestMethod()); + } + + @Test + public void shouldGetQueryStringParameters() { + assertEquals(2, getRequest.getQueryStringParams().size()); + assertEquals(0, postRequest.getQueryStringParams().size()); + assertTrue(getRequest.getQueryStringParams().contains(new Parameter("qsparam", "value"))); + } + + @Test + public void shouldAddRequestHeaders() throws IOException { + getRequest.addHeader("Header", "1"); + getRequest.addHeader("Header2", "2"); + getRequest.send(); + assertEquals(2, getRequest.getHeaders().size()); + assertEquals(2, connection.getHeaders().size()); + } + + @Test + public void shouldSetBodyParamsAndAddContentLength() throws IOException { + assertEquals("param=value¶m%20with%20spaces=value%20with%20spaces", + postRequest.getBodyContents()); + postRequest.send(); + assertTrue(connection.getHeaders().containsKey("Content-Length")); + } + + @Test + public void shouldSetPayloadAndHeaders() throws IOException { + postRequest.addPayload("PAYLOAD"); + postRequest.send(); + assertEquals("PAYLOAD", postRequest.getBodyContents()); + assertTrue(connection.getHeaders().containsKey("Content-Length")); + } + + @Test + public void shouldAllowAddingQuerystringParametersAfterCreation() { + final Request request = new RequestHttpImpl(Verb.GET, "http://example.com?one=val"); + request.addQuerystringParameter("two", "other val"); + request.addQuerystringParameter("more", "params"); + assertEquals(3, request.getQueryStringParams().size()); + } + + @Test + public void shouldReturnTheCompleteUrl() { + final RequestHttpImpl request = new RequestHttpImpl(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()); + } + + @Test + public void shouldHandleQueryStringSpaceEncodingProperly() { + assertTrue(getRequest.getQueryStringParams().contains( + new Parameter("other param", "value with spaces"))); + } + + @Test + public void shouldAutomaticallyAddContentTypeForPostRequestsWithBytePayload() + throws IOException { + postRequest.addPayload("PAYLOAD".getBytes()); + postRequest.send(); + assertEquals(Request.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); + } + + @Test + public void shouldAutomaticallyAddContentTypeForPostRequestsWithStringPayload() + throws IOException { + postRequest.addPayload("PAYLOAD"); + postRequest.send(); + assertEquals(Request.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); + } + + @Test + public void shouldAutomaticallyAddContentTypeForPostRequestsWithBodyParameters() + throws IOException { + postRequest.send(); + assertEquals(Request.DEFAULT_CONTENT_TYPE, connection.getHeaders().get("Content-Type")); + } + + @Test + public void shouldBeAbleToOverrideItsContentType() throws IOException { + postRequest.addHeader("Content-Type", "my-content-type"); + postRequest.send(); + assertEquals("my-content-type", connection.getHeaders().get("Content-Type")); + } + + @Test + public void shouldNotAddContentTypeForGetRequests() throws IOException { + getRequest.send(); + assertFalse(connection.getHeaders().containsKey("Content-Type")); + } } \ No newline at end of file diff --git a/src/test/java/org/scribe/model/ResponseTest.java b/src/test/java/org/scribe/model/ResponseTest.java index a58fc0355..ca52b9832 100644 --- a/src/test/java/org/scribe/model/ResponseTest.java +++ b/src/test/java/org/scribe/model/ResponseTest.java @@ -1,75 +1,66 @@ -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; - } - } -} +package org.scribe.model; + +import static org.junit.Assert.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.junit.Before; +import org.junit.Test; + +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 ResponseHttpImpl(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 { + final Response errResponse = new ResponseHttpImpl(new FaultyConnection()); + assertEquals(400, errResponse.getCode()); + assertEquals("errors", errResponse.getBody()); + } + + private static class FaultyConnection extends ConnectionStub { + + public FaultyConnection() throws Exception { + super(); + } + + public InputStream getErrorStream() { + return new ByteArrayInputStream("errors".getBytes()); + } + + public int getResponseCode() throws IOException { + return 400; + } + } +} diff --git a/src/test/java/org/scribe/services/RSASha1SignatureServiceTest.java b/src/test/java/org/scribe/services/RSASha1SignatureServiceTest.java deleted file mode 100644 index 2e78e8492..000000000 --- a/src/test/java/org/scribe/services/RSASha1SignatureServiceTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.scribe.services; - -import static org.junit.Assert.*; - -import org.junit.*; - -import javax.xml.bind.DatatypeConverter; -import java.security.*; -import java.security.spec.*; - -public class RSASha1SignatureServiceTest -{ - - RSASha1SignatureService service = new RSASha1SignatureService(getPrivateKey()); - - @Test - public void shouldReturnSignatureMethodString() - { - String expected = "RSA-SHA1"; - assertEquals(expected, service.getSignatureMethod()); - } - - @Test - public void shouldReturnSignature() - { - String apiSecret = "api secret"; - String tokenSecret = "token secret"; - String baseString = "base string"; - String signature = "LUNRzQAlpdNyM9mLXm96Va6g/qVNnEAb7p7K1KM0g8IopOFQJPoOO7cvppgt7w3QyhijWJnCmvqXaaIAGrqvdyr3fIzBULh8D/iZQUNLMi08GCOA34P81XBvsc7A5uJjPDsGhJg2MzoVJ8nWJhU/lMMk4c92S1WGskeoDofRwpo="; - assertEquals(signature, service.getSignature(baseString, apiSecret, tokenSecret)); - } - - /** - *Created primary key using openssl. - * - * openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj '/C=GB/ST=/L=Manchester/CN=www.example.com' -keyout myrsakey.pem -out /tmp/myrsacert.pem - * openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8 - */ - private static PrivateKey getPrivateKey() - { - String str = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMPQ5BCMxlUq2TYy\n"+ - "iRIoEUsz6HGTJhHuasS2nx1Se4Co3lxwxyubVdFj8AuhHNJSmJvjlpbTsGOjLZpr\n"+ - "HyDEDdJmf1Fensh1MhUnBZ4a7uLrZrKzFHHJdamX9pxapB89vLeHlCot9hVXdrZH\n"+ - "nNtg6FdmRKH/8gbs8iDyIayFvzYDAgMBAAECgYA+c9MpTBy9cQsR9BAvkEPjvkx2\n"+ - "XL4ZnfbDgpNA4Nuu7yzsQrPjPomiXMNkkiAFHH67yVxwAlgRjyuuQlgNNTpKvyQt\n"+ - "XcHxffnU0820VmE23M+L7jg2TlB3+rUnEDmDvCoyjlwGDR6lNb7t7Fgg2iR+iaov\n"+ - "0iVzz+l9w0slRlyGsQJBAPWXW2m3NmFgqfDxtw8fsKC2y8o17/cnPjozRGtWb8LQ\n"+ - "g3VCb8kbOFHOYNGazq3M7+wD1qILF2h/HecgK9eQrZ0CQQDMHXoJMfKKbrFrTKgE\n"+ - "zyggO1gtuT5OXYeFewMEb5AbDI2FfSc2YP7SHij8iQ2HdukBrbTmi6qxh3HmIR58\n"+ - "I/AfAkEA0Y9vr0tombsUB8cZv0v5OYoBZvCTbMANtzfb4AOHpiKqqbohDOevLQ7/\n"+ - "SpvgVCmVaDz2PptcRAyEBZ5MCssneQJAB2pmvaDH7Ambfod5bztLfOhLCtY5EkXJ\n"+ - "n6rZcDbRaHorRhdG7m3VtDKOUKZ2DF7glkQGV33phKukErVPUzlHBwJAScD9TqaG\n"+ - "wJ3juUsVtujV23SnH43iMggXT7m82STpPGam1hPfmqu2Z0niePFo927ogQ7H1EMJ\n"+ - "UHgqXmuvk2X/Ww=="; - - try - { - KeyFactory fac = KeyFactory.getInstance("RSA"); - PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(DatatypeConverter.parseBase64Binary(str)); - return fac.generatePrivate(privKeySpec); - } - catch (Exception e) - { - throw new RuntimeException(e); - } - } -} diff --git a/src/test/java/org/scribe/services/TimestampServiceTest.java b/src/test/java/org/scribe/services/TimestampServiceTest.java index 352b962ca..dc5456868 100644 --- a/src/test/java/org/scribe/services/TimestampServiceTest.java +++ b/src/test/java/org/scribe/services/TimestampServiceTest.java @@ -1,50 +1,42 @@ -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; - } - } -} +package org.scribe.services; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +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() { + final String expected = "1000"; + assertEquals(expected, service.getTimestampInSeconds()); + } + + @Test + public void shouldReturnNonce() { + final String expected = "1042"; + assertEquals(expected, service.getNonce()); + } + + private static class TimerStub extends TimestampServiceImpl.Timer { + + public long getMilis() { + return 1000000L; + } + + public int getRandomInteger() { + return 42; + } + } +} diff --git a/src/test/java/org/scribe/test/helpers/ObjectMother.java b/src/test/java/org/scribe/test/helpers/ObjectMother.java index a69a3c13a..3e5bd7eef 100644 --- a/src/test/java/org/scribe/test/helpers/ObjectMother.java +++ b/src/test/java/org/scribe/test/helpers/ObjectMother.java @@ -1,17 +1,19 @@ -package org.scribe.test.helpers; - -import org.scribe.model.*; - -public class ObjectMother -{ - - public static OAuthRequest createSampleOAuthRequest() - { - 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"); - request.addOAuthParameter(OAuthConstants.SIGNATURE, "OAuth-Signature"); - return request; - } -} +package org.scribe.test.helpers; + +import org.scribe.model.OAuthConstants; +import org.scribe.model.OAuthRequest; +import org.scribe.model.RequestHttpImpl; +import org.scribe.model.Verb; + +public class ObjectMother { + + public static OAuthRequest createSampleOAuthRequest() { + final RequestHttpImpl httpRequest = new RequestHttpImpl(Verb.GET, "http://example.com"); + final OAuthRequest request = new OAuthRequest(httpRequest); + request.addOAuthParameter(OAuthConstants.TIMESTAMP, "123456"); + request.addOAuthParameter(OAuthConstants.CONSUMER_KEY, "AS#$^*@&"); + request.addOAuthParameter(OAuthConstants.CALLBACK, "http://example/callback"); + request.addOAuthParameter(OAuthConstants.SIGNATURE, "OAuth-Signature"); + return request; + } +}