From 8abdde928a2f9b0e5b49c77ee1743924d0e2db68 Mon Sep 17 00:00:00 2001 From: Pablo Fernandez Date: Tue, 19 Apr 2011 22:23:41 -0300 Subject: [PATCH] added convenience methods for the builder api --- changelog.txt | 1 + .../java/org/scribe/builder/ServiceBuilder.java | 16 +++++++++++++++- src/main/java/org/scribe/model/OAuthConfig.java | 9 ++++++++- .../org/scribe/builder/ServiceBuilderTest.java | 12 +++++++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/changelog.txt b/changelog.txt index 1ae4834..b046d59 100644 --- a/changelog.txt +++ b/changelog.txt @@ -42,3 +42,4 @@ * FEATURE: Added Dropbox Api * FIX: Token responses now work despite of the token/secret order * FEATURE: Added Foursquare OAuth 2.0 Api (thanks Tom Tasche) + * FEATURE: Added support for OAuth1.0a signatures via querystring parameters diff --git a/src/main/java/org/scribe/builder/ServiceBuilder.java b/src/main/java/org/scribe/builder/ServiceBuilder.java index 9236ddf..f5e02d4 100644 --- a/src/main/java/org/scribe/builder/ServiceBuilder.java +++ b/src/main/java/org/scribe/builder/ServiceBuilder.java @@ -20,6 +20,7 @@ public class ServiceBuilder private String callback; private Api api; private String scope; + private SignatureType signatureType; /** * Default constructor @@ -122,6 +123,19 @@ public class ServiceBuilder 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; + } /** * Returns the fully configured {@link OAuthService} @@ -133,6 +147,6 @@ public class ServiceBuilder 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), scope); + return api.createService(new OAuthConfig(apiKey, apiSecret, callback, signatureType), scope); } } diff --git a/src/main/java/org/scribe/model/OAuthConfig.java b/src/main/java/org/scribe/model/OAuthConfig.java index 88de920..67104c9 100644 --- a/src/main/java/org/scribe/model/OAuthConfig.java +++ b/src/main/java/org/scribe/model/OAuthConfig.java @@ -16,12 +16,19 @@ public class OAuthConfig { this(key,secret,null); } - + + //Kept for backwards compatibility public OAuthConfig(String key, String secret, String callback) + { + this(key,secret,callback,null); + } + + public OAuthConfig(String key, String secret, String callback, SignatureType type) { this.apiKey = key; this.apiSecret = secret; this.callback = callback; + this.signatureType = type; } public String getApiKey() diff --git a/src/test/java/org/scribe/builder/ServiceBuilderTest.java b/src/test/java/org/scribe/builder/ServiceBuilderTest.java index bac2d34..4f0b0fd 100644 --- a/src/test/java/org/scribe/builder/ServiceBuilderTest.java +++ b/src/test/java/org/scribe/builder/ServiceBuilderTest.java @@ -18,12 +18,13 @@ public class ServiceBuilderTest } @Test - public void shouldReturnOOBasDefaultCallback() + 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 @@ -35,6 +36,15 @@ public class ServiceBuilderTest 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 shouldNotAcceptAnInvalidUrlAsCallback() {