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