From 3535763d9f5e61e94cbb34361c3c7784c8c4f8b6 Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Wed, 13 Feb 2013 12:10:48 +0100
Subject: [PATCH] Readded connector client implementation

---
 pom.xml                                       |  5 +++++
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 11 +++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  4 ++++
 .../java/de/thm/arsnova/entities/Session.java | 19 +++++++++++++++++++
 .../thm/arsnova/services/SessionService.java  | 17 +++++++++++++++--
 .../webapp/WEB-INF/spring/spring-main.xml     |  9 +++++++++
 src/main/webapp/arsnova.properties.example    |  6 +++++-
 7 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8effd6591..c72a034c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -313,6 +313,11 @@
 			<artifactId>httpclient</artifactId>
 			<version>4.2.2</version>
 		</dependency>
+		<dependency>
+			<groupId>de.thm.arsnova.connector</groupId>
+			<artifactId>connector-client</artifactId>
+			<version>0.12.0-SNAPSHOT</version>
+		</dependency>
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 33e2bee5f..74383893a 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1246,4 +1246,15 @@ public class CouchDBDao implements IDatabaseDao {
 			return null;
 		}
 	}
+	
+	@Override
+	public String getCourseId(String keyword) {
+		return this.getSession(keyword).getCourseId();
+	}
+	
+	@Override
+	public boolean isCourseSession(String keyword) {
+		return (this.getSession(keyword).getCourseId() != null) &&
+				(this.getSession(keyword).getCourseType() != null);
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 98aaddb74..38f63b068 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -114,4 +114,8 @@ public interface IDatabaseDao {
 	void markInterposedQuestionAsRead(InterposedQuestion question) throws IOException;
 
 	List<Session> getMyVisitedSessions(User user);
+
+	String getCourseId(String keyword);
+
+	boolean isCourseSession(String keyword);
 }
diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Session.java
index 2e24fc60b..5eece57b2 100644
--- a/src/main/java/de/thm/arsnova/entities/Session.java
+++ b/src/main/java/de/thm/arsnova/entities/Session.java
@@ -27,6 +27,9 @@ public class Session {
 	private String creator;
 	private boolean active;
 	private long lastOwnerActivity;
+	private String courseType;
+	private String courseId;
+
 	private String _id;
 	private String _rev;
 
@@ -105,4 +108,20 @@ public class Session {
 	public boolean isCreator(User user) {
 		return user.getUsername().equals(this.creator);
 	}
+	
+	public String getCourseType() {
+		return courseType;
+	}
+
+	public void setCourseType(String courseType) {
+		this.courseType = courseType;
+	}
+
+	public String getCourseId() {
+		return courseId;
+	}
+
+	public void setCourseId(String courseId) {
+		this.courseId = courseId;
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index 23f6f881b..f6aea0ae6 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -25,10 +25,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.thm.arsnova.annotation.Authenticated;
+import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.dao.IDatabaseDao;
 import de.thm.arsnova.entities.LoggedIn;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
+import de.thm.arsnova.exceptions.ForbiddenException;
 
 @Service
 public class SessionService implements ISessionService {
@@ -40,6 +42,9 @@ public class SessionService implements ISessionService {
 
 	@Autowired
 	private IUserService userService;
+	
+	@Autowired(required=false)
+	private ConnectorClient connectorClient;
 
 	public void setDatabaseDao(final IDatabaseDao newDatabaseDao) {
 		this.databaseDao = newDatabaseDao;
@@ -48,8 +53,16 @@ public class SessionService implements ISessionService {
 	@Override
 	@Authenticated
 	public final Session joinSession(final String keyword) {
-		userService.addCurrentUserToSessionMap(keyword);
-		return databaseDao.getSession(keyword);
+		Session session = databaseDao.getSession(keyword);
+		
+		if (connectorClient != null && databaseDao.isCourseSession(keyword)) {
+			String courseid = databaseDao.getCourseId(keyword);
+			if (! connectorClient.getMembership(userService.getCurrentUser().getUsername(), courseid).isMember()) {
+				throw new ForbiddenException();
+			}
+		}
+		
+		return session;
 	}
 
 	@Override
diff --git a/src/main/webapp/WEB-INF/spring/spring-main.xml b/src/main/webapp/WEB-INF/spring/spring-main.xml
index aeab85f1b..815e50774 100644
--- a/src/main/webapp/WEB-INF/spring/spring-main.xml
+++ b/src/main/webapp/WEB-INF/spring/spring-main.xml
@@ -43,4 +43,13 @@
 
 	<bean id="userService" scope="singleton" class="de.thm.arsnova.services.UserService" />
 
+	<!-- Example of connector client configuration -->
+	<!-- Uncomment bean definition to activate connector -->
+	<!-- -->
+	<bean id="moodleClient" scope="singleton" class="de.thm.arsnova.connector.client.ConnectorClientImpl">
+		<property name="serviceLocation" value="${connector.uri}"></property>
+		<property name="username" value="${connector.username}"></property>
+		<property name="password" value="${connector.password}"></property>
+	</bean>
+	<!-- -->
 </beans>
diff --git a/src/main/webapp/arsnova.properties.example b/src/main/webapp/arsnova.properties.example
index f62f81f0f..84060f6e4 100644
--- a/src/main/webapp/arsnova.properties.example
+++ b/src/main/webapp/arsnova.properties.example
@@ -22,4 +22,8 @@ couchdb.port=5984
 couchdb.name=arsnova
 
 socketio.ip=0.0.0.0
-socketio.port=10443
\ No newline at end of file
+socketio.port=10443
+
+connector.uri=http://localhost:8080/connector-service
+connector.username=test
+connector.password=test
\ No newline at end of file
-- 
GitLab