1 package pk.lucidxpo.ynami.service.sample.security;
2
3 import org.springframework.beans.factory.annotation.Autowired;
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 import org.springframework.transaction.annotation.Transactional;
9 import pk.lucidxpo.ynami.persistence.dao.security.UserRepository;
10 import pk.lucidxpo.ynami.persistence.model.security.User;
11
12 import static pk.lucidxpo.ynami.spring.security.UserPrincipal.create;
13
14 @Service
15 public class UserDetailsServiceImpl implements UserDetailsService {
16 private final UserRepository userRepository;
17
18 @Autowired
19 public UserDetailsServiceImpl(final UserRepository userRepository) {
20 this.userRepository = userRepository;
21 }
22
23 @Override
24 @Transactional
25 public UserDetails loadUserByUsername(final String usernameOrEmail) throws UsernameNotFoundException {
26 final User user = userRepository.findByUsernameOrEmail(usernameOrEmail, usernameOrEmail)
27 .orElseThrow(() ->
28 new UsernameNotFoundException("User not found with username or email : " + usernameOrEmail)
29 );
30
31 return create(user);
32 }
33 }