diff --git a/pom.xml b/pom.xml index 8effd6591f4a18e877b3c4e7a08732cb10ec50ea..c72a034c1c15f0b70ed030fb92eaf4fd109ace37 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 33e2bee5f267e185817e0705f077b75dc5a68d6e..74383893acf453e0450a3d70c928b62168e4ac5b 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 98aaddb7486904b81c8cb3164c04fe7d34fbea7e..38f63b0689f1c189593ae8d774ac2c653a60e426 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 2e24fc60b45d42ebef1c9638f5ceb806c9e6c2a5..5eece57b21073cc6e9d06daadc8a4eb076a681b6 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 23f6f881bcd2c8243018f22b327f1516f9772a2d..f6aea0ae6e9317e215f345f9e53dfa60bf373dd2 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 aeab85f1b01c303f311d8e1e553192f14339225a..815e5077413452acfb0c3185f0da16ced6387c4c 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 f62f81f0f6df3693b48854cba5a11f8ec278dda5..84060f6e49fb259bcaf9fe60559eba979dbf33b4 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