From be00d5237f80081b9f314a60f17447dbe217c47b Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Sat, 17 Feb 2024 03:51:25 +0100 Subject: [PATCH] [backend/federation] Add To & Cc fields to create & update activities --- .../ActivityPub/ActivityRenderer.cs | 16 ++++++-- .../ActivityStreams/Types/ASActivity.cs | 38 +++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/Iceshrimp.Backend/Core/Federation/ActivityPub/ActivityRenderer.cs b/Iceshrimp.Backend/Core/Federation/ActivityPub/ActivityRenderer.cs index 5e7e9307..2eadf3b2 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityPub/ActivityRenderer.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityPub/ActivityRenderer.cs @@ -16,14 +16,22 @@ public class ActivityRenderer( private string GenerateActivityId() => $"https://{config.Value.WebDomain}/activities/{Guid.NewGuid().ToString().ToLowerInvariant()}"; - public static ASCreate RenderCreate(ASObject obj, ASObject actor) => new() + public static ASCreate RenderCreate(ASNote obj, ASObject actor) => new() { - Id = $"{obj.Id}#Create", Actor = ASActor.FromObject(actor), Object = obj + Id = $"{obj.Id}#Create", + Actor = ASActor.FromObject(actor), + Object = obj, + To = obj.To, + Cc = obj.Cc }; - public ASUpdate RenderUpdate(ASObject obj, ASObject actor) => new() + public ASUpdate RenderUpdate(ASNote obj, ASObject actor) => new() { - Id = GenerateActivityId(), Actor = ASActor.FromObject(actor), Object = obj + Id = GenerateActivityId(), + Actor = ASActor.FromObject(actor), + Object = obj, + To = obj.To, + Cc = obj.Cc }; public ASAccept RenderAccept(User followee, User follower, string requestId) => new() diff --git a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASActivity.cs b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASActivity.cs index a6408b02..e5e00378 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASActivity.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityStreams/Types/ASActivity.cs @@ -1,6 +1,7 @@ using Iceshrimp.Backend.Core.Configuration; using J = Newtonsoft.Json.JsonPropertyAttribute; using JC = Newtonsoft.Json.JsonConverterAttribute; +using JI = Newtonsoft.Json.JsonIgnoreAttribute; namespace Iceshrimp.Backend.Core.Federation.ActivityStreams.Types; @@ -33,6 +34,24 @@ public class ASActivity : ASObject public class ASCreate : ASActivity { public ASCreate() => Type = Types.Create; + + [J($"{Constants.ActivityStreamsNs}#to")] + public List? To { get; set; } + + [J($"{Constants.ActivityStreamsNs}#cc")] + public List? Cc { get; set; } + + [JI] + public new ASNote? Object + { + get => base.Object as ASNote; + set + { + base.Object = value; + To = value?.To; + Cc = value?.Cc; + } + } } public class ASDelete : ASActivity @@ -73,6 +92,25 @@ public class ASLike : ASActivity public class ASUpdate : ASActivity { public ASUpdate() => Type = Types.Update; + + [J($"{Constants.ActivityStreamsNs}#to")] + public List? To { get; set; } + + [J($"{Constants.ActivityStreamsNs}#cc")] + public List? Cc { get; set; } + + [J($"{Constants.ActivityStreamsNs}#object")] + public new ASObject? Object + { + get => base.Object; + set + { + base.Object = value; + if (value is not ASNote note) return; + To = note.To; + Cc = note.Cc; + } + } } //TODO: add the rest