AuthController.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package com.danielbohry.authservice.api;
  2. import com.danielbohry.authservice.api.dto.AuthenticationRequest;
  3. import com.danielbohry.authservice.api.dto.AuthenticationResponse;
  4. import com.danielbohry.authservice.domain.ApplicationUser;
  5. import com.danielbohry.authservice.service.auth.AuthService;
  6. import lombok.AllArgsConstructor;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.http.HttpStatus;
  9. import org.springframework.http.ResponseEntity;
  10. import org.springframework.security.core.GrantedAuthority;
  11. import org.springframework.security.core.context.SecurityContext;
  12. import org.springframework.security.core.context.SecurityContextHolder;
  13. import org.springframework.web.bind.annotation.*;
  14. @Slf4j
  15. @RestController
  16. @AllArgsConstructor
  17. @CrossOrigin
  18. @RequestMapping("api")
  19. public class AuthController {
  20. private final AuthService service;
  21. @PostMapping("register")
  22. public ResponseEntity<AuthenticationResponse> register(@RequestBody AuthenticationRequest request) {
  23. log.info("New signup for username [{}]", request.getUsername());
  24. var response = service.signup(request);
  25. return ResponseEntity.ok(response);
  26. }
  27. @PostMapping("authenticate")
  28. public ResponseEntity<AuthenticationResponse> authenticate(@RequestBody AuthenticationRequest request) {
  29. log.info("New signing for username [{}]", request.getUsername());
  30. var response = service.signin(request);
  31. return ResponseEntity.ok(response);
  32. }
  33. @PostMapping("authorize")
  34. public ResponseEntity<Object> authorize(@RequestParam(defaultValue = "USER", required = false) String authority) {
  35. SecurityContext context = SecurityContextHolder.getContext();
  36. Object principal = context.getAuthentication().getPrincipal();
  37. if (principal instanceof ApplicationUser user) {
  38. if (user.getAuthorities().stream().map(GrantedAuthority::getAuthority).toList().contains(authority)) {
  39. return ResponseEntity.ok().build();
  40. }
  41. }
  42. return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
  43. }
  44. }