From db95930a096f343059be607f5900a1b8fe5b79ff Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Fri, 9 Feb 2018 13:21:28 +0100 Subject: [PATCH] Reimplement /userlist for /v2 Additionally, remove obsolete MotdListRepository. --- .../thm/arsnova/config/PersistanceConfig.java | 5 --- .../arsnova/controller/v2/MotdController.java | 29 +++++++++++++ .../entities/migration/FromV2Migrator.java | 7 ++- .../persistance/MotdListRepository.java | 8 ---- .../couchdb/CouchDbMotdListRepository.java | 43 ------------------- .../arsnova/config/TestPersistanceConfig.java | 5 --- 6 files changed, 35 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/de/thm/arsnova/persistance/MotdListRepository.java delete mode 100644 src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdListRepository.java diff --git a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java index 8dda92a9e..34bf32e53 100644 --- a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java +++ b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java @@ -95,11 +95,6 @@ public class PersistanceConfig { return new CouchDbMotdRepository(couchDbConnector(), false); } - @Bean - public MotdListRepository motdListRepository() throws Exception { - return new CouchDbMotdListRepository(couchDbConnector(), false); - } - @Bean public VisitedSessionRepository visitedSessionRepository() throws Exception { return new CouchDbVisitedSessionRepository(couchDbConnector(), false); diff --git a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java index 572c7f6fd..141cdea0c 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java @@ -18,10 +18,15 @@ package de.thm.arsnova.controller.v2; import de.thm.arsnova.controller.AbstractController; +import de.thm.arsnova.entities.UserProfile; import de.thm.arsnova.entities.migration.FromV2Migrator; import de.thm.arsnova.entities.migration.ToV2Migrator; import de.thm.arsnova.entities.migration.v2.Motd; +import de.thm.arsnova.entities.migration.v2.MotdList; +import de.thm.arsnova.exceptions.ForbiddenException; +import de.thm.arsnova.security.User; import de.thm.arsnova.services.MotdService; +import de.thm.arsnova.services.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -29,6 +34,7 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -52,6 +58,9 @@ public class MotdController extends AbstractController { @Autowired private MotdService motdService; + @Autowired + private UserService userService; + @Autowired private ToV2Migrator toV2Migrator; @@ -139,4 +148,24 @@ public class MotdController extends AbstractController { motdService.delete(motd); } } + + @RequestMapping(value = "/userlist", method = RequestMethod.GET) + public MotdList getAcknowledgedIds(@AuthenticationPrincipal User user, @RequestParam final String username) { + if (user == null || !user.getUsername().equals(username)) { + throw new ForbiddenException(); + } + UserProfile profile = userService.get(user.getId()); + + return toV2Migrator.migrateMotdList(profile); + } + + @RequestMapping(value = "/userlist", method = RequestMethod.PUT) + public void putAcknowledgedIds(@AuthenticationPrincipal User user, @RequestBody final MotdList motdList) { + if (user == null || !user.getUsername().equals(motdList.getUsername())) { + throw new ForbiddenException(); + } + UserProfile profile = userService.get(user.getId()); + profile.setAcknowledgedMotds(fromV2Migrator.migrate(motdList)); + userService.update(profile); + } } diff --git a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java index 29793bb61..cb515d594 100644 --- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java +++ b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; /** @@ -79,12 +80,16 @@ public class FromV2Migrator { profile.setRoomHistory(sessionHistory); } if (motdList != null && motdList.getMotdkeys() != null) { - profile.setAcknowledgedMotds(Arrays.stream(motdList.getMotdkeys().split(",")).collect(Collectors.toSet())); + profile.setAcknowledgedMotds(migrate(motdList)); } return profile; } + public Set<String> migrate(final MotdList motdList) { + return Arrays.stream(motdList.getMotdkeys().split(",")).collect(Collectors.toSet()); + } + public de.thm.arsnova.entities.Room migrate(final Room from, final Optional<UserProfile> owner) { if (!owner.isPresent() && from.getCreator() != null || owner.isPresent() && !owner.get().getLoginId().equals(from.getCreator())) { diff --git a/src/main/java/de/thm/arsnova/persistance/MotdListRepository.java b/src/main/java/de/thm/arsnova/persistance/MotdListRepository.java deleted file mode 100644 index a407c7ecc..000000000 --- a/src/main/java/de/thm/arsnova/persistance/MotdListRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.thm.arsnova.persistance; - -import de.thm.arsnova.entities.migration.v2.MotdList; - -public interface MotdListRepository { - MotdList findByUsername(String username); - MotdList save(MotdList motdlist); -} diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdListRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdListRepository.java deleted file mode 100644 index dcdb8ead1..000000000 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdListRepository.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.thm.arsnova.persistance.couchdb; - -import de.thm.arsnova.entities.migration.v2.MotdList; -import de.thm.arsnova.persistance.MotdListRepository; -import org.ektorp.CouchDbConnector; -import org.ektorp.DbAccessException; -import org.ektorp.support.CouchDbRepositorySupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - -public class CouchDbMotdListRepository extends CouchDbRepositorySupport<MotdList> implements MotdListRepository { - private static final Logger logger = LoggerFactory.getLogger(CouchDbMotdListRepository.class); - - public CouchDbMotdListRepository(final CouchDbConnector db, final boolean createIfNotExists) { - super(MotdList.class, db, createIfNotExists); - } - - @Override - public MotdList findByUsername(final String username) { - final List<MotdList> motdListList = queryView("by_username", username); - return motdListList.isEmpty() ? new MotdList() : motdListList.get(0); - } - - /* TODO: Move to service layer. */ - @Override - public MotdList save(final MotdList motdlist) { - try { - if (motdlist.getId() != null) { - update(motdlist); - } else { - db.create(motdlist); - } - - return motdlist; - } catch (final DbAccessException e) { - logger.error("Could not save MotD list {}.", motdlist, e); - } - - return null; - } -} diff --git a/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java b/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java index 75c66ee2a..78f1a311e 100644 --- a/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java +++ b/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java @@ -49,11 +49,6 @@ public class TestPersistanceConfig { return Mockito.mock(MotdRepository.class); } - @Bean - public MotdListRepository motdListRepository() { - return Mockito.mock(MotdListRepository.class); - } - @Bean public VisitedSessionRepository visitedSessionRepository() { return Mockito.mock(VisitedSessionRepository.class); -- GitLab