package de.asideas.crowdsource.security; import de.asideas.crowdsource.domain.model.UserEntity; import de.asideas.crowdsource.repository.UserRepository; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import static java.util.stream.Collectors.toList; @Service public class MongoUserDetailsService implements UserDetailsService { private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(MongoUserDetailsService.class); @Autowired private UserRepository userRepository; @Autowired private DefaultUsersService defaultUsersService; @Value("${de.asideas.crowdsource.createusers:false}") private boolean createUsers; @PostConstruct public void createUsers() { if (!createUsers) { LOG.info("not creating or updating any users."); return; } defaultUsersService.loadDefaultUsers(); } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { username = username.toLowerCase(); UserEntity user = userRepository.findByEmail(username); if (user == null) { throw new UsernameNotFoundException("No user with username [" + username + "] found"); } if (!user.isActivated()) { throw new UsernameNotFoundException("User with username [" + username + "] is not activated yet"); } return new org.springframework.security.core.userdetails.User( user.getEmail(), user.getPassword(), user.getRoles().stream().map(SimpleGrantedAuthority::new).collect(toList()) ); } }