diff --git a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java index 8dda92a9e3c3d823721605e3fa722b1e1f82a033..34bf32e53266ef5caeed6d3691d6295b499428d4 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 572c7f6fdc885204f387c6d85a44f1d43d5b6d1d..141cdea0c3f1eb9e6bbbcef9edeeced8ead795a1 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 29793bb614a19f96ec20ca7290b5de28d3a7ebf3..cb515d59465854da113f4246bf9b2c8b22698d4a 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 a407c7eccb875d5a30e4ee9397637494f84f5e79..0000000000000000000000000000000000000000 --- 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 dcdb8ead1289b774f3f1b000575d20657b39c453..0000000000000000000000000000000000000000 --- 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 75c66ee2ad6e651cf0bf75ea360fe75036dfd351..78f1a311ec8a0c4998061d73e03343ffb3e88475 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);