package stirling.software.SPDF.controller.web; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import stirling.software.SPDF.model.User; import stirling.software.SPDF.repository.UserRepository; @Controller @Tag(name = "Account Security", description = "Account Security APIs") public class AccountWebController { @GetMapping("/login") public String login(HttpServletRequest request, Model model, Authentication authentication) { if (authentication != null && authentication.isAuthenticated()) { return "redirect:/"; } if (request.getParameter("error") != null) { model.addAttribute("error", request.getParameter("error")); } if (request.getParameter("logout") != null) { model.addAttribute("logoutMessage", "You have been logged out."); } return "login"; } @Autowired private UserRepository userRepository; // Assuming you have a repository for user operations @PreAuthorize("hasRole('ROLE_ADMIN')") @GetMapping("/addUsers") public String showAddUserForm(Model model, Authentication authentication) { List allUsers = userRepository.findAll(); model.addAttribute("users", allUsers); model.addAttribute("currentUsername", authentication.getName()); return "addUsers"; } @GetMapping("/account") public String account(HttpServletRequest request, Model model, Authentication authentication) { if (authentication == null || !authentication.isAuthenticated()) { return "redirect:/"; } if (authentication != null && authentication.isAuthenticated()) { Object principal = authentication.getPrincipal(); if (principal instanceof UserDetails) { // Cast the principal object to UserDetails UserDetails userDetails = (UserDetails) principal; // Retrieve username and other attributes String username = userDetails.getUsername(); // Fetch user details from the database Optional user = userRepository.findByUsername(username); // Assuming findByUsername method exists if (!user.isPresent()) { // Handle error appropriately return "redirect:/error"; // Example redirection in case of error } // Convert settings map to JSON string ObjectMapper objectMapper = new ObjectMapper(); String settingsJson; try { settingsJson = objectMapper.writeValueAsString(user.get().getSettings()); } catch (JsonProcessingException e) { // Handle JSON conversion error e.printStackTrace(); return "redirect:/error"; // Example redirection in case of error } // Add attributes to the model model.addAttribute("username", username); model.addAttribute("role", user.get().getRolesAsString()); model.addAttribute("settings", settingsJson); } } else { return "redirect:/"; } return "account"; } }