Author: lindner
Date: Mon Nov 9 21:10:57 2009
New Revision: 834234
URL: http://svn.apache.org/viewvc?rev=834234&view=rev
Log:
SHINIDG-1216 | OAuth Proxy should allow for viewer access on secured owner
pages.
Modified:
incubator/shindig/trunk/java/common/conf/shindig.properties
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/GadgetOAuthTokenStore.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfig.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthRequest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfigTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
Modified: incubator/shindig/trunk/java/common/conf/shindig.properties
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/conf/shindig.properties?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/conf/shindig.properties (original)
+++ incubator/shindig/trunk/java/common/conf/shindig.properties Mon Nov 9
21:10:57 2009
@@ -39,6 +39,11 @@
shindig.signing.global-callback-url=http://localhost:8080/gadgets/oauthcallback
shindig.signing.enable-signed-callbacks=true
+# Set to true if you want to allow the use of 3-legged OAuth tokens when
viewer != owner.
+# This setting is not recommeneded for pages that allow user-controlled
javascript, since
+# that javascript could be used to make unauthorized requests on behalf of the
viewer of the page
+shindig.signing.viewer-access-tokens-enabled=false
+
# If enabled here, configuration values can be found in container
configuration files.
shindig.locked-domain.enabled=false
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/GadgetOAuthTokenStore.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/GadgetOAuthTokenStore.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/GadgetOAuthTokenStore.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/GadgetOAuthTokenStore.java
Mon Nov 9 21:10:57 2009
@@ -72,12 +72,14 @@
* - the OAuth request/authorization/access URLs.
* - what HTTP method to use for request token and access token requests
* - where the OAuth parameters are located.
+ * - Information from the OAuth Fetcher config to determine if owner pages
are secure
*
* Note that most of that work gets skipped for signed fetch, we just look
up the consumer key
* and secret for that. Signed fetch always sticks the parameters in the
query string.
*/
public AccessorInfo getOAuthAccessor(SecurityToken securityToken,
- OAuthArguments arguments, OAuthClientState clientState,
OAuthResponseParams responseParams)
+ OAuthArguments arguments, OAuthClientState clientState,
OAuthResponseParams responseParams,
+ OAuthFetcherConfig fetcherConfig)
throws OAuthRequestException {
AccessorInfoBuilder accessorBuilder = new AccessorInfoBuilder();
@@ -108,11 +110,12 @@
}
// Should we use the OAuth access token? We never do this unless the
client allows it, and
- // if owner == viewer.
- if (arguments.mayUseToken()
- && securityToken.getOwnerId() != null
- && securityToken.getOwnerId().equals(securityToken.getViewerId())) {
- lookupToken(securityToken, consumer, arguments, clientState,
accessorBuilder, responseParams);
+ // if owner == viewer or owner pages are secure.
+ if (arguments.mayUseToken() && securityToken.getViewerId() != null) {
+ if ((fetcherConfig != null &&
fetcherConfig.isViewerAccessTokensEnabled()) ||
+ securityToken.getViewerId().equals(securityToken.getOwnerId())) {
+ lookupToken(securityToken, consumer, arguments, clientState,
accessorBuilder, responseParams);
+ }
}
return accessorBuilder.create(responseParams);
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfig.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfig.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfig.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfig.java
Mon Nov 9 21:10:57 2009
@@ -34,41 +34,54 @@
private final GadgetOAuthTokenStore tokenStore;
private final TimeSource clock;
private final OAuthCallbackGenerator oauthCallbackGenerator;
+ private final boolean viewerAccessTokensEnabled;
@Inject
public OAuthFetcherConfig(
@Named(OAUTH_STATE_CRYPTER) BlobCrypter stateCrypter,
GadgetOAuthTokenStore tokenStore,
TimeSource clock,
- OAuthCallbackGenerator oauthCallbackGenerator) {
+ OAuthCallbackGenerator oauthCallbackGenerator,
+ @Named("shindig.signing.viewer-access-tokens-enabled") boolean
viewerAccessTokensEnabled) {
this.stateCrypter = stateCrypter;
this.tokenStore = tokenStore;
this.clock = clock;
this.oauthCallbackGenerator = oauthCallbackGenerator;
+ this.viewerAccessTokensEnabled = viewerAccessTokensEnabled;
}
/**
- * Used to encrypt state stored on the client.
+ * @return A BlobCrypter Used to encrypt state stored on the client.
*/
public BlobCrypter getStateCrypter() {
return stateCrypter;
}
/**
- * Persistent token storage.
+ * @return the persistent token storage.
*/
public GadgetOAuthTokenStore getTokenStore() {
return tokenStore;
}
/**
- * Clock
+ * @return the Clock
*/
public TimeSource getClock() {
return clock;
}
-
+
+ /**
+ * @return callback Url generator
+ */
public OAuthCallbackGenerator getOAuthCallbackGenerator() {
return oauthCallbackGenerator;
}
+
+ /**
+ * @return true if the owner pages do not allow user controlled javascript
+ */
+ public boolean isViewerAccessTokensEnabled() {
+ return viewerAccessTokensEnabled;
+ }
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthRequest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthRequest.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthRequest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthRequest.java
Mon Nov 9 21:10:57 2009
@@ -67,7 +67,8 @@
* this works (The spec is at http://oauth.net/core/1.0/).
*
* The combination protocol works by sending identity information in all
requests, and allows the
- * OAuth dance to happen as well when owner == viewer. This lets OAuth
service providers build up
+ * OAuth dance to happen as well when owner == viewer (by default) or for any
viewer when the
+ * OAuthFetcherConfig#isViewerAccessTokensEnabled parameter is true. This lets
OAuth service providers build up
* an identity mapping from ids on social network sites to their own local ids.
*/
public class OAuthRequest {
@@ -193,7 +194,7 @@
try {
accessorInfo = fetcherConfig.getTokenStore().getOAuthAccessor(
realRequest.getSecurityToken(), realRequest.getOAuthArguments(),
clientState,
- responseParams);
+ responseParams, fetcherConfig);
response = fetchWithRetry();
} catch (OAuthRequestException e) {
// No data for us.
@@ -316,17 +317,17 @@
String pageOwner = realRequest.getSecurityToken().getOwnerId();
String pageViewer = realRequest.getSecurityToken().getViewerId();
String stateOwner = clientState.getOwner();
- if (pageOwner == null) {
+ if (pageOwner == null || pageViewer == null) {
throw responseParams.oauthRequestException(OAuthError.UNAUTHENTICATED,
"Unauthenticated");
}
- if (!pageOwner.equals(pageViewer)) {
+ if (!fetcherConfig.isViewerAccessTokensEnabled() &&
!pageOwner.equals(pageViewer)) {
throw responseParams.oauthRequestException(OAuthError.NOT_OWNER,
- "Only page owners can grant OAuth approval");
+ "Non-Secure Owner Page -- Only page owners can grant OAuth
approval");
}
- if (stateOwner != null && !stateOwner.equals(pageOwner)) {
+ if (stateOwner != null && !stateOwner.equals(pageViewer)) {
throw responseParams.oauthRequestException(OAuthError.UNKNOWN_PROBLEM,
"Client state belongs to a different person " +
- "(state owner=" + stateOwner + ", pageOwner=" + pageOwner + ')');
+ "(state owner=" + stateOwner + ", pageViewer=" + pageViewer + ')');
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetOAuthCallbackGeneratorTest.java
Mon Nov 9 21:10:57 2009
@@ -67,7 +67,7 @@
securityToken = new BasicSecurityToken("viewer", "viewer", "app",
"container.com",
"gadget", "0", "default", MAKE_REQUEST_URL);
gadget = control.createMock(Gadget.class);
- fetcherConfig = new OAuthFetcherConfig(null, null, null, null);
+ fetcherConfig = new OAuthFetcherConfig(null, null, null, null, false);
responseParams = new OAuthResponseParams(null, null, null);
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
Mon Nov 9 21:10:57 2009
@@ -25,6 +25,7 @@
import org.apache.shindig.common.crypto.BasicBlobCrypter;
import org.apache.shindig.common.crypto.BlobCrypter;
import org.apache.shindig.common.testing.FakeGadgetToken;
+import org.apache.shindig.common.util.FakeTimeSource;
import org.apache.shindig.gadgets.FakeGadgetSpecFactory;
import org.apache.shindig.gadgets.oauth.AccessorInfo.HttpMethod;
import org.apache.shindig.gadgets.oauth.AccessorInfo.OAuthParamLocation;
@@ -81,6 +82,8 @@
private BlobCrypter stateCrypter;
private OAuthClientState clientState;
private OAuthResponseParams responseParams;
+ private OAuthFetcherConfig fetcherConfig;
+ private OAuthFetcherConfig fetcherConfigSecureOwner;
@Before
public void setUp() throws Exception {
@@ -103,13 +106,15 @@
stateCrypter = new BasicBlobCrypter("abcdefghijklmnop".getBytes());
clientState = new OAuthClientState(stateCrypter);
responseParams = new OAuthResponseParams(socialToken, null, stateCrypter);
+ fetcherConfig = new OAuthFetcherConfig(stateCrypter, store, new
FakeTimeSource(), null, false);
+ fetcherConfigSecureOwner = new OAuthFetcherConfig(stateCrypter, store, new
FakeTimeSource(), null, true);
}
@Test
public void testGetOAuthAccessor_signedFetch() throws Exception {
OAuthArguments arguments = new OAuthArguments();
arguments.setUseToken(UseToken.NEVER);
- AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams);
+ AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
assertEquals("keyname", info.getConsumer().getKeyName());
assertEquals("key", info.getConsumer().getConsumer().consumerKey);
@@ -124,7 +129,7 @@
OAuthArguments arguments = new OAuthArguments();
arguments.setUseToken(UseToken.IF_AVAILABLE);
try {
- store.getOAuthAccessor(socialToken, arguments, clientState,
responseParams);
+ store.getOAuthAccessor(socialToken, arguments, clientState,
responseParams, fetcherConfig);
fail();
} catch (OAuthRequestException e) {
assertEquals("BAD_OAUTH_CONFIGURATION", responseParams.getError());
@@ -142,7 +147,7 @@
OAuthArguments arguments = new OAuthArguments();
arguments.setUseToken(UseToken.NEVER);
arguments.setServiceName("hmac");
- AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams);
+ AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -163,7 +168,7 @@
OAuthArguments arguments = new OAuthArguments();
arguments.setUseToken(UseToken.NEVER);
arguments.setServiceName("hmac");
- AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams);
+ AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams, fetcherConfig);
assertEquals("keyname", info.getConsumer().getKeyName());
assertEquals("key", info.getConsumer().getConsumer().consumerKey);
}
@@ -178,7 +183,7 @@
backingStore.setConsumerKeyAndSecret(index, cks);
OAuthArguments arguments = new OAuthArguments();
arguments.setUseToken(UseToken.NEVER);
- AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams);
+ AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -199,7 +204,7 @@
OAuthArguments arguments = new OAuthArguments();
arguments.setServiceName("testservice");
arguments.setUseToken(UseToken.IF_AVAILABLE);
- AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams);
+ AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -221,7 +226,7 @@
arguments.setServiceName("testservice");
arguments.setUseToken(UseToken.IF_AVAILABLE);
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -248,7 +253,7 @@
arguments.setServiceName("testservice");
arguments.setUseToken(UseToken.IF_AVAILABLE);
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -258,7 +263,7 @@
assertEquals("secret", info.getAccessor().tokenSecret);
// Friend views page
- info = store.getOAuthAccessor(socialToken, arguments, clientState,
responseParams);
+ info = store.getOAuthAccessor(socialToken, arguments, clientState,
responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -279,7 +284,7 @@
OAuthArguments arguments = new OAuthArguments();
arguments.setServiceName("testservice");
arguments.setUseToken(UseToken.ALWAYS);
- AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams);
+ AccessorInfo info = store.getOAuthAccessor(socialToken, arguments,
clientState, responseParams, fetcherConfig);
assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
Assert.assertNull(info.getConsumer().getKeyName());
assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
@@ -295,7 +300,7 @@
arguments.setServiceName("no such service");
arguments.setUseToken(UseToken.ALWAYS);
try {
- store.getOAuthAccessor(socialToken, arguments, clientState,
responseParams);
+ store.getOAuthAccessor(socialToken, arguments, clientState,
responseParams, fetcherConfig);
fail();
} catch (OAuthRequestException e) {
assertEquals("BAD_OAUTH_CONFIGURATION", responseParams.getError());
@@ -309,7 +314,7 @@
arguments.setUseToken(UseToken.ALWAYS);
privateToken.setAppUrl("http://www.example.com/body.xml");
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertEquals(
FakeOAuthServiceProvider.REQUEST_TOKEN_URL,
info.getConsumer().getConsumer().serviceProvider.requestTokenURL);
@@ -330,7 +335,7 @@
arguments.setUseToken(UseToken.ALWAYS);
privateToken.setAppUrl("http://www.example.com/header.xml");
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertEquals(
FakeOAuthServiceProvider.REQUEST_TOKEN_URL,
info.getConsumer().getConsumer().serviceProvider.requestTokenURL);
@@ -353,7 +358,7 @@
new TokenInfo("access", "secret", "sessionhandle", 12345L),
responseParams);
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertNull(info.getAccessor().requestToken);
assertEquals("access", info.getAccessor().accessToken);
assertEquals("secret", info.getAccessor().tokenSecret);
@@ -375,7 +380,7 @@
clientState.setTokenExpireMillis(56789L);
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertNull(info.getAccessor().requestToken);
assertEquals("clienttoken", info.getAccessor().accessToken);
assertEquals("clienttokensecret", info.getAccessor().tokenSecret);
@@ -395,7 +400,7 @@
clientState.setRequestTokenSecret("requestsecret");
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertEquals("request", info.getAccessor().requestToken);
assertEquals("requestsecret", info.getAccessor().tokenSecret);
assertNull(info.getAccessor().accessToken);
@@ -412,7 +417,7 @@
new TokenInfo("access", "secret", null, 0), responseParams);
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertNull(info.getAccessor().requestToken);
assertEquals("access", info.getAccessor().accessToken);
assertEquals("secret", info.getAccessor().tokenSecret);
@@ -427,7 +432,7 @@
arguments.setRequestTokenSecret("preapprovedsecret");
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertNull(info.getAccessor().accessToken);
assertEquals("preapproved", info.getAccessor().requestToken);
assertEquals("preapprovedsecret", info.getAccessor().tokenSecret);
@@ -442,14 +447,14 @@
new TokenInfo("access", "secret", null, 0), responseParams);
AccessorInfo info = store.getOAuthAccessor(privateToken, arguments,
clientState,
- responseParams);
+ responseParams, fetcherConfig);
assertNull(info.getAccessor().requestToken);
assertEquals("access", info.getAccessor().accessToken);
assertEquals("secret", info.getAccessor().tokenSecret);
store.removeToken(privateToken, null, arguments, responseParams);
- info = store.getOAuthAccessor(privateToken, arguments, clientState,
responseParams);
+ info = store.getOAuthAccessor(privateToken, arguments, clientState,
responseParams, fetcherConfig);
assertNull(info.getAccessor().requestToken);
assertNull(info.getAccessor().accessToken);
assertNull(info.getAccessor().tokenSecret);
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfigTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfigTest.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfigTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherConfigTest.java
Mon Nov 9 21:10:57 2009
@@ -36,9 +36,10 @@
GadgetOAuthTokenStore tokenStore = mock(GadgetOAuthTokenStore.class);
OAuthCallbackGenerator callbackGenerator =
mock(OAuthCallbackGenerator.class);
OAuthFetcherConfig config = new OAuthFetcherConfig(crypter, tokenStore,
new TimeSource(),
- callbackGenerator);
+ callbackGenerator, false);
assertEquals(crypter, config.getStateCrypter());
assertEquals(tokenStore, config.getTokenStore());
assertEquals(callbackGenerator, config.getOAuthCallbackGenerator());
+ assertFalse(config.isViewerAccessTokensEnabled());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java?rev=834234&r1=834233&r2=834234&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
Mon Nov 9 21:10:57 2009
@@ -100,7 +100,8 @@
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base),
clock,
- callbackGenerator);
+ callbackGenerator,
+ false);
logger = Logger.getLogger(OAuthResponseParams.class.getName());
logger.addHandler(new Handler() {
@@ -148,11 +149,11 @@
/**
* Builds a nicely populated fake token store.
*/
- public static GadgetOAuthTokenStore getOAuthStore(BasicOAuthStore base) {
+ public GadgetOAuthTokenStore getOAuthStore(BasicOAuthStore base) {
return getOAuthStore(base, new FakeGadgetSpecFactory());
}
- private static GadgetOAuthTokenStore getOAuthStore(BasicOAuthStore base,
+ private GadgetOAuthTokenStore getOAuthStore(BasicOAuthStore base,
GadgetSpecFactory specFactory) {
if (base == null) {
base = new BasicOAuthStore();
@@ -338,7 +339,8 @@
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base),
clock,
- createRealCallbackGenerator());
+ createRealCallbackGenerator(),
+ false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
HttpResponse response =
client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
@@ -356,7 +358,8 @@
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base),
clock,
- createRealCallbackGenerator());
+ createRealCallbackGenerator(),
+ false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
HttpResponse response =
client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
@@ -402,13 +405,22 @@
@Test
public void testOAuthFlow_noViewer() throws Exception {
- MakeRequestClient client = makeNonSocialClient("owner", null, GADGET_URL);
+ for (boolean secureOwner : Arrays.asList(true, false)) {
+ // Test both with/without secure owner pages
+ fetcherConfig = new OAuthFetcherConfig(
+ new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
+ getOAuthStore(base),
+ clock, callbackGenerator,
+ secureOwner);
- HttpResponse response =
client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
- assertEquals("", response.getResponseAsString());
- assertEquals(403, response.getHttpStatusCode());
- assertEquals(-1, response.getCacheTtl());
- assertEquals(OAuthError.NOT_OWNER.toString(),
response.getMetadata().get("oauthError"));
+ MakeRequestClient client = makeNonSocialClient("owner", null,
GADGET_URL);
+
+ HttpResponse response =
client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
+ assertEquals("", response.getResponseAsString());
+ assertEquals(403, response.getHttpStatusCode());
+ assertEquals(-1, response.getCacheTtl());
+ assertEquals(OAuthError.UNAUTHENTICATED.toString(),
response.getMetadata().get("oauthError"));
+ }
}
@Test
@@ -416,7 +428,8 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, callbackGenerator);
+ clock, callbackGenerator,
+ false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -447,7 +460,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, null);
+ clock, null, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -469,7 +482,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, callbackGenerator);
+ clock, callbackGenerator, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -496,7 +509,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, callbackGenerator);
+ clock, callbackGenerator, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -520,7 +533,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, callbackGenerator);
+ clock, callbackGenerator, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -541,7 +554,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, callbackGenerator);
+ clock, callbackGenerator, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -564,7 +577,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, callbackGenerator);
+ clock, callbackGenerator, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -585,7 +598,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, null);
+ clock, null, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -606,7 +619,7 @@
fetcherConfig = new OAuthFetcherConfig(
new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
getOAuthStore(base, null),
- clock, null);
+ clock, null, false);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
setNoSpecOptions(client);
@@ -641,6 +654,30 @@
}
@Test
+ public void testAccessTokenOkForSecureOwnerPage() throws Exception {
+ fetcherConfig = new OAuthFetcherConfig(
+ new BasicBlobCrypter("abcdefghijklmnop".getBytes()),
+ getOAuthStore(base),
+ clock,
+ callbackGenerator,
+ true);
+
+ MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
+
+ HttpResponse response =
client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
+ assertEquals("", response.getResponseAsString());
+ client.approveToken("user_data=hello-oauth");
+
+ response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
+ assertEquals("User data is hello-oauth", response.getResponseAsString());
+
+ MakeRequestClient friend = makeNonSocialClient("owner", "friend",
GADGET_URL);
+ response = friend.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
+ assertEquals("", response.getResponseAsString());
+ assertEquals(200, response.getHttpStatusCode());
+ }
+
+ @Test
public void testParamsInHeader() throws Exception {
serviceProvider.setParamLocation(OAuthParamLocation.AUTH_HEADER);
MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL_HEADER);