Spaces:
Sleeping
Sleeping
File size: 2,482 Bytes
f5cd2d3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 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());
}
} |