determine mail correctly

This commit is contained in:
Jottyfan 2023-08-06 15:43:44 +02:00
parent e8354c3f6e
commit b07de9f2bc
2 changed files with 34 additions and 15 deletions

View File

@ -1,7 +1,6 @@
package de.jottyfan.camporganizer.module.admin; package de.jottyfan.camporganizer.module.admin;
import jakarta.servlet.http.HttpServletRequest; import java.security.Principal;
import jakarta.validation.Valid;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 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.admin.model.LocationBean;
import de.jottyfan.camporganizer.module.camplist.CommonController; import de.jottyfan.camporganizer.module.camplist.CommonController;
import de.jottyfan.camporganizer.module.mail.MailBean; 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; private String from;
@GetMapping("/admin/mail") @GetMapping("/admin/mail")
public String getMail(Model model, HttpServletRequest request) { public String getMail(Model model, Principal principal) {
MailBean mailBean = new MailBean(); MailBean mailBean = new MailBean();
mailBean.setFrom(from); mailBean.setFrom(from);
mailBean.getTo().add(getCurrentEmail(request)); mailBean.getTo().add(getCurrentEmail(principal));
model.addAttribute("bean", mailBean); model.addAttribute("bean", mailBean);
return "/admin/mail"; return "/admin/mail";
} }

View File

@ -2,8 +2,14 @@ package de.jottyfan.camporganizer.module.camplist;
import java.security.Principal; import java.security.Principal;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.logging.log4j.LogManager;
import org.springframework.security.core.userdetails.UserDetails; 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; import org.springframework.web.bind.annotation.ModelAttribute;
/** /**
@ -12,9 +18,7 @@ import org.springframework.web.bind.annotation.ModelAttribute;
* *
*/ */
public abstract class CommonController { public abstract class CommonController {
private static final Logger LOGGER = LogManager.getLogger();
@Autowired
private Principal principal;
/** /**
* try to get current keycloak user * try to get current keycloak user
@ -23,7 +27,7 @@ public abstract class CommonController {
* @return the preferred username or null * @return the preferred username or null
*/ */
public String getCurrentUser(Principal principal) { 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 * @return the email or null
*/ */
public String getCurrentEmail(Principal principal) { public String getCurrentEmail(Principal principal) {
if (principal instanceof UserDetails) { if (principal instanceof OAuth2AuthenticationToken) {
UserDetails userDetails = (UserDetails) principal; OAuth2AuthenticationToken token = (OAuth2AuthenticationToken) principal;
return userDetails.getEmail(); if (token != null) {
OAuth2User user = token.getPrincipal();
if (user != null) {
return user.getAttribute("email");
}
}
} else { } else {
return null; LOGGER.error("could not find email for {}", principal);
} }
return null;
} }
@ModelAttribute("currentUser") @ModelAttribute("currentUser")
public String getCurrentUser() { 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;
} }
/** /**