From 8b23a25bef55c271f87bd84e5ef2e304bb2ebb07 Mon Sep 17 00:00:00 2001
From: Matej Hrica <492778@mail.muni.cz>
Date: Mon, 8 May 2023 00:01:33 +0200
Subject: [PATCH] Pass auth header to api in weather

---
 .../weather/server/service/WeatherServiceImpl.java  | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/weather/src/main/java/cz/muni/fi/pa165/weather/server/service/WeatherServiceImpl.java b/weather/src/main/java/cz/muni/fi/pa165/weather/server/service/WeatherServiceImpl.java
index e540ed4..187127e 100644
--- a/weather/src/main/java/cz/muni/fi/pa165/weather/server/service/WeatherServiceImpl.java
+++ b/weather/src/main/java/cz/muni/fi/pa165/weather/server/service/WeatherServiceImpl.java
@@ -3,12 +3,17 @@ package cz.muni.fi.pa165.weather.server.service;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import cz.muni.fi.pa165.core.client.AirportApi;
+import cz.muni.fi.pa165.core.client.invoker.ApiClient;
 import cz.muni.fi.pa165.core.client.invoker.ApiException;
 import cz.muni.fi.pa165.core.client.model.AirportDto;
 import cz.muni.fi.pa165.weather.server.data.FlightCreationAdvice;
 import cz.muni.fi.pa165.weather.server.data.HourlyWeatherForecast;
 import cz.muni.fi.pa165.weather.server.data.WeatherForecast;
 import cz.muni.fi.pa165.weather.server.data.WeatherReason;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.core.OAuth2AccessToken;
+import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication;
+import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionAuthenticatedPrincipal;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
@@ -19,7 +24,6 @@ public class WeatherServiceImpl implements WeatherService {
 
     private final RestTemplate restTemplate = new RestTemplate();
     private final ObjectMapper objectMapper = new ObjectMapper();
-    private final AirportApi airportClient = new AirportApi();
 
     private static final String TEMPERATURE_ATTRIBUTE_NAME = "temperature_2m";
     private static final String RAIN_ATTRIBUTE_NAME = "rain";
@@ -50,6 +54,13 @@ public class WeatherServiceImpl implements WeatherService {
             OffsetDateTime arrivalTime
     ) {
         try {
+            var authentication = SecurityContextHolder.getContext().getAuthentication();
+            var token = (OAuth2AccessToken) (((BearerTokenAuthentication) authentication).getToken());
+            var client = new ApiClient();
+            client.setRequestInterceptor((builder -> {
+                builder.header("Authorization", "Bearer " + token.getTokenValue());
+            }));
+            AirportApi airportClient = new AirportApi(client);
             AirportDto departureAirportDto = airportClient.getAirportById(departureAirportId);
             AirportDto arrivalAirportDto = airportClient.getAirportById(arrivalAirportId);
 
-- 
GitLab