From aa09ae2ee27949ace7876822c4ae95a46e5c6899 Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Wed, 5 Sep 2012 15:08:57 +0200
Subject: [PATCH] Added servlet to handle JSON data in path "/api"

---
 .../java/de/thm/arsnova/LoginController.java  | 11 ++---
 .../de/thm/arsnova/SessionController.java     |  6 +++
 src/main/webapp/WEB-INF/api-servlet.xml       | 44 +++++++++++++++++++
 src/main/webapp/WEB-INF/arsnova-servlet.xml   | 32 +++-----------
 src/main/webapp/WEB-INF/web.xml               | 10 ++++-
 5 files changed, 68 insertions(+), 35 deletions(-)
 create mode 100644 src/main/webapp/WEB-INF/api-servlet.xml

diff --git a/src/main/java/de/thm/arsnova/LoginController.java b/src/main/java/de/thm/arsnova/LoginController.java
index 53244247d..1b8687e3b 100644
--- a/src/main/java/de/thm/arsnova/LoginController.java
+++ b/src/main/java/de/thm/arsnova/LoginController.java
@@ -72,13 +72,8 @@ public class LoginController {
 		return new ModelAndView("redirect:/#auth/checkCasLogin/" + userHash);
 	}
 	
-	@RequestMapping(method = RequestMethod.GET, value = "/doFacebookLogin")
-	public ModelAndView doFacebookLogin() {
-		return new ModelAndView("redirect:/#auth/checkCasLogin/");
-	}
-	
-	@RequestMapping(method = RequestMethod.GET, value = "/doTwitterLogin")
-	public ModelAndView doTwitterLogin() {
-		return new ModelAndView("redirect:/#auth/checkCasLogin/");
+	@RequestMapping(method = RequestMethod.GET, value = "/doOpenIdLogin")
+	public ModelAndView doGuestLogin() {
+		return null;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java
index 334969898..21c057db0 100644
--- a/src/main/java/de/thm/arsnova/SessionController.java
+++ b/src/main/java/de/thm/arsnova/SessionController.java
@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import de.thm.arsnova.entities.Session;
+import de.thm.arsnova.services.IAuthenticationService;
 import de.thm.arsnova.services.ISessionService;
 
 @Controller
@@ -17,11 +18,16 @@ public class SessionController {
 	@Autowired
 	ISessionService sessionService;
 	
+	@Autowired
+	IAuthenticationService authenticationService;
+	
 	@RequestMapping("/session/{sessionkey}")
 	public Session getSession(@PathVariable String sessionkey, HttpServletResponse response) {
 		Session session = sessionService.getSession(sessionkey);
 		if (session != null) return session;
 		
+		authenticationService.getUsername();
+		
 		response.setStatus(HttpStatus.NOT_FOUND.value());
 		return null;
 	}
diff --git a/src/main/webapp/WEB-INF/api-servlet.xml b/src/main/webapp/WEB-INF/api-servlet.xml
new file mode 100644
index 000000000..a68df8e7c
--- /dev/null
+++ b/src/main/webapp/WEB-INF/api-servlet.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
+	xmlns:security="http://www.springframework.org/schema/security"
+	xmlns:mvc="http://www.springframework.org/schema/mvc"
+	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
+		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.4.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+	<context:component-scan base-package="de.thm.arsnova" />
+	<context:annotation-config />
+
+	<mvc:annotation-driven />
+
+	<bean
+		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
+	<bean
+		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
+		<property name="messageConverters">
+			<list>
+				<bean
+					class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
+			</list>
+		</property>
+	</bean>
+
+	<bean
+		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
+		<property name="mediaTypes">
+			<map>
+				<entry key="json" value="application/json" />
+			</map>
+		</property>
+
+		<property name="defaultViews">
+			<list>
+				<bean
+					class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
+			</list>
+		</property>
+	</bean>
+
+</beans>
diff --git a/src/main/webapp/WEB-INF/arsnova-servlet.xml b/src/main/webapp/WEB-INF/arsnova-servlet.xml
index 9b8f48148..3a90da7ea 100644
--- a/src/main/webapp/WEB-INF/arsnova-servlet.xml
+++ b/src/main/webapp/WEB-INF/arsnova-servlet.xml
@@ -28,32 +28,12 @@
 
 	<mvc:annotation-driven />
 
-	<bean
-		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
-	<bean
-		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
-		<property name="messageConverters">
-			<list>
-				<bean
-					class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
-			</list>
-		</property>
-	</bean>
-
-	<bean
-		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
-		<property name="mediaTypes">
-			<map>
-				<entry key="json" value="application/json" />
-			</map>
-		</property>
-
-		<property name="defaultViews">
-			<list>
-				<bean
-					class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
-			</list>
-		</property>
+	<bean id="viewResolver"
+		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
+		<property name="viewClass"
+			value="org.springframework.web.servlet.view.JstlView" />
+		<property name="prefix" value="/WEB-INF/views/" />
+		<property name="suffix" value=".jsp" />
 	</bean>
 
 </beans>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 5140b1f41..e051aa8ec 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -29,6 +29,15 @@
 		<servlet-name>arsnova</servlet-name>
 		<url-pattern>/</url-pattern>
 	</servlet-mapping>
+	<servlet>
+		<servlet-name>api</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+		<load-on-startup>1</load-on-startup>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>api</servlet-name>
+		<url-pattern>/api/*</url-pattern>
+	</servlet-mapping>
 	<filter>
 		<filter-name>springSecurityFilterChain</filter-name>
 		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
@@ -36,7 +45,6 @@
 	<filter-mapping>
 		<filter-name>springSecurityFilterChain</filter-name>
 		<url-pattern>/*</url-pattern>
-		<!--dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher -->
 	</filter-mapping>
 	<welcome-file-list>
 		<welcome-file>index.html</welcome-file>
-- 
GitLab