58 lines
2.1 KiB
Java
58 lines
2.1 KiB
Java
package com.utopia.wms.service.auth;
|
|
|
|
import com.utopia.wms.dto.auth.AuthRequest;
|
|
import com.utopia.wms.dto.auth.AuthResponse;
|
|
import com.utopia.wms.dto.auth.RegisterRequest;
|
|
import com.utopia.wms.model.auth.Role;
|
|
import com.utopia.wms.model.user.User;
|
|
import com.utopia.wms.repository.auth.RoleRepository;
|
|
import com.utopia.wms.repository.user.UserRepository;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.security.authentication.AuthenticationManager;
|
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class AuthService {
|
|
|
|
private final UserRepository userRepository;
|
|
private final RoleRepository roleRepository;
|
|
private final PasswordEncoder passwordEncoder;
|
|
private final JwtService jwtService;
|
|
private final AuthenticationManager authenticationManager;
|
|
|
|
public AuthResponse register(RegisterRequest request) {
|
|
// 1. Get the ADMIN role (seeded via Liquibase)
|
|
Role adminRole = roleRepository.findByName("ADMIN")
|
|
.orElseThrow(() -> new RuntimeException("Default Role not found"));
|
|
|
|
// 2. Create the User
|
|
User user = new User();
|
|
user.setEmail(request.email());
|
|
user.setPassword(passwordEncoder.encode(request.password()));
|
|
user.setTenantId(request.tenantId());
|
|
user.setRole(adminRole);
|
|
user.setEnabled(true);
|
|
|
|
userRepository.save(user);
|
|
|
|
// 3. Generate Token
|
|
String jwtToken = jwtService.generateToken(user, user.getTenantId());
|
|
return new AuthResponse(jwtToken);
|
|
}
|
|
|
|
public AuthResponse authenticate(AuthRequest request) {
|
|
authenticationManager.authenticate(
|
|
new UsernamePasswordAuthenticationToken(request.email(), request.password())
|
|
);
|
|
|
|
User user = userRepository.findByEmail(request.email())
|
|
.orElseThrow();
|
|
|
|
String jwtToken = jwtService.generateToken(user, user.getTenantId());
|
|
return new AuthResponse(jwtToken);
|
|
}
|
|
}
|