06-ZPRPLI0/src/main/java/com/s477603/movies/web/AuthController.java

62 lines
2.7 KiB
Java

package com.s477603.movies.web;
import com.s477603.movies.document.User;
import com.s477603.movies.dto.LoginDTO;
import com.s477603.movies.dto.SignupDTO;
import com.s477603.movies.dto.TokenDTO;
import com.s477603.movies.security.TokenGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationProvider;
import org.springframework.security.provisioning.UserDetailsManager;
import org.springframework.web.bind.annotation.*;
import java.text.MessageFormat;
import java.util.Collections;
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@Autowired
UserDetailsManager userDetailsManager;
@Autowired
TokenGenerator tokenGenerator;
@Autowired
DaoAuthenticationProvider daoAuthenticationProvider;
@Autowired
@Qualifier("jwtRefreshTokenAuthProvider")
JwtAuthenticationProvider jwtRefreshTokenAuthProvider;
@PostMapping("/register")
public ResponseEntity register(@RequestBody SignupDTO signupDTO) {
User user = new User(signupDTO.getUsername(), signupDTO.getPassword());
if (userDetailsManager.userExists(user.getUsername())) {
return ResponseEntity.badRequest().body("Username already exists");
}
userDetailsManager.createUser(user);
Authentication authentication = UsernamePasswordAuthenticationToken.authenticated(user, signupDTO.getPassword(), Collections.EMPTY_LIST);
return ResponseEntity.ok(tokenGenerator.createToken(authentication));
}
@PostMapping("/login")
public ResponseEntity login(@RequestBody LoginDTO loginDTO) {
Authentication authentication = daoAuthenticationProvider.authenticate(UsernamePasswordAuthenticationToken.unauthenticated((loginDTO.getUsername()), loginDTO.getPassword()));
return ResponseEntity.ok(tokenGenerator.createToken(authentication));
}
@PostMapping("/token")
public ResponseEntity token(@RequestBody TokenDTO tokenDTO) {
Authentication authentication = jwtRefreshTokenAuthProvider.authenticate(new BearerTokenAuthenticationToken(tokenDTO.getRefreshToken()));
return ResponseEntity.ok(tokenGenerator.createToken(authentication));
}
}