TailormapUserDetailsService.java
/*
* Copyright (C) 2022 B3Partners B.V.
*
* SPDX-License-Identifier: MIT
*/
package org.tailormap.api.security;
import java.lang.invoke.MethodHandles;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 org.tailormap.api.persistence.User;
import org.tailormap.api.repository.GroupRepository;
import org.tailormap.api.repository.UserRepository;
@Service
public class TailormapUserDetailsService implements UserDetailsService {
private static final Logger logger =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final UserRepository userRepository;
private final GroupRepository groupRepository;
public TailormapUserDetailsService(UserRepository userRepository, GroupRepository groupRepository) {
this.userRepository = userRepository;
this.groupRepository = groupRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findById(username).orElse(null);
if (user == null) {
throw new UsernameNotFoundException("User " + username + " not found");
}
// This will usually log a {bcrypt}... password unless it was explicitly changed to {noop}...
// So no plaintext passwords are logged
logger.trace("Found user: {}, password {}", user.getUsername(), user.getPassword());
return new TailormapUserDetailsImpl(user, groupRepository);
}
}