From a25cb31a620d162fc2eb92d65cf2fd63729e6147 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Sat, 16 Jan 2021 00:51:52 -0500 Subject: [PATCH] fix httpclient candid implementation --- src/BirdsiteLive.Cryptography/MagicKey.cs | 19 ------------------ src/BirdsiteLive.Domain/ActivityPubService.cs | 20 +++++++++---------- .../BirdsiteLive.Domain.csproj | 4 ++++ 3 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/BirdsiteLive.Cryptography/MagicKey.cs b/src/BirdsiteLive.Cryptography/MagicKey.cs index 24f7af2..23d478a 100644 --- a/src/BirdsiteLive.Cryptography/MagicKey.cs +++ b/src/BirdsiteLive.Cryptography/MagicKey.cs @@ -105,25 +105,6 @@ namespace BirdsiteLive.Cryptography return new MagicKey(JsonConvert.SerializeObject(RSAKeyParms.From(rsa.ExportParameters(true)))); } - //public static async Task KeyForAuthor(ASObject obj) - //{ - // var authorId = (string)obj["email"].FirstOrDefault()?.Primitive; - // if (authorId == null) - // { - // authorId = obj["name"].FirstOrDefault()?.Primitive + "@" + new Uri(obj.Id).Host; - // } - - // var domain = authorId.Split('@')[1]; - // var hc = new HttpClient(); - // var wf = JsonConvert.DeserializeObject(await hc.GetStringAsync($"https://{domain}/.well-known/webfinger?resource=acct:{Uri.EscapeDataString(authorId)}")); - // var link = wf.links.FirstOrDefault(a => a.rel == "magic-public-key"); - // if (link == null) return null; - - // if (!link.href.StartsWith("data:")) return null; // does this happen? - - // return new MagicKey(link.href.Split(new char[] { ',' }, 2)[1]); - //} - public byte[] BuildSignedData(string data, string dataType, string encoding, string algorithm) { var sig = data + "." + _encodeBase64Url(Encoding.UTF8.GetBytes(dataType)) + "." + _encodeBase64Url(Encoding.UTF8.GetBytes(encoding)) + "." + _encodeBase64Url(Encoding.UTF8.GetBytes(algorithm)); diff --git a/src/BirdsiteLive.Domain/ActivityPubService.cs b/src/BirdsiteLive.Domain/ActivityPubService.cs index 8072075..4d8fc54 100644 --- a/src/BirdsiteLive.Domain/ActivityPubService.cs +++ b/src/BirdsiteLive.Domain/ActivityPubService.cs @@ -25,25 +25,25 @@ namespace BirdsiteLive.Domain public class ActivityPubService : IActivityPubService { private readonly InstanceSettings _instanceSettings; + private readonly IHttpClientFactory _httpClientFactory; private readonly ICryptoService _cryptoService; #region Ctor - public ActivityPubService(ICryptoService cryptoService, InstanceSettings instanceSettings) + public ActivityPubService(ICryptoService cryptoService, InstanceSettings instanceSettings, IHttpClientFactory httpClientFactory) { _cryptoService = cryptoService; _instanceSettings = instanceSettings; + _httpClientFactory = httpClientFactory; } #endregion public async Task GetUser(string objectId) { - using (var httpClient = new HttpClient()) - { - httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); - var result = await httpClient.GetAsync(objectId); - var content = await result.Content.ReadAsStringAsync(); - return JsonConvert.DeserializeObject(content); - } + var httpClient = _httpClientFactory.CreateClient(); + httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); + var result = await httpClient.GetAsync(objectId); + var content = await result.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(content); } public async Task PostNewNoteActivity(Note note, string username, string noteId, string targetHost, string targetInbox) @@ -53,7 +53,7 @@ namespace BirdsiteLive.Domain var now = DateTime.UtcNow; var nowString = now.ToString("s") + "Z"; - + var noteActivity = new ActivityCreateNote() { context = "https://www.w3.org/ns/activitystreams", @@ -85,7 +85,7 @@ namespace BirdsiteLive.Domain var signature = _cryptoService.SignAndGetSignatureHeader(date, actorUrl, targetHost, digest, usedInbox); - var client = new HttpClient(); //TODO: remove this from here + var client = _httpClientFactory.CreateClient(); var httpRequestMessage = new HttpRequestMessage { Method = HttpMethod.Post, diff --git a/src/BirdsiteLive.Domain/BirdsiteLive.Domain.csproj b/src/BirdsiteLive.Domain/BirdsiteLive.Domain.csproj index cb89578..8c601b4 100644 --- a/src/BirdsiteLive.Domain/BirdsiteLive.Domain.csproj +++ b/src/BirdsiteLive.Domain/BirdsiteLive.Domain.csproj @@ -4,6 +4,10 @@ netstandard2.0 + + + +