diff --git a/src/File/Http/GitHubAuthHandler.cs b/src/File/Http/GitHubAuthHandler.cs index ec4ac80..54cd3a4 100644 --- a/src/File/Http/GitHubAuthHandler.cs +++ b/src/File/Http/GitHubAuthHandler.cs @@ -20,25 +20,35 @@ protected override async Task SendAsync(HttpRequestMessage if (request.RequestUri == null) return await base.SendAsync(request, cancellationToken); - var creds = await GetCredentialAsync(); - var builder = new UriBuilder(request.RequestUri) + var response = await base.SendAsync(request, cancellationToken); + if (response.StatusCode == System.Net.HttpStatusCode.Forbidden || + response.StatusCode == System.Net.HttpStatusCode.NotFound) { - UserName = creds.Password, - Password = "x-auth-basic" - }; - - // retry the request - var retry = new HttpRequestMessage(HttpMethod.Get, builder.Uri); - retry.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.Password))); - foreach (var etag in request.Headers.IfNoneMatch) - { - retry.Headers.IfNoneMatch.Add(etag); + var creds = await GetCredentialAsync(); + if (creds == null) + return response; + + var builder = new UriBuilder(request.RequestUri) + { + UserName = creds.Password, + Password = "x-auth-basic" + }; + + // retry the request + var retry = new HttpRequestMessage(HttpMethod.Get, builder.Uri); + retry.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(creds.Password))); + foreach (var etag in request.Headers.IfNoneMatch) + { + retry.Headers.IfNoneMatch.Add(etag); + } + + return await base.SendAsync(retry, cancellationToken); } - return await base.SendAsync(retry, cancellationToken); + return response; } - async Task GetCredentialAsync() + async Task GetCredentialAsync() { if (credential != null) return credential; @@ -51,8 +61,15 @@ async Task GetCredentialAsync() var provider = new GitHubHostProvider(new CommandContext()); - credential = await provider.GetCredentialAsync(input); - return credential; + try + { + credential = await provider.GetCredentialAsync(input); + return credential; + } + catch (Exception) + { + return null; + } } } }