From b7c0058de3b49ed939697592acd222d28745d4d1 Mon Sep 17 00:00:00 2001 From: Kevin Bost Date: Sat, 18 May 2024 10:23:09 -0700 Subject: [PATCH] Registering HMAC handler on VPK CLI --- .../Flow}/HmacAuthHttpClientHandler.cs | 21 +++++++------------ .../Commands/Flow/LoginCommandRunner.cs | 3 ++- src/Velopack.Vpk/Program.cs | 3 ++- 3 files changed, 12 insertions(+), 15 deletions(-) rename src/{Velopack.Build => Velopack.Packaging/Flow}/HmacAuthHttpClientHandler.cs (69%) diff --git a/src/Velopack.Build/HmacAuthHttpClientHandler.cs b/src/Velopack.Packaging/Flow/HmacAuthHttpClientHandler.cs similarity index 69% rename from src/Velopack.Build/HmacAuthHttpClientHandler.cs rename to src/Velopack.Packaging/Flow/HmacAuthHttpClientHandler.cs index 0936e284..8590c55c 100644 --- a/src/Velopack.Build/HmacAuthHttpClientHandler.cs +++ b/src/Velopack.Packaging/Flow/HmacAuthHttpClientHandler.cs @@ -1,26 +1,21 @@ -using System; -using System.Net.Http; +using System.Net.Http; using System.Net.Http.Headers; -using System.Threading; -using System.Threading.Tasks; -using Velopack.Packaging.Flow; -namespace Velopack.Build; +namespace Velopack.Packaging.Flow; -internal class HmacAuthHttpClientHandler : HttpClientHandler +public class HmacAuthHttpClientHandler : DelegatingHandler { protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (request.Headers.Authorization?.Scheme == HmacHelper.HmacScheme && request.Headers.Authorization.Parameter is { } authParameter && authParameter.Split(':') is var keyParts && - keyParts.Length == 2) - { - string hashedId = keyParts[0]; - string key = keyParts[1]; - string nonce = Guid.NewGuid().ToString(); + keyParts.Length == 2) { + var hashedId = keyParts[0]; + var key = keyParts[1]; + var nonce = Guid.NewGuid().ToString(); - uint secondsSinceEpoch = HmacHelper.GetSecondsSinceEpoch(); + var secondsSinceEpoch = HmacHelper.GetSecondsSinceEpoch(); var signature = HmacHelper.BuildSignature(hashedId, request.Method.Method, request.RequestUri?.AbsoluteUri ?? "", secondsSinceEpoch, nonce); var secret = HmacHelper.Calculate(Convert.FromBase64String(key), signature); request.Headers.Authorization = BuildHeader(hashedId, secret, nonce, secondsSinceEpoch); diff --git a/src/Velopack.Vpk/Commands/Flow/LoginCommandRunner.cs b/src/Velopack.Vpk/Commands/Flow/LoginCommandRunner.cs index 3b6fc224..4b8ccc90 100644 --- a/src/Velopack.Vpk/Commands/Flow/LoginCommandRunner.cs +++ b/src/Velopack.Vpk/Commands/Flow/LoginCommandRunner.cs @@ -9,7 +9,8 @@ public class LoginCommandRunner(IVelopackFlowServiceClient Client) : ICommand(); - services.AddHttpClient(); + services.AddSingleton(); + services.AddHttpClient().ConfigureHttpClientDefaults(x => x.AddHttpMessageHandler()); } }