Skip to content

Commit

Permalink
Only authenticate with GH if necessary
Browse files Browse the repository at this point in the history
For public repos, we don't even need creds for fetching.
  • Loading branch information
kzu committed Jul 2, 2024
1 parent cc2f99a commit 5f60c8c
Showing 1 changed file with 33 additions and 16 deletions.
49 changes: 33 additions & 16 deletions src/File/Http/GitHubAuthHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,35 @@ protected override async Task<HttpResponseMessage> 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<ICredential> GetCredentialAsync()
async Task<ICredential?> GetCredentialAsync()
{
if (credential != null)
return credential;
Expand All @@ -51,8 +61,15 @@ async Task<ICredential> 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;
}
}
}
}

0 comments on commit 5f60c8c

Please sign in to comment.