From f283b207641208617eb54a60fe5eaef48b564f35 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Mon, 28 Jan 2019 16:46:57 +0100 Subject: [PATCH] Add API endpoint to create copies of public pool sessions --- .../arsnova/controller/SessionController.java | 9 +++++++++ .../de/thm/arsnova/services/ISessionService.java | 2 ++ .../de/thm/arsnova/services/SessionService.java | 16 ++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 61fba7b5c..548136ab6 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -326,6 +326,15 @@ public class SessionController extends PaginationController { return sessionInfo; } + @ApiOperation(value = "copy a session from the public pool if enabled") + @RequestMapping(value = "/{sessionkey}/copyfrompublicpool", method = RequestMethod.POST) + public SessionInfo copyFromPublicPool( + @ApiParam(value = "session-key of the public pool session", required = true) @PathVariable final String sessionkey, + @ApiParam(value = "custom attributes for session", required = true) @RequestBody final Session sessionAttributes + ) { + SessionInfo sessionInfo = sessionService.copySessionFromPublicPool(sessionkey, sessionAttributes); + return sessionInfo; + } @ApiOperation(value = "Locks or unlocks a Session", nickname = "lockSession") diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index d5bd85aef..71833870f 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -86,6 +86,8 @@ public interface ISessionService { SessionInfo copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp); + SessionInfo copySessionFromPublicPool(String sessionkey, Session sessionAttributes); + SessionFeature getSessionFeatures(String sessionkey); SessionFeature changeSessionFeatures(String sessionkey, SessionFeature features); diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 39d617521..ea6589d7d 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -446,6 +446,22 @@ public class SessionService implements ISessionService, ApplicationEventPublishe return databaseDao.importSession(user, temp); } + @Override + @PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'read')") + public SessionInfo copySessionFromPublicPool(final String sessionkey, final Session sessionAttributes) { + final Session ppSession = databaseDao.getSessionFromKeyword(sessionkey); + if (!"public_pool".equals(ppSession.getSessionType())) { + throw new ForbiddenException(); + } + final ImportExportSession sessionContainer = databaseDao.exportSession(sessionkey, false, false); + final ImportExportSession.ImportExportSesssion newSession = sessionContainer.getSession(); + newSession.setSessionType(""); + newSession.setName(sessionAttributes.getName()); + newSession.setShortName(sessionAttributes.getShortName()); + final User user = userService.getCurrentUser(); + return databaseDao.importSession(user, sessionContainer); + } + @Override public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { this.publisher = publisher; -- GitLab