diff --git a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java index 4d8a7ed9289f6979627e961cd53ffe925b2aff60..30c13fac71a360f530639ff36fcb37d99de51123 100644 --- a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java +++ b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java @@ -39,36 +39,36 @@ public class CacheBusterImpl implements CacheBuster { @CacheEvict(value = "statistics", allEntries = true) @EventListener public void handleAfterCommentCreation(final AfterCreationEvent<Comment> event) { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "statistics", allEntries = true) @EventListener public void handleAfterCommentDeletion(final AfterDeletionEvent<Comment> event) { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "answerlists", key = "#event.content.id") @EventListener public void handleAfterAnswerCreation(final AfterCreationEvent<Answer> event) { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "statistics", allEntries = true) @EventListener public void handleChangeScore(final ChangeScoreEvent event) { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "statistics", allEntries = true) @EventListener public void handleAfterRoomCreation(final AfterCreationEvent<Room> event) { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "statistics", allEntries = true) @EventListener public void handleAfterRoomDeletion(final AfterDeletionEvent<Room> event) { - + /* Implementation provided by caching aspect. */ } } diff --git a/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java b/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java index fa9e37d23eb3a8e9439cce26c6c74cf6cec8f549..0db9518989c97f1d4e5cb093d03a79ef1da82487 100644 --- a/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java +++ b/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java @@ -41,49 +41,49 @@ public class ScheduledCacheBuster { @CacheEvict(value = "rooms", allEntries = true) @Scheduled(initialDelay = 1000 * 25, fixedRate = 1000 * 60 * 60 * 6) private void clearSessionCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "contents", allEntries = true) @Scheduled(initialDelay = 1000 * 50, fixedRate = 1000 * 60 * 30) private void clearQuestionCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "contentlists", allEntries = true) @Scheduled(initialDelay = 1000 * 75, fixedRate = 1000 * 60 * 30) private void clearSkillQuestionCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "lecturecontentlists", allEntries = true) @Scheduled(initialDelay = 1000 * 100, fixedRate = 1000 * 60 * 30) private void clearLectureQuestionCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "preparationcontentlists", allEntries = true) @Scheduled(initialDelay = 1000 * 125, fixedRate = 1000 * 60 * 30) private void clearPreparationQuestionCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "flashcardcontentlists", allEntries = true) @Scheduled(initialDelay = 1000 * 150, fixedRate = 1000 * 60 * 30) private void clearFlashcardQuestionCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "answerlists", allEntries = true) @Scheduled(initialDelay = 1000 * 175, fixedRate = 1000 * 60 * 15) private void clearAnswerCache() { - + /* Implementation provided by caching aspect. */ } @CacheEvict(value = "score", allEntries = true) @Scheduled(initialDelay = 1000 * 200, fixedRate = 1000 * 60 * 15) private void clearLearningProgressCache() { - + /* Implementation provided by caching aspect. */ } } diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java index 1e992cb6dfbec9909b35417a56a4646f5b2ad3e6..5be42080de92e3dece36b1bb8ac671b7da660edb 100644 --- a/src/main/java/de/thm/arsnova/config/AppConfig.java +++ b/src/main/java/de/thm/arsnova/config/AppConfig.java @@ -22,9 +22,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import io.micrometer.core.instrument.MeterRegistry; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang.CharEncoding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; @@ -116,7 +117,7 @@ import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl; "classpath:config/actuator.yml", "file:${arsnova.config-dir:.}/application.yml"}, ignoreResourceNotFound = true, - encoding = "UTF-8", + encoding = CharEncoding.UTF_8, factory = YamlPropertySourceFactory.class ) @EnableConfigurationProperties(SystemProperties.class) @@ -209,7 +210,7 @@ public class AppConfig implements WebMvcConfigurer { @Bean public StringHttpMessageConverter stringMessageConverter() { final StringHttpMessageConverter messageConverter = new StringHttpMessageConverter(); - messageConverter.setDefaultCharset(Charset.forName("UTF-8")); + messageConverter.setDefaultCharset(StandardCharsets.UTF_8); messageConverter.setWriteAcceptCharset(false); final List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(MediaType.TEXT_PLAIN); diff --git a/src/main/java/de/thm/arsnova/config/SecurityConfig.java b/src/main/java/de/thm/arsnova/config/SecurityConfig.java index cb327b08e0ae5208230a5d6d3c7c4f530f144100..d35604377a0d1f412cf372a32b099c5efa3606c1 100644 --- a/src/main/java/de/thm/arsnova/config/SecurityConfig.java +++ b/src/main/java/de/thm/arsnova/config/SecurityConfig.java @@ -116,6 +116,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { public static final String CAS_LOGIN_PATH_SUFFIX = "/auth/login/cas"; public static final String CAS_LOGOUT_PATH_SUFFIX = "/auth/logout/cas"; public static final String RUN_AS_KEY_PREFIX = "RUN_AS_KEY"; + public static final String INTERNAL_PROVIDER_ID = "user-db"; + public static final String LDAP_PROVIDER_ID = "ldap"; + public static final String OIDC_PROVIDER_ID = "oidc"; + public static final String CAS_PROVIDER_ID = "cas"; + public static final String GOOGLE_PROVIDER_ID = "google"; + public static final String TWITTER_PROVIDER_ID = "twitter"; + public static final String FACEBOOK_PROVIDER_ID = "facebook"; private static final Logger logger = LoggerFactory.getLogger(SecurityConfig.class); private ServletContext servletContext; @@ -250,32 +257,32 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { auth.authenticationProvider(jwtAuthenticationProvider()); logger.info("oauthProps: {}", providerProperties.getOauth()); if (providerProperties.getLdap().stream().anyMatch(p -> p.isEnabled())) { - providers.add("ldap"); + providers.add(LDAP_PROVIDER_ID); auth.authenticationProvider(ldapAuthenticationProvider()); } if (providerProperties.getCas().isEnabled()) { - providers.add("cas"); + providers.add(CAS_PROVIDER_ID); auth.authenticationProvider(casAuthenticationProvider()); } if (providerProperties.getRegistered().isEnabled()) { - providers.add("user-db"); + providers.add(INTERNAL_PROVIDER_ID); auth.authenticationProvider(daoAuthenticationProvider()); } if (providerProperties.getOidc().stream().anyMatch(p -> p.isEnabled())) { - providers.add("oidc"); + providers.add(OIDC_PROVIDER_ID); } if (providerProperties.getOauth().values().stream().anyMatch(p -> p.isEnabled())) { - if (providerProperties.getOauth().containsKey("google") - && providerProperties.getOauth().get("google").isEnabled()) { - providers.add("google"); + if (providerProperties.getOauth().containsKey(GOOGLE_PROVIDER_ID) + && providerProperties.getOauth().get(GOOGLE_PROVIDER_ID).isEnabled()) { + providers.add(GOOGLE_PROVIDER_ID); } - if (providerProperties.getOauth().containsKey("facebook") - && providerProperties.getOauth().get("facebook").isEnabled()) { - providers.add("facebook"); + if (providerProperties.getOauth().containsKey(FACEBOOK_PROVIDER_ID) + && providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID).isEnabled()) { + providers.add(FACEBOOK_PROVIDER_ID); } - if (providerProperties.getOauth().containsKey("twitter") - && providerProperties.getOauth().get("twitter").isEnabled()) { - providers.add("twitter"); + if (providerProperties.getOauth().containsKey(TWITTER_PROVIDER_ID) + && providerProperties.getOauth().get(TWITTER_PROVIDER_ID).isEnabled()) { + providers.add(TWITTER_PROVIDER_ID); } auth.authenticationProvider(oauthAuthenticationProvider()); } @@ -513,16 +520,16 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { if (providerProperties.getOidc().stream().anyMatch(p -> p.isEnabled())) { clients.add(oidcClient()); } - if (providerProperties.getOauth().containsKey("facebook") - && providerProperties.getOauth().get("facebook").isEnabled()) { + if (providerProperties.getOauth().containsKey(FACEBOOK_PROVIDER_ID) + && providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID).isEnabled()) { clients.add(facebookClient()); } - if (providerProperties.getOauth().containsKey("google") - && providerProperties.getOauth().get("google").isEnabled()) { + if (providerProperties.getOauth().containsKey(GOOGLE_PROVIDER_ID) + && providerProperties.getOauth().get(GOOGLE_PROVIDER_ID).isEnabled()) { clients.add(googleClient()); } - if (providerProperties.getOauth().containsKey("twitter") - && providerProperties.getOauth().get("twitter").isEnabled()) { + if (providerProperties.getOauth().containsKey(TWITTER_PROVIDER_ID) + && providerProperties.getOauth().get(TWITTER_PROVIDER_ID).isEnabled()) { clients.add(twitterClient()); } @@ -559,7 +566,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public FacebookClient facebookClient() { - final AuthenticationProviderProperties.Oauth oauthProperties = providerProperties.getOauth().get("facebook"); + final AuthenticationProviderProperties.Oauth oauthProperties = + providerProperties.getOauth().get(FACEBOOK_PROVIDER_ID); final FacebookClient client = new FacebookClient(oauthProperties.getKey(), oauthProperties.getSecret()); client.setCallbackUrl(rootUrl + apiPath + OAUTH_CALLBACK_PATH_SUFFIX + "?client_name=FacebookClient"); @@ -568,7 +576,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public TwitterClient twitterClient() { - final AuthenticationProviderProperties.Oauth oauthProperties = providerProperties.getOauth().get("twitter"); + final AuthenticationProviderProperties.Oauth oauthProperties = + providerProperties.getOauth().get(TWITTER_PROVIDER_ID); final TwitterClient client = new TwitterClient(oauthProperties.getKey(), oauthProperties.getSecret()); client.setCallbackUrl(rootUrl + apiPath + OAUTH_CALLBACK_PATH_SUFFIX + "?client_name=TwitterClient"); @@ -577,7 +586,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public GoogleOidcClient googleClient() { - final AuthenticationProviderProperties.Oauth oauthProperties = providerProperties.getOauth().get("google"); + final AuthenticationProviderProperties.Oauth oauthProperties = + providerProperties.getOauth().get(GOOGLE_PROVIDER_ID); final OidcConfiguration config = new OidcConfiguration(); config.setClientId(oauthProperties.getKey()); config.setSecret(oauthProperties.getSecret()); diff --git a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java index a3bbe2dfb6a0206a58c6fee46047521ac4b5e6ad..5b956ef0bec1b9312a8c5f6afa60a7eab8420e3e 100644 --- a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java +++ b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java @@ -25,6 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -164,7 +165,7 @@ public class ConfigurationController extends AbstractController { socketioPath = systemProperties.getSocketio().getProxyPath(); } - @RequestMapping(method = RequestMethod.GET) + @GetMapping @ResponseBody public Map<String, Object> getConfiguration(final HttpServletRequest request) { final Map<String, Object> config = new HashMap<>(); diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java index fb8880f249752cbc05a0b385ba0b81dfce4cd01c..abc74d0ce2ad0b03cdd998fb87d241559b1c79d6 100644 --- a/src/main/java/de/thm/arsnova/controller/UserController.java +++ b/src/main/java/de/thm/arsnova/controller/UserController.java @@ -101,7 +101,7 @@ public class UserController extends AbstractEntityController<UserProfile> { } } - @RequestMapping(value = ACTIVATE_MAPPING, method = RequestMethod.POST) + @PostMapping(ACTIVATE_MAPPING) public void activate( @PathVariable final String id, @RequestParam final String key) { @@ -113,7 +113,7 @@ public class UserController extends AbstractEntityController<UserProfile> { userService.update(userProfile); } - @RequestMapping(value = RESET_PASSWORD_MAPPING, method = RequestMethod.POST) + @PostMapping(RESET_PASSWORD_MAPPING) public void resetPassword( @PathVariable final String id, @RequestBody final PasswordReset passwordReset) { diff --git a/src/main/java/de/thm/arsnova/controller/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/WelcomeController.java index 59c32288119caecd187a47e055c4675149899207..0db5fd395157e8d025b789094920254b606efaa1 100644 --- a/src/main/java/de/thm/arsnova/controller/WelcomeController.java +++ b/src/main/java/de/thm/arsnova/controller/WelcomeController.java @@ -30,8 +30,8 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -56,18 +56,18 @@ public class WelcomeController extends AbstractController { @Autowired private VersionInfoContributor versionInfoContributor; - @RequestMapping(value = "/", method = RequestMethod.GET) + @GetMapping("/") public View home() { return new RedirectView(mobileContextPath + "/", false); } - @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") + @GetMapping(value = "/", produces = "application/json") @ResponseBody public Map<String, Object> jsonHome() { return versionInfoContributor.getInfoDetails(); } - @RequestMapping(value = "/checkframeoptionsheader", method = RequestMethod.POST) + @PostMapping("/checkframeoptionsheader") @ResponseStatus(HttpStatus.OK) public void checkFrameOptionsHeader( @RequestParam final String url, 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 5644dfee48ab545c65f1fc036b15d855a988073d..fd52193a804f77260d518bfec4cf578e7d5ca130 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/AuthenticationController.java @@ -50,8 +50,9 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.util.UrlUtils; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.View; @@ -124,7 +125,7 @@ public class AuthenticationController extends AbstractController { oauthProperties = authenticationProviderProperties.getOauth(); } - @RequestMapping(value = { "/login", "/doLogin" }, method = { RequestMethod.POST, RequestMethod.GET }) + @PostMapping({ "/login", "/doLogin" }) public void doLogin( @RequestParam("type") final String type, @RequestParam(value = "user", required = false) final String username, @@ -170,7 +171,7 @@ public class AuthenticationController extends AbstractController { } } - @RequestMapping(value = { "/dialog" }, method = RequestMethod.GET) + @GetMapping("/dialog") @ResponseBody public View dialog( @RequestParam("type") final String type, @@ -231,7 +232,7 @@ public class AuthenticationController extends AbstractController { return result; } - @RequestMapping(value = { "/", "/whoami" }, method = RequestMethod.GET) + @GetMapping({ "/", "/whoami" }) @ResponseBody public ClientAuthentication whoami(@AuthenticationPrincipal final User user) { if (user == null) { @@ -240,7 +241,7 @@ public class AuthenticationController extends AbstractController { return new ClientAuthentication(user); } - @RequestMapping(value = { "/logout" }, method = { RequestMethod.POST, RequestMethod.GET }) + @PostMapping("/logout") public String doLogout(final HttpServletRequest request) { final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); userService.removeUserIdFromMaps(userService.getCurrentUser().getId()); @@ -249,10 +250,10 @@ public class AuthenticationController extends AbstractController { if (auth instanceof CasAuthenticationToken) { return "redirect:" + apiPath + SecurityConfig.CAS_LOGOUT_PATH_SUFFIX; } - return "redirect:" + request.getHeader("referer") != null ? request.getHeader("referer") : "/"; + return "redirect:" + (request.getHeader("referer") != null ? request.getHeader("referer") : "/"); } - @RequestMapping(value = { "/services" }, method = RequestMethod.GET) + @GetMapping("/services") @ResponseBody public List<ServiceDescription> getServices(final HttpServletRequest request) { final List<ServiceDescription> services = new ArrayList<>(); @@ -284,9 +285,9 @@ public class AuthenticationController extends AbstractController { if (ldapProperties.get(0).isEnabled()) { final ServiceDescription sdesc = new ServiceDescription( - "ldap", + SecurityConfig.LDAP_PROVIDER_ID, ldapProperties.get(0).getTitle(), - customizationPath + "/login?provider=ldap&redirect={0}", + customizationPath + "/login?provider=" + SecurityConfig.LDAP_PROVIDER_ID + "&redirect={0}", ldapProperties.get(0).getAllowedRoles() ); sdesc.setOrder(ldapProperties.get(0).getOrder()); @@ -295,9 +296,9 @@ public class AuthenticationController extends AbstractController { if (casProperties.isEnabled()) { final ServiceDescription sdesc = new ServiceDescription( - "cas", + SecurityConfig.CAS_PROVIDER_ID, casProperties.getTitle(), - MessageFormat.format(dialogUrl, "cas"), + MessageFormat.format(dialogUrl, SecurityConfig.CAS_PROVIDER_ID), casProperties.getAllowedRoles() ); sdesc.setOrder(casProperties.getOrder()); @@ -306,45 +307,48 @@ public class AuthenticationController extends AbstractController { if (oidcProperties.get(0).isEnabled()) { final ServiceDescription sdesc = new ServiceDescription( - "oidc", + SecurityConfig.OIDC_PROVIDER_ID, oidcProperties.get(0).getTitle(), - MessageFormat.format(dialogUrl, "oidc"), + MessageFormat.format(dialogUrl, SecurityConfig.OIDC_PROVIDER_ID), oidcProperties.get(0).getAllowedRoles() ); sdesc.setOrder(oidcProperties.get(0).getOrder()); services.add(sdesc); } - final AuthenticationProviderProperties.Oauth facebookProperties = oauthProperties.get("facebook"); + final AuthenticationProviderProperties.Oauth facebookProperties = + oauthProperties.get(SecurityConfig.FACEBOOK_PROVIDER_ID); if (facebookProperties != null && facebookProperties.isEnabled()) { final ServiceDescription sdesc = new ServiceDescription( - "facebook", + SecurityConfig.FACEBOOK_PROVIDER_ID, "Facebook", - MessageFormat.format(dialogUrl, "facebook"), + MessageFormat.format(dialogUrl, SecurityConfig.FACEBOOK_PROVIDER_ID), facebookProperties.getAllowedRoles() ); sdesc.setOrder(facebookProperties.getOrder()); services.add(sdesc); } - final AuthenticationProviderProperties.Oauth googleProperties = oauthProperties.get("google"); + final AuthenticationProviderProperties.Oauth googleProperties = + oauthProperties.get(SecurityConfig.GOOGLE_PROVIDER_ID); if (googleProperties != null && googleProperties.isEnabled()) { final ServiceDescription sdesc = new ServiceDescription( - "google", + SecurityConfig.GOOGLE_PROVIDER_ID, "Google", - MessageFormat.format(dialogUrl, "google"), + MessageFormat.format(dialogUrl, SecurityConfig.GOOGLE_PROVIDER_ID), googleProperties.getAllowedRoles() ); sdesc.setOrder(googleProperties.getOrder()); services.add(sdesc); } - final AuthenticationProviderProperties.Oauth twitterProperties = oauthProperties.get("twitter"); + final AuthenticationProviderProperties.Oauth twitterProperties = + oauthProperties.get(SecurityConfig.TWITTER_PROVIDER_ID); if (twitterProperties != null && twitterProperties.isEnabled()) { final ServiceDescription sdesc = new ServiceDescription( - "twitter", + SecurityConfig.TWITTER_PROVIDER_ID, "Twitter", - MessageFormat.format(dialogUrl, "twitter"), + MessageFormat.format(dialogUrl, SecurityConfig.TWITTER_PROVIDER_ID), twitterProperties.getAllowedRoles() ); sdesc.setOrder(twitterProperties.getOrder()); diff --git a/src/main/java/de/thm/arsnova/controller/v2/CommentController.java b/src/main/java/de/thm/arsnova/controller/v2/CommentController.java index 9ee584c8e160268eba13ad15d4de94d1de73fa5d..088f70362982c799d307a52716135e0238cecef9 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/CommentController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/CommentController.java @@ -29,7 +29,10 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -74,7 +77,7 @@ public class CommentController extends PaginationController { @ApiOperation(value = "Count all the comments in current room", nickname = "getCommentCount") - @RequestMapping(value = "/count", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/count", produces = MediaType.TEXT_PLAIN_VALUE) @DeprecatedApi @Deprecated public String getCommentCount( @@ -86,7 +89,7 @@ public class CommentController extends PaginationController { @ApiOperation(value = "count all unread comments", nickname = "getUnreadCommentCount") - @RequestMapping(value = "/readcount", method = RequestMethod.GET) + @GetMapping("/readcount") @DeprecatedApi @Deprecated public CommentReadingCount getUnreadCommentCount( @@ -97,7 +100,7 @@ public class CommentController extends PaginationController { @ApiOperation(value = "Retrieves all Comments for a Room", nickname = "getComments") - @RequestMapping(value = "/", method = RequestMethod.GET) + @GetMapping("/") @Pagination public List<Comment> getComments( @ApiParam(value = "Room-Key from current room", required = true) @@ -109,7 +112,7 @@ public class CommentController extends PaginationController { @ApiOperation(value = "Retrieves an Comment", nickname = "getComment") - @RequestMapping(value = "/{commentId}", method = RequestMethod.GET) + @GetMapping("/{commentId}") public Comment getComment( @ApiParam(value = "ID of the Comment that needs to be deleted", required = true) @PathVariable @@ -123,7 +126,7 @@ public class CommentController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 400, message = HTML_STATUS_400) }) - @RequestMapping(value = "/", method = RequestMethod.POST) + @PostMapping("/") @ResponseStatus(HttpStatus.CREATED) public void postComment( @ApiParam(value = "Room-Key from current room", required = true) @@ -140,7 +143,7 @@ public class CommentController extends PaginationController { @ApiOperation(value = "Deletes a Comment", nickname = "deleteComment") - @RequestMapping(value = "/{commentId}", method = RequestMethod.DELETE) + @DeleteMapping("/{commentId}") public void deleteComment( @ApiParam(value = "ID of the comment that needs to be deleted", required = true) @PathVariable 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 8035955028a205d562bcb704bd1c0829af8d4ced..f788bcdec499cb6c0b37a10032c7820c882ee4d3 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java @@ -34,10 +34,13 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -93,7 +96,7 @@ public class ContentController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 404, message = HTML_STATUS_404) }) - @RequestMapping(value = "/{contentId}", method = RequestMethod.GET) + @GetMapping("/{contentId}") public Content getContent(@PathVariable final String contentId) { final de.thm.arsnova.model.Content content = contentService.get(contentId); if (content != null) { @@ -108,7 +111,7 @@ public class ContentController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 400, message = HTML_STATUS_400) }) - @RequestMapping(value = "/", method = RequestMethod.POST) + @PostMapping("/") @ResponseStatus(HttpStatus.CREATED) public Content postContent(@RequestBody final Content content) { final de.thm.arsnova.model.Content contentV3 = fromV2Migrator.migrate(content); @@ -123,7 +126,7 @@ public class ContentController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 400, message = HTML_STATUS_400) }) - @RequestMapping(value = "/bulk", method = RequestMethod.POST) + @PostMapping("/bulk") @ResponseStatus(HttpStatus.CREATED) public List<Content> bulkPostContents(@RequestBody final List<Content> contents) { final List<de.thm.arsnova.model.Content> contentsV3 = @@ -136,7 +139,7 @@ public class ContentController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 400, message = HTML_STATUS_400) }) - @RequestMapping(value = "/{contentId}", method = RequestMethod.PUT) + @PutMapping("/{contentId}") public Content updateContent( @PathVariable final String contentId, @RequestBody final Content content) { @@ -145,7 +148,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Start new Pi Round on content, identified by provided id, with an optional time", nickname = "startPiRound") - @RequestMapping(value = "/{contentId}/questionimage", method = RequestMethod.GET) + @GetMapping("/{contentId}/questionimage") public String getContentImage( @PathVariable final String contentId, @RequestParam(value = "fcImage", defaultValue = "false", required = false) final boolean fcImage) { @@ -153,7 +156,7 @@ public class ContentController extends PaginationController { throw new NotImplementedException(); } - @RequestMapping(value = "/{contentId}/startnewpiround", method = RequestMethod.POST) + @PostMapping("/{contentId}/startnewpiround") public void startPiRound( @PathVariable final String contentId, @RequestParam(value = "time", defaultValue = "0", required = false) final int time) { @@ -165,7 +168,7 @@ public class ContentController extends PaginationController { } } - @RequestMapping(value = "/{contentId}/canceldelayedpiround", method = RequestMethod.POST) + @PostMapping("/{contentId}/canceldelayedpiround") @ApiOperation(value = "Cancel Pi Round on content, identified by provided id", nickname = "cancelPiRound") public void cancelPiRound( @@ -173,7 +176,7 @@ public class ContentController extends PaginationController { timerService.cancelRoundChange(contentId); } - @RequestMapping(value = "/{contentId}/resetpiroundstate", method = RequestMethod.POST) + @PostMapping("/{contentId}/resetpiroundstate") @ApiOperation(value = "Reset Pi Round on content, identified by provided id", nickname = "resetPiContent") public void resetPiContent( @@ -183,7 +186,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Set voting admission on content, identified by provided id", nickname = "setVotingAdmission") - @RequestMapping(value = "/{contentId}/disablevote", method = RequestMethod.POST) + @PostMapping("/{contentId}/disablevote") public void setVotingAdmission( @PathVariable final String contentId, @RequestParam(value = "disable", defaultValue = "false", required = false) final Boolean disableVote) { @@ -198,7 +201,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Set voting admission for all contents", nickname = "setVotingAdmissionForAllContents") - @RequestMapping(value = "/disablevote", method = RequestMethod.POST) + @PostMapping("/disablevote") public void setVotingAdmissionForAllContents( @RequestParam(value = "sessionkey") final String roomShortId, @@ -230,7 +233,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Publish a content, identified by provided id and content in Request Body.", nickname = "publishContent") - @RequestMapping(value = "/{contentId}/publish", method = RequestMethod.POST) + @PostMapping("/{contentId}/publish") public void publishContent( @PathVariable final String contentId, @RequestParam(defaultValue = "true", required = false) final boolean publish, @@ -246,7 +249,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Publish all contents", nickname = "publishAllContents") - @RequestMapping(value = "/publish", method = RequestMethod.POST) + @PostMapping("/publish") public void publishAllContents( @RequestParam(value = "sessionkey") final String roomShortId, @@ -274,7 +277,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Publish statistics from content with provided id", nickname = "publishStatistics") - @RequestMapping(value = "/{contentId}/publishstatistics", method = RequestMethod.POST) + @PostMapping("/{contentId}/publishstatistics") public void publishStatistics( @PathVariable final String contentId, @RequestParam(defaultValue = "true", required = false) final Boolean showStatistics, @@ -291,7 +294,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Publish correct answer from content with provided id", nickname = "publishCorrectAnswer") - @RequestMapping(value = "/{contentId}/publishcorrectanswer", method = RequestMethod.POST) + @PostMapping("/{contentId}/publishcorrectanswer") public void publishCorrectAnswer( @PathVariable final String contentId, @RequestParam(defaultValue = "true", required = false) final boolean showCorrectAnswer, @@ -308,7 +311,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Get contents", nickname = "getContents") - @RequestMapping(value = "/", method = RequestMethod.GET) + @GetMapping("/") @Pagination public List<Content> getContents( @RequestParam(value = "sessionkey") final String roomShortId, @@ -339,7 +342,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Delete contents", nickname = "deleteContents") - @RequestMapping(value = { "/" }, method = RequestMethod.DELETE) + @DeleteMapping("/") public void deleteContents( @RequestParam(value = "sessionkey") final String roomShortId, @RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly, @@ -364,7 +367,7 @@ public class ContentController extends PaginationController { nickname = "getContentCount") @DeprecatedApi @Deprecated - @RequestMapping(value = "/count", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/count", produces = MediaType.TEXT_PLAIN_VALUE) public String getContentCount( @RequestParam(value = "sessionkey") final String roomShortId, @RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly, @@ -387,7 +390,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Delete answers and content", nickname = "deleteAnswersAndContent") - @RequestMapping(value = "/{contentId}", method = RequestMethod.DELETE) + @DeleteMapping("/{contentId}") public void deleteAnswersAndContent( @PathVariable final String contentId) { contentService.delete(contentId); @@ -397,7 +400,7 @@ public class ContentController extends PaginationController { nickname = "getUnAnsweredContentIds") @DeprecatedApi @Deprecated - @RequestMapping(value = "/unanswered", method = RequestMethod.GET) + @GetMapping("/unanswered") public List<String> getUnAnsweredContentIds( @RequestParam(value = "sessionkey") final String roomShortId, @RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly, @@ -437,7 +440,7 @@ public class ContentController extends PaginationController { nickname = "getMyAnswer") @DeprecatedApi @Deprecated - @RequestMapping(value = "/{contentId}/myanswer", method = RequestMethod.GET) + @GetMapping("/{contentId}/myanswer") public Answer getMyAnswer( @PathVariable final String contentId, final HttpServletResponse response) { @@ -471,7 +474,7 @@ public class ContentController extends PaginationController { */ @ApiOperation(value = "Get answers for a content, identified by provided content ID", nickname = "getAnswers") - @RequestMapping(value = "/{contentId}/answer/", method = RequestMethod.GET) + @GetMapping("/{contentId}/answer/") public List<Answer> getAnswers( @PathVariable final String contentId, @RequestParam(value = "piround", required = false) final Integer piRound, @@ -504,7 +507,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Save answer, provided in the Request Body, for a content, identified by provided content ID", nickname = "saveAnswer") - @RequestMapping(value = "/{contentId}/answer/", method = RequestMethod.POST) + @PostMapping("/{contentId}/answer/") public Answer saveAnswer( @PathVariable final String contentId, @RequestBody final Answer answer, @@ -524,7 +527,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Update answer, provided in Request Body, identified by content ID and answer ID", nickname = "updateAnswer") - @RequestMapping(value = "/{contentId}/answer/{answerId}", method = RequestMethod.PUT) + @PutMapping("/{contentId}/answer/{answerId}") public Answer updateAnswer( @PathVariable final String contentId, @PathVariable final String answerId, @@ -542,7 +545,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Get Image, identified by content ID and answer ID", nickname = "getImage") - @RequestMapping(value = "/{contentId}/answer/{answerId}/image", method = RequestMethod.GET) + @GetMapping("/{contentId}/answer/{answerId}/image") public String getImage( @PathVariable final String contentId, @PathVariable final String answerId, @@ -553,7 +556,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Delete answer, identified by content ID and answer ID", nickname = "deleteAnswer") - @RequestMapping(value = "/{contentId}/answer/{answerId}", method = RequestMethod.DELETE) + @DeleteMapping("/{contentId}/answer/{answerId}") public void deleteAnswer( @PathVariable final String contentId, @PathVariable final String answerId, @@ -563,7 +566,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Delete answers from a content, identified by content ID", nickname = "deleteAnswers") - @RequestMapping(value = "/{contentId}/answer/", method = RequestMethod.DELETE) + @DeleteMapping("/{contentId}/answer/") public void deleteAnswers( @PathVariable final String contentId, final HttpServletResponse response) { @@ -572,7 +575,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Delete all answers and contents from a room, identified by room short ID", nickname = "deleteAllContentsAnswers") - @RequestMapping(value = "/answers", method = RequestMethod.DELETE) + @DeleteMapping("/answers") public void deleteAllContentsAnswers( @RequestParam(value = "sessionkey") final String roomShortId, @RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly, @@ -605,14 +608,14 @@ public class ContentController extends PaginationController { nickname = "getAnswerCount") @DeprecatedApi @Deprecated - @RequestMapping(value = "/{contentId}/answercount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/{contentId}/answercount", produces = MediaType.TEXT_PLAIN_VALUE) public String getAnswerCount(@PathVariable final String contentId) { return String.valueOf(answerService.countAnswersByContentIdAndRound(contentId)); } @ApiOperation(value = "Get the amount of answers for a content, identified by the content ID", nickname = "getAllAnswerCount") - @RequestMapping(value = "/{contentId}/allroundanswercount", method = RequestMethod.GET) + @GetMapping("/{contentId}/allroundanswercount") public List<Integer> getAllAnswerCount(@PathVariable final String contentId) { return Arrays.asList( answerService.countAnswersByContentIdAndRound(contentId, 1), @@ -622,15 +625,14 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Get the total amount of answers by a content, identified by the content ID", nickname = "getTotalAnswerCountByContent") - @RequestMapping(value = "/{contentId}/totalanswercount", method = RequestMethod.GET, - produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/{contentId}/totalanswercount", produces = MediaType.TEXT_PLAIN_VALUE) public String getTotalAnswerCountByContent(@PathVariable final String contentId) { return String.valueOf(answerService.countTotalAnswersByContentId(contentId)); } @ApiOperation(value = "Get the amount of answers and abstention answers by a content, identified by the content ID", nickname = "getAnswerAndAbstentionCount") - @RequestMapping(value = "/{contentId}/answerandabstentioncount", method = RequestMethod.GET) + @GetMapping("/{contentId}/answerandabstentioncount") public List<Integer> getAnswerAndAbstentionCount(@PathVariable final String contentId) { return Arrays.asList( answerService.countAnswersByContentIdAndRound(contentId), @@ -640,7 +642,7 @@ public class ContentController extends PaginationController { @ApiOperation(value = "Get all Freetext answers by a content, identified by the content ID", nickname = "getFreetextAnswers") - @RequestMapping(value = "/{contentId}/freetextanswer/", method = RequestMethod.GET) + @GetMapping("/{contentId}/freetextanswer/") @Pagination public List<Answer> getFreetextAnswers(@PathVariable final String contentId) { return answerService.getTextAnswersByContentId(contentId, offset, limit).stream() @@ -651,7 +653,7 @@ public class ContentController extends PaginationController { nickname = "getMyAnswers") @DeprecatedApi @Deprecated - @RequestMapping(value = "/myanswers", method = RequestMethod.GET) + @GetMapping("/myanswers") public List<Answer> getMyAnswers(@RequestParam(value = "sessionkey") final String roomShortId) throws OperationNotSupportedException { return answerService.getMyAnswersByRoomId(roomService.getIdByShortId(roomShortId)).stream() @@ -669,7 +671,7 @@ public class ContentController extends PaginationController { nickname = "getTotalAnswerCount") @DeprecatedApi @Deprecated - @RequestMapping(value = "/answercount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/answercount", produces = MediaType.TEXT_PLAIN_VALUE) public String getTotalAnswerCount( @RequestParam(value = "sessionkey") final String roomShortId, @RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly, 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 1e6f4bd732a0ce8585bfd8fe2484807b21757106..c1ce1b748a9892bc70f0c9036ea204bfd9f0bff6 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/CourseController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/CourseController.java @@ -25,8 +25,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -50,7 +49,7 @@ public class CourseController extends AbstractController { @Autowired private UserService userService; - @RequestMapping(value = "/v2/mycourses", method = RequestMethod.GET) + @GetMapping("/v2/mycourses") public List<Course> myCourses( @ApiParam(value = "sort my courses by name", required = true) @RequestParam(value = "sortby", defaultValue = "name") final String sortby) { 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 982ceae9020803af8c9b5fae81237fbe238c6793..679355fded78a119961637209fdcdf1dfaafb254 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/FeedbackController.java @@ -21,7 +21,9 @@ package de.thm.arsnova.controller.v2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -58,14 +60,14 @@ public class FeedbackController extends AbstractController { @DeprecatedApi @Deprecated - @RequestMapping(value = "/feedback", method = RequestMethod.GET) + @GetMapping("/feedback") public Feedback getFeedback(@PathVariable final String shortId) { return feedbackService.getByRoomId(roomService.getIdByShortId(shortId)); } @DeprecatedApi @Deprecated - @RequestMapping(value = "/myfeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/myfeedback", produces = MediaType.TEXT_PLAIN_VALUE) public String getMyFeedback(@PathVariable final String shortId) { final String roomId = roomService.getIdByShortId(shortId); final Integer value = feedbackService.getByRoomIdAndUserId(roomId, userService.getCurrentUser().getId()); @@ -77,28 +79,28 @@ public class FeedbackController extends AbstractController { @DeprecatedApi @Deprecated - @RequestMapping(value = "/feedbackcount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/feedbackcount", produces = MediaType.TEXT_PLAIN_VALUE) public String getFeedbackCount(@PathVariable final String shortId) { return String.valueOf(feedbackService.countFeedbackByRoomId(roomService.getIdByShortId(shortId))); } @DeprecatedApi @Deprecated - @RequestMapping(value = "/roundedaveragefeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/roundedaveragefeedback", produces = MediaType.TEXT_PLAIN_VALUE) public String getAverageFeedbackRounded(@PathVariable final String shortId) { return String.valueOf(feedbackService.calculateRoundedAverageFeedback(roomService.getIdByShortId(shortId))); } @DeprecatedApi @Deprecated - @RequestMapping(value = "/averagefeedback", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/averagefeedback", produces = MediaType.TEXT_PLAIN_VALUE) public String getAverageFeedback(@PathVariable final String shortId) { return String.valueOf(feedbackService.calculateAverageFeedback(roomService.getIdByShortId(shortId))); } @DeprecatedApi @Deprecated - @RequestMapping(value = "/feedback", method = RequestMethod.POST) + @PostMapping("/feedback") @ResponseStatus(HttpStatus.CREATED) public Feedback postFeedback( @PathVariable final String shortId, diff --git a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java index c4da4c80c117e654a172d9cc173bf64516eb0afe..8e10a70723b87ceef9f27bae8e637a76d637f4ef 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java @@ -20,7 +20,10 @@ package de.thm.arsnova.controller.v2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -46,13 +49,13 @@ public class LegacyController extends AbstractController { /* specific routes */ @DeprecatedApi - @RequestMapping(value = "/session/mysessions", method = RequestMethod.GET) + @GetMapping("/session/mysessions") public String redirectSessionMy() { return "forward:/v2/session/?ownedonly=true"; } @DeprecatedApi - @RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET) + @GetMapping("/session/visitedsessions") public String redirectSessionVisited() { return "forward:/v2/session/?visitedonly=true"; } @@ -64,31 +67,31 @@ public class LegacyController extends AbstractController { } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/skillquestions", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/skillquestions") public String redirectQuestionByLecturerList(@PathVariable final String shortId) { return String.format("forward:/v2/lecturerquestion/?sessionkey=%s", shortId); } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/skillquestioncount", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/skillquestioncount") public String redirectQuestionByLecturerCount(@PathVariable final String shortId) { return String.format("forward:/v2/lecturerquestion/count?sessionkey=%s", shortId); } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/answercount", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/answercount") public String redirectQuestionByLecturerAnswerCount(@PathVariable final String shortId) { return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", shortId); } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/unanswered", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/unanswered") public String redirectQuestionByLecturerUnnsweredCount(@PathVariable final String shortId) { return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", shortId); } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/myanswers", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/myanswers") public String redirectQuestionByLecturerMyAnswers(@PathVariable final String shortId) { return String.format("forward:/v2/lecturerquestion/myanswers?sessionkey=%s", shortId); } @@ -100,24 +103,36 @@ public class LegacyController extends AbstractController { } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/interposed", method = RequestMethod.DELETE) + @DeleteMapping("/session/{shortId}/interposed") @ResponseBody public void deleteAllInterposedQuestions(@PathVariable final String shortId) { commentService.deleteByRoomId(shortId); } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/interposedcount", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/interposedcount") public String redirectQuestionByAudienceCount(@PathVariable final String shortId) { return String.format("forward:/v2/audiencequestion/count?sessionkey=%s", shortId); } @DeprecatedApi - @RequestMapping(value = "/session/{shortId}/interposedreadingcount", method = RequestMethod.GET) + @GetMapping("/session/{shortId}/interposedreadingcount") public String redirectQuestionByAudienceReadCount(@PathVariable final String shortId) { return String.format("forward:/v2/audiencequestion/readcount?sessionkey=%s", shortId); } + @DeprecatedApi + @GetMapping(value = { "/whoami", "/whoami.json" }) + public String redirectWhoami() { + return "forward:/v2/auth/whoami"; + } + + @DeprecatedApi + @PostMapping(value = "/doLogin") + public String redirectLogin() { + return "forward:/v2/auth/login"; + } + /* generalized routes */ @DeprecatedApi @@ -155,16 +170,4 @@ public class LegacyController extends AbstractController { @PathVariable final String arg2) { return String.format("forward:/v2/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId); } - - @DeprecatedApi - @RequestMapping(value = { "/whoami", "/whoami.json" }) - public String redirectWhoami() { - return "forward:/v2/auth/whoami"; - } - - @DeprecatedApi - @RequestMapping(value = "/doLogin") - public String redirectLogin() { - return "forward:/v2/auth/login"; - } } 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 8ccdcb554e21604df37c8f1642b6b7eb2170dfb4..6d752d72132e6f48a4596121f4f2d3db03d35cb7 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/MotdController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/MotdController.java @@ -30,7 +30,11 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -71,7 +75,7 @@ public class MotdController extends AbstractController { @ApiOperation(value = "get messages. if adminview=false," + " only messages with startdate<clientdate<enddate are returned") - @RequestMapping(value = "/", method = RequestMethod.GET) + @GetMapping("/") @ApiResponses(value = { @ApiResponse(code = 204, message = HTML_STATUS_204), @ApiResponse(code = 501, message = HTML_STATUS_501) @@ -116,7 +120,7 @@ public class MotdController extends AbstractController { @ApiResponse(code = 201, message = HTML_STATUS_201), @ApiResponse(code = 503, message = HTML_STATUS_503) }) - @RequestMapping(value = "/", method = RequestMethod.POST) + @PostMapping("/") @ResponseStatus(HttpStatus.CREATED) public Motd postNewMotd( @ApiParam(value = "current motd", required = true) @RequestBody final Motd motd, @@ -133,7 +137,7 @@ public class MotdController extends AbstractController { } @ApiOperation(value = "update a message of the day", nickname = "updateMotd") - @RequestMapping(value = "/{motdId}", method = RequestMethod.PUT) + @PutMapping("/{motdId}") public Motd updateMotd( @ApiParam(value = "motdkey from current motd", required = true) @PathVariable final String motdId, @ApiParam(value = "current motd", required = true) @RequestBody final Motd motd) { @@ -149,7 +153,7 @@ public class MotdController extends AbstractController { } @ApiOperation(value = "deletes a message of the day", nickname = "deleteMotd") - @RequestMapping(value = "/{motdId}", method = RequestMethod.DELETE) + @DeleteMapping("/{motdId}") public void deleteMotd( @ApiParam(value = "Motd-key from the message that shall be deleted", required = true) @PathVariable @@ -158,7 +162,7 @@ public class MotdController extends AbstractController { motdService.delete(motd); } - @RequestMapping(value = "/userlist", method = RequestMethod.GET) + @GetMapping("/userlist") public MotdList getAcknowledgedIds(@AuthenticationPrincipal final User user, @RequestParam final String username) { if (user == null || !user.getUsername().equals(username)) { throw new ForbiddenException(); @@ -168,7 +172,7 @@ public class MotdController extends AbstractController { return toV2Migrator.migrateMotdList(profile); } - @RequestMapping(value = "/userlist", method = RequestMethod.PUT) + @PutMapping("/userlist") public void putAcknowledgedIds(@AuthenticationPrincipal final User user, @RequestBody final MotdList motdList) { if (user == null || !user.getUsername().equals(motdList.getUsername())) { throw new ForbiddenException(); 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 aa674f9df311796ed6272845476533d25c0181ec..2a61cfcb81738a2fec9808c6c0f98b119d50a5c2 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/RoomController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/RoomController.java @@ -33,7 +33,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -82,7 +86,7 @@ public class RoomController extends PaginationController { nickname = "joinRoom") @DeprecatedApi @Deprecated - @RequestMapping(value = "/{shortId}", method = RequestMethod.GET) + @GetMapping("/{shortId}") public Room joinRoom( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId, @@ -98,7 +102,7 @@ public class RoomController extends PaginationController { @ApiOperation(value = "deletes a Room", nickname = "deleteRoom") - @RequestMapping(value = "/{shortId}", method = RequestMethod.DELETE) + @DeleteMapping("/{shortId}") public void deleteRoom( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable @@ -111,8 +115,7 @@ public class RoomController extends PaginationController { nickname = "countActiveUsers") @DeprecatedApi @Deprecated - @RequestMapping(value = "/{shortId}/activeusercount", method = RequestMethod.GET, - produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/{shortId}/activeusercount", produces = MediaType.TEXT_PLAIN_VALUE) public String countActiveUsers( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId) { return String.valueOf(roomService.activeUsers(roomService.getIdByShortId(shortId))); @@ -124,7 +127,7 @@ public class RoomController extends PaginationController { @ApiResponse(code = 201, message = HTML_STATUS_201), @ApiResponse(code = 503, message = HTML_STATUS_503) }) - @RequestMapping(value = "/", method = RequestMethod.POST) + @PostMapping("/") @ResponseStatus(HttpStatus.CREATED) public Room postNewRoom( @ApiParam(value = "current Room", required = true) @@ -151,7 +154,7 @@ public class RoomController extends PaginationController { @ApiOperation(value = "updates a Room", nickname = "postNewRoom") - @RequestMapping(value = "/{shortId}", method = RequestMethod.PUT) + @PutMapping("/{shortId}") public Room updateRoom( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId, @ApiParam(value = "current room", required = true) @RequestBody final Room room) { @@ -172,7 +175,7 @@ public class RoomController extends PaginationController { @ApiResponse(code = 204, message = HTML_STATUS_204), @ApiResponse(code = 501, message = HTML_STATUS_501) }) - @RequestMapping(value = "/", method = RequestMethod.GET) + @GetMapping("/") @Pagination public List<Room> getRooms( @ApiParam(value = "ownedOnly", required = true) @@ -242,7 +245,7 @@ public class RoomController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 204, message = HTML_STATUS_204) }) - @RequestMapping(value = "/", method = RequestMethod.GET, params = "statusonly=true") + @GetMapping(value = "/", params = "statusonly=true") @Pagination public List<RoomInfo> getMyRooms( @ApiParam(value = "visitedOnly", required = true) @@ -278,7 +281,7 @@ public class RoomController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 204, message = HTML_STATUS_204) }) - @RequestMapping(value = "/publicpool", method = RequestMethod.GET, params = "statusonly=true") + @GetMapping(value = "/publicpool", params = "statusonly=true") public List<RoomInfo> getMyPublicPoolRooms( final HttpServletResponse response) { final List<de.thm.arsnova.model.Room> rooms = roomService.getMyPublicPoolRoomsInfo(); @@ -296,7 +299,7 @@ public class RoomController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 204, message = HTML_STATUS_204) }) - @RequestMapping(value = "/publicpool", method = RequestMethod.GET) + @GetMapping("/publicpool") public List<Room> getPublicPoolRooms( final HttpServletResponse response) { final List<de.thm.arsnova.model.Room> rooms = roomService.getPublicPoolRoomsInfo(); @@ -311,7 +314,7 @@ public class RoomController extends PaginationController { @ApiOperation(value = "imports a Room", nickname = "importRoom") - @RequestMapping(value = "/import", method = RequestMethod.POST) + @PostMapping("/import") public Room importRoom( @ApiParam(value = "current Room", required = true) @RequestBody final ImportExportContainer room, final HttpServletResponse response) { @@ -319,7 +322,7 @@ public class RoomController extends PaginationController { } @ApiOperation(value = "export Rooms", nickname = "exportRoom") - @RequestMapping(value = "/export", method = RequestMethod.GET) + @GetMapping("/export") public List<ImportExportContainer> getExport( @ApiParam(value = "Room-Key", required = true) @RequestParam(value = "sessionkey", defaultValue = "") @@ -346,7 +349,7 @@ public class RoomController extends PaginationController { } @ApiOperation(value = "copy a Rooms to the public pool if enabled") - @RequestMapping(value = "/{shortId}/copytopublicpool", method = RequestMethod.POST) + @PostMapping("/{shortId}/copytopublicpool") public Room copyToPublicPool( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable @@ -364,7 +367,7 @@ public class RoomController extends PaginationController { } @ApiOperation(value = "copy a Room from the public pool if enabled") - @RequestMapping(value = "/{shortId}/copyfrompublicpool", method = RequestMethod.POST) + @PostMapping("/{shortId}/copyfrompublicpool") public Room copyFromPublicPool( @ApiParam(value = "Short ID of the Room", required = true) @PathVariable final String shortId, @ApiParam(value = "custom attributes for Room", required = true) @RequestBody final Room sessionAttributes) { @@ -376,7 +379,7 @@ public class RoomController extends PaginationController { @ApiResponses(value = { @ApiResponse(code = 404, message = HTML_STATUS_404) }) - @RequestMapping(value = "/{shortId}/lock", method = RequestMethod.POST) + @PostMapping("/{shortId}/lock") public Room lockRoom( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId, @ApiParam(value = "lock", required = true) @RequestParam(required = false) final Boolean lock, @@ -390,7 +393,7 @@ public class RoomController extends PaginationController { @ApiOperation(value = "retrieves a value for the score", nickname = "getLearningProgress") - @RequestMapping(value = "/{shortId}/learningprogress", method = RequestMethod.GET) + @GetMapping("/{shortId}/learningprogress") public ScoreStatistics getLearningProgress( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable @@ -407,7 +410,7 @@ public class RoomController extends PaginationController { @ApiOperation(value = "retrieves a value for the learning progress for the current user", nickname = "getMyLearningProgress") - @RequestMapping(value = "/{shortId}/mylearningprogress", method = RequestMethod.GET) + @GetMapping("/{shortId}/mylearningprogress") public ScoreStatistics getMyLearningProgress( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId, @RequestParam(value = "type", defaultValue = "questions") final String type, @@ -418,7 +421,7 @@ public class RoomController extends PaginationController { @ApiOperation(value = "retrieves all Room features", nickname = "getRoomFeatures") - @RequestMapping(value = "/{shortId}/features", method = RequestMethod.GET) + @GetMapping("/{shortId}/features") public RoomFeature getRoomFeatures( @ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId, final HttpServletResponse response) { @@ -426,7 +429,7 @@ public class RoomController extends PaginationController { return toV2Migrator.migrate(room.getSettings()); } - @RequestMapping(value = "/{shortId}/features", method = RequestMethod.PUT) + @PutMapping("/{shortId}/features") @ApiOperation(value = "change all Room features", nickname = "changeRoomFeatures") public RoomFeature changeRoomFeatures( @@ -440,8 +443,7 @@ public class RoomController extends PaginationController { return toV2Migrator.migrate(room.getSettings()); } - @RequestMapping(value = "/{shortId}/lockfeedbackinput", method = RequestMethod.POST, - produces = MediaType.TEXT_PLAIN_VALUE) + @PostMapping(value = "/{shortId}/lockfeedbackinput", produces = MediaType.TEXT_PLAIN_VALUE) @ApiOperation(value = "locks input of user live feedback", nickname = "lockFeedbackInput") public String lockFeedbackInput( @@ -451,8 +453,7 @@ public class RoomController extends PaginationController { return String.valueOf(roomService.lockFeedbackInput(roomService.getIdByShortId(shortId), lock)); } - @RequestMapping(value = "/{shortId}/flipflashcards", method = RequestMethod.POST, - produces = MediaType.TEXT_PLAIN_VALUE) + @PostMapping(value = "/{shortId}/flipflashcards", produces = MediaType.TEXT_PLAIN_VALUE) @ApiOperation(value = "flip all flashcards in Room", nickname = "lockFeedbackInput") public String flipFlashcards( @@ -524,27 +525,4 @@ public class RoomController extends PaginationController { return String.format("forward:/audiencequestion/%s/?sessionkey=%s", arg1, shortId); } - - @RequestMapping(value = "/{shortId}/audiencequestion/{arg1}/{arg2}") - public String redirectAudienceQuestionWithTwoArguments( - @PathVariable final String shortId, - @PathVariable final String arg1, - @PathVariable final String arg2, - final HttpServletResponse response) { - response.addHeader(X_FORWARDED, "1"); - - return String.format("forward:/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId); - } - - @RequestMapping(value = "/{shortId}/audiencequestion/{arg1}/{arg2}/{arg3}") - public String redirectAudienceQuestionWithThreeArguments( - @PathVariable final String shortId, - @PathVariable final String arg1, - @PathVariable final String arg2, - @PathVariable final String arg3, - final HttpServletResponse response) { - response.addHeader(X_FORWARDED, "1"); - - return String.format("forward:/audiencequestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, shortId); - } } 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 d3ed9a73702899b77586a0f7f7aa1277ead2e95c..7ea9f917f065c5f429f487d3f680f2b2fbe428ca 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/SocketController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/SocketController.java @@ -32,6 +32,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -65,7 +67,7 @@ public class SocketController extends AbstractController { @ApiResponse(code = 400, message = HTML_STATUS_400), @ApiResponse(code = 403, message = HTML_STATUS_403) }) - @RequestMapping(method = RequestMethod.POST, value = "/assign") + @PostMapping("/assign") public void authorize( @ApiParam(value = "sessionMap", required = true) @RequestBody final Map<String, String> sessionMap, @ApiParam(value = "response", required = true) final HttpServletResponse response) { @@ -87,7 +89,7 @@ public class SocketController extends AbstractController { @ApiOperation(value = "retrieves a socket url", nickname = "getSocketUrl") - @RequestMapping(value = "/url", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/url", produces = MediaType.TEXT_PLAIN_VALUE) public String getSocketUrl(final HttpServletRequest request) { return (server.isUseSsl() ? "https://" : "http://") + request.getServerName() + ":" + server.getPortNumber(); } diff --git a/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java b/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java index 8fea0e16a855b62a284323b33de3fe127159fcca..8f26c7e7bcf8cdda61378c483b42aaa5badddcd0 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/StatisticsController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @@ -45,7 +46,7 @@ public class StatisticsController extends AbstractController { @ApiOperation(value = "Retrieves global statistics", nickname = "getStatistics") - @RequestMapping(method = RequestMethod.GET, value = "/") + @GetMapping("/") @CacheControl(maxAge = 60, policy = CacheControl.Policy.PUBLIC) public Statistics getStatistics() { return statisticsService.getStatistics(); @@ -55,7 +56,7 @@ public class StatisticsController extends AbstractController { nickname = "countActiveUsers") @DeprecatedApi @Deprecated - @RequestMapping(method = RequestMethod.GET, value = "/activeusercount", produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/activeusercount", produces = MediaType.TEXT_PLAIN_VALUE) public String countActiveUsers() { return String.valueOf(statisticsService.getStatistics().getActiveUsers()); } @@ -64,7 +65,7 @@ public class StatisticsController extends AbstractController { nickname = "countLoggedInUsers") @DeprecatedApi @Deprecated - @RequestMapping(method = RequestMethod.GET, value = "/loggedinusercount", produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/loggedinusercount", produces = MediaType.TEXT_PLAIN_VALUE) public String countLoggedInUsers() { return String.valueOf(statisticsService.getStatistics().getLoggedinUsers()); } @@ -73,7 +74,7 @@ public class StatisticsController extends AbstractController { nickname = "countSessions") @DeprecatedApi @Deprecated - @RequestMapping(method = RequestMethod.GET, value = "/sessioncount", produces = MediaType.TEXT_PLAIN_VALUE) + @GetMapping(value = "/sessioncount", produces = MediaType.TEXT_PLAIN_VALUE) public String countSessions() { return String.valueOf(statisticsService.getStatistics().getOpenSessions() + statisticsService.getStatistics().getClosedSessions()); diff --git a/src/main/java/de/thm/arsnova/controller/v2/UserController.java b/src/main/java/de/thm/arsnova/controller/v2/UserController.java index 0604ea5a98d47a8c07d7e9edc5377bc86fc7aa28..aec8a783b77155788c050abaf18b72c4194ba75a 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/UserController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/UserController.java @@ -23,7 +23,9 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -44,7 +46,7 @@ public class UserController extends AbstractController { @Autowired private UserService userService; - @RequestMapping(value = "/register", method = RequestMethod.POST) + @PostMapping(value = "/register") public void register(@RequestParam final String username, @RequestParam final String password, final HttpServletRequest request, final HttpServletResponse response) { @@ -56,8 +58,7 @@ public class UserController extends AbstractController { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); } - @RequestMapping(value = "/{username}/activate", method = { RequestMethod.POST, - RequestMethod.GET }) + @PostMapping(value = "/{username}/activate") public void activate( @PathVariable final String username, @RequestParam final String key, final HttpServletRequest request, @@ -73,7 +74,7 @@ public class UserController extends AbstractController { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); } - @RequestMapping(value = "/{username}/", method = RequestMethod.DELETE) + @DeleteMapping(value = "/{username}/") public void activate( @PathVariable final String username, final HttpServletRequest request, @@ -83,7 +84,7 @@ public class UserController extends AbstractController { } } - @RequestMapping(value = "/{username}/resetpassword", method = RequestMethod.POST) + @PostMapping(value = "/{username}/resetpassword") public void resetPassword( @PathVariable final String username, @RequestParam(required = false) final String key, diff --git a/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java b/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java index ca93646db03b9811c48bee1c8deb2a502ed47fb5..04f0aac36398df436779ddf7c1a966a254ad227b 100644 --- a/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java +++ b/src/main/java/de/thm/arsnova/controller/v2/WelcomeController.java @@ -1,12 +1,13 @@ package de.thm.arsnova.controller.v2; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @Controller("v2WelcomeController") @RequestMapping("/v2") public class WelcomeController { - @RequestMapping(value = "/") + @GetMapping(value = "/") public String forwardHome() { return "forward:/"; } diff --git a/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java b/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java index 6b2a34c96b84ae7626e955b1af4df9021ea9cc60..804dc239f8a0c097fc7be88d582ac3fc30b1070e 100644 --- a/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java +++ b/src/main/java/de/thm/arsnova/event/StateEventDispatcher.java @@ -37,21 +37,25 @@ import de.thm.arsnova.model.Room; */ @Component public class StateEventDispatcher implements ApplicationEventPublisherAware { + private static final String STATE_PROPERTY = "state"; + private static final String SETTINGS_PROPERTY = "settings"; + private static final String CLOSED_PROPERTY = "closed"; + private ApplicationEventPublisher eventPublisher; @EventListener public void dispatchRoomStateEvent(final AfterFullUpdateEvent<Room> event) { final Room newRoom = event.getEntity(); final Room oldRoom = event.getOldEntity(); - publishEventIfPropertyChanged(newRoom, oldRoom, Room::isClosed, "closed"); - publishEventIfPropertyChanged(newRoom, oldRoom, Room::getSettings, "settings"); + publishEventIfPropertyChanged(newRoom, oldRoom, Room::isClosed, CLOSED_PROPERTY); + publishEventIfPropertyChanged(newRoom, oldRoom, Room::getSettings, SETTINGS_PROPERTY); } @EventListener public void dispatchRoomStateEvent(final AfterPatchEvent<Room> event) { - publishEventIfPropertyChanged(event, Function.identity(), "closed", "closed"); - publishEventIfPropertyChanged(event, Function.identity(), "settings", "settings"); - publishEventIfPropertyChanged(event, Room::getSettings, null, "settings"); + publishEventIfPropertyChanged(event, Function.identity(), CLOSED_PROPERTY, CLOSED_PROPERTY); + publishEventIfPropertyChanged(event, Function.identity(), SETTINGS_PROPERTY, SETTINGS_PROPERTY); + publishEventIfPropertyChanged(event, Room::getSettings, null, SETTINGS_PROPERTY); } @EventListener @@ -60,13 +64,13 @@ public class StateEventDispatcher implements ApplicationEventPublisherAware { final Content oldContent = event.getOldEntity(); final Function<Content, Content.State> f = Content::getState; f.apply(newContent); - publishEventIfPropertyChanged(newContent, oldContent, Content::getState, "state"); + publishEventIfPropertyChanged(newContent, oldContent, Content::getState, STATE_PROPERTY); } @EventListener public void dispatchContentStateEvent(final AfterPatchEvent<Content> event) { - publishEventIfPropertyChanged(event, Function.identity(), "state", "state"); - publishEventIfPropertyChanged(event, Content::getState, null, "state"); + publishEventIfPropertyChanged(event, Function.identity(), STATE_PROPERTY, STATE_PROPERTY); + publishEventIfPropertyChanged(event, Content::getState, null, STATE_PROPERTY); } private <E extends Entity, T extends Object> void publishEventIfPropertyChanged( diff --git a/src/main/java/de/thm/arsnova/model/LogEntry.java b/src/main/java/de/thm/arsnova/model/LogEntry.java index 1aaa62bb80b8aca2c2bfb92a4bfe1c053f61925b..8b4e3e9dfd0123dc03b3e01455db5f6637186772 100644 --- a/src/main/java/de/thm/arsnova/model/LogEntry.java +++ b/src/main/java/de/thm/arsnova/model/LogEntry.java @@ -20,7 +20,6 @@ package de.thm.arsnova.model; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonView; -import java.util.Date; import java.util.Map; import java.util.Objects; @@ -36,10 +35,6 @@ public class LogEntry extends Entity { FATAL } - private String id; - private String rev; - private Date creationTimestamp; - private Date updateTimestamp; private String event; private int level; private Map<String, Object> payload; @@ -51,50 +46,6 @@ public class LogEntry extends Entity { this.payload = payload; } - @JsonView(View.Persistence.class) - public String getId() { - return id; - } - - @JsonView(View.Persistence.class) - public void setId(final String id) { - this.id = id; - } - - @JsonView(View.Persistence.class) - public String getRevision() { - return rev; - } - - @JsonView(View.Persistence.class) - public void setRevision(final String rev) { - this.rev = rev; - } - - @Override - @JsonView(View.Persistence.class) - public Date getCreationTimestamp() { - return creationTimestamp; - } - - @Override - @JsonView(View.Persistence.class) - public void setCreationTimestamp(final Date creationTimestamp) { - this.creationTimestamp = creationTimestamp; - } - - @Override - @JsonView(View.Persistence.class) - public Date getUpdateTimestamp() { - return updateTimestamp; - } - - @Override - @JsonView(View.Persistence.class) - public void setUpdateTimestamp(final Date updateTimestamp) { - this.updateTimestamp = updateTimestamp; - } - @JsonView(View.Persistence.class) public String getEvent() { return event; diff --git a/src/main/java/de/thm/arsnova/model/ServiceDescription.java b/src/main/java/de/thm/arsnova/model/ServiceDescription.java index b399d1657153b46b8d2e38ce0a8d83dec98a83f6..d31ebf46cbd27dd40ee8154087fd8631e5539f3e 100644 --- a/src/main/java/de/thm/arsnova/model/ServiceDescription.java +++ b/src/main/java/de/thm/arsnova/model/ServiceDescription.java @@ -113,9 +113,9 @@ public class ServiceDescription { return allowedRoles; } - public void setAllowedRoles(final Set<AuthenticationProviderProperties.Provider.Role> roles) { + public void setAllowedRoles(final Set<AuthenticationProviderProperties.Provider.Role> allowedRoles) { this.allowedRoles = allowedRoles; - this.allowedRoleStrings = roles.stream().map(r -> { + this.allowedRoleStrings = allowedRoles.stream().map(r -> { switch (r) { case MODERATOR: return "speaker"; diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java index 573def0089110ef5c09c7bb29fd4fc78794a7e9b..d91e4574794b59554251197e74045f4a2e9f4324 100644 --- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java +++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java @@ -49,6 +49,11 @@ import de.thm.arsnova.persistence.RoomRepository; */ @Component public class ApplicationPermissionEvaluator implements PermissionEvaluator { + public static final String READ_PERMISSION = "read"; + public static final String CREATE_PERMISSION = "create"; + public static final String UPDATE_PERMISSION = "update"; + public static final String DELETE_PERMISSION = "delete"; + public static final String OWNER_PERMISSION = "owner"; private static final Logger logger = LoggerFactory.getLogger(ApplicationPermissionEvaluator.class); private List<String> adminAccounts; @@ -146,16 +151,16 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { final UserProfile targetUserProfile, final String permission) { switch (permission) { - case "read": + case READ_PERMISSION: /* While the profile is readable for all authenticated users, it * only contains a limited amount of properties for the default * view. */ return true; - case "create": + case CREATE_PERMISSION: return true; - case "owner": - case "update": - case "delete": + case OWNER_PERMISSION: + case UPDATE_PERMISSION: + case DELETE_PERMISSION: return userId.equals(targetUserProfile.getId()); default: return false; @@ -167,15 +172,15 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { final Room targetRoom, final String permission) { switch (permission) { - case "read": + case READ_PERMISSION: return !targetRoom.isClosed() || hasUserIdRoomModeratingPermission(targetRoom, userId); - case "create": + case CREATE_PERMISSION: return !userId.isEmpty(); - case "update": + case UPDATE_PERMISSION: return targetRoom.getOwnerId().equals(userId) || hasUserIdRoomModeratorRole(targetRoom, userId, Room.Moderator.Role.EDITING_MODERATOR); - case "owner": - case "delete": + case OWNER_PERMISSION: + case DELETE_PERMISSION: return targetRoom.getOwnerId().equals(userId); default: return false; @@ -192,12 +197,12 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { } switch (permission) { - case "read": + case READ_PERMISSION: return !room.isClosed() || hasUserIdRoomModeratingPermission(room, userId); - case "create": - case "update": - case "delete": - case "owner": + case CREATE_PERMISSION: + case UPDATE_PERMISSION: + case DELETE_PERMISSION: + case OWNER_PERMISSION: /* TODO: Remove owner permission for content. Use create/update/delete instead. */ return room.getOwnerId().equals(userId) || hasUserIdRoomModeratorRole(room, userId, Room.Moderator.Role.EDITING_MODERATOR); @@ -216,20 +221,20 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { } final Room room; switch (permission) { - case "read": + case READ_PERMISSION: if (targetAnswer.getCreatorId().equals(userId) || content.getState().isResponsesVisible()) { return true; } room = roomRepository.findOne(targetAnswer.getRoomId()); return room != null && hasUserIdRoomModeratingPermission(room, userId); - case "create": + case CREATE_PERMISSION: return content.getState().isResponsesEnabled(); - case "owner": + case OWNER_PERMISSION: return targetAnswer.getCreatorId().equals(userId); - case "update": + case UPDATE_PERMISSION: /* TODO */ return false; - case "delete": + case DELETE_PERMISSION: room = roomRepository.findOne(targetAnswer.getRoomId()); return room != null && hasUserIdRoomModeratingPermission(room, userId); default: @@ -242,13 +247,13 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { final Comment targetComment, final String permission) { switch (permission) { - case "create": + case CREATE_PERMISSION: return !userId.isEmpty() && !roomRepository.findOne(targetComment.getRoomId()).isClosed(); - case "owner": - case "update": + case OWNER_PERMISSION: + case UPDATE_PERMISSION: return targetComment.getCreatorId() != null && targetComment.getCreatorId().equals(userId); - case "read": - case "delete": + case READ_PERMISSION: + case DELETE_PERMISSION: if (targetComment.getCreatorId() != null && targetComment.getCreatorId().equals(userId)) { return true; } @@ -268,9 +273,9 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { final String permission) { final Room room; switch (permission) { - case "create": - case "update": - case "delete": + case CREATE_PERMISSION: + case UPDATE_PERMISSION: + case DELETE_PERMISSION: if (userId.isEmpty() || targetMotd.getRoomId() == null || targetMotd.getAudience() != Motd.Audience.ROOM) { return false; } @@ -281,7 +286,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { return userId.equals(room.getOwnerId()) || hasUserIdRoomModeratorRole(room, userId, Room.Moderator.Role.EDITING_MODERATOR); - case "read": + case READ_PERMISSION: if (targetMotd.getAudience() != Motd.Audience.ROOM) { return true; } @@ -334,8 +339,4 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator { return auth instanceof RunAsUserToken && auth.getAuthorities().stream().anyMatch(ga -> ga.getAuthority().equals("ROLE_RUN_AS_SYSTEM")); } - - private boolean isWebsocketAccess(final Authentication auth) { - return auth instanceof AnonymousAuthenticationToken && auth.getAuthorities().contains("ROLE_WEBSOCKET_ACCESS"); - } } diff --git a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java index 731fba023f508c01f92999f52c53f8eca0ee64eb..ac3d03a279f69b2b3247dafc61fa38dca0f85fe6 100644 --- a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java @@ -130,7 +130,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService * @param entity The entity to be created */ protected void prepareCreate(final T entity) { - + /* Implementation provided by subclasses. */ } /** @@ -139,7 +139,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService * @param entity The entity which has been created */ protected void finalizeCreate(final T entity) { - + /* Implementation provided by subclasses. */ } public T update(final T entity) { @@ -169,7 +169,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService * @param entity The entity to be updated */ protected void prepareUpdate(final T entity) { - + /* Implementation provided by subclasses. */ } /** @@ -178,7 +178,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService * @param entity The entity which has been updated */ protected void finalizeUpdate(final T entity) { - + /* Implementation provided by subclasses. */ } @Override @@ -272,7 +272,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService * @param entity The entity to be deleted */ protected void prepareDelete(final T entity) { - + /* Implementation provided by subclasses. */ } /** @@ -282,7 +282,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService * @param entity The entity to be modified */ protected void modifyRetrieved(final T entity) { - + /* Implementation provided by subclasses. */ } protected void validate(final T entity) { diff --git a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java index 9c399600660ef1fa1f39fe7f77bde2bd2878a4e0..10802621170b17221dd445f9933941877c717dd9 100644 --- a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java +++ b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java @@ -34,6 +34,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; +import org.apache.commons.lang.CharEncoding; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -614,7 +615,7 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple private void sendEmail(final UserProfile userProfile, final String subject, final String body) { final MimeMessage msg = mailSender.createMimeMessage(); - final MimeMessageHelper helper = new MimeMessageHelper(msg, "UTF-8"); + final MimeMessageHelper helper = new MimeMessageHelper(msg, CharEncoding.UTF_8); try { helper.setFrom(mailSenderName + "<" + mailSenderAddress + ">"); helper.setTo(userProfile.getLoginId()); diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java index d74a42f50d02de163b99d8ee7ec7dd08b7242949..ace674a81c2bc1a46ec13bcda4511991861e0436 100644 --- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java +++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java @@ -79,6 +79,32 @@ import de.thm.arsnova.websocket.message.Room; */ @Component public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { + private static final String ACTIVE_USER_COUNT_DATA_EVENTNAME = "activeUserCountData"; + private static final String SET_ROOM_ACTIVE_EVENTNAME = "setSessionActive"; + private static final String FEATURE_CHANGE_EVENTNAME = "featureChange"; + private static final String COMMENT_AVAILABLE_EVENTNAME = "audQuestionAvail"; + private static final String CONTENT_AVAILABLE_SINGLE_EVENTNAME = "lecQuestionAvail"; + private static final String CONTENT_AVAILABLE_LIST_EVENTNAME = "lecturerQuestionAvailable"; + private static final String CONTENT_LOCKED_EVENTNAME = "lecturerQuestionLocked"; + private static final String UNANSWERED_LECTURE_CONTENTS_EVENTNAME = "unansweredLecturerQuestions"; + private static final String UNANSWERED_PREPARATION_CONTENTS_EVENTNAME = "unansweredPreparationQuestions"; + private static final String ANSWERS_TO_CONTENT_AVAILABLE_EVENTNAME = "answersToLecQuestionAvail"; + private static final String COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME = "countLectureQuestionAnswers"; + private static final String COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME = "countPreparationQuestionAnswers"; + private static final String COUNT_CONTENT_ANSWERS_BY_CONTENT_ID_EVENTNAME = "countQuestionAnswersByQuestionId"; + private static final String COUNT_FLASHCARDS_EVENTNAME = "countFlashcards"; + private static final String FLIP_FLASHCARDS_EVENTNAME = "flipFlashcards"; + private static final String FEEDBACK_DATA_EVENTNAME = "feedbackData"; + private static final String FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME = "feedbackDataRoundedAverage"; + private static final String FEEDBACK_RESET_EVENTNAME = "feedbackReset"; + private static final String LOCK_FEEDBACK_EVENTNAME = "lockFeedback"; + private static final String START_DELAYED_ROUND_EVENTNAME = "startDelayedPiRound"; + private static final String END_ROUND_EVENTNAME = "endPiRound"; + private static final String CANCEL_ROUND_EVENTNAME = "cancelPiRound"; + private static final String RESET_ROUND_EVENTNAME = "resetPiRound"; + private static final String LOCK_VOTE_EVENTNAME = "lockVote"; + private static final String UNLOCK_VOTE_EVENTNAME = "unlockVote"; + private static final String SCORE_CHANGE_EVENTNAME = "learningProgressChange"; @Autowired private FeedbackService feedbackService; @@ -252,14 +278,6 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { } }); - server.addConnectListener(new ConnectListener() { - @Override - @Timed("onConnect") - public void onConnect(final SocketIOClient client) { - - } - }); - server.addDisconnectListener(new DisconnectListener() { @Override @Timed("onDisconnect") @@ -349,7 +367,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { for (final de.thm.arsnova.model.Room room : rooms) { roomShortIds.add(room.getShortId()); } - this.sendToUser(userId, "feedbackReset", roomShortIds); + this.sendToUser(userId, FEEDBACK_RESET_EVENTNAME, roomShortIds); } private List<UUID> findConnectionIdForUserId(final String userId) { @@ -384,42 +402,42 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { final de.thm.arsnova.model.Room room = roomService.getInternal(roomId, userId); final de.thm.arsnova.model.Room.Settings settings = room.getSettings(); - client.sendEvent("unansweredLecturerQuestions", + client.sendEvent(UNANSWERED_LECTURE_CONTENTS_EVENTNAME, contentService.getUnAnsweredLectureContentIds(roomId, userId)); - client.sendEvent("unansweredPreparationQuestions", + client.sendEvent(UNANSWERED_PREPARATION_CONTENTS_EVENTNAME, contentService.getUnAnsweredPreparationContentIds(roomId, userId)); /* FIXME: Content variant is ignored for now */ - client.sendEvent("countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); - client.sendEvent("countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); - client.sendEvent("activeUserCountData", roomService.activeUsers(roomId)); + client.sendEvent(COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME, answerService.countTotalAnswersByRoomId(roomId)); + client.sendEvent(COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME, answerService.countTotalAnswersByRoomId(roomId)); + client.sendEvent(ACTIVE_USER_COUNT_DATA_EVENTNAME, roomService.activeUsers(roomId)); /* FIXME: missing implementation */ //client.sendEvent("learningProgressOptions", room.getLearningProgressOptions()); final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(roomId); - client.sendEvent("feedbackData", fb.getValues()); + client.sendEvent(FEEDBACK_DATA_EVENTNAME, fb.getValues()); if (settings.isFlashcardsEnabled()) { - client.sendEvent("countFlashcards", contentService.countFlashcardsForUserInternal(roomId)); + client.sendEvent(COUNT_FLASHCARDS_EVENTNAME, contentService.countFlashcardsForUserInternal(roomId)); /* FIXME: missing implementation */ //client.sendEvent("flipFlashcards", room.getFlipFlashcards()); } try { final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(roomId); - client.sendEvent("feedbackDataRoundedAverage", averageFeedback); + client.sendEvent(FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, averageFeedback); } catch (final NoContentException e) { final Object object = null; // can't directly use "null". - client.sendEvent("feedbackDataRoundedAverage", object); + client.sendEvent(FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, object); } } public void reportUpdatedFeedbackForRoom(final String roomId) { final de.thm.arsnova.model.Feedback fb = feedbackService.getByRoomId(roomId); - broadcastInRoom(roomId, "feedbackData", fb.getValues()); + broadcastInRoom(roomId, FEEDBACK_DATA_EVENTNAME, fb.getValues()); try { final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(roomId); - broadcastInRoom(roomId, "feedbackDataRoundedAverage", averageFeedback); + broadcastInRoom(roomId, FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, averageFeedback); } catch (final NoContentException e) { - broadcastInRoom(roomId, "feedbackDataRoundedAverage", null); + broadcastInRoom(roomId, FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, null); } } @@ -438,8 +456,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { for (final SocketIOClient client : server.getAllClients()) { if (connectionIds.contains(client.getSessionId())) { - client.sendEvent("feedbackData", fb.getValues()); - client.sendEvent("feedbackDataRoundedAverage", averageFeedback); + client.sendEvent(FEEDBACK_DATA_EVENTNAME, fb.getValues()); + client.sendEvent(FEEDBACK_DATA_ROUNDED_AVERAGE_EVENTNAME, averageFeedback); } } } @@ -447,16 +465,16 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { public void reportActiveUserCountForRoom(final String roomId) { final int count = userService.getUsersByRoomId(roomId).size(); - broadcastInRoom(roomId, "activeUserCountData", count); + broadcastInRoom(roomId, ACTIVE_USER_COUNT_DATA_EVENTNAME, count); } public void reportAnswersToContentAvailable(final String roomId, final String contentId) { - broadcastInRoom(roomId, "answersToLecQuestionAvail", contentId); + broadcastInRoom(roomId, ANSWERS_TO_CONTENT_AVAILABLE_EVENTNAME, contentId); } public void reportCommentAvailable(final String roomId, final String commentId) { /* TODO role handling implementation, send this only to users with role lecturer */ - broadcastInRoom(roomId, "audQuestionAvail", commentId); + broadcastInRoom(roomId, COMMENT_AVAILABLE_EVENTNAME, commentId); } public void reportContentAvailable(final String roomId, final List<de.thm.arsnova.model.Content> qs) { @@ -467,9 +485,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { /* TODO role handling implementation, send this only to users with role audience */ if (!qs.isEmpty()) { - broadcastInRoom(roomId, "lecQuestionAvail", contents.get(0).getId()); // deprecated! + broadcastInRoom(roomId, CONTENT_AVAILABLE_SINGLE_EVENTNAME, contents.get(0).getId()); // deprecated! } - broadcastInRoom(roomId, "lecturerQuestionAvailable", contents); + broadcastInRoom(roomId, CONTENT_AVAILABLE_LIST_EVENTNAME, contents); } public void reportContentsLocked(final String roomId, final List<de.thm.arsnova.model.Content> qs) { @@ -477,11 +495,11 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { for (final de.thm.arsnova.model.Content q : qs) { contents.add(new Content(q)); } - broadcastInRoom(roomId, "lecturerQuestionLocked", contents); + broadcastInRoom(roomId, CONTENT_LOCKED_EVENTNAME, contents); } public void reportRoomStatus(final String roomId, final boolean active) { - broadcastInRoom(roomId, "setSessionActive", active); + broadcastInRoom(roomId, SET_ROOM_ACTIVE_EVENTNAME, active); } public void broadcastInRoom(final String roomId, final String eventName, final Object data) { @@ -525,12 +543,12 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { public void handleNewAnswer(final AfterCreationEvent<Answer> event) { final String roomId = event.getEntity().getRoomId(); this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId()); - broadcastInRoom(roomId, "countQuestionAnswersByQuestionId", + broadcastInRoom(roomId, COUNT_CONTENT_ANSWERS_BY_CONTENT_ID_EVENTNAME, answerService.countAnswersAndAbstentionsInternal(event.getEntity().getContentId())); /* FIXME: Content variant is ignored for now */ - broadcastInRoom(roomId, "countLectureQuestionAnswers", + broadcastInRoom(roomId, COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME, answerService.countTotalAnswersByRoomId(roomId)); - broadcastInRoom(roomId, "countPreparationQuestionAnswers", + broadcastInRoom(roomId, COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME, answerService.countTotalAnswersByRoomId(roomId)); // Update the unanswered count for the content variant that was answered. @@ -547,8 +565,10 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId()); // We do not know which user's answer was deleted, so we can't update his 'unanswered' list of questions... /* FIXME: Content variant is ignored for now */ - broadcastInRoom(roomId, "countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); - broadcastInRoom(roomId, "countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId)); + broadcastInRoom(roomId, COUNT_LECTURE_CONTENT_ANSWERS_EVENTNAME, + answerService.countTotalAnswersByRoomId(roomId)); + broadcastInRoom(roomId, COUNT_PREPARATION_CONTENT_ANSWERS_EVENTNAME, + answerService.countTotalAnswersByRoomId(roomId)); } @Async @@ -556,7 +576,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @Timed public void handlePiRoundDelayedStart( final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) { - broadcastInRoom(event.getEntity().getRoomId(), "startDelayedPiRound", + broadcastInRoom(event.getEntity().getRoomId(), START_DELAYED_ROUND_EVENTNAME, generateRoundInfo(event.getEntity())); } @@ -565,7 +585,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @Timed public void handlePiRoundEnd( final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) { - broadcastInRoom(event.getEntity().getRoomId(), "endPiRound", generateRoundInfo(event.getEntity())); + broadcastInRoom(event.getEntity().getRoomId(), END_ROUND_EVENTNAME, generateRoundInfo(event.getEntity())); } @Async @@ -573,13 +593,13 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @Timed public void handlePiRoundCancel( final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) { - broadcastInRoom(event.getEntity().getRoomId(), "cancelPiRound", event.getEntity().getId()); + broadcastInRoom(event.getEntity().getRoomId(), CANCEL_ROUND_EVENTNAME, event.getEntity().getId()); } @EventListener(condition = "#event.stateName == 'state'") public void handlePiRoundReset( final StateChangeEvent<de.thm.arsnova.model.Content, de.thm.arsnova.model.Content.State> event) { - broadcastInRoom(event.getEntity().getRoomId(), "resetPiRound", generateRoundInfo(event.getEntity())); + broadcastInRoom(event.getEntity().getRoomId(), RESET_ROUND_EVENTNAME, generateRoundInfo(event.getEntity())); } private Map<String, Object> generateRoundInfo(final de.thm.arsnova.model.Content content) { @@ -611,9 +631,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { map.put("variant", groupName); if (event.getEntity().getState().isResponsesEnabled()) { this.reportContentAvailable(event.getEntity().getRoomId(), Collections.singletonList(event.getEntity())); - broadcastInRoom(event.getEntity().getRoomId(), "unlockVote", map); + broadcastInRoom(event.getEntity().getRoomId(), UNLOCK_VOTE_EVENTNAME, map); } else { - broadcastInRoom(event.getEntity().getRoomId(), "lockVote", map); + broadcastInRoom(event.getEntity().getRoomId(), LOCK_VOTE_EVENTNAME, map); } } @@ -622,10 +642,10 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { final StateChangeEvent<de.thm.arsnova.model.Room, de.thm.arsnova.model.Room.Settings> event) { final String roomId = event.getEntity().getId(); final de.thm.arsnova.model.Room.Settings settings = event.getEntity().getSettings(); - broadcastInRoom(roomId, "featureChange", toV2Migrator.migrate(settings)); + broadcastInRoom(roomId, FEATURE_CHANGE_EVENTNAME, toV2Migrator.migrate(settings)); if (settings.isFlashcardsEnabled()) { - broadcastInRoom(roomId, "countFlashcards", + broadcastInRoom(roomId, COUNT_FLASHCARDS_EVENTNAME, contentService.countFlashcardsForUserInternal(roomId)); /* FIXME: missing implementation */ //broadcastInRoom(roomId, "flipFlashcards", event.getEntity().getSettings().isFlipFlashcards()); @@ -635,14 +655,14 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @EventListener(condition = "#event.stateName == 'settings'") public void handleLockFeedback( final StateChangeEvent<de.thm.arsnova.model.Room, de.thm.arsnova.model.Room.Settings> event) { - broadcastInRoom(event.getEntity().getId(), "lockFeedback", + broadcastInRoom(event.getEntity().getId(), LOCK_FEEDBACK_EVENTNAME, event.getEntity().getSettings().isFeedbackLocked()); } @EventListener public void handleFlipFlashcards(final FlipFlashcardsEvent event) { /* FIXME: missing implementation */ - //broadcastInRoom(event.getRoom().getId(), "flipFlashcards", event.getRoom().getFlipFlashcards()); + //broadcastInRoom(event.getRoom().getId(), FLIP_FLASHCARDS_EVENTNAME, event.getRoom().getFlipFlashcards()); } @EventListener @@ -663,6 +683,6 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer { @EventListener public void handleChangeScore(final ChangeScoreEvent event) { - broadcastInRoom(event.getRoomId(), "learningProgressChange", null); + broadcastInRoom(event.getRoomId(), SCORE_CHANGE_EVENTNAME, null); } }