| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package com.danielbohry.stocks.client;
- import com.danielbohry.stocks.exception.UnauthorizedException;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import lombok.RequiredArgsConstructor;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cache.annotation.Cacheable;
- import org.springframework.http.*;
- import org.springframework.stereotype.Component;
- import org.springframework.web.client.HttpClientErrorException;
- import org.springframework.web.client.RestTemplate;
- import java.util.List;
- import java.util.Map;
- @Component
- @RequiredArgsConstructor
- public class AuthClient {
- private final RestTemplate rest;
- @Value("${auth.api}")
- private String BASE_URL;
- @Cacheable(value = "current", key = "#token")
- public CurrentUser current(String token) {
- HttpHeaders headers = new HttpHeaders();
- headers.add("Authorization", token);
- HttpEntity<Map<String, String>> entity = new HttpEntity<>(null, headers);
- try {
- ResponseEntity<CurrentUser> response = rest.exchange(BASE_URL + "/users/current", HttpMethod.GET, entity, CurrentUser.class);
- if (response.getStatusCode() == HttpStatus.OK) {
- return response.getBody();
- } else {
- throw new UnauthorizedException("Unexpected response status: " + response.getStatusCode());
- }
- } catch (HttpClientErrorException e) {
- throw new UnauthorizedException("Error: " + e.getStatusCode() + " - " + e.getResponseBodyAsString());
- } catch (Exception e) {
- throw new UnauthorizedException("An error occurred: " + e.getMessage());
- }
- }
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public static class CurrentUser {
- private String id;
- private String username;
- private List<String> roles;
- }
- }
|