blob: 5dfef66f8aa9db69061d27713b04fba4b7430d54 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
namespace marlin.core.functional;
using System.Diagnostics;
using System.Text;
/// <summary>
/// HTTPS auth via a bearer/basic token. Injected as an Authorization header for a
/// single git invocation through GIT_CONFIG_* env vars, so it never appears in argv
/// (visible via ps) or in git's own error output (which echoes the URL, not headers).
/// </summary>
public sealed class TokenGitCredential : IGitCredential
{
private readonly string _username;
private readonly string _token;
public TokenGitCredential(string token, string username = "x-access-token")
{
this._token = token;
this._username = username;
}
public Task<IAsyncDisposable> ApplyAsync(ProcessStartInfo psi)
{
string header = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{this._username}:{this._token}"));
psi.Environment["GIT_CONFIG_COUNT"] = "1";
psi.Environment["GIT_CONFIG_KEY_0"] = "http.extraheader";
psi.Environment["GIT_CONFIG_VALUE_0"] = $"AUTHORIZATION: basic {header}";
return Task.FromResult<IAsyncDisposable>(NoopAsyncDisposable.Instance);
}
}
|