AuthController.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. import static org.springframework.http.HttpStatus.CREATED;
  15. @Slf4j
  16. @RestController
  17. @AllArgsConstructor
  18. @CrossOrigin
  19. @RequestMapping("api")
  20. public class AuthController {
  21. private final AuthService service;
  22. @PostMapping("register")
  23. public ResponseEntity<AuthenticationResponse> register(@RequestBody AuthenticationRequest request) {
  24. log.info("Registering new username [{}]", request.getUsername());
  25. var response = service.register(request);
  26. return ResponseEntity.status(CREATED).body(response);
  27. }
  28. @PostMapping("authenticate")
  29. public ResponseEntity<AuthenticationResponse> authenticate(@RequestBody AuthenticationRequest request) {
  30. log.info("Authenticating username [{}]", request.getUsername());
  31. var response = service.authenticate(request);
  32. return ResponseEntity.ok(response);
  33. }
  34. @PostMapping("authorize")
  35. public ResponseEntity<Object> authorize(@RequestParam(defaultValue = "USER", required = false) String authority) {
  36. SecurityContext context = SecurityContextHolder.getContext();
  37. Object principal = context.getAuthentication().getPrincipal();
  38. if (principal instanceof ApplicationUser user) {
  39. if (user.getAuthorities().stream().map(GrantedAuthority::getAuthority).toList().contains(authority)) {
  40. return ResponseEntity.ok().build();
  41. }
  42. }
  43. return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
  44. }
  45. @PostMapping("forgot-password")
  46. public ResponseEntity<Void> forgotPassword(@RequestParam String username) {
  47. service.forgotPassword(username);
  48. return ResponseEntity.ok().build();
  49. }
  50. }