From b07de9f2bcbe84fa973588ba1231077622289b5d Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sun, 6 Aug 2023 15:43:44 +0200 Subject: [PATCH] determine mail correctly --- .../module/admin/AdminController.java | 9 +++-- .../module/camplist/CommonController.java | 40 ++++++++++++++----- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java b/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java index eaa3ab9..25016c1 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java +++ b/src/main/java/de/jottyfan/camporganizer/module/admin/AdminController.java @@ -1,7 +1,6 @@ package de.jottyfan.camporganizer.module.admin; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; +import java.security.Principal; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -22,6 +21,8 @@ import de.jottyfan.camporganizer.module.admin.model.DocumentBean; import de.jottyfan.camporganizer.module.admin.model.LocationBean; import de.jottyfan.camporganizer.module.camplist.CommonController; import de.jottyfan.camporganizer.module.mail.MailBean; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; /** * @@ -40,10 +41,10 @@ public class AdminController extends CommonController { private String from; @GetMapping("/admin/mail") - public String getMail(Model model, HttpServletRequest request) { + public String getMail(Model model, Principal principal) { MailBean mailBean = new MailBean(); mailBean.setFrom(from); - mailBean.getTo().add(getCurrentEmail(request)); + mailBean.getTo().add(getCurrentEmail(principal)); model.addAttribute("bean", mailBean); return "/admin/mail"; } diff --git a/src/main/java/de/jottyfan/camporganizer/module/camplist/CommonController.java b/src/main/java/de/jottyfan/camporganizer/module/camplist/CommonController.java index b37dfef..b173c4a 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/camplist/CommonController.java +++ b/src/main/java/de/jottyfan/camporganizer/module/camplist/CommonController.java @@ -2,8 +2,14 @@ package de.jottyfan.camporganizer.module.camplist; import java.security.Principal; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.userdetails.UserDetails; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; +import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.web.bind.annotation.ModelAttribute; /** @@ -12,9 +18,7 @@ import org.springframework.web.bind.annotation.ModelAttribute; * */ public abstract class CommonController { - - @Autowired - private Principal principal; + private static final Logger LOGGER = LogManager.getLogger(); /** * try to get current keycloak user @@ -23,7 +27,7 @@ public abstract class CommonController { * @return the preferred username or null */ public String getCurrentUser(Principal principal) { - return principal.getName(); + return principal == null ? null : principal.getName(); } /** @@ -33,17 +37,31 @@ public abstract class CommonController { * @return the email or null */ public String getCurrentEmail(Principal principal) { - if (principal instanceof UserDetails) { - UserDetails userDetails = (UserDetails) principal; - return userDetails.getEmail(); + if (principal instanceof OAuth2AuthenticationToken) { + OAuth2AuthenticationToken token = (OAuth2AuthenticationToken) principal; + if (token != null) { + OAuth2User user = token.getPrincipal(); + if (user != null) { + return user.getAttribute("email"); + } + } } else { - return null; + LOGGER.error("could not find email for {}", principal); } + return null; } @ModelAttribute("currentUser") public String getCurrentUser() { - return getCurrentUser(principal); + SecurityContext context = SecurityContextHolder.getContext(); + if (context != null) { + Authentication authentication = context.getAuthentication(); + if (authentication != null) { + DefaultOidcUser dou = (DefaultOidcUser) authentication.getPrincipal(); + return dou == null ? null : dou.getName(); + } + } + return null; } /**