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;
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";
}

View File

@ -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;
}
/**