Skip to content

Commit 575e2be

Browse files
Forward auth header
1 parent c333302 commit 575e2be

File tree

12 files changed

+54
-27
lines changed

12 files changed

+54
-27
lines changed

src/ServiceControl.UnitTests/ScatterGather/MessageView_ScatterGatherTest.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Net.Http;
77
using System.Threading.Tasks;
88
using CompositeViews.Messages;
9+
using Microsoft.AspNetCore.Http;
910
using Microsoft.Extensions.Logging;
1011
using Microsoft.Extensions.Logging.Abstractions;
1112
using NUnit.Framework;
@@ -17,7 +18,7 @@ abstract class MessageView_ScatterGatherTest
1718
[SetUp]
1819
public void SetUp()
1920
{
20-
var api = new TestApi(null, null, null, NullLogger<TestApi>.Instance);
21+
var api = new TestApi(null, null, null, null, NullLogger<TestApi>.Instance);
2122

2223
Results = api.AggregateResults(new ScatterGatherApiMessageViewContext(new PagingInfo(), new SortInfo()), GetData());
2324
}
@@ -68,8 +69,8 @@ protected IEnumerable<MessagesView> RemoteData()
6869

6970
class TestApi : ScatterGatherApiMessageView<object, ScatterGatherApiMessageViewContext>
7071
{
71-
public TestApi(object dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger<TestApi> logger)
72-
: base(dataStore, settings, httpClientFactory, logger)
72+
public TestApi(object dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger<TestApi> logger)
73+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
7374
{
7475
}
7576

src/ServiceControl/CompositeViews/AuditCounts/GetAuditCountsForEndpointApi.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Threading.Tasks;
77
using Api.Contracts;
88
using Messages;
9+
using Microsoft.AspNetCore.Http;
910
using Microsoft.Extensions.Logging;
1011
using Persistence;
1112
using Persistence.Infrastructure;
@@ -21,8 +22,9 @@ public class GetAuditCountsForEndpointApi(
2122
IErrorMessageDataStore dataStore,
2223
Settings settings,
2324
IHttpClientFactory httpClientFactory,
25+
IHttpContextAccessor httpContextAccessor,
2426
ILogger<GetAuditCountsForEndpointApi> logger)
25-
: ScatterGatherApi<IErrorMessageDataStore, AuditCountsForEndpointContext, IList<AuditCount>>(dataStore, settings, httpClientFactory, logger)
27+
: ScatterGatherApi<IErrorMessageDataStore, AuditCountsForEndpointContext, IList<AuditCount>>(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
2628
{
2729
static readonly IList<AuditCount> Empty = new List<AuditCount>(0).AsReadOnly();
2830

src/ServiceControl/CompositeViews/Messages/GetAllMessagesApi.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ namespace ServiceControl.CompositeViews.Messages
33
using System.Collections.Generic;
44
using System.Net.Http;
55
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Http;
67
using Microsoft.Extensions.Logging;
78
using Persistence;
89
using Persistence.Infrastructure;
910
using ServiceBus.Management.Infrastructure.Settings;
1011

1112
public class GetAllMessagesApi : ScatterGatherApiMessageView<IErrorMessageDataStore, ScatterGatherApiMessageViewWithSystemMessagesContext>
1213
{
13-
public GetAllMessagesApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger<GetAllMessagesApi> logger)
14-
: base(dataStore, settings, httpClientFactory, logger)
14+
public GetAllMessagesApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger<GetAllMessagesApi> logger)
15+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
1516
{
1617
}
1718

src/ServiceControl/CompositeViews/Messages/GetAllMessagesForEndpointApi.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace ServiceControl.CompositeViews.Messages
33
using System.Collections.Generic;
44
using System.Net.Http;
55
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Http;
67
using Microsoft.Extensions.Logging;
78
using Persistence;
89
using Persistence.Infrastructure;
@@ -18,8 +19,8 @@ public record AllMessagesForEndpointContext(
1819

1920
public class GetAllMessagesForEndpointApi : ScatterGatherApiMessageView<IErrorMessageDataStore, AllMessagesForEndpointContext>
2021
{
21-
public GetAllMessagesForEndpointApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger<GetAllMessagesForEndpointApi> logger)
22-
: base(dataStore, settings, httpClientFactory, logger)
22+
public GetAllMessagesForEndpointApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger<GetAllMessagesForEndpointApi> logger)
23+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
2324
{
2425
}
2526

src/ServiceControl/CompositeViews/Messages/MessagesByConversationApi.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace ServiceControl.CompositeViews.Messages
33
using System.Collections.Generic;
44
using System.Net.Http;
55
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Http;
67
using Microsoft.Extensions.Logging;
78
using Persistence;
89
using Persistence.Infrastructure;
@@ -17,8 +18,8 @@ public record MessagesByConversationContext(
1718

1819
public class MessagesByConversationApi : ScatterGatherApiMessageView<IErrorMessageDataStore, MessagesByConversationContext>
1920
{
20-
public MessagesByConversationApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger<MessagesByConversationApi> logger)
21-
: base(dataStore, settings, httpClientFactory, logger)
21+
public MessagesByConversationApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger<MessagesByConversationApi> logger)
22+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
2223
{
2324
}
2425

src/ServiceControl/CompositeViews/Messages/ScatterGatherApi.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace ServiceControl.CompositeViews.Messages
77
using System.Net.Http;
88
using System.Threading.Tasks;
99
using Infrastructure.WebApi;
10+
using Microsoft.AspNetCore.Http;
1011
using Microsoft.Extensions.Logging;
1112
using Persistence.Infrastructure;
1213
using ServiceBus.Management.Infrastructure.Settings;
@@ -27,34 +28,39 @@ public abstract class ScatterGatherApi<TDataStore, TIn, TOut> : ScatterGatherApi
2728
where TIn : ScatterGatherContext
2829
where TOut : class
2930
{
30-
protected ScatterGatherApi(TDataStore store, Settings settings, IHttpClientFactory httpClientFactory, ILogger logger)
31+
protected ScatterGatherApi(TDataStore store, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger logger)
3132
{
3233
DataStore = store;
3334
Settings = settings;
3435
HttpClientFactory = httpClientFactory;
36+
HttpContextAccessor = httpContextAccessor;
3537
this.logger = logger;
3638
}
3739

3840
protected TDataStore DataStore { get; }
3941
Settings Settings { get; }
4042
IHttpClientFactory HttpClientFactory { get; }
43+
IHttpContextAccessor HttpContextAccessor { get; }
4144

4245
public async Task<QueryResult<TOut>> Execute(TIn input, string pathAndQuery)
4346
{
4447
var remotes = Settings.RemoteInstances;
4548
var instanceId = Settings.InstanceId;
49+
var authorizationHeader = HttpContextAccessor.HttpContext?.Request.Headers.Authorization.ToString();
50+
4651
var tasks = new List<Task<QueryResult<TOut>>>(remotes.Length + 1)
4752
{
4853
LocalCall(input, instanceId)
4954
};
55+
5056
foreach (var remote in remotes)
5157
{
5258
if (remote.TemporarilyUnavailable)
5359
{
5460
continue;
5561
}
5662

57-
tasks.Add(RemoteCall(HttpClientFactory.CreateClient(remote.InstanceId), pathAndQuery, remote));
63+
tasks.Add(RemoteCall(HttpClientFactory.CreateClient(remote.InstanceId), pathAndQuery, remote, authorizationHeader));
5864
}
5965

6066
var results = await Task.WhenAll(tasks);
@@ -96,19 +102,27 @@ protected virtual QueryStatsInfo AggregateStats(TIn input, IEnumerable<QueryResu
96102
);
97103
}
98104

99-
async Task<QueryResult<TOut>> RemoteCall(HttpClient client, string pathAndQuery, RemoteInstanceSetting remoteInstanceSetting)
105+
async Task<QueryResult<TOut>> RemoteCall(HttpClient client, string pathAndQuery, RemoteInstanceSetting remoteInstanceSetting, string authorizationHeader)
100106
{
101-
var fetched = await FetchAndParse(client, pathAndQuery, remoteInstanceSetting);
107+
var fetched = await FetchAndParse(client, pathAndQuery, remoteInstanceSetting, authorizationHeader);
102108
fetched.InstanceId = remoteInstanceSetting.InstanceId;
103109
return fetched;
104110
}
105111

106-
async Task<QueryResult<TOut>> FetchAndParse(HttpClient httpClient, string pathAndQuery, RemoteInstanceSetting remoteInstanceSetting)
112+
async Task<QueryResult<TOut>> FetchAndParse(HttpClient httpClient, string pathAndQuery, RemoteInstanceSetting remoteInstanceSetting, string authorizationHeader)
107113
{
108114
try
109115
{
116+
var request = new HttpRequestMessage(HttpMethod.Get, pathAndQuery);
117+
118+
// Add Authorization header if present
119+
if (!string.IsNullOrEmpty(authorizationHeader))
120+
{
121+
request.Headers.TryAddWithoutValidation("Authorization", authorizationHeader);
122+
}
123+
110124
// Assuming SendAsync returns uncompressed response and the AutomaticDecompression is enabled on the http client.
111-
var rawResponse = await httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, pathAndQuery));
125+
var rawResponse = await httpClient.SendAsync(request);
112126
// special case - queried by conversation ID and nothing was found
113127
if (rawResponse.StatusCode == HttpStatusCode.NotFound)
114128
{

src/ServiceControl/CompositeViews/Messages/ScatterGatherApiMessageView.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace ServiceControl.CompositeViews.Messages
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Net.Http;
6+
using Microsoft.AspNetCore.Http;
67
using Microsoft.Extensions.Logging;
78
using Persistence.Infrastructure;
89
using ServiceBus.Management.Infrastructure.Settings;
@@ -18,8 +19,8 @@ public record ScatterGatherApiMessageViewContext(PagingInfo PagingInfo, SortInfo
1819
public abstract class ScatterGatherApiMessageView<TDataStore, TInput> : ScatterGatherApi<TDataStore, TInput, IList<MessagesView>>
1920
where TInput : ScatterGatherApiMessageViewContext
2021
{
21-
protected ScatterGatherApiMessageView(TDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger logger)
22-
: base(dataStore, settings, httpClientFactory, logger)
22+
protected ScatterGatherApiMessageView(TDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger logger)
23+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
2324
{
2425
}
2526

src/ServiceControl/CompositeViews/Messages/ScatterGatherRemoteOnly.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ namespace ServiceControl.CompositeViews.Messages
22
{
33
using System.Net.Http;
44
using System.Threading.Tasks;
5+
using Microsoft.AspNetCore.Http;
56
using Microsoft.Extensions.Logging;
67
using Persistence.Infrastructure;
78
using ServiceBus.Management.Infrastructure.Settings;
89

9-
public abstract class ScatterGatherRemoteOnly<TIn, TOut>(Settings settings, IHttpClientFactory httpClientFactory, ILogger logger)
10-
: ScatterGatherApi<NoOpStore, TIn, TOut>(NoOpStore.Instance, settings, httpClientFactory, logger)
10+
public abstract class ScatterGatherRemoteOnly<TIn, TOut>(Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger logger)
11+
: ScatterGatherApi<NoOpStore, TIn, TOut>(NoOpStore.Instance, settings, httpClientFactory, httpContextAccessor, logger)
1112
where TIn : ScatterGatherContext
1213
where TOut : class
1314
{

src/ServiceControl/CompositeViews/Messages/SearchApi.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace ServiceControl.CompositeViews.Messages
33
using System.Collections.Generic;
44
using System.Net.Http;
55
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Http;
67
using Microsoft.Extensions.Logging;
78
using Persistence;
89
using Persistence.Infrastructure;
@@ -17,8 +18,8 @@ public record SearchApiContext(
1718

1819
public class SearchApi : ScatterGatherApiMessageView<IErrorMessageDataStore, SearchApiContext>
1920
{
20-
public SearchApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger<SearchApi> logger)
21-
: base(dataStore, settings, httpClientFactory, logger)
21+
public SearchApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger<SearchApi> logger)
22+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
2223
{
2324
}
2425

src/ServiceControl/CompositeViews/Messages/SearchEndpointApi.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace ServiceControl.CompositeViews.Messages
33
using System.Collections.Generic;
44
using System.Net.Http;
55
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Http;
67
using Microsoft.Extensions.Logging;
78
using Persistence;
89
using Persistence.Infrastructure;
@@ -18,8 +19,8 @@ public record SearchEndpointContext(
1819

1920
public class SearchEndpointApi : ScatterGatherApiMessageView<IErrorMessageDataStore, SearchEndpointContext>
2021
{
21-
public SearchEndpointApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, ILogger<SearchEndpointApi> logger)
22-
: base(dataStore, settings, httpClientFactory, logger)
22+
public SearchEndpointApi(IErrorMessageDataStore dataStore, Settings settings, IHttpClientFactory httpClientFactory, IHttpContextAccessor httpContextAccessor, ILogger<SearchEndpointApi> logger)
23+
: base(dataStore, settings, httpClientFactory, httpContextAccessor, logger)
2324
{
2425
}
2526

0 commit comments

Comments
 (0)