package io.loli.box.social;
import io.loli.box.AdminProperties;
import io.loli.box.dao.UserRepository;
import io.loli.box.entity.Role;
import io.loli.box.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
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.Component;
@Component
public class RepositoryUserDetailsService implements UserDetailsService {
private UserRepository repository;
@Autowired
public RepositoryUserDetailsService(UserRepository repository) {
this.repository = repository;
}
@Autowired
private AdminProperties adminProperties;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = repository.findByEmail(email);
if (user == null) {
user = repository.findByUserName(email);
}
if (user == null) {
throw new UsernameNotFoundException("No user found with username: " + email);
}
SocialUserDetails.Builder builder = SocialUserDetails.getBuilder()
.id(user.getId())
.password(user.getPassword())
.role(user.getRole());
if (adminProperties.getEmail() != null && adminProperties.getEmail().equals(user.getEmail())) {
builder = builder.role(Role.ADMIN);
}
SocialUserDetails principal = builder.socialSignInProvider(user.getSignInProvider())
.username(user.getUserName())
.email(user.getEmail())
.build();
return principal;
}
}