using Microsoft.Extensions.Logging; using System.Net.Http; namespace BlueMine.Redmine { public class RedmineAuthHandler : DelegatingHandler { private readonly RedmineConfig _config; private readonly ILogger _logger; public RedmineAuthHandler(RedmineConfig config, ILogger logger) { _logger = logger; _config = config; } protected override async Task SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { _logger.LogDebug("Checking config for valid options"); if (!string.IsNullOrWhiteSpace(_config.ApiKey)) { _logger.LogDebug("Refreshing API key"); request.Headers.Remove("X-Redmine-API-Key"); request.Headers.Add("X-Redmine-API-Key", _config.ApiKey); } if (!string.IsNullOrWhiteSpace(_config.RedmineUrl) && request.RequestUri != null) { _logger.LogDebug("Refreshing base URI"); string baseUrlStr = _config.RedmineUrl.EndsWith("/") ? _config.RedmineUrl : _config.RedmineUrl + "/"; var baseUri = new Uri(baseUrlStr); string pathAndQuery = request.RequestUri.PathAndQuery; if (pathAndQuery.StartsWith("/")) { pathAndQuery = pathAndQuery.Substring(1); } request.RequestUri = new Uri(baseUri, pathAndQuery); } return await base.SendAsync(request, cancellationToken); } } }