From 1ac61f7af1037d08f95af0ef504fcfbee6c2a465 Mon Sep 17 00:00:00 2001 From: colinnuk Date: Fri, 30 Aug 2024 06:27:20 -0700 Subject: [PATCH] Remove APIKEY from logs --- OpenMeteo/OpenMeteoClient.cs | 12 ++++++------ OpenMeteo/UrlFactory.cs | 5 +++++ OpenMeteoTests/UrlFactoryTests.cs | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/OpenMeteo/OpenMeteoClient.cs b/OpenMeteo/OpenMeteoClient.cs index 835f621..7471d3c 100644 --- a/OpenMeteo/OpenMeteoClient.cs +++ b/OpenMeteo/OpenMeteoClient.cs @@ -127,7 +127,7 @@ public OpenMeteoClient(IOpenMeteoLogger logger, string apiKey) /// Awaitable Task containing WeatherForecast or NULL public async Task QueryAsync(float latitude, float longitude) { - WeatherForecastOptions options = new WeatherForecastOptions + WeatherForecastOptions options = new() { Latitude = latitude, Longitude = longitude, @@ -171,7 +171,7 @@ public OpenMeteoClient(IOpenMeteoLogger logger, string apiKey) /// public async Task GetLocationDataAsync(string location) { - GeocodingOptions geocodingOptions = new GeocodingOptions(location); + GeocodingOptions geocodingOptions = new(location); return await GetLocationDataAsync(geocodingOptions); } @@ -247,7 +247,7 @@ public OpenMeteoClient(IOpenMeteoLogger logger, string apiKey) try { var url = _urlFactory.GetUrlWithOptions(options); - _logger?.Debug($"{nameof(OpenMeteoClient)}.GetAirQualityAsync(). URL: {url}"); + _logger?.Debug($"{nameof(OpenMeteoClient)}.GetAirQualityAsync(). URL: {_urlFactory.SanitiseUrl(url)}"); HttpResponseMessage response = await httpController.Client.GetAsync(url); response.EnsureSuccessStatusCode(); @@ -267,7 +267,7 @@ public OpenMeteoClient(IOpenMeteoLogger logger, string apiKey) try { var url = _urlFactory.GetUrlWithOptions(options); - _logger?.Debug($"{nameof(OpenMeteoClient)}.GetElevationAsync(). URL: {url}"); + _logger?.Debug($"{nameof(OpenMeteoClient)}.GetElevationAsync(). URL: {_urlFactory.SanitiseUrl(url)}"); HttpResponseMessage response = await httpController.Client.GetAsync(url); if(response.IsSuccessStatusCode) { @@ -306,7 +306,7 @@ public OpenMeteoClient(IOpenMeteoLogger logger, string apiKey) { var url = _urlFactory.GetUrlWithOptions(options); - _logger?.Debug($"{nameof(OpenMeteoClient)}.GetGeocodingDataAsync(). URL: {url}"); + _logger?.Debug($"{nameof(OpenMeteoClient)}.GetGeocodingDataAsync(). URL: {_urlFactory.SanitiseUrl(url)}"); HttpResponseMessage response = await httpController.Client.GetAsync(url); response.EnsureSuccessStatusCode(); @@ -328,7 +328,7 @@ public OpenMeteoClient(IOpenMeteoLogger logger, string apiKey) try { var url = _urlFactory.GetUrlWithOptions(options); - _logger?.Debug($"{nameof(OpenMeteoClient)}.GetElevationAsync(). URL: {url}"); + _logger?.Debug($"{nameof(OpenMeteoClient)}.GetElevationAsync(). URL: {_urlFactory.SanitiseUrl(url)}"); HttpResponseMessage response = await httpController.Client.GetAsync(url); response.EnsureSuccessStatusCode(); diff --git a/OpenMeteo/UrlFactory.cs b/OpenMeteo/UrlFactory.cs index a5cd343..8dc5b28 100644 --- a/OpenMeteo/UrlFactory.cs +++ b/OpenMeteo/UrlFactory.cs @@ -21,6 +21,11 @@ public UrlFactory(string apiKey) _apiKey = apiKey; } + public string SanitiseUrl(string url) + { + return string.IsNullOrEmpty(_apiKey) ? url : url.Replace(_apiKey, "APIKEY"); + } + public string GetUrlWithOptions(WeatherForecastOptions options) { UriBuilder uri = new(GetBaseUrl(_weatherApiUrl)); diff --git a/OpenMeteoTests/UrlFactoryTests.cs b/OpenMeteoTests/UrlFactoryTests.cs index 9fef65f..5730e4d 100644 --- a/OpenMeteoTests/UrlFactoryTests.cs +++ b/OpenMeteoTests/UrlFactoryTests.cs @@ -86,6 +86,30 @@ public void GetUrlWithOptions_ElevationOptions_WithApiKey_Test() Assert.AreEqual(expectedUrl, url); } + [TestMethod] + public void SanitiseUrl_WithApiKey_Test() + { + var factory = new UrlFactory("testApiKey"); + var url = "https://api.open-meteo.com/v1/forecast?apikey=testApiKey"; + var sanitisedUrl = factory.SanitiseUrl(url); + + var expectedUrl = "https://api.open-meteo.com/v1/forecast?apikey=APIKEY"; + Assert.AreEqual(expectedUrl, sanitisedUrl); + } + + [TestMethod] + public void SanitiseUrl_WithNoApiKey_Test() + { + var factory = new UrlFactory(); + var url = "https://api.open-meteo.com/v1/forecast"; + var sanitisedUrl = factory.SanitiseUrl(url); + + var expectedUrl = "https://api.open-meteo.com/v1/forecast"; + Assert.AreEqual(expectedUrl, sanitisedUrl); + } + + + private static WeatherForecastOptions GetWeatherForecastOptions() => new() { Latitude = 40.7128f,