| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package com.danielbohry.authservice.service.auth;
- import com.danielbohry.authservice.api.dto.AuthenticationRequest;
- import com.danielbohry.authservice.api.dto.AuthenticationResponse;
- import com.danielbohry.authservice.domain.ApplicationUser;
- import com.danielbohry.authservice.service.user.UserService;
- import lombok.AllArgsConstructor;
- import org.checkerframework.checker.nullness.qual.NonNull;
- import org.springframework.security.authentication.AuthenticationManager;
- import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
- import org.springframework.security.core.authority.SimpleGrantedAuthority;
- import org.springframework.security.core.userdetails.User;
- import org.springframework.security.core.userdetails.UserDetails;
- import org.springframework.security.core.userdetails.UserDetailsService;
- import org.springframework.security.core.userdetails.UsernameNotFoundException;
- import org.springframework.security.crypto.password.PasswordEncoder;
- import org.springframework.stereotype.Service;
- import static com.danielbohry.authservice.service.auth.UserConverter.convert;
- @Service
- @AllArgsConstructor
- public class AuthService implements UserDetailsService {
- private final UserService service;
- private final JwtService jwtService;
- private final AuthenticationManager authenticationManager;
- private final PasswordEncoder passwordEncoder;
- @Override
- public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- var user = service.findByUsername(username);
- var authorities = user.getRoles().stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).toList();
- return new User(user.getUsername(), user.getPassword(), authorities);
- }
- public AuthenticationResponse signup(AuthenticationRequest request) {
- UserDetails user = buildUserDetails(request);
- ApplicationUser saved = service.create(convert(user));
- Authentication authentication = jwtService.generateToken(saved);
- return buildResponse(saved.getId(), authentication);
- }
- public AuthenticationResponse signin(AuthenticationRequest request) {
- authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
- request.getUsername(), request.getPassword())
- );
- ApplicationUser user = service.findByUsername(request.getUsername());
- Authentication authentication = jwtService.generateToken(user);
- return buildResponse(user.getId(), authentication);
- }
- public AuthenticationResponse changePassword(String userId, String currentPassword, String newPassword) {
- ApplicationUser user = service.changePassword(userId, currentPassword, newPassword, passwordEncoder);
- Authentication authentication = jwtService.generateToken(user);
- return buildResponse(user.getId(), authentication);
- }
- private UserDetails buildUserDetails(AuthenticationRequest request) {
- return User.builder()
- .username(request.getUsername())
- .password(passwordEncoder.encode(request.getPassword()))
- .build();
- }
- private static AuthenticationResponse buildResponse(String id, Authentication authentication) {
- return AuthenticationResponse.builder()
- .id(id)
- .username(authentication.username())
- .token(authentication.token())
- .expirationDate(authentication.expirationDate())
- .roles(authentication.authorities())
- .build();
- }
- }
|