AuthClient.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package com.danielbohry.stocks.client;
  2. import com.danielbohry.stocks.exception.UnauthorizedException;
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import lombok.NoArgsConstructor;
  6. import lombok.RequiredArgsConstructor;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.cache.annotation.Cacheable;
  9. import org.springframework.http.*;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.web.client.HttpClientErrorException;
  12. import org.springframework.web.client.RestTemplate;
  13. import java.util.List;
  14. import java.util.Map;
  15. @Component
  16. @RequiredArgsConstructor
  17. public class AuthClient {
  18. private final RestTemplate rest;
  19. @Value("${auth.api}")
  20. private String BASE_URL;
  21. @Cacheable(value = "current", key = "#token")
  22. public CurrentUser current(String token) {
  23. HttpHeaders headers = new HttpHeaders();
  24. headers.add("Authorization", token);
  25. HttpEntity<Map<String, String>> entity = new HttpEntity<>(null, headers);
  26. try {
  27. ResponseEntity<CurrentUser> response = rest.exchange(BASE_URL + "/users/current", HttpMethod.GET, entity, CurrentUser.class);
  28. if (response.getStatusCode() == HttpStatus.OK) {
  29. return response.getBody();
  30. } else {
  31. throw new UnauthorizedException("Unexpected response status: " + response.getStatusCode());
  32. }
  33. } catch (HttpClientErrorException e) {
  34. throw new UnauthorizedException("Error: " + e.getStatusCode() + " - " + e.getResponseBodyAsString());
  35. } catch (Exception e) {
  36. throw new UnauthorizedException("An error occurred: " + e.getMessage());
  37. }
  38. }
  39. @Data
  40. @AllArgsConstructor
  41. @NoArgsConstructor
  42. public static class CurrentUser {
  43. private String id;
  44. private String username;
  45. private List<String> roles;
  46. }
  47. }