From e46b58d794be2d2df344ab401e0542f631974c0f Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Tue, 6 Nov 2018 15:03:15 +0100 Subject: [PATCH] Refactor services and repositories * Prefer simple IDs over entity types for method parameters * Avoid use of obsolete v2 classes in service and repository layers * Optimize imports --- .../java/de/thm/arsnova/config/AppConfig.java | 14 +-- .../thm/arsnova/config/PersistenceConfig.java | 20 +++- .../de/thm/arsnova/config/SecurityConfig.java | 4 +- .../controller/AbstractEntityController.java | 2 +- .../arsnova/controller/UserController.java | 4 +- .../v2/AuthenticationController.java | 6 +- .../controller/v2/ContentController.java | 10 +- .../controller/v2/CourseController.java | 6 +- .../controller/v2/FeedbackController.java | 10 +- .../arsnova/controller/v2/MotdController.java | 2 +- .../arsnova/controller/v2/RoomController.java | 2 +- .../controller/v2/SocketController.java | 8 +- .../event/DeleteFeedbackForRoomsEvent.java | 11 +-- .../de/thm/arsnova/event/NewAnswerEvent.java | 11 +-- src/main/java/de/thm/arsnova/model/Room.java | 1 - .../model/transport/AnswerQueueElement.java | 11 +-- .../transport/ImportExportContainer.java | 2 +- .../arsnova/persistence/AnswerRepository.java | 5 +- .../persistence/CommentRepository.java | 7 +- .../persistence/ContentRepository.java | 7 +- .../arsnova/persistence/RoomRepository.java | 10 +- .../couchdb/CouchDbAnswerRepository.java | 9 +- .../couchdb/CouchDbCommentRepository.java | 19 ++-- .../couchdb/CouchDbContentRepository.java | 15 ++- .../couchdb/CouchDbRoomRepository.java | 20 ++-- .../ApplicationPermissionEvaluator.java | 4 +- .../java/de/thm/arsnova/security/User.java | 2 +- .../de/thm/arsnova/service/AnswerService.java | 3 +- .../arsnova/service/AnswerServiceImpl.java | 30 +++--- .../service/CommentFindQueryService.java | 2 +- .../arsnova/service/CommentServiceImpl.java | 28 +++--- .../thm/arsnova/service/ContentService.java | 5 +- .../arsnova/service/ContentServiceImpl.java | 46 +++++----- .../thm/arsnova/service/FeedbackService.java | 5 +- .../arsnova/service/FeedbackServiceImpl.java | 43 +++++---- .../service/FeedbackStorageService.java | 9 +- .../service/FeedbackStorageServiceImpl.java | 53 ++++++----- .../thm/arsnova/service/MotdServiceImpl.java | 2 +- .../de/thm/arsnova/service/RoomService.java | 2 +- .../thm/arsnova/service/RoomServiceImpl.java | 51 +++++------ .../de/thm/arsnova/service/TimerService.java | 4 +- .../thm/arsnova/service/TimerServiceImpl.java | 16 ++-- .../de/thm/arsnova/service/UserService.java | 15 ++- .../thm/arsnova/service/UserServiceImpl.java | 80 ++++++++-------- .../score/QuestionBasedScoreCalculator.java | 13 ++- .../arsnova/service/score/QuestionScore.java | 12 +-- .../de/thm/arsnova/service/score/Score.java | 12 +-- .../score/ScoreBasedScoreCalculator.java | 11 +-- .../service/score/ScoreCalculator.java | 3 +- .../thm/arsnova/service/score/UserScore.java | 16 ++-- .../service/score/VariantScoreCalculator.java | 7 +- .../java/de/thm/arsnova/web/RangeAspect.java | 2 +- .../websocket/ArsnovaSocketioServerImpl.java | 91 +++++++++---------- .../WebsocketAuthenticationAspect.java | 7 +- .../arsnova/config/TestSecurityConfig.java | 2 - .../java/de/thm/arsnova/model/EntityTest.java | 3 +- .../service/DefaultEntityServiceImplTest.java | 7 +- .../thm/arsnova/service/StubUserService.java | 14 +-- .../thm/arsnova/service/UserServiceTest.java | 2 +- .../QuestionBasedScoreCalculatorTest.java | 88 +++++++++--------- .../score/ScoreBasedScoreCalculatorTest.java | 84 +++++++++-------- .../de/thm/arsnova/util/ImageUtilsTest.java | 1 - 62 files changed, 477 insertions(+), 514 deletions(-) diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java index b7dcb3b72..a1415c475 100644 --- a/src/main/java/de/thm/arsnova/config/AppConfig.java +++ b/src/main/java/de/thm/arsnova/config/AppConfig.java @@ -20,21 +20,21 @@ package de.thm.arsnova.config; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import de.thm.arsnova.model.migration.FromV2Migrator; -import de.thm.arsnova.model.migration.ToV2Migrator; -import de.thm.arsnova.util.ImageUtils; import de.thm.arsnova.connector.client.ConnectorClient; import de.thm.arsnova.connector.client.ConnectorClientImpl; +import de.thm.arsnova.model.migration.FromV2Migrator; +import de.thm.arsnova.model.migration.ToV2Migrator; import de.thm.arsnova.model.serialization.CouchDbDocumentModule; import de.thm.arsnova.model.serialization.View; -import de.thm.arsnova.web.PathApiVersionContentNegotiationStrategy; -import de.thm.arsnova.websocket.ArsnovaSocketioServer; -import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl; -import de.thm.arsnova.websocket.ArsnovaSocketioServerListener; +import de.thm.arsnova.util.ImageUtils; import de.thm.arsnova.web.CacheControlInterceptorHandler; import de.thm.arsnova.web.CorsFilter; import de.thm.arsnova.web.DeprecatedApiInterceptorHandler; +import de.thm.arsnova.web.PathApiVersionContentNegotiationStrategy; import de.thm.arsnova.web.ResponseInterceptorHandler; +import de.thm.arsnova.websocket.ArsnovaSocketioServer; +import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl; +import de.thm.arsnova.websocket.ArsnovaSocketioServerListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.PropertiesFactoryBean; diff --git a/src/main/java/de/thm/arsnova/config/PersistenceConfig.java b/src/main/java/de/thm/arsnova/config/PersistenceConfig.java index 713e5fb66..d36602975 100644 --- a/src/main/java/de/thm/arsnova/config/PersistenceConfig.java +++ b/src/main/java/de/thm/arsnova/config/PersistenceConfig.java @@ -1,8 +1,24 @@ package de.thm.arsnova.config; import de.thm.arsnova.model.serialization.CouchDbObjectMapperFactory; -import de.thm.arsnova.persistence.*; -import de.thm.arsnova.persistence.couchdb.*; +import de.thm.arsnova.persistence.AnswerRepository; +import de.thm.arsnova.persistence.CommentRepository; +import de.thm.arsnova.persistence.ContentRepository; +import de.thm.arsnova.persistence.LogEntryRepository; +import de.thm.arsnova.persistence.MotdRepository; +import de.thm.arsnova.persistence.RoomRepository; +import de.thm.arsnova.persistence.SessionStatisticsRepository; +import de.thm.arsnova.persistence.StatisticsRepository; +import de.thm.arsnova.persistence.UserRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbAnswerRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbCommentRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbContentRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbLogEntryRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbMotdRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbRoomRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbSessionStatisticsRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbStatisticsRepository; +import de.thm.arsnova.persistence.couchdb.CouchDbUserRepository; import de.thm.arsnova.persistence.couchdb.support.MangoCouchDbConnector; import org.ektorp.impl.StdCouchDbInstance; import org.ektorp.spring.HttpClientFactoryBean; diff --git a/src/main/java/de/thm/arsnova/config/SecurityConfig.java b/src/main/java/de/thm/arsnova/config/SecurityConfig.java index 5f7104582..1e0ce9faf 100644 --- a/src/main/java/de/thm/arsnova/config/SecurityConfig.java +++ b/src/main/java/de/thm/arsnova/config/SecurityConfig.java @@ -19,14 +19,14 @@ package de.thm.arsnova.config; import de.thm.arsnova.security.CasLogoutSuccessHandler; import de.thm.arsnova.security.CasUserDetailsService; +import de.thm.arsnova.security.CustomLdapUserDetailsMapper; import de.thm.arsnova.security.LoginAuthenticationFailureHandler; import de.thm.arsnova.security.LoginAuthenticationSucessHandler; -import de.thm.arsnova.security.CustomLdapUserDetailsMapper; import de.thm.arsnova.security.RegisteredUserDetailsService; import de.thm.arsnova.security.jwt.JwtAuthenticationProvider; import de.thm.arsnova.security.jwt.JwtTokenFilter; -import de.thm.arsnova.security.pac4j.OauthCallbackFilter; import de.thm.arsnova.security.pac4j.OauthAuthenticationProvider; +import de.thm.arsnova.security.pac4j.OauthCallbackFilter; import org.jasig.cas.client.validation.Cas20ProxyTicketValidator; import org.pac4j.core.client.Client; import org.pac4j.core.config.Config; diff --git a/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java b/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java index 0b6c96c8f..ce3c4f23f 100644 --- a/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java +++ b/src/main/java/de/thm/arsnova/controller/AbstractEntityController.java @@ -19,9 +19,9 @@ package de.thm.arsnova.controller; import de.thm.arsnova.model.Entity; import de.thm.arsnova.model.FindQuery; -import de.thm.arsnova.web.exceptions.NotFoundException; import de.thm.arsnova.service.EntityService; import de.thm.arsnova.service.FindQueryService; +import de.thm.arsnova.web.exceptions.NotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java index e6549fbfa..c6416a32f 100644 --- a/src/main/java/de/thm/arsnova/controller/UserController.java +++ b/src/main/java/de/thm/arsnova/controller/UserController.java @@ -4,10 +4,10 @@ import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.model.LoginCredentials; import de.thm.arsnova.model.UserProfile; import de.thm.arsnova.model.serialization.View; -import de.thm.arsnova.web.exceptions.BadRequestException; -import de.thm.arsnova.web.exceptions.ForbiddenException; import de.thm.arsnova.service.RoomService; import de.thm.arsnova.service.UserService; +import de.thm.arsnova.web.exceptions.BadRequestException; +import de.thm.arsnova.web.exceptions.ForbiddenException; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java b/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java index a7f293d4a..4dac95bdf 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java @@ -20,11 +20,11 @@ package de.thm.arsnova.controller.v2; import de.thm.arsnova.config.SecurityConfig; import de.thm.arsnova.controller.AbstractController; import de.thm.arsnova.model.ServiceDescription; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.UserProfile; -import de.thm.arsnova.web.exceptions.UnauthorizedException; +import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.security.User; import de.thm.arsnova.service.UserService; +import de.thm.arsnova.web.exceptions.UnauthorizedException; import org.pac4j.core.context.J2EContext; import org.pac4j.core.exception.HttpAction; import org.pac4j.oauth.client.FacebookClient; @@ -260,7 +260,7 @@ public class AuthenticationController extends AbstractController { @RequestMapping(value = { "/logout" }, method = { RequestMethod.POST, RequestMethod.GET }) public String doLogout(final HttpServletRequest request) { final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - userService.removeUserFromMaps(userService.getCurrentUser()); + userService.removeUserIdFromMaps(userService.getCurrentUser().getId()); request.getSession().invalidate(); SecurityContextHolder.clearContext(); if (auth instanceof CasAuthenticationToken) { diff --git a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java index b6bbe1fdb..e097c27a0 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java @@ -25,10 +25,6 @@ import de.thm.arsnova.model.migration.FromV2Migrator; import de.thm.arsnova.model.migration.ToV2Migrator; import de.thm.arsnova.model.migration.v2.Answer; import de.thm.arsnova.model.migration.v2.Content; -import de.thm.arsnova.web.exceptions.ForbiddenException; -import de.thm.arsnova.web.exceptions.NoContentException; -import de.thm.arsnova.web.exceptions.NotFoundException; -import de.thm.arsnova.web.exceptions.NotImplementedException; import de.thm.arsnova.service.AnswerService; import de.thm.arsnova.service.ContentService; import de.thm.arsnova.service.RoomService; @@ -36,6 +32,10 @@ import de.thm.arsnova.service.TimerService; import de.thm.arsnova.util.PaginationListDecorator; import de.thm.arsnova.web.DeprecatedApi; import de.thm.arsnova.web.Pagination; +import de.thm.arsnova.web.exceptions.ForbiddenException; +import de.thm.arsnova.web.exceptions.NoContentException; +import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.web.exceptions.NotImplementedException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -158,7 +158,7 @@ public class ContentController extends PaginationController { ) { if (time == 0) { - timerService.startNewRound(contentId, null); + timerService.startNewRound(contentId); } else { timerService.startNewRoundDelayed(contentId, time); } diff --git a/src/main/java/de/thm/arsnova/controller/v2/CourseController.java b/src/main/java/de/thm/arsnova/controller/v2/CourseController.java index 17a766d38..ccdb3da1e 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/CourseController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/CourseController.java @@ -21,10 +21,10 @@ import de.thm.arsnova.connector.client.ConnectorClient; import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.connector.model.UserRole; import de.thm.arsnova.controller.AbstractController; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; +import de.thm.arsnova.security.User; +import de.thm.arsnova.service.UserService; import de.thm.arsnova.web.exceptions.NotImplementedException; import de.thm.arsnova.web.exceptions.UnauthorizedException; -import de.thm.arsnova.service.UserService; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -55,7 +55,7 @@ public class CourseController extends AbstractController { @RequestParam(value = "sortby", defaultValue = "name") final String sortby ) { - final ClientAuthentication currentUser = userService.getCurrentUser(); + final User currentUser = userService.getCurrentUser(); if (currentUser == null || currentUser.getUsername() == null) { throw new UnauthorizedException(); diff --git a/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java b/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java index 3374251f6..ba5db82e6 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java @@ -19,12 +19,12 @@ package de.thm.arsnova.controller.v2; import de.thm.arsnova.controller.AbstractController; import de.thm.arsnova.model.Feedback; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; -import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.security.User; import de.thm.arsnova.service.FeedbackService; import de.thm.arsnova.service.RoomService; import de.thm.arsnova.service.UserService; import de.thm.arsnova.web.DeprecatedApi; +import de.thm.arsnova.web.exceptions.NotFoundException; import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -66,7 +66,7 @@ public class FeedbackController extends AbstractController { @RequestMapping(value = "/myfeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) public String getMyFeedback(@PathVariable final String shortId) { String roomId = roomService.getIdByShortId(shortId); - Integer value = feedbackService.getByRoomIdAndUser(roomId, userService.getCurrentUser()); + Integer value = feedbackService.getByRoomIdAndUserId(roomId, userService.getCurrentUser().getId()); if (value != null && value >= Feedback.MIN_FEEDBACK_TYPE && value <= Feedback.MAX_FEEDBACK_TYPE) { return value.toString(); } @@ -103,8 +103,8 @@ public class FeedbackController extends AbstractController { @RequestBody final int value ) { String roomId = roomService.getIdByShortId(shortId); - ClientAuthentication user = userService.getCurrentUser(); - feedbackService.save(roomId, value, user); + User user = userService.getCurrentUser(); + feedbackService.save(roomId, value, user.getId()); Feedback feedback = feedbackService.getByRoomId(roomId); return feedback; 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 416fa0918..812f9ab18 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java @@ -23,11 +23,11 @@ import de.thm.arsnova.model.migration.FromV2Migrator; import de.thm.arsnova.model.migration.ToV2Migrator; import de.thm.arsnova.model.migration.v2.Motd; import de.thm.arsnova.model.migration.v2.MotdList; -import de.thm.arsnova.web.exceptions.ForbiddenException; import de.thm.arsnova.security.User; import de.thm.arsnova.service.MotdService; import de.thm.arsnova.service.RoomService; import de.thm.arsnova.service.UserService; +import de.thm.arsnova.web.exceptions.ForbiddenException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; diff --git a/src/main/java/de/thm/arsnova/controller/v2/RoomController.java b/src/main/java/de/thm/arsnova/controller/v2/RoomController.java index 9c051b469..baef51c6f 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/RoomController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/RoomController.java @@ -25,7 +25,6 @@ import de.thm.arsnova.model.migration.v2.RoomFeature; import de.thm.arsnova.model.migration.v2.RoomInfo; import de.thm.arsnova.model.transport.ImportExportContainer; import de.thm.arsnova.model.transport.ScoreStatistics; -import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.service.RoomService; import de.thm.arsnova.service.RoomServiceImpl; import de.thm.arsnova.service.RoomServiceImpl.RoomNameComparator; @@ -33,6 +32,7 @@ import de.thm.arsnova.service.RoomServiceImpl.RoomShortNameComparator; import de.thm.arsnova.service.UserService; import de.thm.arsnova.web.DeprecatedApi; import de.thm.arsnova.web.Pagination; +import de.thm.arsnova.web.exceptions.UnauthorizedException; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; diff --git a/src/main/java/de/thm/arsnova/controller/v2/SocketController.java b/src/main/java/de/thm/arsnova/controller/v2/SocketController.java index ab9afeef0..2bcec6ba1 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/SocketController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/SocketController.java @@ -18,7 +18,7 @@ package de.thm.arsnova.controller.v2; import de.thm.arsnova.controller.AbstractController; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; +import de.thm.arsnova.security.User; import de.thm.arsnova.service.UserService; import de.thm.arsnova.websocket.ArsnovaSocketioServer; import io.swagger.annotations.Api; @@ -72,13 +72,13 @@ public class SocketController extends AbstractController { response.setStatus(HttpStatus.BAD_REQUEST.value()); return; } - ClientAuthentication u = userService.getCurrentUser(); - if (null == u) { + User user = userService.getCurrentUser(); + if (null == user) { logger.debug("Client {} requested to assign Websocket session but has not authenticated.", socketid); response.setStatus(HttpStatus.FORBIDDEN.value()); return; } - userService.putUserToSocketId(UUID.fromString(socketid), u); + userService.putUserIdToSocketId(UUID.fromString(socketid), user.getId()); response.setStatus(HttpStatus.NO_CONTENT.value()); } diff --git a/src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java b/src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java index 5942e19ad..38b5cfca9 100644 --- a/src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java +++ b/src/main/java/de/thm/arsnova/event/DeleteFeedbackForRoomsEvent.java @@ -17,7 +17,6 @@ */ package de.thm.arsnova.event; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.Room; import java.util.Set; @@ -31,20 +30,20 @@ public class DeleteFeedbackForRoomsEvent extends ArsnovaEvent { private final Set<Room> sessions; - private final ClientAuthentication user; + private final String userId; - public DeleteFeedbackForRoomsEvent(Object source, Set<Room> rooms, ClientAuthentication user) { + public DeleteFeedbackForRoomsEvent(Object source, Set<Room> rooms, String userId) { super(source); this.sessions = rooms; - this.user = user; + this.userId = userId; } public Set<Room> getSessions() { return sessions; } - public ClientAuthentication getUser() { - return user; + public String getUserId() { + return userId; } @Override diff --git a/src/main/java/de/thm/arsnova/event/NewAnswerEvent.java b/src/main/java/de/thm/arsnova/event/NewAnswerEvent.java index 5049bf32c..bdf775c00 100644 --- a/src/main/java/de/thm/arsnova/event/NewAnswerEvent.java +++ b/src/main/java/de/thm/arsnova/event/NewAnswerEvent.java @@ -17,7 +17,6 @@ */ package de.thm.arsnova.event; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.Answer; import de.thm.arsnova.model.Content; import de.thm.arsnova.model.Room; @@ -31,14 +30,14 @@ public class NewAnswerEvent extends RoomEvent { private final Answer answer; - private final ClientAuthentication user; + private final String userId; private final Content content; - public NewAnswerEvent(Object source, Room room, Answer answer, ClientAuthentication user, Content content) { + public NewAnswerEvent(Object source, Room room, Answer answer, String userId, Content content) { super(source, room); this.answer = answer; - this.user = user; + this.userId = userId; this.content = content; } @@ -51,8 +50,8 @@ public class NewAnswerEvent extends RoomEvent { return answer; } - public ClientAuthentication getUser() { - return user; + public String getUserId() { + return userId; } public Content getContent() { diff --git a/src/main/java/de/thm/arsnova/model/Room.java b/src/main/java/de/thm/arsnova/model/Room.java index ad3610d19..676b335dd 100644 --- a/src/main/java/de/thm/arsnova/model/Room.java +++ b/src/main/java/de/thm/arsnova/model/Room.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonView; import de.thm.arsnova.model.serialization.View; import org.springframework.core.style.ToStringCreator; -import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Objects; diff --git a/src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java b/src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java index b199acb6e..dfe4c2b8b 100644 --- a/src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java +++ b/src/main/java/de/thm/arsnova/model/transport/AnswerQueueElement.java @@ -20,7 +20,6 @@ package de.thm.arsnova.model.transport; import de.thm.arsnova.model.Answer; import de.thm.arsnova.model.Content; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; /** * An answer that is about to get saved in the database. Answers are not saved immediately, they are instead stored @@ -34,13 +33,13 @@ public class AnswerQueueElement { private final Answer answer; - private final ClientAuthentication user; + private final String userId; - public AnswerQueueElement(Room room, Content content, Answer answer, ClientAuthentication user) { + public AnswerQueueElement(Room room, Content content, Answer answer, String userId) { this.room = room; this.content = content; this.answer = answer; - this.user = user; + this.userId = userId; } public Room getRoom() { @@ -55,7 +54,7 @@ public class AnswerQueueElement { return answer; } - public ClientAuthentication getUser() { - return user; + public String getUserId() { + return userId; } } diff --git a/src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java b/src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java index ac2814acb..ea1de4f26 100644 --- a/src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java +++ b/src/main/java/de/thm/arsnova/model/transport/ImportExportContainer.java @@ -18,8 +18,8 @@ package de.thm.arsnova.model.transport; import com.fasterxml.jackson.annotation.JsonView; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.migration.v2.Answer; +import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.migration.v2.Comment; import de.thm.arsnova.model.migration.v2.Content; import de.thm.arsnova.model.migration.v2.Motd; diff --git a/src/main/java/de/thm/arsnova/persistence/AnswerRepository.java b/src/main/java/de/thm/arsnova/persistence/AnswerRepository.java index c07995b55..3bf6a1e25 100644 --- a/src/main/java/de/thm/arsnova/persistence/AnswerRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/AnswerRepository.java @@ -19,17 +19,16 @@ package de.thm.arsnova.persistence; import de.thm.arsnova.model.Answer; import de.thm.arsnova.model.AnswerStatistics; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import java.util.List; public interface AnswerRepository extends CrudRepository<Answer, String> { - <T extends Answer> T findByContentIdUserPiRound(String contentId, Class<T> type, ClientAuthentication user, int piRound); + <T extends Answer> T findByContentIdUserIdPiRound(String contentId, Class<T> type, String userId, int piRound); AnswerStatistics findByContentIdRound(String contentId, int round, final int optionCount); int countByContentIdRound(String contentId, int round); int countByContentId(String contentId); <T extends Answer> List<T> findByContentId(String contentId, Class<T> type, int start, int limit); - List<Answer> findByUserRoomId(ClientAuthentication user, String roomId); + List<Answer> findByUserIdRoomId(String userId, String roomId); int countByRoomId(String roomId); int deleteByContentId(String contentId); int countByRoomIdOnlyLectureVariant(String roomId); diff --git a/src/main/java/de/thm/arsnova/persistence/CommentRepository.java b/src/main/java/de/thm/arsnova/persistence/CommentRepository.java index afa7bf82e..9624e755a 100644 --- a/src/main/java/de/thm/arsnova/persistence/CommentRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/CommentRepository.java @@ -1,7 +1,6 @@ package de.thm.arsnova.persistence; import de.thm.arsnova.model.Comment; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.migration.v2.CommentReadingCount; import java.util.List; @@ -9,10 +8,10 @@ import java.util.List; public interface CommentRepository extends CrudRepository<Comment, String> { int countByRoomId(String roomId); CommentReadingCount countReadingByRoomId(String roomId); - CommentReadingCount countReadingByRoomIdAndUser(String roomId, ClientAuthentication user); + CommentReadingCount countReadingByRoomIdAndUserId(String roomId, String userId); List<Comment> findByRoomId(String roomId, int start, int limit); - List<Comment> findByRoomIdAndUser(String roomId, ClientAuthentication user, int start, int limit); + List<Comment> findByRoomIdAndUserId(String roomId, String userId, int start, int limit); Comment findOne(String commentId); int deleteByRoomId(String roomId); - int deleteByRoomIdAndUser(String roomId, ClientAuthentication user); + int deleteByRoomIdAndUserId(String roomId, String userId); } diff --git a/src/main/java/de/thm/arsnova/persistence/ContentRepository.java b/src/main/java/de/thm/arsnova/persistence/ContentRepository.java index 89be07388..eca83a089 100644 --- a/src/main/java/de/thm/arsnova/persistence/ContentRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/ContentRepository.java @@ -1,7 +1,6 @@ package de.thm.arsnova.persistence; import de.thm.arsnova.model.Content; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import java.util.List; @@ -13,7 +12,7 @@ public interface ContentRepository extends CrudRepository<Content, String> { List<String> findIdsByRoomId(String roomId); List<String> findIdsByRoomIdAndVariant(String roomId, String variant); int deleteByRoomId(String roomId); - List<String> findUnansweredIdsByRoomIdAndUser(String roomId, ClientAuthentication user); + List<String> findUnansweredIdsByRoomIdAndUser(String roomId, String userId); List<Content> findByRoomIdOnlyLectureVariantAndActive(String roomId); List<Content> findByRoomIdOnlyLectureVariant(String roomId); List<Content> findByRoomIdOnlyFlashcardVariantAndActive(String roomId); @@ -26,6 +25,6 @@ public interface ContentRepository extends CrudRepository<Content, String> { int countPreparationVariantByRoomId(String roomId); List<String> findIdsByRoomIdAndVariantAndSubject(String roomId, String questionVariant, String subject); List<String> findSubjectsByRoomIdAndVariant(String roomId, String questionVariant); - List<String> findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(String roomId, ClientAuthentication user); - List<String> findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(String roomId, ClientAuthentication user); + List<String> findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(String roomId, String userId); + List<String> findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(String roomId, String userId); } diff --git a/src/main/java/de/thm/arsnova/persistence/RoomRepository.java b/src/main/java/de/thm/arsnova/persistence/RoomRepository.java index 9e811203c..1d61c33c4 100644 --- a/src/main/java/de/thm/arsnova/persistence/RoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/RoomRepository.java @@ -31,12 +31,12 @@ public interface RoomRepository extends CrudRepository<Room, String> { List<Room> findByOwnerId(String ownerId, int start, int limit); List<String> findIdsByOwnerId(String ownerId); List<Room> findAllForPublicPool(); - List<Room> findForPublicPoolByOwner(ClientAuthentication owner); - List<Room> getRoomsWithStatsForOwner(ClientAuthentication owner, int start, int limit); - List<Room> getRoomHistoryWithStatsForUser(List<Room> rooms, ClientAuthentication owner); + List<Room> findForPublicPoolByOwnerId(String ownerId); + List<Room> getRoomsWithStatsForOwnerId(String ownerId, int start, int limit); + List<Room> getRoomHistoryWithStatsForUser(List<Room> rooms, String ownerId); List<Room> findInfosForPublicPool(); - List<Room> findInfosForPublicPoolByOwner(ClientAuthentication owner); + List<Room> findInfosForPublicPoolByOwnerId(String ownerId); List<Room> findRoomsByCourses(List<Course> courses); - Room importRoom(ClientAuthentication user, ImportExportContainer importRoom); + Room importRoom(String userId, ImportExportContainer importRoom); ImportExportContainer exportRoom(String id, Boolean withAnswer, Boolean withFeedbackQuestions); } diff --git a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java index 026246bb3..9b1d3d6e0 100644 --- a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbAnswerRepository.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.Lists; import de.thm.arsnova.model.Answer; import de.thm.arsnova.model.AnswerStatistics; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.persistence.AnswerRepository; import de.thm.arsnova.persistence.LogEntryRepository; import org.ektorp.BulkDeleteDocument; @@ -75,9 +74,9 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple } @Override - public <T extends Answer> T findByContentIdUserPiRound(final String contentId, final Class<T> type, final ClientAuthentication user, final int piRound) { + public <T extends Answer> T findByContentIdUserIdPiRound(final String contentId, final Class<T> type, final String userId, final int piRound) { final List<T> answerList = db.queryView(createQuery("by_contentid_creatorid_round") - .key(ComplexKey.of(contentId, user.getUsername(), piRound)), type); + .key(ComplexKey.of(contentId, userId, piRound)), type); return answerList.isEmpty() ? null : answerList.get(0); } @@ -164,8 +163,8 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple } @Override - public List<Answer> findByUserRoomId(final ClientAuthentication user, final String roomId) { - return queryView("by_creatorid_roomid", ComplexKey.of(user.getId(), roomId)); + public List<Answer> findByUserIdRoomId(final String userId, final String roomId) { + return queryView("by_creatorid_roomid", ComplexKey.of(userId, roomId)); } @Override diff --git a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java index 8b353d242..32e28fb08 100644 --- a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbCommentRepository.java @@ -2,7 +2,6 @@ package de.thm.arsnova.persistence.couchdb; import com.fasterxml.jackson.databind.JsonNode; import de.thm.arsnova.model.Comment; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.migration.v2.CommentReadingCount; import de.thm.arsnova.persistence.CommentRepository; import de.thm.arsnova.persistence.LogEntryRepository; @@ -50,10 +49,10 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp } @Override - public CommentReadingCount countReadingByRoomIdAndUser(final String roomId, final ClientAuthentication user) { + public CommentReadingCount countReadingByRoomIdAndUserId(final String roomId, final String userId) { final ViewResult result = db.queryView(createQuery("by_roomid_creatorid_read") - .startKey(ComplexKey.of(roomId, user.getId())) - .endKey(ComplexKey.of(roomId, user.getId(), ComplexKey.emptyObject())) + .startKey(ComplexKey.of(roomId, userId)) + .endKey(ComplexKey.of(roomId, userId, ComplexKey.emptyObject())) .reduce(true) .group(true)); return calculateReadingCount(result); @@ -123,7 +122,7 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp } @Override - public List<Comment> findByRoomIdAndUser(final String roomId, final ClientAuthentication user, final int start, final int limit) { + public List<Comment> findByRoomIdAndUserId(final String roomId, final String userId, final int start, final int limit) { final int qSkip = start > 0 ? start : -1; final int qLimit = limit > 0 ? limit : -1; @@ -131,8 +130,8 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp .skip(qSkip) .limit(qLimit) .descending(true) - .startKey(ComplexKey.of(roomId, user.getUsername(), ComplexKey.emptyObject())) - .endKey(ComplexKey.of(roomId, user.getUsername())) + .startKey(ComplexKey.of(roomId, userId, ComplexKey.emptyObject())) + .endKey(ComplexKey.of(roomId, userId)) .includeDocs(true), Comment.class); // for (Comment comment : comments) { @@ -150,10 +149,10 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp } @Override - public int deleteByRoomIdAndUser(final String roomId, final ClientAuthentication user) { + public int deleteByRoomIdAndUserId(final String roomId, final String userId) { final ViewResult result = db.queryView(createQuery("by_roomid_creatorid_read") - .startKey(ComplexKey.of(roomId, user.getUsername())) - .endKey(ComplexKey.of(roomId, user.getUsername(), ComplexKey.emptyObject()))); + .startKey(ComplexKey.of(roomId, userId)) + .endKey(ComplexKey.of(roomId, userId, ComplexKey.emptyObject()))); return delete(result); } diff --git a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java index 5defab3af..02928a5d9 100644 --- a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbContentRepository.java @@ -1,7 +1,6 @@ package de.thm.arsnova.persistence.couchdb; import de.thm.arsnova.model.Content; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.persistence.ContentRepository; import de.thm.arsnova.persistence.LogEntryRepository; import org.ektorp.BulkDeleteDocument; @@ -93,11 +92,11 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp } @Override - public List<String> findUnansweredIdsByRoomIdAndUser(final String roomId, final ClientAuthentication user) { + public List<String> findUnansweredIdsByRoomIdAndUser(final String roomId, final String userId) { final ViewResult result = db.queryView(createQuery("contentid_by_creatorid_roomid_variant") .designDocId("_design/Answer") - .startKey(ComplexKey.of(user.getId(), roomId)) - .endKey(ComplexKey.of(user.getUsername(), roomId, ComplexKey.emptyObject()))); + .startKey(ComplexKey.of(userId, roomId)) + .endKey(ComplexKey.of(userId, roomId, ComplexKey.emptyObject()))); final List<String> answeredIds = new ArrayList<>(); for (final ViewResult.Row row : result.getRows()) { answeredIds.add(row.getId()); @@ -106,10 +105,10 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp } @Override - public List<String> findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(final String roomId, final ClientAuthentication user) { + public List<String> findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(final String roomId, final String userId) { final ViewResult result = db.queryView(createQuery("contentid_round_by_creatorid_roomid_variant") .designDocId("_design/Answer") - .key(ComplexKey.of(user.getId(), roomId, "lecture"))); + .key(ComplexKey.of(userId, roomId, "lecture"))); final Map<String, Integer> answeredQuestions = new HashMap<>(); for (final ViewResult.Row row : result.getRows()) { answeredQuestions.put(row.getId(), row.getKeyAsNode().get(2).asInt()); @@ -119,10 +118,10 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp } @Override - public List<String> findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(final String roomId, final ClientAuthentication user) { + public List<String> findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(final String roomId, final String userId) { final ViewResult result = db.queryView(createQuery("contentid_round_by_creatorid_roomid_variant") .designDocId("_design/Answer") - .key(ComplexKey.of(user.getId(), roomId, "preparation"))); + .key(ComplexKey.of(userId, roomId, "preparation"))); final Map<String, Integer> answeredQuestions = new HashMap<>(); for (final ViewResult.Row row : result.getRows()) { answeredQuestions.put(row.getId(), row.getKeyAsNode().get(2).asInt()); diff --git a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java index 6a7c4e32a..9986c57c6 100644 --- a/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistence/couchdb/CouchDbRoomRepository.java @@ -103,7 +103,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement /* TODO: Move to service layer. */ @Override - public Room importRoom(final ClientAuthentication user, final ImportExportContainer importRoom) { + public Room importRoom(final String userId, final ImportExportContainer importRoom) { /* FIXME: not yet migrated - move to service layer */ throw new UnsupportedOperationException(); // final Room session = this.saveSession(user, importRoom.generateSessionEntity(user)); @@ -309,20 +309,20 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement } @Override - public List<Room> findForPublicPoolByOwner(final ClientAuthentication owner) { + public List<Room> findForPublicPoolByOwnerId(final String ownerId) { /* TODO: Only load IDs and check against cache for data. */ return db.queryView( createQuery("partial_by_pool_ownerid_name") - .startKey(ComplexKey.of(true, owner.getId())) - .endKey(ComplexKey.of(true, owner.getId(), ComplexKey.emptyObject())) + .startKey(ComplexKey.of(true, ownerId)) + .endKey(ComplexKey.of(true, ownerId, ComplexKey.emptyObject())) .includeDocs(true), Room.class); } /* TODO: Move to service layer. */ @Override - public List<Room> findInfosForPublicPoolByOwner(final ClientAuthentication owner) { - final List<Room> rooms = this.findForPublicPoolByOwner(owner); + public List<Room> findInfosForPublicPoolByOwnerId(final String ownerId) { + final List<Room> rooms = this.findForPublicPoolByOwnerId(ownerId); if (rooms.isEmpty()) { return new ArrayList<>(); } @@ -331,8 +331,8 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement /* TODO: Move to service layer. */ @Override - public List<Room> getRoomsWithStatsForOwner(final ClientAuthentication owner, final int start, final int limit) { - final List<Room> rooms = this.findByOwner(owner, start, limit); + public List<Room> getRoomsWithStatsForOwnerId(final String ownerId, final int start, final int limit) { + final List<Room> rooms = this.findByOwnerId(ownerId, start, limit); if (rooms.isEmpty()) { return new ArrayList<>(); } @@ -355,9 +355,9 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement } /* TODO: Move to service layer. */ - public List<Room> getRoomHistoryWithStatsForUser(final List<Room> rooms, final ClientAuthentication user) { + public List<Room> getRoomHistoryWithStatsForUser(final List<Room> rooms, final String ownerId) { final ViewQuery answeredQuestionsView = createQuery("by_creatorid_roomid").designDocId("_design/Answer") - .reduce(false).keys(rooms.stream().map(room -> ComplexKey.of(user.getId(), room.getId())).collect(Collectors.toList())); + .reduce(false).keys(rooms.stream().map(room -> ComplexKey.of(ownerId, room.getId())).collect(Collectors.toList())); final ViewQuery contentIdsView = createQuery("by_roomid").designDocId("_design/Content") .reduce(false).keys(rooms.stream().map(Room::getId).collect(Collectors.toList())); diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java index beb8741d0..2e8fdd8ad 100644 --- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java +++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java @@ -17,10 +17,10 @@ */ package de.thm.arsnova.security; -import de.thm.arsnova.model.Motd; -import de.thm.arsnova.model.Room; import de.thm.arsnova.model.Comment; import de.thm.arsnova.model.Content; +import de.thm.arsnova.model.Motd; +import de.thm.arsnova.model.Room; import de.thm.arsnova.model.UserProfile; import de.thm.arsnova.persistence.CommentRepository; import de.thm.arsnova.persistence.ContentRepository; diff --git a/src/main/java/de/thm/arsnova/security/User.java b/src/main/java/de/thm/arsnova/security/User.java index 35f1fb64b..80efecfc2 100644 --- a/src/main/java/de/thm/arsnova/security/User.java +++ b/src/main/java/de/thm/arsnova/security/User.java @@ -17,8 +17,8 @@ */ package de.thm.arsnova.security; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.UserProfile; +import de.thm.arsnova.model.migration.v2.ClientAuthentication; import org.springframework.security.core.GrantedAuthority; import java.util.Collection; diff --git a/src/main/java/de/thm/arsnova/service/AnswerService.java b/src/main/java/de/thm/arsnova/service/AnswerService.java index 536d410dd..759815ccf 100644 --- a/src/main/java/de/thm/arsnova/service/AnswerService.java +++ b/src/main/java/de/thm/arsnova/service/AnswerService.java @@ -3,7 +3,6 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Answer; import de.thm.arsnova.model.AnswerStatistics; import de.thm.arsnova.model.TextAnswer; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import java.util.List; import java.util.Map; @@ -11,7 +10,7 @@ import java.util.Map; public interface AnswerService extends EntityService<Answer> { Answer getMyAnswer(String contentId); - void getFreetextAnswerAndMarkRead(String answerId, ClientAuthentication user); + void getFreetextAnswerAndMarkRead(String answerId, String userId); AnswerStatistics getStatistics(String contentId, int piRound); diff --git a/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java index 5b5535ad9..c7dd6e561 100644 --- a/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java @@ -17,21 +17,21 @@ */ package de.thm.arsnova.service; +import de.thm.arsnova.event.DeleteAnswerEvent; +import de.thm.arsnova.event.NewAnswerEvent; import de.thm.arsnova.model.Answer; import de.thm.arsnova.model.AnswerStatistics; import de.thm.arsnova.model.ChoiceQuestionContent; import de.thm.arsnova.model.Content; import de.thm.arsnova.model.Room; import de.thm.arsnova.model.TextAnswer; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.transport.AnswerQueueElement; -import de.thm.arsnova.event.DeleteAnswerEvent; -import de.thm.arsnova.event.NewAnswerEvent; -import de.thm.arsnova.web.exceptions.NotFoundException; -import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.persistence.AnswerRepository; import de.thm.arsnova.persistence.ContentRepository; import de.thm.arsnova.persistence.RoomRepository; +import de.thm.arsnova.security.User; +import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.web.exceptions.UnauthorizedException; import org.ektorp.DbAccessException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -104,7 +104,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> // Send NewAnswerEvents ... for (AnswerQueueElement e : elements) { - this.publisher.publishEvent(new NewAnswerEvent(this, e.getRoom(), e.getAnswer(), e.getUser(), e.getQuestion())); + this.publisher.publishEvent(new NewAnswerEvent(this, e.getRoom(), e.getAnswer(), e.getUserId(), e.getQuestion())); } } catch (final DbAccessException e) { logger.error("Could not bulk save answers from queue.", e); @@ -128,11 +128,11 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> if (content == null) { throw new NotFoundException(); } - return answerRepository.findByContentIdUserPiRound(contentId, Answer.class, userService.getCurrentUser(), content.getState().getRound()); + return answerRepository.findByContentIdUserIdPiRound(contentId, Answer.class, userService.getCurrentUser().getId(), content.getState().getRound()); } @Override - public void getFreetextAnswerAndMarkRead(final String answerId, final ClientAuthentication user) { + public void getFreetextAnswerAndMarkRead(final String answerId, final String userId) { final Answer answer = answerRepository.findOne(answerId); if (!(answer instanceof TextAnswer)) { throw new NotFoundException(); @@ -142,7 +142,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> return; } final Room room = roomRepository.findOne(textAnswer.getRoomId()); - if (room.getOwnerId().equals(user.getId())) { + if (room.getOwnerId().equals(userId)) { textAnswer.setRead(true); answerRepository.save(textAnswer); } @@ -290,7 +290,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> } /* filter answers by active piRound per content */ - final List<Answer> answers = answerRepository.findByUserRoomId(userService.getCurrentUser(), roomId); + final List<Answer> answers = answerRepository.findByUserIdRoomId(userService.getCurrentUser().getId(), roomId); final List<Answer> filteredAnswers = new ArrayList<>(); for (final Answer answer : answers) { final Content content = contentIdToContent.get(answer.getContentId()); @@ -319,7 +319,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> @PreAuthorize("isAuthenticated()") @CacheEvict(value = "answerlists", key = "#contentId") public Answer saveAnswer(final String contentId, final Answer answer) { - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); final Content content = contentService.get(contentId); if (content == null) { throw new NotFoundException(); @@ -352,7 +352,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> answer.setRound(content.getState().getRound()); } - this.answerQueue.offer(new AnswerQueueElement(room, content, answer, user)); + this.answerQueue.offer(new AnswerQueueElement(room, content, answer, user.getId())); return answer; } @@ -361,7 +361,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> @PreAuthorize("isAuthenticated()") @CacheEvict(value = "answerlists", allEntries = true) public Answer updateAnswer(final Answer answer) { - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); final Answer realAnswer = this.getMyAnswer(answer.getContentId()); if (user == null || realAnswer == null || !user.getId().equals(realAnswer.getCreatorId())) { throw new UnauthorizedException(); @@ -379,7 +379,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> answer.setContentId(content.getId()); answer.setRoomId(room.getId()); answerRepository.save(realAnswer); - this.publisher.publishEvent(new NewAnswerEvent(this, room, answer, user, content)); + this.publisher.publishEvent(new NewAnswerEvent(this, room, answer, user.getId(), content)); return answer; } @@ -392,7 +392,7 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> if (content == null) { throw new NotFoundException(); } - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); final Room room = roomRepository.findOne(content.getRoomId()); if (user == null || room == null || !room.getOwnerId().equals(user.getId())) { throw new UnauthorizedException(); diff --git a/src/main/java/de/thm/arsnova/service/CommentFindQueryService.java b/src/main/java/de/thm/arsnova/service/CommentFindQueryService.java index fdbe5b886..1f5a8de9b 100644 --- a/src/main/java/de/thm/arsnova/service/CommentFindQueryService.java +++ b/src/main/java/de/thm/arsnova/service/CommentFindQueryService.java @@ -17,8 +17,8 @@ */ package de.thm.arsnova.service; -import de.thm.arsnova.model.FindQuery; import de.thm.arsnova.model.Comment; +import de.thm.arsnova.model.FindQuery; import org.springframework.stereotype.Service; import java.util.HashSet; diff --git a/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java index 3404880e8..725b1bc35 100644 --- a/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java @@ -1,15 +1,15 @@ package de.thm.arsnova.service; +import de.thm.arsnova.event.DeleteCommentEvent; import de.thm.arsnova.model.Comment; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.migration.v2.CommentReadingCount; -import de.thm.arsnova.event.DeleteCommentEvent; +import de.thm.arsnova.persistence.CommentRepository; +import de.thm.arsnova.persistence.RoomRepository; +import de.thm.arsnova.security.User; import de.thm.arsnova.web.exceptions.ForbiddenException; import de.thm.arsnova.web.exceptions.NotFoundException; import de.thm.arsnova.web.exceptions.UnauthorizedException; -import de.thm.arsnova.persistence.CommentRepository; -import de.thm.arsnova.persistence.RoomRepository; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; @@ -56,7 +56,7 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem @PreAuthorize("isAuthenticated()") public void prepareCreate(final Comment comment) { final Room room = roomRepository.findOne(comment.getRoomId()); - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); comment.setCreatorId(user.getId()); comment.setRead(false); if (comment.getTimestamp() == null) { @@ -86,11 +86,11 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem if (room == null) { throw new UnauthorizedException(); } - final ClientAuthentication user = getCurrentUser(); + final User user = getCurrentUser(); if (room.getOwnerId().equals(user.getId())) { commentRepository.deleteByRoomId(room.getId()); } else { - commentRepository.deleteByRoomIdAndUser(room.getId(), user); + commentRepository.deleteByRoomIdAndUserId(room.getId(), user.getId()); } } @@ -106,12 +106,12 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem if (username == null) { return commentRepository.countReadingByRoomId(roomId); } else { - ClientAuthentication currentUser = userService.getCurrentUser(); - if (!currentUser.getUsername().equals(username)) { + User user = userService.getCurrentUser(); + if (!user.getUsername().equals(username)) { throw new ForbiddenException(); } - return commentRepository.countReadingByRoomIdAndUser(roomId, currentUser); + return commentRepository.countReadingByRoomIdAndUserId(roomId, user.getId()); } } @@ -119,11 +119,11 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem @PreAuthorize("isAuthenticated()") public List<Comment> getByRoomId(final String roomId, final int offset, final int limit) { final Room room = roomRepository.findOne(roomId); - final ClientAuthentication user = getCurrentUser(); + final User user = getCurrentUser(); if (room.getOwnerId().equals(user.getId())) { return commentRepository.findByRoomId(room.getId(), offset, limit); } else { - return commentRepository.findByRoomIdAndUser(room.getId(), user, offset, limit); + return commentRepository.findByRoomIdAndUserId(room.getId(), user.getId(), offset, limit); } } @@ -141,8 +141,8 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem return comment; } - private ClientAuthentication getCurrentUser() { - final ClientAuthentication user = userService.getCurrentUser(); + private User getCurrentUser() { + final User user = userService.getCurrentUser(); if (user == null) { throw new UnauthorizedException(); } diff --git a/src/main/java/de/thm/arsnova/service/ContentService.java b/src/main/java/de/thm/arsnova/service/ContentService.java index 253298413..dbb3d8b5a 100644 --- a/src/main/java/de/thm/arsnova/service/ContentService.java +++ b/src/main/java/de/thm/arsnova/service/ContentService.java @@ -35,7 +35,6 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Content; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import java.util.List; @@ -69,11 +68,11 @@ public interface ContentService extends EntityService<Content> { List<String> getUnAnsweredLectureContentIds(String roomId); - List<String> getUnAnsweredLectureContentIds(String roomId, ClientAuthentication user); + List<String> getUnAnsweredLectureContentIds(String roomId, String userId); List<String> getUnAnsweredPreparationContentIds(String roomId); - List<String> getUnAnsweredPreparationContentIds(String roomId, ClientAuthentication user); + List<String> getUnAnsweredPreparationContentIds(String roomId, String userId); void publishAll(String roomId, boolean publish); diff --git a/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java index a2e11f4f3..1b0aee135 100644 --- a/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java @@ -17,16 +17,16 @@ */ package de.thm.arsnova.service; +import de.thm.arsnova.event.*; import de.thm.arsnova.model.Content; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; -import de.thm.arsnova.event.*; -import de.thm.arsnova.web.exceptions.NotFoundException; -import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.persistence.AnswerRepository; import de.thm.arsnova.persistence.ContentRepository; import de.thm.arsnova.persistence.LogEntryRepository; import de.thm.arsnova.persistence.RoomRepository; +import de.thm.arsnova.security.User; +import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.web.exceptions.UnauthorizedException; import org.ektorp.DocumentNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +109,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem //@Cacheable("contentlists") public List<Content> getByRoomId(final String roomId) { final Room room = roomRepository.findOne(roomId); - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); if (room.getOwnerId().equals(user.getId())) { return contentRepository.findByRoomIdForSpeaker(roomId); } else { @@ -206,7 +206,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem @Override public void prepareUpdate(final Content content) { - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); final Content oldContent = contentRepository.findOne(content.getId()); if (null == oldContent) { throw new NotFoundException(); @@ -386,7 +386,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem @CacheEvict(value = "preparationcontentlists", key = "#roomId"), @CacheEvict(value = "flashcardcontentlists", key = "#roomId") }) public void setVotingAdmissions(final String roomId, final boolean disableVoting, Iterable<Content> contents) { - final ClientAuthentication user = getCurrentUser(); + final User user = getCurrentUser(); final Room room = roomRepository.findOne(roomId); if (!room.getOwnerId().equals(user.getId())) { throw new UnauthorizedException(); @@ -412,7 +412,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem } private Room getRoomWithAuthCheck(final String roomId) { - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); final Room room = roomRepository.findOne(roomId); if (user == null || room == null || !room.getOwnerId().equals(user.getId())) { throw new UnauthorizedException(); @@ -423,12 +423,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem @Override @PreAuthorize("isAuthenticated()") public List<String> getUnAnsweredContentIds(final String roomId) { - final ClientAuthentication user = getCurrentUser(); - return contentRepository.findUnansweredIdsByRoomIdAndUser(roomId, user); + final User user = getCurrentUser(); + return contentRepository.findUnansweredIdsByRoomIdAndUser(roomId, user.getId()); } - private ClientAuthentication getCurrentUser() { - final ClientAuthentication user = userService.getCurrentUser(); + private User getCurrentUser() { + final User user = userService.getCurrentUser(); if (user == null) { throw new UnauthorizedException(); } @@ -447,32 +447,32 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem @Override @PreAuthorize("isAuthenticated()") public List<String> getUnAnsweredLectureContentIds(final String roomId) { - final ClientAuthentication user = getCurrentUser(); - return this.getUnAnsweredLectureContentIds(roomId, user); + final User user = getCurrentUser(); + return this.getUnAnsweredLectureContentIds(roomId, user.getId()); } @Override - public List<String> getUnAnsweredLectureContentIds(final String roomId, final ClientAuthentication user) { - return contentRepository.findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(roomId, user); + public List<String> getUnAnsweredLectureContentIds(final String roomId, final String userId) { + return contentRepository.findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(roomId, userId); } @Override @PreAuthorize("isAuthenticated()") public List<String> getUnAnsweredPreparationContentIds(final String roomId) { - final ClientAuthentication user = getCurrentUser(); - return this.getUnAnsweredPreparationContentIds(roomId, user); + final User user = getCurrentUser(); + return this.getUnAnsweredPreparationContentIds(roomId, user.getId()); } @Override - public List<String> getUnAnsweredPreparationContentIds(final String roomId, final ClientAuthentication user) { - return contentRepository.findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(roomId, user); + public List<String> getUnAnsweredPreparationContentIds(final String roomId, final String userId) { + return contentRepository.findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(roomId, userId); } @Override @PreAuthorize("isAuthenticated()") public void publishAll(final String roomId, final boolean publish) { /* TODO: resolve redundancies */ - final ClientAuthentication user = getCurrentUser(); + final User user = getCurrentUser(); final Room room = roomRepository.findOne(roomId); if (!room.getOwnerId().equals(user.getId())) { throw new UnauthorizedException(); @@ -489,7 +489,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem @CacheEvict(value = "preparationcontentlists", key = "#roomId"), @CacheEvict(value = "flashcardcontentlists", key = "#roomId") }) public void publishContents(final String roomId, final boolean publish, Iterable<Content> contents) { - final ClientAuthentication user = getCurrentUser(); + final User user = getCurrentUser(); final Room room = roomRepository.findOne(roomId); if (!room.getOwnerId().equals(user.getId())) { throw new UnauthorizedException(); @@ -514,7 +514,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem @PreAuthorize("isAuthenticated()") @CacheEvict(value = "answerlists", allEntries = true) public void deleteAllContentsAnswers(final String roomId) { - final ClientAuthentication user = getCurrentUser(); + final User user = getCurrentUser(); final Room room = roomRepository.findOne(roomId); if (!room.getOwnerId().equals(user.getId())) { throw new UnauthorizedException(); diff --git a/src/main/java/de/thm/arsnova/service/FeedbackService.java b/src/main/java/de/thm/arsnova/service/FeedbackService.java index 1b5ab72e6..dfacd7482 100644 --- a/src/main/java/de/thm/arsnova/service/FeedbackService.java +++ b/src/main/java/de/thm/arsnova/service/FeedbackService.java @@ -18,7 +18,6 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Feedback; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; /** * The functionality the feedback service should provide. @@ -36,7 +35,7 @@ public interface FeedbackService { long calculateRoundedAverageFeedback(String roomId); - boolean save(String roomId, int value, ClientAuthentication user); + boolean save(String roomId, int value, String userId); - Integer getByRoomIdAndUser(String roomId, ClientAuthentication user); + Integer getByRoomIdAndUserId(String roomId, String userId); } diff --git a/src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java b/src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java index 81a366013..842322bfa 100644 --- a/src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/FeedbackServiceImpl.java @@ -17,14 +17,13 @@ */ package de.thm.arsnova.service; -import de.thm.arsnova.model.Feedback; -import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.event.DeleteFeedbackForRoomsEvent; import de.thm.arsnova.event.NewFeedbackEvent; +import de.thm.arsnova.model.Feedback; +import de.thm.arsnova.model.Room; +import de.thm.arsnova.persistence.RoomRepository; import de.thm.arsnova.web.exceptions.NoContentException; import de.thm.arsnova.web.exceptions.NotFoundException; -import de.thm.arsnova.persistence.RoomRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; @@ -66,33 +65,33 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub @Override @Scheduled(fixedDelay = DEFAULT_SCHEDULER_DELAY) public void cleanFeedbackVotes() { - Map<Room, List<ClientAuthentication>> deletedFeedbackOfUsersInSession = feedbackStorage.cleanVotes(cleanupFeedbackDelay); + Map<Room, List<String>> deletedFeedbackOfUsersInSession = feedbackStorage.cleanVotes(cleanupFeedbackDelay); /* * mapping (Room -> Users) is not suitable for web sockets, because we want to sent all affected * sessions to a single user in one go instead of sending multiple messages for each session. Hence, * we need the mapping (User -> Sessions) */ - final Map<ClientAuthentication, Set<Room>> affectedSessionsOfUsers = new HashMap<>(); + final Map<String, Set<Room>> affectedSessionsOfUsers = new HashMap<>(); - for (Map.Entry<Room, List<ClientAuthentication>> entry : deletedFeedbackOfUsersInSession.entrySet()) { + for (Map.Entry<Room, List<String>> entry : deletedFeedbackOfUsersInSession.entrySet()) { final Room room = entry.getKey(); - final List<ClientAuthentication> users = entry.getValue(); - for (ClientAuthentication user : users) { + final List<String> userIds = entry.getValue(); + for (String userId : userIds) { Set<Room> affectedSessions; - if (affectedSessionsOfUsers.containsKey(user)) { - affectedSessions = affectedSessionsOfUsers.get(user); + if (affectedSessionsOfUsers.containsKey(userId)) { + affectedSessions = affectedSessionsOfUsers.get(userId); } else { affectedSessions = new HashSet<>(); } affectedSessions.add(room); - affectedSessionsOfUsers.put(user, affectedSessions); + affectedSessionsOfUsers.put(userId, affectedSessions); } } // Send feedback reset event to all affected users - for (Map.Entry<ClientAuthentication, Set<Room>> entry : affectedSessionsOfUsers.entrySet()) { - final ClientAuthentication user = entry.getKey(); + for (Map.Entry<String, Set<Room>> entry : affectedSessionsOfUsers.entrySet()) { + final String userId = entry.getKey(); final Set<Room> arsSessions = entry.getValue(); - this.publisher.publishEvent(new DeleteFeedbackForRoomsEvent(this, arsSessions, user)); + this.publisher.publishEvent(new DeleteFeedbackForRoomsEvent(this, arsSessions, userId)); } // For each session that has deleted feedback, send the new feedback to all clients for (Room session : deletedFeedbackOfUsersInSession.keySet()) { @@ -103,13 +102,13 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub @Override public void cleanFeedbackVotesByRoomId(final String roomId, final int cleanupFeedbackDelayInMins) { final Room room = roomRepository.findOne(roomId); - List<ClientAuthentication> affectedUsers = feedbackStorage.cleanVotesByRoom(room, cleanupFeedbackDelayInMins); + List<String> affectedUserIds = feedbackStorage.cleanVotesByRoom(room, cleanupFeedbackDelayInMins); Set<Room> sessionSet = new HashSet<>(); sessionSet.add(room); // Send feedback reset event to all affected users - for (ClientAuthentication user : affectedUsers) { - this.publisher.publishEvent(new DeleteFeedbackForRoomsEvent(this, sessionSet, user)); + for (String userId : affectedUserIds) { + this.publisher.publishEvent(new DeleteFeedbackForRoomsEvent(this, sessionSet, userId)); } // send the new feedback to all clients in affected session this.publisher.publishEvent(new NewFeedbackEvent(this, room)); @@ -157,24 +156,24 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub } @Override - public boolean save(final String roomId, final int value, final ClientAuthentication user) { + public boolean save(final String roomId, final int value, final String userId) { final Room room = roomRepository.findOne(roomId); if (room == null) { throw new NotFoundException(); } - feedbackStorage.save(room, value, user); + feedbackStorage.save(room, value, userId); this.publisher.publishEvent(new NewFeedbackEvent(this, room)); return true; } @Override - public Integer getByRoomIdAndUser(final String roomId, final ClientAuthentication user) { + public Integer getByRoomIdAndUserId(final String roomId, final String userId) { final Room room = roomRepository.findOne(roomId); if (room == null) { throw new NotFoundException(); } - return feedbackStorage.getByRoomAndUser(room, user); + return feedbackStorage.getByRoomAndUserId(room, userId); } @Override diff --git a/src/main/java/de/thm/arsnova/service/FeedbackStorageService.java b/src/main/java/de/thm/arsnova/service/FeedbackStorageService.java index 74dc27e73..be73cedcb 100644 --- a/src/main/java/de/thm/arsnova/service/FeedbackStorageService.java +++ b/src/main/java/de/thm/arsnova/service/FeedbackStorageService.java @@ -2,15 +2,14 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Feedback; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import java.util.List; import java.util.Map; public interface FeedbackStorageService { Feedback getByRoom(Room room); - Integer getByRoomAndUser(Room room, ClientAuthentication u); - void save(Room room, int value, ClientAuthentication user); - Map<Room, List<ClientAuthentication>> cleanVotes(int cleanupFeedbackDelay); - List<ClientAuthentication> cleanVotesByRoom(Room room, int cleanupFeedbackDelayInMins); + Integer getByRoomAndUserId(Room room, String userId); + void save(Room room, int value, String userId); + Map<Room, List<String>> cleanVotes(int cleanupFeedbackDelay); + List<String> cleanVotesByRoom(Room room, int cleanupFeedbackDelayInMins); } diff --git a/src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java b/src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java index ef8df172c..47c8ad10e 100644 --- a/src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/FeedbackStorageServiceImpl.java @@ -19,7 +19,6 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Feedback; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -42,12 +41,12 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService { private static class FeedbackStorageObject { private final int value; private final Date timestamp; - private final ClientAuthentication user; + private final String userId; - public FeedbackStorageObject(final int initValue, final ClientAuthentication u) { + public FeedbackStorageObject(final int initValue, final String userId) { value = initValue; timestamp = new Date(); - user = u; + this.userId = userId; } public int getValue() { @@ -56,14 +55,14 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService { public Date getTimestamp() { return timestamp; } - public boolean fromUser(final ClientAuthentication u) { - return user.equals(u); + public boolean fromUser(final String userId) { + return this.userId.equals(userId); } } private static final Logger logger = LoggerFactory.getLogger(FeedbackStorageServiceImpl.class); - private final Map<Room, Map<ClientAuthentication, FeedbackStorageObject>> data = + private final Map<Room, Map<String, FeedbackStorageObject>> data = new ConcurrentHashMap<>(); @Override @@ -99,13 +98,13 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService { } @Override - public Integer getByRoomAndUser(final Room room, final ClientAuthentication u) { + public Integer getByRoomAndUserId(final Room room, final String userId) { if (data.get(room) == null) { return null; } for (final FeedbackStorageObject fso : data.get(room).values()) { - if (fso.fromUser(u)) { + if (fso.fromUser(userId)) { return fso.getValue(); } } @@ -115,28 +114,28 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService { @Override @Transactional(isolation = Isolation.READ_COMMITTED) - public void save(final Room room, final int value, final ClientAuthentication user) { + public void save(final Room room, final int value, final String userId) { logger.debug("Feedback data for {} Rooms is stored", data.size()); - logger.debug("Saving feedback: Room: {}, Value: {}, User: {}", room, value, user); - Map<ClientAuthentication, FeedbackStorageObject> roomData = data.get(room); + logger.debug("Saving feedback: Room: {}, Value: {}, User: {}", room, value, userId); + Map<String, FeedbackStorageObject> roomData = data.get(room); if (roomData == null) { logger.debug("Creating new feedback container for Room: {}", room); - roomData = new ConcurrentHashMap<ClientAuthentication, FeedbackStorageObject>(); + roomData = new ConcurrentHashMap<String, FeedbackStorageObject>(); data.put(room, roomData); } logger.debug("Feedback values for Room {}: {}", room.getId(), roomData.size()); - roomData.put(user, new FeedbackStorageObject(value, user)); + roomData.put(userId, new FeedbackStorageObject(value, userId)); } @Override @Transactional(isolation = Isolation.READ_COMMITTED) - public Map<Room, List<ClientAuthentication>> cleanVotes(final int cleanupFeedbackDelay) { - final Map<Room, List<ClientAuthentication>> removedFeedbackOfUsersInSession = new HashMap<>(); + public Map<Room, List<String>> cleanVotes(final int cleanupFeedbackDelay) { + final Map<Room, List<String>> removedFeedbackOfUsersInSession = new HashMap<>(); for (final Room room : data.keySet()) { if (!room.getSettings().isQuickSurveyEnabled()) { - List<ClientAuthentication> affectedUsers = cleanVotesByRoom(room, cleanupFeedbackDelay); - if (!affectedUsers.isEmpty()) { - removedFeedbackOfUsersInSession.put(room, affectedUsers); + List<String> affectedUserIds = cleanVotesByRoom(room, cleanupFeedbackDelay); + if (!affectedUserIds.isEmpty()) { + removedFeedbackOfUsersInSession.put(room, affectedUserIds); } } } @@ -145,23 +144,23 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService { @Override @Transactional(isolation = Isolation.READ_COMMITTED) - public List<ClientAuthentication> cleanVotesByRoom(final Room room, final int cleanupFeedbackDelayInMins) { + public List<String> cleanVotesByRoom(final Room room, final int cleanupFeedbackDelayInMins) { final long timelimitInMillis = TimeUnit.MILLISECONDS.convert(cleanupFeedbackDelayInMins, TimeUnit.MINUTES); final Date maxAllowedTime = new Date(System.currentTimeMillis() - timelimitInMillis); final boolean forceClean = cleanupFeedbackDelayInMins == 0; - final Map<ClientAuthentication, FeedbackStorageObject> roomFeedbacks = data.get(room); - final List<ClientAuthentication> affectedUsers = new ArrayList<>(); + final Map<String, FeedbackStorageObject> roomFeedbacks = data.get(room); + final List<String> affectedUsers = new ArrayList<>(); if (roomFeedbacks != null) { - for (final Map.Entry<ClientAuthentication, FeedbackStorageObject> entry : roomFeedbacks.entrySet()) { - final ClientAuthentication user = entry.getKey(); + for (final Map.Entry<String, FeedbackStorageObject> entry : roomFeedbacks.entrySet()) { + final String userId = entry.getKey(); final FeedbackStorageObject feedback = entry.getValue(); final boolean timeIsUp = feedback.getTimestamp().before(maxAllowedTime); - final boolean isAwayFeedback = getByRoomAndUser(room, user).equals(Feedback.FEEDBACK_AWAY); + final boolean isAwayFeedback = getByRoomAndUserId(room, userId).equals(Feedback.FEEDBACK_AWAY); if (forceClean || timeIsUp && !isAwayFeedback) { - roomFeedbacks.remove(user); - affectedUsers.add(user); + roomFeedbacks.remove(userId); + affectedUsers.add(userId); } } } diff --git a/src/main/java/de/thm/arsnova/service/MotdServiceImpl.java b/src/main/java/de/thm/arsnova/service/MotdServiceImpl.java index 66f6e0142..6a2b09d40 100644 --- a/src/main/java/de/thm/arsnova/service/MotdServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/MotdServiceImpl.java @@ -19,8 +19,8 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Motd; import de.thm.arsnova.model.Room; -import de.thm.arsnova.web.exceptions.BadRequestException; import de.thm.arsnova.persistence.MotdRepository; +import de.thm.arsnova.web.exceptions.BadRequestException; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; diff --git a/src/main/java/de/thm/arsnova/service/RoomService.java b/src/main/java/de/thm/arsnova/service/RoomService.java index 4fb354332..2c30896d2 100644 --- a/src/main/java/de/thm/arsnova/service/RoomService.java +++ b/src/main/java/de/thm/arsnova/service/RoomService.java @@ -36,7 +36,7 @@ public interface RoomService extends EntityService<Room> { Room getForAdmin(final String id); - Room getInternal(String id, ClientAuthentication user); + Room getInternal(String id, String userId); boolean isShortIdAvailable(String shortId); diff --git a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java index 816a49aa3..f5d566f3f 100644 --- a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java @@ -19,25 +19,26 @@ package de.thm.arsnova.service; import de.thm.arsnova.connector.client.ConnectorClient; import de.thm.arsnova.connector.model.Course; -import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; -import de.thm.arsnova.model.UserProfile; -import de.thm.arsnova.model.transport.ImportExportContainer; -import de.thm.arsnova.model.transport.ScoreStatistics; import de.thm.arsnova.event.DeleteRoomEvent; import de.thm.arsnova.event.FeatureChangeEvent; import de.thm.arsnova.event.FlipFlashcardsEvent; import de.thm.arsnova.event.LockFeedbackEvent; import de.thm.arsnova.event.StatusRoomEvent; -import de.thm.arsnova.web.exceptions.ForbiddenException; -import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.model.Room; +import de.thm.arsnova.model.UserProfile; +import de.thm.arsnova.model.migration.v2.ClientAuthentication; +import de.thm.arsnova.model.transport.ImportExportContainer; +import de.thm.arsnova.model.transport.ScoreStatistics; import de.thm.arsnova.persistence.AnswerRepository; import de.thm.arsnova.persistence.CommentRepository; import de.thm.arsnova.persistence.ContentRepository; import de.thm.arsnova.persistence.LogEntryRepository; import de.thm.arsnova.persistence.RoomRepository; +import de.thm.arsnova.security.User; import de.thm.arsnova.service.score.ScoreCalculator; import de.thm.arsnova.service.score.ScoreCalculatorFactory; +import de.thm.arsnova.web.exceptions.ForbiddenException; +import de.thm.arsnova.web.exceptions.NotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -56,11 +57,11 @@ import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; -import java.util.Set; -import java.util.HashSet; /** * Performs all room related operations. @@ -223,8 +224,8 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @Override @PreAuthorize("isAuthenticated()") public Room getByShortId(final String shortId) { - final ClientAuthentication user = userService.getCurrentUser(); - return this.getInternal(getIdByShortId(shortId), user); + final User user = userService.getCurrentUser(); + return this.getInternal(getIdByShortId(shortId), user.getId()); } @Override @@ -251,12 +252,12 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R * TODO: Find a better way of doing this... */ @Override - public Room getInternal(final String id, final ClientAuthentication user) { + public Room getInternal(final String id, final String userId) { final Room room = roomRepository.findOne(id); if (room == null) { throw new NotFoundException(); } - if (room.isClosed() && !room.getOwnerId().equals(user.getId())) { + if (room.isClosed() && !room.getOwnerId().equals(userId)) { throw new ForbiddenException("User is not room creator."); } @@ -289,7 +290,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @Override @PreAuthorize("isAuthenticated()") public List<Room> getMyRooms(final int offset, final int limit) { - return roomRepository.findByOwner(userService.getCurrentUser(), offset, limit); + return roomRepository.findByOwnerId(userService.getCurrentUser().getId(), offset, limit); } @Override @@ -301,14 +302,14 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @Override @PreAuthorize("isAuthenticated()") public List<Room> getMyPublicPoolRoomsInfo() { - return roomRepository.findInfosForPublicPoolByOwner(userService.getCurrentUser()); + return roomRepository.findInfosForPublicPoolByOwnerId(userService.getCurrentUser().getId()); } @Override @PreAuthorize("isAuthenticated()") public List<Room> getMyRoomsInfo(final int offset, final int limit) { - final ClientAuthentication user = userService.getCurrentUser(); - return roomRepository.getRoomsWithStatsForOwner(user, offset, limit); + final User user = userService.getCurrentUser(); + return roomRepository.getRoomsWithStatsForOwnerId(user.getId(), offset, limit); } @Override @@ -333,7 +334,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @PreAuthorize("isAuthenticated()") public List<Room> getMyRoomHistoryInfo(final int offset, final int limit) { List<Room> rooms = getMyRoomHistory(0, 0); - roomRepository.getRoomHistoryWithStatsForUser(rooms, userService.getCurrentUser()); + roomRepository.getRoomHistoryWithStatsForUser(rooms, userService.getCurrentUser().getId()); return rooms; } @@ -478,16 +479,16 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @PreAuthorize("hasPermission(#id, 'room', 'read')") public ScoreStatistics getMyLearningProgress(final String id, final String type, final String questionVariant) { final Room room = roomRepository.findOne(id); - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); ScoreCalculator scoreCalculator = scoreCalculatorFactory.create(type, questionVariant); - return scoreCalculator.getMyProgress(room, user); + return scoreCalculator.getMyProgress(room, user.getId()); } @Override @PreAuthorize("hasPermission('', 'room', 'create')") public Room importRooms(ImportExportContainer importRoom) { - final ClientAuthentication user = userService.getCurrentUser(); - final Room info = roomRepository.importRoom(user, importRoom); + final User user = userService.getCurrentUser(); + final Room info = roomRepository.importRoom(user.getId(), importRoom); if (info == null) { throw new NullPointerException("Could not import room."); } @@ -506,8 +507,8 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R ImportExportContainer temp = roomRepository.exportRoom(id, false, false); temp.getSession().setPublicPool(pp); temp.getSession().setSessionType("public_pool"); - final ClientAuthentication user = userService.getCurrentUser(); - return roomRepository.importRoom(user, temp); + final User user = userService.getCurrentUser(); + return roomRepository.importRoom(user.getId(), temp); } @Override @@ -525,7 +526,6 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @PreAuthorize("hasPermission(#id, 'room', 'owner')") public Room.Settings updateFeatures(String id, Room.Settings settings) { final Room room = roomRepository.findOne(id); - final ClientAuthentication user = userService.getCurrentUser(); room.setSettings(settings); this.publisher.publishEvent(new FeatureChangeEvent(this, room)); roomRepository.save(room); @@ -537,7 +537,6 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @PreAuthorize("hasPermission(#id, 'room', 'owner')") public boolean lockFeedbackInput(String id, Boolean lock) { final Room room = roomRepository.findOne(id); - final ClientAuthentication user = userService.getCurrentUser(); if (!lock) { feedbackService.cleanFeedbackVotesByRoomId(id, 0); } diff --git a/src/main/java/de/thm/arsnova/service/TimerService.java b/src/main/java/de/thm/arsnova/service/TimerService.java index 1db313d63..caf4372cb 100644 --- a/src/main/java/de/thm/arsnova/service/TimerService.java +++ b/src/main/java/de/thm/arsnova/service/TimerService.java @@ -1,9 +1,7 @@ package de.thm.arsnova.service; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; - public interface TimerService { - void startNewRound(final String contentId, ClientAuthentication user); + void startNewRound(final String contentId); void startNewRoundDelayed(final String contentId, final int time); void cancelRoundChange(final String contentId); void cancelDelayedRoundChange(final String contentId); diff --git a/src/main/java/de/thm/arsnova/service/TimerServiceImpl.java b/src/main/java/de/thm/arsnova/service/TimerServiceImpl.java index b676a41e1..263ef8caa 100644 --- a/src/main/java/de/thm/arsnova/service/TimerServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/TimerServiceImpl.java @@ -1,15 +1,15 @@ package de.thm.arsnova.service; -import de.thm.arsnova.model.Content; -import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.event.PiRoundCancelEvent; import de.thm.arsnova.event.PiRoundDelayedStartEvent; import de.thm.arsnova.event.PiRoundEndEvent; import de.thm.arsnova.event.PiRoundResetEvent; +import de.thm.arsnova.model.Content; +import de.thm.arsnova.model.Room; import de.thm.arsnova.persistence.AnswerRepository; import de.thm.arsnova.persistence.ContentRepository; import de.thm.arsnova.persistence.RoomRepository; +import de.thm.arsnova.security.User; import org.springframework.cache.annotation.CacheEvict; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; @@ -40,14 +40,10 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher @Override @PreAuthorize("isAuthenticated() and hasPermission(#contentId, 'content', 'owner')") - public void startNewRound(final String contentId, ClientAuthentication user) { + public void startNewRound(final String contentId) { final Content content = contentRepository.findOne(contentId); final Room room = roomRepository.findOne(content.getRoomId()); - if (null == user) { - user = userService.getCurrentUser(); - } - cancelDelayedRoundChange(contentId); content.getState().setRoundEndTimestamp(null); @@ -61,7 +57,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher @Override @PreAuthorize("hasPermission(#contentId, 'content', 'owner')") public void startNewRoundDelayed(final String contentId, final int time) { - final ClientAuthentication user = userService.getCurrentUser(); + final User user = userService.getCurrentUser(); final Content content = contentRepository.findOne(contentId); final Room room = roomRepository.findOne(content.getRoomId()); @@ -77,7 +73,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher timer.schedule(new TimerTask() { @Override public void run() { - startNewRound(contentId, user); + startNewRound(contentId); } }, endDate); } diff --git a/src/main/java/de/thm/arsnova/service/UserService.java b/src/main/java/de/thm/arsnova/service/UserService.java index 0f2138223..57422647a 100644 --- a/src/main/java/de/thm/arsnova/service/UserService.java +++ b/src/main/java/de/thm/arsnova/service/UserService.java @@ -18,7 +18,6 @@ package de.thm.arsnova.service; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.UserProfile; import de.thm.arsnova.security.User; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -36,7 +35,7 @@ import java.util.UUID; public interface UserService extends EntityService<UserProfile> { UserProfile getCurrentUserProfile(); - ClientAuthentication getCurrentUser(); + User getCurrentUser(); de.thm.arsnova.model.ClientAuthentication getCurrentClientAuthentication(); @@ -46,17 +45,17 @@ public interface UserService extends EntityService<UserProfile> { void increaseFailedLoginCount(String addr); - ClientAuthentication getUserToSocketId(UUID socketId); + String getUserIdToSocketId(UUID socketId); - void putUserToSocketId(UUID socketId, ClientAuthentication user); + void putUserIdToSocketId(UUID socketId, String userId); void removeUserToSocketId(UUID socketId); - Set<Map.Entry<UUID, ClientAuthentication>> getSocketIdToUser(); + Set<Map.Entry<UUID, String>> getSocketIdToUserId(); - boolean isUserInRoom(ClientAuthentication user, String roomId); + boolean isUserInRoom(String userId, String roomId); - Set<ClientAuthentication> getUsersByRoomId(String roomId); + Set<String> getUsersByRoomId(String roomId); String getRoomIdByUserId(String userId); @@ -64,7 +63,7 @@ public interface UserService extends EntityService<UserProfile> { void removeUserFromRoomBySocketId(UUID socketId); - void removeUserFromMaps(ClientAuthentication user); + void removeUserIdFromMaps(String userId); int loggedInUsers(); diff --git a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java index 51498b832..dfa71b0c8 100644 --- a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java @@ -18,17 +18,17 @@ package de.thm.arsnova.service; import com.codahale.metrics.annotation.Gauge; +import de.thm.arsnova.model.ClientAuthentication; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.UserProfile; -import de.thm.arsnova.web.exceptions.BadRequestException; -import de.thm.arsnova.web.exceptions.NotFoundException; -import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.persistence.UserRepository; import de.thm.arsnova.security.GuestUserDetailsService; import de.thm.arsnova.security.User; import de.thm.arsnova.security.jwt.JwtService; import de.thm.arsnova.security.jwt.JwtToken; +import de.thm.arsnova.web.exceptions.BadRequestException; +import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.web.exceptions.UnauthorizedException; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -91,10 +91,10 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class); - private static final ConcurrentHashMap<UUID, ClientAuthentication> socketIdToUser = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap<UUID, String> socketIdToUserId = new ConcurrentHashMap<>(); /* used for Socket.IO online check solution (new) */ - private static final ConcurrentHashMap<ClientAuthentication, String> userToRoomId = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap<String, String> userIdToRoomId = new ConcurrentHashMap<>(); private UserRepository userRepository; private JwtService jwtService; @@ -194,24 +194,18 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple @Override public UserProfile getCurrentUserProfile() { - final ClientAuthentication authentication = getCurrentUser(); - return getByAuthProviderAndLoginId(authentication.getAuthProvider(), authentication.getUsername()); + final User user = getCurrentUser(); + return getByAuthProviderAndLoginId(user.getAuthProvider(), user.getUsername()); } @Override - public ClientAuthentication getCurrentUser() { + public User getCurrentUser() { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication == null || authentication.getPrincipal() == null) { + if (authentication == null || !(authentication.getPrincipal() instanceof User)) { return null; } - ClientAuthentication user = new ClientAuthentication(authentication); - if (user == null || "anonymous".equals(user.getUsername())) { - throw new UnauthorizedException(); - } - user.setAdmin(Arrays.asList(adminAccounts).contains(user.getUsername())); - - return user; + return (User) authentication.getPrincipal(); } @Override @@ -224,8 +218,8 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple String jwt = authentication instanceof JwtToken ? (String) authentication.getCredentials() : jwtService.createSignedToken(user); - de.thm.arsnova.model.ClientAuthentication clientAuthentication = - new de.thm.arsnova.model.ClientAuthentication(user.getId(), user.getUsername(), + ClientAuthentication clientAuthentication = + new ClientAuthentication(user.getId(), user.getUsername(), user.getAuthProvider(), jwt); return clientAuthentication; @@ -257,36 +251,36 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple } @Override - public ClientAuthentication getUserToSocketId(final UUID socketId) { - return socketIdToUser.get(socketId); + public String getUserIdToSocketId(final UUID socketId) { + return socketIdToUserId.get(socketId); } @Override - public void putUserToSocketId(final UUID socketId, final ClientAuthentication user) { - socketIdToUser.put(socketId, user); + public void putUserIdToSocketId(final UUID socketId, final String userId) { + socketIdToUserId.put(socketId, userId); } @Override - public Set<Map.Entry<UUID, ClientAuthentication>> getSocketIdToUser() { - return socketIdToUser.entrySet(); + public Set<Entry<UUID, String>> getSocketIdToUserId() { + return socketIdToUserId.entrySet(); } @Override public void removeUserToSocketId(final UUID socketId) { - socketIdToUser.remove(socketId); + socketIdToUserId.remove(socketId); } @Override - public boolean isUserInRoom(final ClientAuthentication user, final String expectedRoomId) { - String actualRoomId = userToRoomId.get(user); + public boolean isUserInRoom(final String userId, final String expectedRoomId) { + String actualRoomId = userIdToRoomId.get(userId); return actualRoomId != null && actualRoomId.equals(expectedRoomId); } @Override - public Set<ClientAuthentication> getUsersByRoomId(final String roomId) { - final Set<ClientAuthentication> result = new HashSet<>(); - for (final Entry<ClientAuthentication, String> e : userToRoomId.entrySet()) { + public Set<String> getUsersByRoomId(final String roomId) { + final Set<String> result = new HashSet<>(); + for (final Entry<String, String> e : userIdToRoomId.entrySet()) { if (e.getValue().equals(roomId)) { result.add(e.getKey()); } @@ -298,26 +292,26 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple @Override @Transactional(isolation = Isolation.READ_COMMITTED) public void addUserToRoomBySocketId(final UUID socketId, final String roomId) { - final ClientAuthentication user = socketIdToUser.get(socketId); - userToRoomId.put(user, roomId); + final String userId = socketIdToUserId.get(socketId); + userIdToRoomId.put(userId, roomId); } @Override @Transactional(isolation = Isolation.READ_COMMITTED) public void removeUserFromRoomBySocketId(final UUID socketId) { - final ClientAuthentication user = socketIdToUser.get(socketId); - if (null == user) { + final String userId = socketIdToUserId.get(socketId); + if (null == userId) { logger.warn("No user exists for socket {}.", socketId); return; } - userToRoomId.remove(user); + userIdToRoomId.remove(userId); } @Override public String getRoomIdByUserId(final String userId) { - for (final Entry<ClientAuthentication, String> entry : userToRoomId.entrySet()) { - if (entry.getKey().getId().equals(userId)) { + for (final Entry<String, String> entry : userIdToRoomId.entrySet()) { + if (entry.getKey().equals(userId)) { return entry.getValue(); } } @@ -331,16 +325,16 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple } @Override - public void removeUserFromMaps(final ClientAuthentication user) { - if (user != null) { - userToRoomId.remove(user); + public void removeUserIdFromMaps(final String userId) { + if (userId != null) { + userIdToRoomId.remove(userId); } } @Override @Gauge public int loggedInUsers() { - return userToRoomId.size(); + return userIdToRoomId.size(); } @Override @@ -517,7 +511,7 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple @Override public UserProfile deleteByUsername(String username) { - ClientAuthentication user = getCurrentUser(); + User user = getCurrentUser(); if (!user.getUsername().equals(username.toLowerCase()) && !SecurityContextHolder.getContext().getAuthentication().getAuthorities() .contains(new SimpleGrantedAuthority("ROLE_ADMIN"))) { diff --git a/src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java index 0eed46c4d..55f7df91a 100644 --- a/src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java +++ b/src/main/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculator.java @@ -17,7 +17,6 @@ */ package de.thm.arsnova.service.score; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.transport.ScoreStatistics; import de.thm.arsnova.persistence.SessionStatisticsRepository; @@ -71,8 +70,8 @@ public class QuestionBasedScoreCalculator extends VariantScoreCalculator { } @Override - protected ScoreStatistics createMyProgress(ClientAuthentication user) { - final int numerator = numQuestionsCorrectForUser(user); + protected ScoreStatistics createMyProgress(String userId) { + final int numerator = numQuestionsCorrectForUser(userId); final int denominator = courseScore.getQuestionCount(); ScoreStatistics lpv = new ScoreStatistics(); lpv.setCourseProgress(calculateCourseProgress()); @@ -84,19 +83,19 @@ public class QuestionBasedScoreCalculator extends VariantScoreCalculator { return lpv; } - private int numQuestionsCorrectForUser(ClientAuthentication user) { + private int numQuestionsCorrectForUser(String userId) { int numQuestionsCorrect = 0; for (QuestionScore questionScore : courseScore) { - numQuestionsCorrect += countCorrectAnswersForUser(user, questionScore); + numQuestionsCorrect += countCorrectAnswersForUser(userId, questionScore); } return numQuestionsCorrect; } - private int countCorrectAnswersForUser(ClientAuthentication user, QuestionScore questionScore) { + private int countCorrectAnswersForUser(String userId, QuestionScore questionScore) { int numQuestionsCorrect = 0; int requiredScore = questionScore.getMaximum(); for (UserScore userScore : questionScore) { - if (!userScore.isUser(user)) { + if (!userScore.isUser(userId)) { continue; } if (userScore.hasScore(requiredScore)) { diff --git a/src/main/java/de/thm/arsnova/service/score/QuestionScore.java b/src/main/java/de/thm/arsnova/service/score/QuestionScore.java index 0ea10b92d..6989b6c98 100644 --- a/src/main/java/de/thm/arsnova/service/score/QuestionScore.java +++ b/src/main/java/de/thm/arsnova/service/score/QuestionScore.java @@ -17,8 +17,6 @@ */ package de.thm.arsnova.service.score; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -60,9 +58,9 @@ public class QuestionScore implements Iterable<UserScore> { return !this.userScores.isEmpty(); } - public void add(int piRound, String username, int userscore) { + public void add(int piRound, String userId, int userscore) { if (this.piRound == piRound) { - userScores.add(new UserScore(username, userscore)); + userScores.add(new UserScore(userId, userscore)); } } @@ -74,10 +72,10 @@ public class QuestionScore implements Iterable<UserScore> { return totalScore; } - public int getTotalUserScore(ClientAuthentication user) { + public int getTotalUserScore(String userId) { int totalScore = 0; for (UserScore score : userScores) { - if (score.isUser(user)) { + if (score.isUser(userId)) { totalScore += score.getScore(); } } @@ -90,7 +88,7 @@ public class QuestionScore implements Iterable<UserScore> { public void collectUsers(Set<String> users) { for (UserScore score : userScores) { - users.add(score.getUsername()); + users.add(score.getUserId()); } } diff --git a/src/main/java/de/thm/arsnova/service/score/Score.java b/src/main/java/de/thm/arsnova/service/score/Score.java index d3c5e4d29..0cc7361b9 100644 --- a/src/main/java/de/thm/arsnova/service/score/Score.java +++ b/src/main/java/de/thm/arsnova/service/score/Score.java @@ -17,8 +17,6 @@ */ package de.thm.arsnova.service.score; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; - import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -48,18 +46,18 @@ public class Score implements Iterable<QuestionScore> { scores.put(questionId, new QuestionScore(questionId, questionVariant, piRound, questionScore)); } - public void addAnswer(String questionId, int piRound, String username, int userscore) { + public void addAnswer(String questionId, int piRound, String userId, int userscore) { if (!scores.containsKey(questionId)) { // Precondition failed, ignore this element. // Most likely this is a question that has no score value. return; } - if (username == null || username.isEmpty()) { + if (userId == null || userId.isEmpty()) { // Precondition failed: ignore anonymous users return; } QuestionScore questionScore = scores.get(questionId); - questionScore.add(piRound, username, userscore); + questionScore.add(piRound, userId, userscore); } public Score filterVariant(String questionVariant) { @@ -90,10 +88,10 @@ public class Score implements Iterable<QuestionScore> { return score; } - public double getTotalUserScore(ClientAuthentication user) { + public double getTotalUserScore(String userId) { int score = 0; for (QuestionScore questionScore : this) { - score += questionScore.getTotalUserScore(user); + score += questionScore.getTotalUserScore(userId); } return score; } diff --git a/src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java index 7b34fddbd..56d5e4777 100644 --- a/src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java +++ b/src/main/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculator.java @@ -17,7 +17,6 @@ */ package de.thm.arsnova.service.score; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.transport.ScoreStatistics; import de.thm.arsnova.persistence.SessionStatisticsRepository; @@ -54,20 +53,20 @@ public class ScoreBasedScoreCalculator extends VariantScoreCalculator { } @Override - protected ScoreStatistics createMyProgress(ClientAuthentication user) { + protected ScoreStatistics createMyProgress(String userId) { ScoreStatistics lpv = new ScoreStatistics(); lpv.setCourseProgress(coursePercentage()); lpv.setNumQuestions(courseScore.getQuestionCount()); lpv.setNumUsers(courseScore.getTotalUserCount()); - lpv.setMyProgress(myPercentage(user)); - lpv.setNumerator((int) courseScore.getTotalUserScore(user)); + lpv.setMyProgress(myPercentage(userId)); + lpv.setNumerator((int) courseScore.getTotalUserScore(userId)); lpv.setDenominator(courseScore.getMaximumScore()); return lpv; } - private int myPercentage(ClientAuthentication user) { + private int myPercentage(String userId) { final int courseMaximumValue = courseScore.getMaximumScore(); - final double userTotalValue = courseScore.getTotalUserScore(user); + final double userTotalValue = courseScore.getTotalUserScore(userId); if (courseMaximumValue == 0) { return 0; } diff --git a/src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java index 7eb61b0c7..ce03ccb41 100644 --- a/src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java +++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculator.java @@ -18,7 +18,6 @@ package de.thm.arsnova.service.score; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.transport.ScoreStatistics; /** @@ -28,5 +27,5 @@ public interface ScoreCalculator { ScoreStatistics getCourseProgress(Room room); - ScoreStatistics getMyProgress(Room room, ClientAuthentication user); + ScoreStatistics getMyProgress(Room room, String userId); } diff --git a/src/main/java/de/thm/arsnova/service/score/UserScore.java b/src/main/java/de/thm/arsnova/service/score/UserScore.java index bc91a2559..4310c8c78 100644 --- a/src/main/java/de/thm/arsnova/service/score/UserScore.java +++ b/src/main/java/de/thm/arsnova/service/score/UserScore.java @@ -17,19 +17,17 @@ */ package de.thm.arsnova.service.score; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; - /** * The learning progress answer score of a particular user. */ public class UserScore { - private String username; + private String userId; private int score; - public UserScore(String username, int score) { - this.username = username; + public UserScore(String userId, int score) { + this.userId = userId; this.score = score; } @@ -41,11 +39,11 @@ public class UserScore { return score; } - public boolean isUser(ClientAuthentication user) { - return user.getUsername().equals(username); + public boolean isUser(String userId) { + return this.userId.equals(userId); } - public String getUsername() { - return username; + public String getUserId() { + return userId; } } diff --git a/src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java b/src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java index de9b62054..f7266b952 100644 --- a/src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java +++ b/src/main/java/de/thm/arsnova/service/score/VariantScoreCalculator.java @@ -18,7 +18,6 @@ package de.thm.arsnova.service.score; import de.thm.arsnova.model.Room; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.transport.ScoreStatistics; import de.thm.arsnova.persistence.SessionStatisticsRepository; import org.springframework.cache.annotation.Cacheable; @@ -61,10 +60,10 @@ abstract class VariantScoreCalculator implements ScoreCalculator { protected abstract ScoreStatistics createCourseProgress(); @Override - public ScoreStatistics getMyProgress(Room room, ClientAuthentication user) { + public ScoreStatistics getMyProgress(Room room, String userId) { this.refreshProgress(room); this.filterVariant(); - return this.createMyProgress(user); + return this.createMyProgress(userId); } private void filterVariant() { @@ -73,6 +72,6 @@ abstract class VariantScoreCalculator implements ScoreCalculator { } } - protected abstract ScoreStatistics createMyProgress(ClientAuthentication user); + protected abstract ScoreStatistics createMyProgress(String userId); } diff --git a/src/main/java/de/thm/arsnova/web/RangeAspect.java b/src/main/java/de/thm/arsnova/web/RangeAspect.java index 9959fab9c..c015e1369 100644 --- a/src/main/java/de/thm/arsnova/web/RangeAspect.java +++ b/src/main/java/de/thm/arsnova/web/RangeAspect.java @@ -17,9 +17,9 @@ */ package de.thm.arsnova.web; -import de.thm.arsnova.util.PaginationListDecorator; import de.thm.arsnova.controller.PaginationController; import de.thm.arsnova.service.ResponseProviderService; +import de.thm.arsnova.util.PaginationListDecorator; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java index 70ab9d83c..0e20156df 100644 --- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java +++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java @@ -28,22 +28,21 @@ import com.corundumstudio.socketio.listener.DataListener; import com.corundumstudio.socketio.listener.DisconnectListener; import com.corundumstudio.socketio.protocol.Packet; import com.corundumstudio.socketio.protocol.PacketType; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; +import de.thm.arsnova.event.*; import de.thm.arsnova.model.Comment; import de.thm.arsnova.model.ScoreOptions; import de.thm.arsnova.model.migration.ToV2Migrator; -import de.thm.arsnova.event.*; -import de.thm.arsnova.web.exceptions.NoContentException; -import de.thm.arsnova.web.exceptions.NotFoundException; -import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.service.AnswerService; import de.thm.arsnova.service.CommentService; -import de.thm.arsnova.service.FeedbackService; import de.thm.arsnova.service.ContentService; +import de.thm.arsnova.service.FeedbackService; import de.thm.arsnova.service.RoomService; import de.thm.arsnova.service.UserService; -import de.thm.arsnova.websocket.message.Feedback; +import de.thm.arsnova.web.exceptions.NoContentException; +import de.thm.arsnova.web.exceptions.NotFoundException; +import de.thm.arsnova.web.exceptions.UnauthorizedException; import de.thm.arsnova.websocket.message.Content; +import de.thm.arsnova.websocket.message.Feedback; import de.thm.arsnova.websocket.message.Room; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -145,21 +144,21 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova @Override @Timed(name = "setFeedbackEvent.onData") public void onData(final SocketIOClient client, final Feedback data, final AckRequest ackSender) { - final ClientAuthentication u = userService.getUserToSocketId(client.getSessionId()); - if (u == null) { + final String userId = userService.getUserIdToSocketId(client.getSessionId()); + if (userId == null) { logger.info("Client {} tried to send feedback but is not mapped to a user", client.getSessionId()); return; } - final String roomId = userService.getRoomIdByUserId(u.getId()); - final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, u); + final String roomId = userService.getRoomIdByUserId(userId); + final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, userId); if (room.getSettings().isFeedbackLocked()) { - logger.debug("Feedback ignored: User: {}, Room Id: {}, Feedback: {}", u, roomId, data.getValue()); + logger.debug("Feedback ignored: User: {}, Room Id: {}, Feedback: {}", userId, roomId, data.getValue()); } else { - logger.debug("Feedback received: User: {}, Room Id: {}, Feedback: {}", u, roomId, data.getValue()); + logger.debug("Feedback received: User: {}, Room Id: {}, Feedback: {}", userId, roomId, data.getValue()); if (null != roomId) { - feedbackService.save(roomId, data.getValue(), u); + feedbackService.save(roomId, data.getValue(), userId); } } } @@ -169,13 +168,13 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova @Override @Timed(name = "setSessionEvent.onData") public void onData(final SocketIOClient client, final Room room, final AckRequest ackSender) { - final ClientAuthentication u = userService.getUserToSocketId(client.getSessionId()); - if (null == u) { + final String userId = userService.getUserIdToSocketId(client.getSessionId()); + if (null == userId) { logger.info("Client {} requested to join room but is not mapped to a user", client.getSessionId()); return; } - final String oldRoomId = userService.getRoomIdByUserId(u.getId()); + final String oldRoomId = userService.getRoomIdByUserId(userId); if (null != room.getKeyword()) { if (room.getKeyword().equals(oldRoomId)) { return; @@ -186,7 +185,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova /* active user count has to be sent to the client since the broadcast is * not always sent as long as the polling solution is active simultaneously */ reportActiveUserCountForRoom(roomId); - reportRoomDataToClient(roomId, u, client); + reportRoomDataToClient(roomId, userId, client); } } if (null != oldRoomId) { @@ -206,7 +205,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova SocketIOClient client, Comment comment, AckRequest ackRequest) { - final ClientAuthentication user = userService.getUserToSocketId(client.getSessionId()); + final String user = userService.getUserIdToSocketId(client.getSessionId()); try { commentService.getAndMarkRead(comment.getId()); } catch (IOException | NotFoundException | UnauthorizedException e) { @@ -218,11 +217,11 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova server.addEventListener("readFreetextAnswer", String.class, new DataListener<String>() { @Override public void onData(SocketIOClient client, String answerId, AckRequest ackRequest) { - final ClientAuthentication user = userService.getUserToSocketId(client.getSessionId()); + final String userId = userService.getUserIdToSocketId(client.getSessionId()); try { - answerService.getFreetextAnswerAndMarkRead(answerId, user); + answerService.getFreetextAnswerAndMarkRead(answerId, userId); } catch (NotFoundException | UnauthorizedException e) { - logger.error("Marking answer {} as read failed for user {} with exception {}", answerId, user, e.getMessage()); + logger.error("Marking answer {} as read failed for user {} with exception {}", answerId, userId, e.getMessage()); } } }); @@ -261,11 +260,11 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova if ( userService == null || client.getSessionId() == null - || userService.getUserToSocketId(client.getSessionId()) == null + || userService.getUserIdToSocketId(client.getSessionId()) == null ) { return; } - final String userId = userService.getUserToSocketId(client.getSessionId()).getId(); + final String userId = userService.getUserIdToSocketId(client.getSessionId()); final String roomId = userService.getRoomIdByUserId(userId); userService.removeUserFromRoomBySocketId(client.getSessionId()); userService.removeUserToSocketId(client.getSessionId()); @@ -339,28 +338,28 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova this.useSSL = useSSL; } - public void reportDeletedFeedback(final ClientAuthentication user, final Set<de.thm.arsnova.model.Room> rooms) { + public void reportDeletedFeedback(final String userId, final Set<de.thm.arsnova.model.Room> rooms) { final List<String> roomShortIds = new ArrayList<>(); for (final de.thm.arsnova.model.Room room : rooms) { roomShortIds.add(room.getShortId()); } - this.sendToUser(user, "feedbackReset", roomShortIds); + this.sendToUser(userId, "feedbackReset", roomShortIds); } - private List<UUID> findConnectionIdForUser(final ClientAuthentication user) { + private List<UUID> findConnectionIdForUserId(final String userId) { final List<UUID> result = new ArrayList<>(); - for (final Entry<UUID, ClientAuthentication> e : userService.getSocketIdToUser()) { + for (final Entry<UUID, String> e : userService.getSocketIdToUserId()) { final UUID someUsersConnectionId = e.getKey(); - final ClientAuthentication someUser = e.getValue(); - if (someUser.equals(user)) { + final String someUser = e.getValue(); + if (someUser.equals(userId)) { result.add(someUsersConnectionId); } } return result; } - private void sendToUser(final ClientAuthentication user, final String event, Object data) { - final List<UUID> connectionIds = findConnectionIdForUser(user); + private void sendToUser(final String userId, final String event, Object data) { + final List<UUID> connectionIds = findConnectionIdForUserId(userId); if (connectionIds.isEmpty()) { return; } @@ -375,12 +374,12 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova * Currently only sends the feedback data to the client. Should be used for all * relevant Socket.IO data, the client needs to know after joining a session. */ - public void reportRoomDataToClient(final String roomId, final ClientAuthentication user, final SocketIOClient client) { - final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, user); + public void reportRoomDataToClient(final String roomId, final String userId, final SocketIOClient client) { + final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, userId); final de.thm.arsnova.model.Room.Settings settings = room.getSettings(); - client.sendEvent("unansweredLecturerQuestions", contentService.getUnAnsweredLectureContentIds(roomId, user)); - client.sendEvent("unansweredPreparationQuestions", contentService.getUnAnsweredPreparationContentIds(roomId, user)); + client.sendEvent("unansweredLecturerQuestions", contentService.getUnAnsweredLectureContentIds(roomId, userId)); + client.sendEvent("unansweredPreparationQuestions", contentService.getUnAnsweredPreparationContentIds(roomId, userId)); /* FIXME: Content variant is ignored for now */ client.sendEvent("countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); client.sendEvent("countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); @@ -414,15 +413,15 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova } } - public void reportFeedbackForUserInRoom(final Room room, final ClientAuthentication user) { - final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(room.getKeyword()); + public void reportFeedbackForUserInRoom(final String roomId, final String userId) { + final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(roomId); Long averageFeedback; try { - averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getKeyword()); + averageFeedback = feedbackService.calculateRoundedAverageFeedback(roomId); } catch (final NoContentException e) { averageFeedback = null; } - final List<UUID> connectionIds = findConnectionIdForUser(user); + final List<UUID> connectionIds = findConnectionIdForUserId(userId); if (connectionIds.isEmpty()) { return; } @@ -480,11 +479,11 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova * all connected clients and if send feedback, if user is in current * room */ - final Set<ClientAuthentication> users = userService.getUsersByRoomId(roomId); + final Set<String> userIds = userService.getUsersByRoomId(roomId); for (final SocketIOClient c : server.getAllClients()) { - final ClientAuthentication u = userService.getUserToSocketId(c.getSessionId()); - if (u != null && users.contains(u)) { + final String userId = userService.getUserIdToSocketId(c.getSessionId()); + if (userId != null && userIds.contains(userId)) { c.sendEvent(eventName, data); } } @@ -534,9 +533,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova // Update the unanswered count for the content variant that was answered. final de.thm.arsnova.model.Content content = event.getContent(); if (content.getGroups().contains("lecture")) { - sendToUser(event.getUser(), "unansweredLecturerQuestions", contentService.getUnAnsweredLectureContentIds(roomId, event.getUser())); + sendToUser(event.getUserId(), "unansweredLecturerQuestions", contentService.getUnAnsweredLectureContentIds(roomId, event.getUserId())); } else if (content.getGroups().contains("preparation")) { - sendToUser(event.getUser(), "unansweredPreparationQuestions", contentService.getUnAnsweredPreparationContentIds(roomId, event.getUser())); + sendToUser(event.getUserId(), "unansweredPreparationQuestions", contentService.getUnAnsweredPreparationContentIds(roomId, event.getUserId())); } } @@ -677,7 +676,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova @Override public void visit(DeleteFeedbackForRoomsEvent event) { - this.reportDeletedFeedback(event.getUser(), event.getSessions()); + this.reportDeletedFeedback(event.getUserId(), event.getSessions()); } diff --git a/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java b/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java index 18ef78073..23fad2da8 100644 --- a/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java +++ b/src/main/java/de/thm/arsnova/websocket/WebsocketAuthenticationAspect.java @@ -18,7 +18,6 @@ package de.thm.arsnova.websocket; import com.corundumstudio.socketio.SocketIOClient; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.security.User; import de.thm.arsnova.service.UserService; import org.aspectj.lang.ProceedingJoinPoint; @@ -68,14 +67,14 @@ public class WebsocketAuthenticationAspect { } private void populateSecurityContext(final UUID socketId) { - ClientAuthentication userAuth = userService.getUserToSocketId(socketId); - if (userAuth == null) { + String userId = userService.getUserIdToSocketId(socketId); + if (userId == null) { throw new AccessDeniedException("No user authenticated for WebSocket connection"); } SecurityContext context = SecurityContextHolder.getContext(); Set<GrantedAuthority> authorities = new HashSet<>(); authorities.add(WEBSOCKET_AUTHORITY); - User user = new User(userAuth, authorities); + User user = userService.loadUser(userId, authorities); Authentication auth = new UsernamePasswordAuthenticationToken(user, null, authorities); context.setAuthentication(auth); SecurityContextHolder.setContext(context); diff --git a/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java b/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java index ee25ccee9..e3d998e6f 100644 --- a/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java +++ b/src/test/java/de/thm/arsnova/config/TestSecurityConfig.java @@ -26,12 +26,10 @@ import org.springframework.context.annotation.AdviceMode; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.cas.ServiceProperties; import org.springframework.security.cas.authentication.CasAuthenticationProvider; import org.springframework.security.cas.web.CasAuthenticationEntryPoint; import org.springframework.security.cas.web.CasAuthenticationFilter; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; diff --git a/src/test/java/de/thm/arsnova/model/EntityTest.java b/src/test/java/de/thm/arsnova/model/EntityTest.java index d5edc7e76..01d8d0e74 100644 --- a/src/test/java/de/thm/arsnova/model/EntityTest.java +++ b/src/test/java/de/thm/arsnova/model/EntityTest.java @@ -22,7 +22,8 @@ import org.springframework.core.style.ToStringCreator; import java.util.Date; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.endsWith; +import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.*; /** diff --git a/src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java b/src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java index 2a8ccbecc..7af352356 100644 --- a/src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java +++ b/src/test/java/de/thm/arsnova/service/DefaultEntityServiceImplTest.java @@ -24,9 +24,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.mockito.AdditionalAnswers.*; -import static org.mockito.Mockito.*; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.mockito.AdditionalAnswers.returnsFirstArg; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.when; @RunWith(SpringJUnit4ClassRunner.class) diff --git a/src/test/java/de/thm/arsnova/service/StubUserService.java b/src/test/java/de/thm/arsnova/service/StubUserService.java index a08514848..c1df90a5c 100644 --- a/src/test/java/de/thm/arsnova/service/StubUserService.java +++ b/src/test/java/de/thm/arsnova/service/StubUserService.java @@ -17,25 +17,22 @@ */ package de.thm.arsnova.service; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.UserProfile; import de.thm.arsnova.persistence.UserRepository; import de.thm.arsnova.security.User; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.UUID; public class StubUserService extends UserServiceImpl { private final Set<GrantedAuthority> grantedAuthorities; - private ClientAuthentication stubUser = null; + private User stubUser = null; public StubUserService( UserRepository repository, @@ -54,19 +51,14 @@ public class StubUserService extends UserServiceImpl { if (isAuthenticated) { UserProfile userProfile = new UserProfile(UserProfile.AuthProvider.ARSNOVA, username); userProfile.setId(UUID.randomUUID().toString()); - User user = new User(userProfile, grantedAuthorities); - stubUser = new ClientAuthentication(user); + stubUser = new User(userProfile, grantedAuthorities); } else { stubUser = null; } } - public void useAnonymousUser() { - stubUser = new ClientAuthentication(new AnonymousAuthenticationToken(UUID.randomUUID().toString(), "anonymous", Collections.emptyList())); - } - @Override - public ClientAuthentication getCurrentUser() { + public User getCurrentUser() { return stubUser; } } diff --git a/src/test/java/de/thm/arsnova/service/UserServiceTest.java b/src/test/java/de/thm/arsnova/service/UserServiceTest.java index 6794fa424..606f4fea8 100644 --- a/src/test/java/de/thm/arsnova/service/UserServiceTest.java +++ b/src/test/java/de/thm/arsnova/service/UserServiceTest.java @@ -21,8 +21,8 @@ import de.thm.arsnova.config.AppConfig; import de.thm.arsnova.config.TestAppConfig; import de.thm.arsnova.config.TestPersistanceConfig; import de.thm.arsnova.config.TestSecurityConfig; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.UserProfile; +import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.security.User; import de.thm.arsnova.security.pac4j.OAuthToken; import org.junit.Test; diff --git a/src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java b/src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java index dad34d7b7..725d57a97 100644 --- a/src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java +++ b/src/test/java/de/thm/arsnova/service/score/QuestionBasedScoreCalculatorTest.java @@ -42,9 +42,9 @@ public class QuestionBasedScoreCalculatorTest { return questionId; } - private void addAnswer(String questionId, ClientAuthentication user, int points) { + private void addAnswer(String questionId, String userId, int points) { final int piRound = 1; - courseScore.addAnswer(questionId, piRound, user.getUsername(), points); + courseScore.addAnswer(questionId, piRound, userId, points); } @Before @@ -62,32 +62,32 @@ public class QuestionBasedScoreCalculatorTest { public void shouldIgnoreQuestionsWithoutCorrectAnswers() { final int questionMaxValue = 0; final int userScore = 0; - ClientAuthentication user = new TestClient("username"); + String userId = "user1"; String questionId = this.addQuestion("lecture", questionMaxValue); - this.addAnswer(questionId, user, userScore); + this.addAnswer(questionId, userId, userScore); ScoreStatistics expected = new ScoreStatistics(); expected.setCourseProgress(0); expected.setMyProgress(0); expected.setNumQuestions(0); - ScoreStatistics actual = lp.getMyProgress(null, user); + ScoreStatistics actual = lp.getMyProgress(null, userId); assertEquals(expected, actual); } @Test public void shouldIgnoreQuestionsWithoutCorrectAnswersInQuestionCount() { - ClientAuthentication user = new TestClient("username"); + String userId = "user"; courseScore.addQuestion("question-without-correct-answers", "lecture", 1, 0); courseScore.addQuestion("question-with-correct-answers", "lecture", 1, 50); - courseScore.addAnswer("question-without-correct-answers", 1, user.getUsername(), 0); - courseScore.addAnswer("question-with-correct-answers", 1, user.getUsername(), 50); + courseScore.addAnswer("question-without-correct-answers", 1, userId, 0); + courseScore.addAnswer("question-with-correct-answers", 1, userId, 50); ScoreStatistics expected = new ScoreStatistics(); expected.setCourseProgress(100); expected.setMyProgress(100); expected.setNumQuestions(1); - ScoreStatistics actual = lp.getMyProgress(null, user); + ScoreStatistics actual = lp.getMyProgress(null, userId); assertEquals(expected, actual); } @@ -99,9 +99,9 @@ public class QuestionBasedScoreCalculatorTest { public void shouldCalculatePercentageOfOneQuestionWithSomeWrongAnswers() { String questionId = this.addQuestion("lecture", 10); for (int i = 0; i < 99; i++) { - this.addAnswer(questionId, new TestClient("user"+i), 10); + this.addAnswer(questionId, "user" + i, 10); } - this.addAnswer(questionId, new TestClient("user-with-a-wrong-answer"), 0); + this.addAnswer(questionId, "user-with-a-wrong-answer", 0); int expected = 99; int actual = lp.getCourseProgress(null).getCourseProgress(); @@ -120,13 +120,13 @@ public class QuestionBasedScoreCalculatorTest { String q1 = this.addQuestion("lecture", 10); String q2 = this.addQuestion("lecture", 10); // two users - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); + String userId1 = "user1"; + String userId2 = "user2"; // four answers, last one is wrong - this.addAnswer(q1, u1, 10); - this.addAnswer(q1, u2, 10); - this.addAnswer(q2, u1, 10); - this.addAnswer(q2, u2, 0); + this.addAnswer(q1, userId1, 10); + this.addAnswer(q1, userId2, 10); + this.addAnswer(q2, userId1, 10); + this.addAnswer(q2, userId2, 0); int expected = 75; int actual = lp.getCourseProgress(null).getCourseProgress(); @@ -141,10 +141,10 @@ public class QuestionBasedScoreCalculatorTest { String q2 = this.addQuestion("lecture", 1); // first question has many answers, all of them correct for (int i = 0; i < 100; i++) { - this.addAnswer(q1, new TestClient("user"+i), 1000); + this.addAnswer(q1, "user" + i, 1000); } // second question has one wrong answer - this.addAnswer(q2, new TestClient("another-user"), 0); + this.addAnswer(q2, "another-user", 0); int expected = 50; int actual = lp.getCourseProgress(null).getCourseProgress(); @@ -156,20 +156,20 @@ public class QuestionBasedScoreCalculatorTest { public void shouldFilterBasedOnQuestionVariant() { String q1 = this.addQuestion("lecture", 100); String q2 = this.addQuestion("preparation", 100); - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); + String userId1 = "user1"; + String userId2 = "user2"; // first question is answered correctly, second one is not - this.addAnswer(q1, u1, 100); - this.addAnswer(q1, u2, 100); - this.addAnswer(q2, u1, 0); - this.addAnswer(q2, u2, 0); + this.addAnswer(q1, userId1, 100); + this.addAnswer(q1, userId2, 100); + this.addAnswer(q2, userId1, 0); + this.addAnswer(q2, userId2, 0); lp.setQuestionVariant("lecture"); ScoreStatistics lectureProgress = lp.getCourseProgress(null); - ScoreStatistics myLectureProgress = lp.getMyProgress(null, u1); + ScoreStatistics myLectureProgress = lp.getMyProgress(null, userId1); lp.setQuestionVariant("preparation"); ScoreStatistics prepProgress = lp.getCourseProgress(null); - ScoreStatistics myPrepProgress = lp.getMyProgress(null, u1); + ScoreStatistics myPrepProgress = lp.getMyProgress(null, userId1); assertEquals(100, lectureProgress.getCourseProgress()); assertEquals(100, myLectureProgress.getMyProgress()); @@ -179,19 +179,19 @@ public class QuestionBasedScoreCalculatorTest { @Test public void shouldConsiderAnswersOfSamePiRound() { - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); + String userId1 = "user1"; + String userId2 = "user2"; // question is in round 2 courseScore.addQuestion("q1", "lecture", 2, 100); // 25 points in round 1, 75 points in round two for the first user - courseScore.addAnswer("q1", 1, u1.getUsername(), 25); - courseScore.addAnswer("q1", 2, u1.getUsername(), 100); + courseScore.addAnswer("q1", 1, userId1, 25); + courseScore.addAnswer("q1", 2, userId1, 100); // 75 points in round 1, 25 points in round two for the second user - courseScore.addAnswer("q1", 1, u2.getUsername(), 100); - courseScore.addAnswer("q1", 2, u2.getUsername(), 25); + courseScore.addAnswer("q1", 1, userId2, 100); + courseScore.addAnswer("q1", 2, userId2, 25); - ScoreStatistics u1Progress = lp.getMyProgress(null, u1); - ScoreStatistics u2Progress = lp.getMyProgress(null, u2); + ScoreStatistics u1Progress = lp.getMyProgress(null, userId1); + ScoreStatistics u2Progress = lp.getMyProgress(null, userId2); // only the answer for round 2 should be considered assertEquals(50, u1Progress.getCourseProgress()); @@ -206,16 +206,16 @@ public class QuestionBasedScoreCalculatorTest { String q1 = this.addQuestion("lecture", 10); String q2 = this.addQuestion("lecture", 10); // three users - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); - ClientAuthentication u3 = new TestClient("user3"); + String userId1 = "user1"; + String userId2 = "user2"; + String userId3 = "user3"; // six answers - this.addAnswer(q1, u1, 10); - this.addAnswer(q2, u1, -100); - this.addAnswer(q1, u2, -100); - this.addAnswer(q2, u2, -100); - this.addAnswer(q1, u3, -100); - this.addAnswer(q2, u3, -100); + this.addAnswer(q1, userId1, 10); + this.addAnswer(q2, userId1, -100); + this.addAnswer(q1, userId2, -100); + this.addAnswer(q2, userId2, -100); + this.addAnswer(q1, userId3, -100); + this.addAnswer(q2, userId3, -100); int numerator = lp.getCourseProgress(null).getNumerator(); int denominator = lp.getCourseProgress(null).getDenominator(); diff --git a/src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java b/src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java index 5469530b0..fe0f43689 100644 --- a/src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java +++ b/src/test/java/de/thm/arsnova/service/score/ScoreBasedScoreCalculatorTest.java @@ -17,8 +17,6 @@ */ package de.thm.arsnova.service.score; -import de.thm.arsnova.model.TestClient; -import de.thm.arsnova.model.migration.v2.ClientAuthentication; import de.thm.arsnova.model.transport.ScoreStatistics; import de.thm.arsnova.persistence.SessionStatisticsRepository; import org.junit.Before; @@ -42,9 +40,9 @@ public class ScoreBasedScoreCalculatorTest { return questionId; } - private void addAnswer(String questionId, ClientAuthentication user, int points) { + private void addAnswer(String questionId, String userId, int points) { final int piRound = 1; - courseScore.addAnswer(questionId, piRound, user.getUsername(), points); + courseScore.addAnswer(questionId, piRound, userId, points); } @Before @@ -61,22 +59,22 @@ public class ScoreBasedScoreCalculatorTest { String q1 = this.addQuestion("lecture", 100); String q2 = this.addQuestion("lecture", 100); String q3 = this.addQuestion("lecture", 100); - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); - ClientAuthentication u3 = new TestClient("user3"); + String userId1 = "user1"; + String userId2 = "user2"; + String userId3 = "user3"; // Both users achieve 200 points - this.addAnswer(q1, u1, 100); - this.addAnswer(q1, u2, 100); - this.addAnswer(q1, u3, 0); - this.addAnswer(q2, u1, 0); - this.addAnswer(q2, u2, 100); - this.addAnswer(q2, u3, 0); - this.addAnswer(q3, u1, 100); - this.addAnswer(q3, u2, 100); - this.addAnswer(q3, u3, 0); + this.addAnswer(q1, userId1, 100); + this.addAnswer(q1, userId2, 100); + this.addAnswer(q1, userId3, 0); + this.addAnswer(q2, userId1, 0); + this.addAnswer(q2, userId2, 100); + this.addAnswer(q2, userId3, 0); + this.addAnswer(q3, userId1, 100); + this.addAnswer(q3, userId2, 100); + this.addAnswer(q3, userId3, 0); lp.setQuestionVariant("lecture"); - ScoreStatistics u1LectureProgress = lp.getMyProgress(null, u1); + ScoreStatistics u1LectureProgress = lp.getMyProgress(null, userId1); // (500/3) / 300 ~= 0,56. assertEquals(56, u1LectureProgress.getCourseProgress()); // 200 / 300 ~= 0,67. @@ -89,18 +87,18 @@ public class ScoreBasedScoreCalculatorTest { String q1 = this.addQuestion("lecture", 100); String q2 = this.addQuestion("lecture", 100); String q3 = this.addQuestion("lecture", 100); - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); + String userId1 = "user1"; + String userId2 = "user2"; // Both users achieve 200 points - this.addAnswer(q1, u1, 100); - this.addAnswer(q1, u2, 100); - this.addAnswer(q2, u1, 0); - this.addAnswer(q2, u2, 0); - this.addAnswer(q3, u1, 100); - this.addAnswer(q3, u2, 100); + this.addAnswer(q1, userId1, 100); + this.addAnswer(q1, userId2, 100); + this.addAnswer(q2, userId1, 0); + this.addAnswer(q2, userId2, 0); + this.addAnswer(q3, userId1, 100); + this.addAnswer(q3, userId2, 100); lp.setQuestionVariant("lecture"); - ScoreStatistics u1LectureProgress = lp.getMyProgress(null, u1); + ScoreStatistics u1LectureProgress = lp.getMyProgress(null, userId1); // 200 / 300 = 0,67 assertEquals(67, u1LectureProgress.getCourseProgress()); assertEquals(67, u1LectureProgress.getMyProgress()); @@ -108,19 +106,19 @@ public class ScoreBasedScoreCalculatorTest { @Test public void shouldConsiderAnswersOfSamePiRound() { - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); + String userId1 = "user1"; + String userId2 = "user2"; // question is in round 2 courseScore.addQuestion("q1", "lecture", 2, 100); // 25 points in round 1, 75 points in round two for the first user - courseScore.addAnswer("q1", 1, u1.getUsername(), 25); - courseScore.addAnswer("q1", 2, u1.getUsername(), 75); + courseScore.addAnswer("q1", 1, userId1, 25); + courseScore.addAnswer("q1", 2, userId1, 75); // 75 points in round 1, 25 points in round two for the second user - courseScore.addAnswer("q1", 1, u2.getUsername(), 75); - courseScore.addAnswer("q1", 2, u2.getUsername(), 25); + courseScore.addAnswer("q1", 1, userId2, 75); + courseScore.addAnswer("q1", 2, userId2, 25); - ScoreStatistics u1Progress = lp.getMyProgress(null, u1); - ScoreStatistics u2Progress = lp.getMyProgress(null, u2); + ScoreStatistics u1Progress = lp.getMyProgress(null, userId1); + ScoreStatistics u2Progress = lp.getMyProgress(null, userId2); // only the answer for round 2 should be considered assertEquals(50, u1Progress.getCourseProgress()); @@ -135,16 +133,16 @@ public class ScoreBasedScoreCalculatorTest { String q1 = this.addQuestion("lecture", 10); String q2 = this.addQuestion("lecture", 10); // three users - ClientAuthentication u1 = new TestClient("user1"); - ClientAuthentication u2 = new TestClient("user2"); - ClientAuthentication u3 = new TestClient("user3"); + String userId1 = "user1"; + String userId2 = "user2"; + String userId3 = "user3"; // six answers - this.addAnswer(q1, u1, 10); - this.addAnswer(q2, u1, 0); - this.addAnswer(q1, u2, 10); - this.addAnswer(q2, u2, 0); - this.addAnswer(q1, u3, 10); - this.addAnswer(q2, u3, 0); + this.addAnswer(q1, userId1, 10); + this.addAnswer(q2, userId1, 0); + this.addAnswer(q1, userId2, 10); + this.addAnswer(q2, userId2, 0); + this.addAnswer(q1, userId3, 10); + this.addAnswer(q2, userId3, 0); int numerator = lp.getCourseProgress(null).getNumerator(); int denominator = lp.getCourseProgress(null).getDenominator(); diff --git a/src/test/java/de/thm/arsnova/util/ImageUtilsTest.java b/src/test/java/de/thm/arsnova/util/ImageUtilsTest.java index 4833b071a..d07fd9bd4 100644 --- a/src/test/java/de/thm/arsnova/util/ImageUtilsTest.java +++ b/src/test/java/de/thm/arsnova/util/ImageUtilsTest.java @@ -21,7 +21,6 @@ import de.thm.arsnova.config.AppConfig; import de.thm.arsnova.config.TestAppConfig; import de.thm.arsnova.config.TestPersistanceConfig; import de.thm.arsnova.config.TestSecurityConfig; -import de.thm.arsnova.util.ImageUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ActiveProfiles; -- GitLab