Author: doll
Date: Thu Aug 7 13:27:43 2008
New Revision: 683703
URL: http://svn.apache.org/viewvc?rev=683703&view=rev
Log:
The DataServiceServlet now uses the security token setup by the
AuthenticationServletFilter to auth requests.
Modified:
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
Modified:
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java?rev=683703&r1=683702&r2=683703&view=diff
==============================================================================
---
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
(original)
+++
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
Thu Aug 7 13:27:43 2008
@@ -20,6 +20,7 @@
import org.apache.shindig.common.servlet.ParameterFetcher;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
+import org.apache.shindig.social.core.oauth.AnonymousAuthenticationHandler;
import org.apache.shindig.social.opensocial.service.BeanConverter;
import org.apache.shindig.social.opensocial.service.DataServiceServletFetcher;
@@ -36,8 +37,13 @@
.toInstance("sampledata/canonicaldb.json");
bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet"))
.to(DataServiceServletFetcher.class);
-
bind(BeanConverter.class).annotatedWith(Names.named("bean.converter.xml")).to(BeanXmlConverter.class);
-
bind(BeanConverter.class).annotatedWith(Names.named("bean.converter.json")).to(BeanJsonConverter.class);
+ bind(BeanConverter.class).annotatedWith(Names.named("bean.converter.xml"))
+ .to(BeanXmlConverter.class);
+ bind(BeanConverter.class).annotatedWith(Names.named("bean.converter.json"))
+ .to(BeanJsonConverter.class);
+ bind(Boolean.class)
+
.annotatedWith(Names.named(AnonymousAuthenticationHandler.ALLOW_UNAUTHENTICATED))
+ .toInstance(Boolean.FALSE);
}
}
Modified:
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java?rev=683703&r1=683702&r2=683703&view=diff
==============================================================================
---
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
(original)
+++
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndServer.java
Thu Aug 7 13:27:43 2008
@@ -25,6 +25,8 @@
import org.apache.shindig.gadgets.servlet.GadgetRenderingServlet;
import org.apache.shindig.gadgets.servlet.HttpGuiceModule;
import org.apache.shindig.social.opensocial.service.DataServiceServlet;
+import org.apache.shindig.social.core.oauth.AuthenticationServletFilter;
+
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ResourceHandler;
import org.mortbay.jetty.servlet.Context;
@@ -113,6 +115,7 @@
ServletHolder jsonServletHolder = new ServletHolder(new ForceErrorServlet(
new DataServiceServlet()));
context.addServlet(jsonServletHolder, JSON_BASE);
+ context.addFilter(AuthenticationServletFilter.class, JSON_BASE, 0);
// Attach the ConcatProxyServlet - needed for
ServletHolder concatHolder = new ServletHolder(new ConcatProxyServlet());
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java?rev=683703&r1=683702&r2=683703&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
Thu Aug 7 13:27:43 2008
@@ -18,13 +18,11 @@
package org.apache.shindig.social.opensocial.service;
import org.apache.shindig.common.SecurityToken;
-import org.apache.shindig.common.SecurityTokenDecoder;
-import org.apache.shindig.common.SecurityTokenException;
import org.apache.shindig.common.servlet.InjectedServlet;
-import org.apache.shindig.common.servlet.ParameterFetcher;
import org.apache.shindig.common.util.ImmediateFuture;
import org.apache.shindig.social.ResponseError;
import org.apache.shindig.social.ResponseItem;
+import org.apache.shindig.social.core.oauth.AuthenticationServletFilter;
import com.google.common.collect.Maps;
import com.google.inject.Inject;
@@ -61,11 +59,9 @@
private static final Logger logger = Logger.getLogger(
"org.apache.shindig.social.opensocial.spi");
- private transient SecurityTokenDecoder securityTokenDecoder;
private transient Map<String, Class<? extends DataRequestHandler>> handlers;
private transient BeanConverter jsonConverter;
private transient BeanConverter xmlConverter;
- private transient ParameterFetcher parameterFetcher;
private static final String JSON_BATCH_ROUTE = "jsonBatch";
@@ -75,22 +71,12 @@
}
@Inject
- public void setSecurityTokenDecoder(SecurityTokenDecoder
securityTokenDecoder) {
- this.securityTokenDecoder = securityTokenDecoder;
- }
-
- @Inject
public void setBeanConverters(@Named("bean.converter.json") BeanConverter
jsonConverter,
@Named("bean.converter.xml") BeanConverter xmlConverter) {
this.jsonConverter = jsonConverter;
this.xmlConverter = xmlConverter;
}
- @Inject
- public void setParameterFetcher(@Named("DataServiceServlet")
ParameterFetcher parameterFetcher) {
- this.parameterFetcher = parameterFetcher;
- }
-
// Only for testing use. Do not override the injector.
public void setInjector(Injector injector) {
this.injector = injector;
@@ -121,13 +107,11 @@
servletRequest.setCharacterEncoding("UTF-8");
- SecurityToken token = null;
- try {
- // TODO: Integrate this with the oauth filter.
- token = getSecurityToken(servletRequest);
- } catch (SecurityTokenException e) {
+ SecurityToken token = getSecurityToken(servletRequest);
+ if (token == null) {
sendError(servletResponse, new
ResponseItem<Object>(ResponseError.UNAUTHORIZED,
- "The security token was invalid", null));
+ "The request did not have a proper security token nor oauth message
and unauthenticated "
+ + "requests are not allowed", null));
return;
}
@@ -241,8 +225,8 @@
return new ResponseItem<Void>(ResponseError.INTERNAL_ERROR,
t.getMessage(), null);
}
- SecurityToken getSecurityToken(HttpServletRequest servletRequest) throws
SecurityTokenException {
- return
securityTokenDecoder.createToken(parameterFetcher.fetch(servletRequest));
+ SecurityToken getSecurityToken(HttpServletRequest servletRequest) {
+ return ((AuthenticationServletFilter.SecurityTokenRequest)
servletRequest).getToken();
}
BeanConverter getConverterForRequest(HttpServletRequest servletRequest) {
Modified:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=683703&r1=683702&r2=683703&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
Thu Aug 7 13:27:43 2008
@@ -17,15 +17,15 @@
*/
package org.apache.shindig.social.dataservice.integration;
-import org.apache.shindig.common.BasicSecurityTokenDecoder;
+import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.social.SocialApiTestsGuiceModule;
+import org.apache.shindig.social.core.oauth.AuthenticationServletFilter;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
import org.apache.shindig.social.opensocial.service.ActivityHandler;
import org.apache.shindig.social.opensocial.service.AppDataHandler;
import org.apache.shindig.social.opensocial.service.DataRequestHandler;
import org.apache.shindig.social.opensocial.service.DataServiceServlet;
-import org.apache.shindig.social.opensocial.service.DataServiceServletFetcher;
import org.apache.shindig.social.opensocial.service.HandlerProvider;
import org.apache.shindig.social.opensocial.service.PersonHandler;
@@ -36,7 +36,6 @@
import org.json.JSONObject;
import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
@@ -44,16 +43,18 @@
import javax.xml.stream.XMLStreamReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
-import java.io.IOException;
import java.util.Map;
import java.util.Vector;
public abstract class AbstractLargeRestfulTests extends TestCase {
- private HttpServletRequest req;
+ private AuthenticationServletFilter.SecurityTokenRequest req;
private HttpServletResponse res;
private DataServiceServlet servlet;
+ private static final FakeGadgetToken FAKE_GADGET_TOKEN = new
FakeGadgetToken()
+ .setOwnerId("john.doe").setViewerId("john.doe");
@Override
protected void setUp() throws Exception {
@@ -67,10 +68,8 @@
servlet.setInjector(Guice.createInjector(new SocialApiTestsGuiceModule()));
servlet.setBeanConverters(new BeanJsonConverter(
Guice.createInjector(new SocialApiTestsGuiceModule())), new
BeanXmlConverter());
- servlet.setSecurityTokenDecoder(new BasicSecurityTokenDecoder());
- servlet.setParameterFetcher(new DataServiceServletFetcher());
- req = EasyMock.createMock(HttpServletRequest.class);
+ req =
EasyMock.createMock(AuthenticationServletFilter.SecurityTokenRequest.class);
res = EasyMock.createMock(HttpServletResponse.class);
}
@@ -95,8 +94,8 @@
EasyMock.expect(req.getMethod()).andStubReturn(method);
EasyMock.expect(req.getParameter("format")).andStubReturn(null);
EasyMock.expect(req.getParameter("X-HTTP-Method-Override")).andStubReturn(method);
- EasyMock.expect(req.getParameter("st")).andStubReturn(
- "john.doe:john.doe:app:container.com:foo:bar");
+
+ EasyMock.expect(req.getToken()).andStubReturn(FAKE_GADGET_TOKEN);
Vector<String> vector = new Vector<String>(extraParams.keySet());
EasyMock.expect(req.getParameterNames()).andStubReturn(vector.elements());
Modified:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=683703&r1=683702&r2=683703&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
Thu Aug 7 13:27:43 2008
@@ -17,14 +17,13 @@
*/
package org.apache.shindig.social.opensocial.service;
-import org.apache.shindig.common.BasicSecurityTokenDecoder;
-import org.apache.shindig.common.SecurityTokenDecoder;
import org.apache.shindig.common.SecurityTokenException;
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.util.ImmediateFuture;
import org.apache.shindig.social.ResponseError;
import org.apache.shindig.social.ResponseItem;
import org.apache.shindig.social.SocialApiTestsGuiceModule;
+import org.apache.shindig.social.core.oauth.AuthenticationServletFilter;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXmlConverter;
@@ -34,11 +33,9 @@
import org.easymock.classextension.EasyMock;
import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Collections;
import java.util.StringTokenizer;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -46,13 +43,15 @@
import java.util.concurrent.TimeoutException;
public class DataServiceServletTest extends TestCase {
- private HttpServletRequest req;
+ private static final FakeGadgetToken FAKE_GADGET_TOKEN = new
FakeGadgetToken()
+ .setOwnerId("john.doe").setViewerId("john.doe");
+
+ private AuthenticationServletFilter.SecurityTokenRequest req;
private HttpServletResponse res;
private DataServiceServlet servlet;
private PersonHandler peopleHandler;
private ActivityHandler activityHandler;
private AppDataHandler appDataHandler;
- private BasicSecurityTokenDecoder tokenDecoder;
private Injector injector;
private BeanJsonConverter jsonConverter;
private BeanXmlConverter xmlConverter;
@@ -65,7 +64,7 @@
protected void setUp() throws Exception {
servlet = new DataServiceServlet();
- req = EasyMock.createMock(HttpServletRequest.class);
+ req =
EasyMock.createMock(AuthenticationServletFilter.SecurityTokenRequest.class);
res = EasyMock.createMock(HttpServletResponse.class);
jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
xmlConverter = EasyMock.createMock(BeanXmlConverter.class);
@@ -81,11 +80,6 @@
new AppDataHandler(null)));
servlet.setBeanConverters(jsonConverter, xmlConverter);
-
- servlet.setParameterFetcher(new DataServiceServletFetcher());
-
- tokenDecoder = EasyMock.createMock(BasicSecurityTokenDecoder.class);
- servlet.setSecurityTokenDecoder(tokenDecoder);
}
private void setupInjector() {
@@ -132,10 +126,10 @@
res.sendError(500, "FAILED");
- EasyMock.replay(req, res, appDataHandler, tokenDecoder, injector,
jsonConverter);
+ EasyMock.replay(req, res, appDataHandler, injector, jsonConverter);
servlet.service(req, res);
- EasyMock.verify(req, res, appDataHandler, tokenDecoder, injector,
jsonConverter);
- EasyMock.reset(req, res, appDataHandler, tokenDecoder, injector,
jsonConverter);
+ EasyMock.verify(req, res, appDataHandler, injector, jsonConverter);
+ EasyMock.reset(req, res, appDataHandler, injector, jsonConverter);
}
private void verifyHandlerWasFoundForPathInfo(String peoplePathInfo,
DataRequestHandler handler)
@@ -161,10 +155,10 @@
EasyMock.expect(res.getWriter()).andReturn(writerMock);
writerMock.write(jsonObject);
- EasyMock.replay(req, res, handler, tokenDecoder, injector, jsonConverter);
+ EasyMock.replay(req, res, handler, injector, jsonConverter);
servlet.service(req, res);
- EasyMock.verify(req, res, handler, tokenDecoder, injector, jsonConverter);
- EasyMock.reset(req, res, handler, tokenDecoder, injector, jsonConverter);
+ EasyMock.verify(req, res, handler, injector, jsonConverter);
+ EasyMock.reset(req, res, handler, injector, jsonConverter);
}
private void setupRequest(String pathInfo, String actualMethod, String
overrideMethod)
@@ -179,12 +173,7 @@
overrideMethod);
EasyMock.expect(req.getParameter(DataServiceServlet.FORMAT_PARAM)).andReturn(null);
- String tokenString = "owner:viewer:app:container.com:foo:bar";
- EasyMock.expect(req.getParameter(DataServiceServlet.SECURITY_TOKEN_PARAM))
- .andReturn(tokenString);
-
- FakeGadgetToken token = new FakeGadgetToken();
-
EasyMock.expect(tokenDecoder.createToken(Collections.singletonMap(SecurityTokenDecoder.SECURITY_TOKEN_NAME,
tokenString))).andReturn(token);
+ EasyMock.expect(req.getToken()).andReturn(FAKE_GADGET_TOKEN);
}
public void testInvalidRoute() throws Exception {
@@ -195,24 +184,6 @@
assertEquals(ResponseError.BAD_REQUEST, responseItem.getError());
}
- public void testSecurityTokenException() throws Exception {
- String tokenString = "owner:viewer:app:container.com:foo:bar";
- EasyMock.expect(req.getParameter(DataServiceServlet.SECURITY_TOKEN_PARAM))
- .andReturn(tokenString);
- EasyMock.expect(tokenDecoder.createToken(
- Collections.singletonMap(SecurityTokenDecoder.SECURITY_TOKEN_NAME,
tokenString)))
- .andThrow(new SecurityTokenException(""));
-
- EasyMock.replay(req, tokenDecoder);
- try {
- servlet.getSecurityToken(req);
- fail("The route should have thrown an exception due to the invalid
security token.");
- } catch (SecurityTokenException e) {
- // Expected
- }
- EasyMock.verify(req, tokenDecoder);
- }
-
public void testGetHttpMethodFromParameter() throws Exception {
String method = "POST";
assertEquals(method, servlet.getHttpMethodFromParameter(method, null));