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