diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java index b7dcb3b72b6c2739e3ec429443ef822714cfd402..a1415c4750b2063e20f2f5d2385614fa4dc52a30 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 713e5fb6640e0bf91a14612036b32ebee963b9f9..d36602975d69ac9ba6aed32db1248f3e75c3adf0 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 5f7104582583ada8c308da05eff4a62e1007c9ae..1e0ce9fafca24be49345b448e14cb31c0081624c 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 0b6c96c8ffe8c3bd5c033aabbff12009b0f2dc4c..ce3c4f23f905b62fcdf1c7e54263b752a105055e 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 e6549fbfad400713e66510abca6bc8fae14a049a..c6416a32feaedfa7ff649882d4159292424e1caa 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 a7f293d4a6fd2b8727248173ba54e17f84bd3f58..4dac95bdfd9e38c9132605b2a22770b46c24422f 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 b6bbe1fdbcdf28b72c43ec004c04914376a78640..e097c27a0b0d01e9360269dd8bca8e10f2e96681 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 17a766d38b3d293a41250fab579a67ee7a4e72f4..ccdb3da1eaf23a57b58dacd54785b86eb7a03db9 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 3374251f6521b08aa0d4148b99fd529aa5e06c76..ba5db82e631e941e9dd27a3f09a0bed7fb8f6515 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 416fa0918547bd041b6a20339877e4a301bf6faa..812f9ab18d95fa03b4171c5449ede78204e45267 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 9c051b469e06138bf99761f72e4f0ff68558d85f..baef51c6f0e9d3b30b0c8cc427dee350291183c4 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 ab9afeef05b24bf5d2dfc09f9e39a2d11ea8644d..2bcec6ba1b3636d7d0ff6c5441e8a2d43a99672d 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 5942e19adedc838bcd9dbe8ec1169c85b01ad201..38b5cfca9f725d761743b75f8b571ab68566d134 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 5049bf32ca1465b25bac64c8b84792fba9353d18..bdf775c000745d33460d7db85de805cdb0dab7ee 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 ad3610d19d807b48eead572c819525257eedef14..676b335dd76ad1477389f8ac43fd33104c67ae6c 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 b199acb6eec2c03bf635d7e2fc74e3e6eed67dbd..dfe4c2b8b2ba69b06aa4bbc925100bbf8080a6d5 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 ac2814acb1dc3cbe87d1bad8774f6381c77e0609..ea1de4f26a1c4e145aaffd2a7ccc7fb661ae904c 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 c07995b557722bf78420a8f18077dcea71d90e8e..3bf6a1e25320ed3375676f3dec210f2aed2afac6 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 afa7bf82e6884600184fd7b7c12f0b6db190edc6..9624e755a3294b6c08573816a4ec3c7ce1a6e7e7 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 89be0738817873d57dc8cb1212e6b7ba0e70d44b..eca83a08911cf35d3585fc4dde5634b411ea82a4 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 9e811203ca4b6e2691dff15ebb9364ac92c21f0d..1d61c33c4182a5a0b9da49c429d2a11752df25dd 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 026246bb3b9b3cb7bdd8cf3bd548fd579c592b5b..9b1d3d6e08ddb606b7b7bbed4c7176f7be4b2ddb 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 8b353d242c545e91e57b40a09d5539293048070c..32e28fb08a0ffa3783875d4532383ffe124d8489 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 5defab3aff88efcdcae75519b36795bb9d7931d6..02928a5d95fc5ef985686cb3794c0e5681d887ed 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 6a7c4e32ad95e32d12a41d0ad021b0b3004b2929..9986c57c6c20f73fb8b1f0be86eb25847c10b4ac 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 beb8741d0a72a577a9d6cad1f60b84c4453917f5..2e8fdd8adbb4f003907d509c3ef2c40d66627f4d 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 35f1fb64bc7448a532b0477724017431e90a2c28..80efecfc24df6fa7891479d98c2710b2ce2464d9 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 536d410dd8057a67f44134bfb24d00d9111fa3e7..759815ccf0dd77f8afccf504940dc9c6c2794c6d 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 5b5535ad9ae94961325c58fb4a26e2946d54221c..c7dd6e56127317c99c602a35f4e96a89736aaa51 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 fdbe5b88644e569b9df24ec3848bfc571ecebd23..1f5a8de9b7b4da65aae115dc215ad14a703060a1 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 3404880e8cab1bdadc64c4d6504852491002a9cc..725b1bc35b72dc67a4503060a43461e473a91969 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 253298413d7e5fc8242fbca3fee26ec8d10e4334..dbb3d8b5a9806e42c94aacbbded01fa8d3eb687e 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 a2e11f4f3ee297032d3bb5f9c728a7a270e462c8..1b0aee13578d7e734743eb2b82d9acb71e721903 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 1b5ab72e691b963939da7516e512e57aace1e836..dfacd7482df50d3d17653018f14080182f1561ea 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 81a3660135ac3364ead1f25a448b2449dbc57ec2..842322bfa14a2b490ee5bca5426e09ef2a83eda3 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 74dc27e735366df72b2680afaf6038d8586fea35..be73cedcb58bd1ef7575f87a609e86fac31bf4a2 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 ef8df172c17eab42df5b86ebec22efc794b01d64..47c8ad10ec3b4b855eaecb3f020522dfcae03f00 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 66f6e0142bfe777046468eaf4756310bb8bbf8af..6a2b09d40b421e1b9d3a5ddb98f1351dbdc0c97e 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 4fb3543326b3daf89d274cec66bdd3f3faf85c6b..2c30896d2c5b137d3de79d8c1870c6ae9f493308 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 816a49aa3ad377bee047d0f089057841039e0ba1..f5d566f3f05ba6441b1374d7d2713452d00a222e 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 1db313d6390b890c8aae9814715ea18e025665b9..caf4372cb2d317fc131db04ef689fb45befec471 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 b676a41e1e9120e199bfad295b201d3a8834ca34..263ef8caa95e706227d99e16df7e8e1718e01d86 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 0f2138223930a86752a700ba28b33679942cd107..57422647aa18c26a221ccfbe122ba93c9fdb6076 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 51498b832d4c1c1e9f2dcd11bea0559571aa40d0..dfa71b0c842f08dfd3e4473ea8779a1a93eeb626 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 0eed46c4d470384e693aa2357699ca96ba0dffa2..55f7df91a503d0034b92aa62472d6e4a653e2182 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 0ea10b92d1b197bb60538b2ca4fb3f92a60a7f2e..6989b6c987148d2994db06c6dc34565461d0a84d 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 d3c5e4d299db8a54afe93ccfcffbab8836753314..0cc7361b9bb0ae5c5e4f8adbd27ac11172024980 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 7b34fddbded6fd919ae780831eb87521fe1e6d1b..56d5e47778b1199ebbccd2727234f43a65095a1f 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 7eb61b0c72983782f91e96174378be3c90b81214..ce03ccb4187de94957c455738c05578fab0a314c 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 bc91a25594f83537e180a655fc265888e32d9a52..4310c8c78438959a251e5a4b98a89900392f91fd 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 de9b62054cc45457a6b4daed1f898dadf0785e0b..f7266b9524e88d0f0db2e848129527163173ae06 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 9959fab9cd884c9ee25973cb96ca4d10cdb6d757..c015e1369ec164e7ca789bcb9fdba8430f9ad217 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 70ab9d83c3a238a83a05447623301687c5545665..0e20156dfa0748e51fc02140968725b5a9cd8d47 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 18ef7807352a9af0fe4099936fc3b6334b287680..23fad2da876bfd00ca20e86a958bda30003a5c90 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 ee25ccee92c899a77fc67a755f67ff3a39ff6e19..e3d998e6f588f95aa2a4d89ac9d8238264aa34f6 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 d5edc7e761db8676d477252e17b0cc3138000226..01d8d0e7426e171833fb99cc1dcd4a2b2d37c437 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 2a8ccbecc4890f0c71ea4951e215eedb6750f217..7af352356079ee807e99d0cd7ac24183bacc5d4a 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 a08514848086c4bd2ca5fac35b572a364563f27b..c1df90a5cda6142a8f817237c8fb866f783cf48d 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 6794fa424733523bb133d1c2d74ad2dca1bad72d..606f4fea8ce441194a8c03e7336e634ce9c75aa2 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 dad34d7b79ba1eca43964b362b13f4e095374437..725d57a972d2dd2e7efa8b1db69844d349208e7c 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 5469530b0924751a8a526e2e238267d8d63cd115..fe0f43689d9ccef00baa473c880b371123f76697 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 4833b071aa97d232ff52887ccda8790cdb5de8a1..d07fd9bd4714bf5a1eb1ee02348726024422bf78 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;