Skip to content

Commit

Permalink
GH-37: Set request headers dynamically in request message builder
Browse files Browse the repository at this point in the history
  • Loading branch information
henrikfroehling committed Jul 28, 2018
1 parent 9a4fec6 commit 453ac53
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,14 @@ public async Task<TraktResponse<ITraktDevice>> GetDeviceAsync(DeviceRequest requ
try
{
request.Validate();
ExtendedHttpRequestMessage requestMessage = await _requestMessageBuilder.Reset(request).WithRequestBody(request.RequestBody).Build().ConfigureAwait(false);

ExtendedHttpRequestMessage requestMessage =
await _requestMessageBuilder.Reset(request)
.WithRequestBody(request.RequestBody)
.DisableAPIVersionHeader()
.DisableAPIClientIdHeader()
.Build().ConfigureAwait(false);

HttpResponseMessage responseMessage = await _client.HttpClientProvider.GetHttpClient().SendAsync(requestMessage, cancellationToken).ConfigureAwait(false);

if (!responseMessage.IsSuccessStatusCode)
Expand Down Expand Up @@ -185,7 +192,14 @@ public async Task<TraktResponse<ITraktAuthorization>> PollForAuthorizationAsync(
try
{
request.Validate();
ExtendedHttpRequestMessage requestMessage = await _requestMessageBuilder.Reset(request).WithRequestBody(request.RequestBody).Build().ConfigureAwait(false);

ExtendedHttpRequestMessage requestMessage =
await _requestMessageBuilder.Reset(request)
.WithRequestBody(request.RequestBody)
.DisableAPIVersionHeader()
.DisableAPIClientIdHeader()
.Build().ConfigureAwait(false);

HttpResponseMessage responseMessage;
Stream responseContentStream;
HttpStatusCode responseCode;
Expand Down Expand Up @@ -261,8 +275,14 @@ public async Task<TraktNoContentResponse> RevokeAuthorizationAsync(Authorization
throw new ArgumentException("client id not valid", nameof(clientId));

request.Validate();
ExtendedHttpRequestMessage requestMessage = await _requestMessageBuilder.Reset(request).WithRequestBody(request.RequestBody).Build().ConfigureAwait(false);
//HttpClient httpClient = _httpClientProvider.GetHttpClient(clientId, request.RequestBody.AccessToken);

ExtendedHttpRequestMessage requestMessage =
await _requestMessageBuilder.Reset(request)
.WithRequestBody(request.RequestBody)
.DisableAPIVersionHeader()
.DisableAPIClientIdHeader()
.Build().ConfigureAwait(false);

HttpResponseMessage responseMessage = await _client.HttpClientProvider.GetHttpClient().SendAsync(requestMessage, cancellationToken).ConfigureAwait(false);

if (!responseMessage.IsSuccessStatusCode)
Expand Down Expand Up @@ -314,7 +334,14 @@ public async Task<TraktNoContentResponse> RevokeAuthorizationAsync(Authorization
try
{
request.Validate();
ExtendedHttpRequestMessage requestMessage = await _requestMessageBuilder.Reset(request).WithRequestBody(request.RequestBody).Build().ConfigureAwait(false);

ExtendedHttpRequestMessage requestMessage =
await _requestMessageBuilder.Reset(request)
.WithRequestBody(request.RequestBody)
.DisableAPIVersionHeader()
.DisableAPIClientIdHeader()
.Build().ConfigureAwait(false);

HttpResponseMessage responseMessage = await _client.HttpClientProvider.GetHttpClient().SendAsync(requestMessage, cancellationToken).ConfigureAwait(false);

HttpStatusCode responseCode = responseMessage.StatusCode;
Expand Down
6 changes: 2 additions & 4 deletions Source/Lib/Trakt.NET/Requests/Handler/HttpClientProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,17 @@ public virtual HttpClient GetHttpClient()
return httpClient;
}

private HttpClient SetupHttpClient()
protected virtual HttpClient SetupHttpClient()
{
var httpClient = new HttpClient();
SetDefaultRequestHeaders(httpClient);
return httpClient;
}

private void SetDefaultRequestHeaders(HttpClient httpClient)
protected virtual void SetDefaultRequestHeaders(HttpClient httpClient)
{
httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(MEDIA_TYPE_HEADER);
httpClient.DefaultRequestHeaders.Add(Constants.APIVersionHeaderKey, $"{_client.Configuration.ApiVersion}");
httpClient.DefaultRequestHeaders.Add(Constants.APIClientIdHeaderKey, _client.ClientId);
}
}
}
45 changes: 42 additions & 3 deletions Source/Lib/Trakt.NET/Requests/Handler/RequestMessageBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,15 @@ internal class RequestMessageBuilder
private IRequest _request;
private IRequestBody _requestBody;
private readonly TraktClient _client;
private bool _useAPIVersionHeader;
private bool _useAPIClientIdHeader;

internal RequestMessageBuilder(TraktClient client) => _client = client ?? throw new ArgumentNullException(nameof(client));
internal RequestMessageBuilder(TraktClient client)
{
_useAPIVersionHeader = true;
_useAPIClientIdHeader = true;
_client = client ?? throw new ArgumentNullException(nameof(client));
}

internal RequestMessageBuilder(IRequest request, TraktClient client) : this(client) => _request = request;

Expand All @@ -36,16 +43,42 @@ internal RequestMessageBuilder WithRequestBody(IRequestBody requestBody)

internal RequestMessageBuilder Reset(IRequest request)
{
_useAPIVersionHeader = true;
_useAPIClientIdHeader = true;
_request = request;
_requestBody = null;
return this;
}

internal RequestMessageBuilder DisableAPIVersionHeader()
{
_useAPIVersionHeader = false;
return this;
}

internal RequestMessageBuilder EnableAPIVersionHeader()
{
_useAPIVersionHeader = true;
return this;
}

internal RequestMessageBuilder DisableAPIClientIdHeader()
{
_useAPIClientIdHeader = false;
return this;
}

internal RequestMessageBuilder EnableAPIClientIdHeader()
{
_useAPIClientIdHeader = true;
return this;
}

internal async Task<ExtendedHttpRequestMessage> Build(CancellationToken cancellationToken = default)
{
ExtendedHttpRequestMessage requestMessage = CreateRequestMessage();
await AddRequestBodyContent(requestMessage, cancellationToken).ConfigureAwait(false);
SetRequestMessageHeadersForAuthorization(requestMessage);
SetRequestMessageHeaders(requestMessage);
return requestMessage;
}

Expand Down Expand Up @@ -114,8 +147,14 @@ private async Task AddRequestBodyContent(ExtendedHttpRequestMessage requestMessa
}
}

private void SetRequestMessageHeadersForAuthorization(ExtendedHttpRequestMessage requestMessage)
private void SetRequestMessageHeaders(ExtendedHttpRequestMessage requestMessage)
{
if (_useAPIVersionHeader)
requestMessage.Headers.Add(Constants.APIVersionHeaderKey, $"{_client.Configuration.ApiVersion}");

if (_useAPIClientIdHeader)
requestMessage.Headers.Add(Constants.APIClientIdHeaderKey, _client.ClientId);

AuthorizationRequirement authorizationRequirement = _request.AuthorizationRequirement;

if (authorizationRequirement != AuthorizationRequirement.NotRequired)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ public HttpClient GetHttpClient()
{
_mockHttpMessageHandler.Should().NotBeNull();
var httpClient = new HttpClient(_mockHttpMessageHandler);
httpClient.DefaultRequestHeaders.Add(TRAKT_API_HEADER_KEY, _clientId);
httpClient.DefaultRequestHeaders.Add(TRAKT_API_VERSION_HEADER_KEY, "2");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ACCEPT_MEDIA_TYPE));
return httpClient;
}
Expand Down

0 comments on commit 453ac53

Please sign in to comment.