A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.4 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. package org.ros.chatto.security;
  2. import java.util.Optional;
  3. import java.util.Set;
  4. import org.ros.chatto.model.ChatUser;
  5. import org.ros.chatto.model.UserRole;
  6. import org.ros.chatto.service.UserService;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.security.core.userdetails.User;
  9. import org.springframework.security.core.userdetails.UserDetails;
  10. import org.springframework.security.core.userdetails.UserDetailsService;
  11. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  12. import org.springframework.stereotype.Service;
  13. import lombok.RequiredArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. @Service
  16. @Slf4j
  17. @RequiredArgsConstructor
  18. public class MyUserDetailsService implements UserDetailsService {
  19. @Autowired
  20. private final UserService userService;
  21. @Override
  22. public UserDetails loadUserByUsername(final String username) {
  23. log.trace("User Details - loading with username: {}", username);
  24. Optional<ChatUser> user = userService.getUser(username);
  25. if (!user.isPresent()) {
  26. log.warn("Request for unknown user {}", username);
  27. throw new UsernameNotFoundException(username);
  28. }
  29. ChatUser user2 = user.get();
  30. Set<UserRole> userRoles = user2.getUserRoles();
  31. return User.withUsername(user2.getUserName())
  32. .password(user2.getPassword())
  33. .roles(userRoles.stream().map(ur -> ur.getRole().getName())
  34. .toArray(size -> new String[size]))
  35. .build();
  36. }
  37. }