AuthService.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.danielbohry.authservice.service.auth;
  2. import com.danielbohry.authservice.api.dto.AuthenticationRequest;
  3. import com.danielbohry.authservice.api.dto.AuthenticationResponse;
  4. import com.danielbohry.authservice.domain.ApplicationUser;
  5. import com.danielbohry.authservice.service.user.UserService;
  6. import lombok.AllArgsConstructor;
  7. import org.checkerframework.checker.nullness.qual.NonNull;
  8. import org.springframework.security.authentication.AuthenticationManager;
  9. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  10. import org.springframework.security.core.authority.SimpleGrantedAuthority;
  11. import org.springframework.security.core.userdetails.User;
  12. import org.springframework.security.core.userdetails.UserDetails;
  13. import org.springframework.security.core.userdetails.UserDetailsService;
  14. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  15. import org.springframework.security.crypto.password.PasswordEncoder;
  16. import org.springframework.stereotype.Service;
  17. import static com.danielbohry.authservice.service.auth.UserConverter.convert;
  18. @Service
  19. @AllArgsConstructor
  20. public class AuthService implements UserDetailsService {
  21. private final UserService service;
  22. private final JwtService jwtService;
  23. private final AuthenticationManager authenticationManager;
  24. private final PasswordEncoder passwordEncoder;
  25. @Override
  26. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  27. var user = service.findByUsername(username);
  28. var authorities = user.getRoles().stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).toList();
  29. return new User(user.getUsername(), user.getPassword(), authorities);
  30. }
  31. public AuthenticationResponse signup(AuthenticationRequest request) {
  32. UserDetails user = buildUserDetails(request);
  33. ApplicationUser saved = service.create(convert(user));
  34. Authentication authentication = jwtService.generateToken(saved);
  35. return buildResponse(saved.getId(), authentication);
  36. }
  37. public AuthenticationResponse signin(AuthenticationRequest request) {
  38. authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
  39. request.getUsername(), request.getPassword())
  40. );
  41. ApplicationUser user = service.findByUsername(request.getUsername());
  42. Authentication authentication = jwtService.generateToken(user);
  43. return buildResponse(user.getId(), authentication);
  44. }
  45. public AuthenticationResponse changePassword(String userId, String currentPassword, String newPassword) {
  46. ApplicationUser user = service.changePassword(userId, currentPassword, newPassword, passwordEncoder);
  47. Authentication authentication = jwtService.generateToken(user);
  48. return buildResponse(user.getId(), authentication);
  49. }
  50. private UserDetails buildUserDetails(AuthenticationRequest request) {
  51. return User.builder()
  52. .username(request.getUsername())
  53. .password(passwordEncoder.encode(request.getPassword()))
  54. .build();
  55. }
  56. private static AuthenticationResponse buildResponse(String id, Authentication authentication) {
  57. return AuthenticationResponse.builder()
  58. .id(id)
  59. .username(authentication.username())
  60. .token(authentication.token())
  61. .expirationDate(authentication.expirationDate())
  62. .roles(authentication.authorities())
  63. .build();
  64. }
  65. }