uncertainrods's picture
init_files_added
f5cd2d3
raw
history blame
2.48 kB
package com.rods.backtestingstrategies.controller;
import com.rods.backtestingstrategies.dto.AuthRequest;
import com.rods.backtestingstrategies.dto.AuthResponse;
import com.rods.backtestingstrategies.entity.User;
import com.rods.backtestingstrategies.repository.UserRepository;
import com.rods.backtestingstrategies.security.JwtUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
public class AuthController {
private final AuthenticationManager authenticationManager;
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtUtils jwtUtils;
private final UserDetailsService userDetailsService;
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody AuthRequest request) {
if (userRepository.findByUsername(request.getUsername()).isPresent()) {
return ResponseEntity.badRequest().body("Username already exists");
}
User user = User.builder()
.username(request.getUsername())
.password(passwordEncoder.encode(request.getPassword()))
.role("USER")
.build();
userRepository.save(user);
UserDetails userDetails = userDetailsService.loadUserByUsername(request.getUsername());
String jwtToken = jwtUtils.generateToken(userDetails);
return ResponseEntity.ok(AuthResponse.builder().token(jwtToken).build());
}
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody AuthRequest request) {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())
);
UserDetails userDetails = userDetailsService.loadUserByUsername(request.getUsername());
String jwtToken = jwtUtils.generateToken(userDetails);
return ResponseEntity.ok(AuthResponse.builder().token(jwtToken).build());
}
}