1 package fr.tiogars.domaintemplate.domains.auth.services;
2
3 import org.springframework.security.core.authority.SimpleGrantedAuthority;
4 import org.springframework.security.core.userdetails.UserDetails;
5 import org.springframework.security.core.userdetails.UserDetailsService;
6 import org.springframework.security.core.userdetails.UsernameNotFoundException;
7 import org.springframework.stereotype.Service;
8
9 import fr.tiogars.domaintemplate.domains.auth.user.repositories.UserRepository;
10
11
12 @Service
13 public class TemplateUserDetailsService implements UserDetailsService {
14
15 private final UserRepository repository;
16
17 TemplateUserDetailsService(UserRepository repository) {
18 this.repository = repository;
19 }
20
21 @Override
22 public UserDetails loadUserByUsername(String username) {
23 return repository.findByUsername(username)
24 .map(user -> org.springframework.security.core.userdetails.User.builder()
25 .username(user.getUsername())
26 .password(user.getPasswordHash())
27 .disabled(!user.isEnabled())
28 .authorities(user.getRoles().stream()
29 .map(role -> new SimpleGrantedAuthority("ROLE_" + role.getCode()))
30 .toList())
31 .build())
32 .orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
33 }
34 }