1
0
mirror of https://github.com/bitwarden/server.git synced 2025-04-21 21:15:10 -05:00

cleanup recursion and location header

This commit is contained in:
Kyle Spearrin 2018-06-19 17:21:31 -04:00
parent e1df06ec33
commit 06db27ae19

View File

@ -264,7 +264,7 @@ namespace Bit.Icons.Services
private async Task<HttpResponseMessage> FollowRedirectsAsync(HttpResponseMessage response, private async Task<HttpResponseMessage> FollowRedirectsAsync(HttpResponseMessage response,
int maxFollowCount, int followCount = 0) int maxFollowCount, int followCount = 0)
{ {
if(response.IsSuccessStatusCode || followCount > maxFollowCount) if(response == null || response.IsSuccessStatusCode || followCount > maxFollowCount)
{ {
return response; return response;
} }
@ -279,35 +279,31 @@ namespace Bit.Icons.Services
return null; return null;
} }
if(response.Headers.Location != null) Uri location = null;
if(response.Headers.Location.IsAbsoluteUri)
{ {
var locationHeader = response.Headers.Location.ToString(); location = response.Headers.Location;
if(!Uri.TryCreate(locationHeader, UriKind.Absolute, out Uri location)) }
{ else
if(Uri.TryCreate(locationHeader, UriKind.Relative, out Uri relLocation)) {
{ var requestUri = response.RequestMessage.RequestUri;
var requestUri = response.RequestMessage.RequestUri; location = ResolveUri($"{requestUri.Scheme}://{requestUri.Host}",
location = ResolveUri($"{requestUri.Scheme}://{requestUri.Host}", relLocation.OriginalString); response.Headers.Location.OriginalString);
} }
else
{
return null;
}
}
Cleanup(response); Cleanup(response);
var newResponse = await GetAsync(location); var newResponse = await GetAsync(location);
if(newResponse != null) if(newResponse != null)
{
followCount++;
var redirectedResponse = await FollowRedirectsAsync(newResponse, maxFollowCount, followCount);
if(redirectedResponse != null)
{ {
var redirectedResponse = await FollowRedirectsAsync(newResponse, maxFollowCount, followCount++); if(redirectedResponse != newResponse)
if(redirectedResponse != null)
{ {
if(redirectedResponse != newResponse) Cleanup(newResponse);
{
Cleanup(newResponse);
}
return redirectedResponse;
} }
return redirectedResponse;
} }
} }