62 lines
2.7 KiB
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));
|
|
}
|
|
}
|