🐛 Activitypub request didn't sign
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using DysonNetwork.Shared.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
@@ -235,6 +236,12 @@ public class ActivityPubDeliveryService(
|
||||
request.Content = new StringContent(json, Encoding.UTF8, "application/activity+json");
|
||||
request.Headers.Date = DateTimeOffset.UtcNow;
|
||||
|
||||
var bodyBytes = Encoding.UTF8.GetBytes(json);
|
||||
using var sha256 = SHA256.Create();
|
||||
var hash = sha256.ComputeHash(bodyBytes);
|
||||
var digest = $"SHA-256={Convert.ToBase64String(hash)}";
|
||||
request.Headers.Add("Digest", digest);
|
||||
|
||||
var signatureHeaders = await signatureService.SignOutgoingRequest(request, actorUri);
|
||||
var signature = signatureHeaders;
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ public class ActivityPubSignatureService(
|
||||
var keyPair = GetOrGenerateKeyPair(publisher);
|
||||
var keyId = $"{actorUri}#main-key";
|
||||
|
||||
var headersToSign = new[] { "(request-target)", "host", "date" };
|
||||
var headersToSign = new[] { "(request-target)", "host", "date", "digest" };
|
||||
var signingString = BuildSigningStringForRequest(request, headersToSign);
|
||||
var signature = keyService.Sign(keyPair.privateKeyPem, signingString);
|
||||
|
||||
@@ -223,6 +223,13 @@ public class ActivityPubSignatureService(
|
||||
sb.Append(request.Headers.GetValues("Date").First());
|
||||
}
|
||||
}
|
||||
else if (header == "digest")
|
||||
{
|
||||
if (request.Headers.Contains("Digest"))
|
||||
{
|
||||
sb.Append(request.Headers.GetValues("Digest").First());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
|
||||
Reference in New Issue
Block a user