namespace marlin.core.functional; using System.Diagnostics; using System.Text; /// /// 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). /// 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 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(NoopAsyncDisposable.Instance); } }