diff --git a/server/src/main/java/invite/api/UserController.java b/server/src/main/java/invite/api/UserController.java index bbf61f9d..fb0eb57e 100644 --- a/server/src/main/java/invite/api/UserController.java +++ b/server/src/main/java/invite/api/UserController.java @@ -8,6 +8,8 @@ import invite.exception.UserRestrictionException; import invite.manage.EntityType; import invite.manage.Manage; +import invite.logging.AccessLogger; +import invite.logging.Event; import invite.model.*; import invite.provision.Provisioning; import invite.provision.ProvisioningService; @@ -223,8 +225,11 @@ public View login(@RequestParam(value = "app", required = false, defaultValue = } @GetMapping("logout") - public ResponseEntity> logout(HttpServletRequest request) { + public ResponseEntity> logout(HttpServletRequest request, @Parameter(hidden = true) User user) { LOG.debug("/logout"); + if (user != null) { + AccessLogger.authentication(LOG, Event.Logout, user.getSub()); + } SecurityContextHolder.clearContext(); HttpSession session = request.getSession(false); if (session != null) { diff --git a/server/src/main/java/invite/logging/AccessLogger.java b/server/src/main/java/invite/logging/AccessLogger.java index 1b239a9b..4ee58cba 100644 --- a/server/src/main/java/invite/logging/AccessLogger.java +++ b/server/src/main/java/invite/logging/AccessLogger.java @@ -60,4 +60,12 @@ public static void user(Log log, Event event, User user) { )); log.info(String.format("%s user with sub %s", event, user.getSub())); } + + public static void authentication(Log log, Event event, String sub) { + MDC.setContextMap(Map.of( + "type", String.format("%s User", event), + "userId", sub + )); + log.info(String.format("%s user with sub %s", event, sub)); + } } diff --git a/server/src/main/java/invite/logging/Event.java b/server/src/main/java/invite/logging/Event.java index b651a87a..ff82170f 100644 --- a/server/src/main/java/invite/logging/Event.java +++ b/server/src/main/java/invite/logging/Event.java @@ -2,6 +2,6 @@ public enum Event { - Created, Accepted, Updated, Resend, Deleted + Created, Accepted, Updated, Resend, Deleted, Login, Logout } diff --git a/server/src/main/java/invite/security/CustomOidcUserService.java b/server/src/main/java/invite/security/CustomOidcUserService.java index 134ca616..14c46b46 100644 --- a/server/src/main/java/invite/security/CustomOidcUserService.java +++ b/server/src/main/java/invite/security/CustomOidcUserService.java @@ -1,6 +1,8 @@ package invite.security; import invite.manage.Manage; +import invite.logging.AccessLogger; +import invite.logging.Event; import invite.model.User; import invite.provision.ProvisioningService; import invite.repository.UserRepository; @@ -82,6 +84,7 @@ public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2Authenticatio } userRepository.save(user); }); + AccessLogger.authentication(LOG, Event.Login, sub); OidcUserInfo oidcUserInfo = new OidcUserInfo(newClaims); return new DefaultOidcUser(oidcUser.getAuthorities(), oidcUser.getIdToken(), oidcUserInfo); }