Author: beaton
Date: Fri Jan 9 18:49:44 2009
New Revision: 733226
URL: http://svn.apache.org/viewvc?rev=733226&view=rev
Log:
Allow for trusted (oauth_, xoauth_, opensocial_) parameters from the gadget
server even if they don't fit into the security token.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthRequest.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/FakeOAuthServiceProvider.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/MakeRequestClient.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
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=733226&r1=733225&r2=733226&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
Fri Jan 9 18:49:44 2009
@@ -103,6 +103,11 @@
private final HttpFetcher fetcher;
/**
+ * Additional trusted parameters to be included in the OAuth request.
+ */
+ private final List<Parameter> trustedParams;
+
+ /**
* State information from client
*/
protected OAuthClientState clientState;
@@ -134,8 +139,20 @@
* @param fetcher fetcher to use for actually making requests
*/
public OAuthRequest(OAuthFetcherConfig fetcherConfig, HttpFetcher fetcher) {
+ this(fetcherConfig, fetcher, null);
+ }
+
+ /**
+ * @param fetcherConfig configuration options for the fetcher
+ * @param fetcher fetcher to use for actually making requests
+ * @param trustedParams additional parameters to include in all outgoing
OAuth requests, useful
+ * for client data that can't be pulled from the security token but is
still trustworthy.
+ */
+ public OAuthRequest(OAuthFetcherConfig fetcherConfig, HttpFetcher fetcher,
+ List<Parameter> trustedParams) {
this.fetcherConfig = fetcherConfig;
this.fetcher = fetcher;
+ this.trustedParams = trustedParams;
}
/**
@@ -375,6 +392,10 @@
if (appUrl != null) {
params.add(new Parameter(OPENSOCIAL_APPURL, appUrl));
}
+
+ if (trustedParams != null) {
+ params.addAll(trustedParams);
+ }
}
/**
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/FakeOAuthServiceProvider.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/FakeOAuthServiceProvider.java?rev=733226&r1=733225&r2=733226&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/FakeOAuthServiceProvider.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/FakeOAuthServiceProvider.java
Fri Jan 9 18:49:44 2009
@@ -190,6 +190,10 @@
private RuntimeException runtimeException;
+ private boolean checkTrustedParams;
+
+ private int trustedParamCount;
+
public FakeOAuthServiceProvider(TimeSource clock) {
this.clock = clock;
OAuthServiceProvider provider = new OAuthServiceProvider(
@@ -401,6 +405,21 @@
// Return the lot
info.message = new OAuthMessage(method, parsed.getLocation(), params);
+
+ // Check for trusted parameters
+ if (checkTrustedParams) {
+ if (!"foo".equals(OAuthUtil.getParameter(info.message, "oauth_magic"))) {
+ throw new RuntimeException("no oauth_trusted=foo parameter");
+ }
+ if (!"bar".equals(OAuthUtil.getParameter(info.message,
"opensocial_magic"))) {
+ throw new RuntimeException("no opensocial_trusted=foo parameter");
+ }
+ if (!"quux".equals(OAuthUtil.getParameter(info.message,
"xoauth_magic"))) {
+ throw new RuntimeException("no xoauth_magic=quux parameter");
+ }
+ trustedParamCount += 3;
+ }
+
return info;
}
@@ -717,4 +736,12 @@
public void setThrow(RuntimeException runtimeException) {
this.runtimeException = runtimeException;
}
+
+ public void setCheckTrustedParams(boolean checkTrustedParams) {
+ this.checkTrustedParams = checkTrustedParams;
+ }
+
+ public int getTrustedParamCount() {
+ return trustedParamCount;
+ }
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/MakeRequestClient.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/MakeRequestClient.java?rev=733226&r1=733225&r2=733226&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/MakeRequestClient.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/testing/MakeRequestClient.java
Fri Jan 9 18:49:44 2009
@@ -19,6 +19,9 @@
package org.apache.shindig.gadgets.oauth.testing;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
import org.apache.shindig.auth.SecurityToken;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.common.util.CharsetUtil;
@@ -29,6 +32,12 @@
import org.apache.shindig.gadgets.oauth.OAuthRequest;
import org.apache.shindig.gadgets.oauth.OAuthArguments.UseToken;
+import net.oauth.OAuth.Parameter;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
/**
* Test utility to emulate the requests sent via gadgets.io.makeRequest. The
simulation starts
* at what arrives at OAuthRequest. Code above OAuthRequest
(MakeRequestHandler, preloads) are not
@@ -44,6 +53,7 @@
private String oauthState;
private String approvalUrl;
private boolean ignoreCache;
+ private Map<String, String> trustedParams = Maps.newHashMap();
/**
* Create a make request client with the given security token, sending
requests through an
@@ -78,6 +88,21 @@
public void setIgnoreCache(boolean ignoreCache) {
this.ignoreCache = ignoreCache;
}
+
+ public void setTrustedParam(String name, String value) {
+ trustedParams.put(name, value);
+ }
+
+ private OAuthRequest createRequest() {
+ if (trustedParams != null) {
+ List<Parameter> trusted = Lists.newArrayList();
+ for (Entry<String, String> e : trustedParams.entrySet()) {
+ trusted.add(new Parameter(e.getKey(), e.getValue()));
+ }
+ return new OAuthRequest(fetcherConfig, serviceProvider, trusted);
+ }
+ return new OAuthRequest(fetcherConfig, serviceProvider);
+ }
/**
* Send an OAuth GET request to the given URL.
@@ -85,7 +110,7 @@
public HttpResponse sendGet(String target) throws Exception {
HttpRequest request = new HttpRequest(Uri.parse(target));
request.setOAuthArguments(recallState());
- OAuthRequest dest = new OAuthRequest(fetcherConfig, serviceProvider);
+ OAuthRequest dest = createRequest();
request.setIgnoreCache(ignoreCache);
request.setSecurityToken(securityToken);
HttpResponse response = dest.fetch(request);
@@ -99,7 +124,7 @@
public HttpResponse sendFormPost(String target, String body) throws
Exception {
HttpRequest request = new HttpRequest(Uri.parse(target));
request.setOAuthArguments(recallState());
- OAuthRequest dest = new OAuthRequest(fetcherConfig, serviceProvider);
+ OAuthRequest dest = createRequest();
request.setMethod("POST");
request.setPostBody(CharsetUtil.getUtf8Bytes(body));
request.setHeader("content-type", "application/x-www-form-urlencoded");
@@ -115,7 +140,7 @@
public HttpResponse sendRawPost(String target, String type, byte[] body)
throws Exception {
HttpRequest request = new HttpRequest(Uri.parse(target));
request.setOAuthArguments(recallState());
- OAuthRequest dest = new OAuthRequest(fetcherConfig, serviceProvider);
+ OAuthRequest dest = createRequest();
request.setMethod("POST");
if (type != null) {
request.setHeader("Content-Type", type);
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=733226&r1=733225&r2=733226&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
Fri Jan 9 18:49:44 2009
@@ -1325,6 +1325,23 @@
checkLogContains("RuntimeException");
checkLogContains("very, very wrong");
}
+
+ @Test
+ public void testTrustedParams() throws Exception {
+ serviceProvider.setCheckTrustedParams(true);
+ MakeRequestClient client = makeNonSocialClient("owner", "owner",
GADGET_URL);
+ client.setTrustedParam("oauth_magic", "foo");
+ client.setTrustedParam("opensocial_magic", "bar");
+ client.setTrustedParam("xoauth_magic", "quux");
+
+ 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());
+ assertEquals(9, serviceProvider.getTrustedParamCount());
+ }
// Checks whether the given parameter list contains the specified
// key/value pair