From 40d2ba9098895702a798ac709401ffcb88578152 Mon Sep 17 00:00:00 2001 From: Martin Malek Date: Sat, 26 Dec 2015 17:44:47 +0100 Subject: [PATCH 1/3] Adding PinterestApi and PinterestExample --- .../github/scribejava/apis/PinterestAPI.java | 44 +++++++++++++ .../apis/examples/PinterestExample.java | 63 +++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestAPI.java create mode 100644 scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestAPI.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestAPI.java new file mode 100644 index 000000000..ca439a6e3 --- /dev/null +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestAPI.java @@ -0,0 +1,44 @@ +package com.github.scribejava.apis; + +import com.github.scribejava.core.builder.api.DefaultApi20; +import com.github.scribejava.core.extractors.AccessTokenExtractor; +import com.github.scribejava.core.extractors.JsonTokenExtractor; +import com.github.scribejava.core.model.OAuthConfig; +import com.github.scribejava.core.model.OAuthConstants; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.utils.OAuthEncoder; +import com.github.scribejava.core.utils.Preconditions; + +public class PinterestApi extends DefaultApi20 { + + private static final String AUTHORIZE_URL = "https://api.pinterest.com/oauth?response_type=code&client_id=%s&redirect_uri=%s"; + private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; + + @Override + public String getAccessTokenEndpoint() { + return "https://api.pinterest.com/v1/oauth/token?grant_type=" + OAuthConstants.AUTHORIZATION_CODE; + } + + @Override + public Verb getAccessTokenVerb() { + return Verb.POST; + } + + @Override + public String getAuthorizationUrl(OAuthConfig config) { + Preconditions.checkValidUrl(config.getCallback(), "Must provide a valid url as callback. Pinterest does not support OOB"); + + // Append scope if present + if (config.hasScope()) { + return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), OAuthEncoder.encode(config. + getScope())); + } else { + return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback())); + } + } + + @Override + public AccessTokenExtractor getAccessTokenExtractor() { + return new JsonTokenExtractor(); + } +} diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java new file mode 100644 index 000000000..ac8d01042 --- /dev/null +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -0,0 +1,63 @@ +package com.github.scribejava.apis.examples; + +import com.github.scribejava.apis.PinterestApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.*; +import com.github.scribejava.core.oauth.OAuthService; + +import java.util.Scanner; + +public class PinterestExample { + + private static final String PROTECTED_RESOURCE_URL = "https://api.pinterest.com/v1/me/?access_token?access_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 = "your_app_id"; + String apiSecret = "your_app_secret"; + OAuthService service = new ServiceBuilder() + .provider(PinterestApi.class) + .apiKey(apiKey) + .apiSecret(apiSecret) + .scope("read_public,write_public,read_relationships,write_relationships") + .callback("https://localhost:9000/") // Add as valid callback in developer portal + .build(); + Scanner in = new Scanner(System.in); + + System.out.println("=== Pinterest'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 ScribeJava 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); + 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 ScribeJava! :)"); + + } +} From 31e83d37d2fd2145417be1c23e34f1e60c8447ab Mon Sep 17 00:00:00 2001 From: Martin Malek Date: Mon, 28 Dec 2015 17:40:59 +0100 Subject: [PATCH 2/3] Not using star imports for PinterestExample --- .../github/scribejava/apis/examples/PinterestExample.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java index ac8d01042..217a25e89 100644 --- a/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java +++ b/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/PinterestExample.java @@ -2,7 +2,11 @@ import com.github.scribejava.apis.PinterestApi; import com.github.scribejava.core.builder.ServiceBuilder; -import com.github.scribejava.core.model.*; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Response; +import com.github.scribejava.core.model.Token; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.model.Verifier; import com.github.scribejava.core.oauth.OAuthService; import java.util.Scanner; From cb6bb1a0e618b1b4fec40d216a64b6a58dcb42b1 Mon Sep 17 00:00:00 2001 From: Martin Malek Date: Mon, 28 Dec 2015 17:57:49 +0100 Subject: [PATCH 3/3] Update case for PinterestApi.java --- .../scribejava/apis/{PinterestAPI.java => PinterestApi.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scribejava-apis/src/main/java/com/github/scribejava/apis/{PinterestAPI.java => PinterestApi.java} (100%) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestAPI.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java similarity index 100% rename from scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestAPI.java rename to scribejava-apis/src/main/java/com/github/scribejava/apis/PinterestApi.java