From 8d145037d6ebd92b4a234d55aa991d67d67d359b Mon Sep 17 00:00:00 2001 From: tekay <tom.kaesler@mni.thm.de> Date: Fri, 29 Apr 2016 09:07:54 +0200 Subject: [PATCH] add api functionality to change session creator --- .../thm/arsnova/controller/SessionController.java | 9 +++++++++ src/main/java/de/thm/arsnova/dao/CouchDBDao.java | 15 +++++++++++++++ .../java/de/thm/arsnova/dao/IDatabaseDao.java | 2 ++ .../de/thm/arsnova/services/ISessionService.java | 2 ++ .../de/thm/arsnova/services/SessionService.java | 10 ++++++++++ 5 files changed, 38 insertions(+) diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 7c6db97f..1db2a8e3 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -146,6 +146,15 @@ public class SessionController extends PaginationController { return sessionService.updateSession(sessionkey, session); } + @ApiOperation(value = "change the session creator (owner)", nickname = "changeSessionCreator") + @RequestMapping(value = "/{sessionkey}/changecreator", method = RequestMethod.PUT) + public Session changeSessionCreator( + @ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey, + @ApiParam(value = "new session creator", required = true) @RequestBody final String newCreator + ) { + return sessionService.changeSessionCreator(sessionkey, newCreator); + } + @ApiOperation(value = "Retrieves a list of Sessions", nickname = "getSessions") @ApiResponses(value = { diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 7e0b8d3e..3ada67b9 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1657,6 +1657,21 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Override @Caching(evict = { @CacheEvict("sessions"), @CacheEvict(cacheNames = "sessions", key = "#p0.keyword") }) + public Session changeSessionCreator(Session session, final String newCreator) { + try { + final Document s = database.getDocument(session.get_id()); + s.put("creator", newCreator); + database.saveDocument(s); + session.set_rev(s.getRev()); + } catch (final IOException e) { + LOGGER.error("Could not lock session {}", session); + } + + return session; + } + + @Override + @Caching(evict = { @CacheEvict("sessions"), @CacheEvict(cacheNames="sessions", key="#p0.keyword") }) public void deleteSession(final Session session) { try { deleteDocument(session.get_id()); diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 1a77eb88..378d6ae6 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -143,6 +143,8 @@ public interface IDatabaseDao { Session updateSession(Session session); + Session changeSessionCreator(Session session, String newCreator); + void deleteSession(Session session); List<Question> getLectureQuestionsForUsers(Session session); diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 0a1ce00f..10f06e39 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -62,6 +62,8 @@ public interface ISessionService { Session updateSession(String sessionkey, Session session); + Session changeSessionCreator(String sessionkey, String newCreator); + Session updateSessionInternal(Session session, User user); void deleteSession(String sessionkey); diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 8ed52c43..2e44e2aa 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -345,6 +345,16 @@ public class SessionService implements ISessionService, ApplicationEventPublishe return databaseDao.updateSession(existingSession); } + @Override + @PreAuthorize("isAuthenticated() and hasPermission(1,'motd','admin')") + public Session changeSessionCreator(String sessionkey, String newCreator) { + final Session existingSession = databaseDao.getSessionFromKeyword(sessionkey); + if (existingSession == null) { + throw new RuntimeException("Error while trying to get the session with sessionkey: " + sessionkey); + } + return databaseDao.changeSessionCreator(existingSession, newCreator); + } + /* * The "internal" suffix means it is called by internal services that have no authentication! * TODO: Find a better way of doing this... -- GitLab