From 034b7928015d5a0eff87a27f0afc68fca5d3b603 Mon Sep 17 00:00:00 2001 From: thepra Date: Thu, 1 Oct 2026 10:39:41 +0200 Subject: [PATCH] Move the federation code under Federation/, namespaces only Services/Federation and Controllers/ServerToServer become Federation/{Actors,Signing,Inbox,Outbox,Rendering,Controllers}, the first step of the roadmap's layout. No type, route or behaviour changes. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB --- CLAUDE.md | 13 ++++++++----- .../Actors}/LocalActorService.cs | 2 +- .../Actors}/RemoteActorService.cs | 3 ++- .../Controllers}/PeasantsController.cs | 6 ++++-- .../Controllers}/UsersController.cs | 2 +- .../Controllers}/WellKnownController.cs | 4 ++-- .../Federation => Federation/Inbox}/InboxService.cs | 6 +++++- .../Outbox}/DeliveryService.cs | 4 +++- .../Rendering}/ActivityPubRenderer.cs | 3 ++- .../Signing}/HttpSignatures.cs | 3 ++- PrivaPub/Middleware/SocialPubConfigurations.cs | 4 +++- .../Private/IPrivateAvatarUsersService.cs | 2 +- PrivaPub/Services/GroupUsersService.cs | 4 +++- PrivaPub/Services/PostsService.cs | 4 +++- 14 files changed, 40 insertions(+), 20 deletions(-) rename PrivaPub/{Services/Federation => Federation/Actors}/LocalActorService.cs (99%) rename PrivaPub/{Services/Federation => Federation/Actors}/RemoteActorService.cs (99%) rename PrivaPub/{Controllers/ServerToServer => Federation/Controllers}/PeasantsController.cs (97%) rename PrivaPub/{Controllers/ServerToServer => Federation/Controllers}/UsersController.cs (85%) rename PrivaPub/{Controllers/ServerToServer => Federation/Controllers}/WellKnownController.cs (97%) rename PrivaPub/{Services/Federation => Federation/Inbox}/InboxService.cs (98%) rename PrivaPub/{Services/Federation => Federation/Outbox}/DeliveryService.cs (98%) rename PrivaPub/{Services/Federation => Federation/Rendering}/ActivityPubRenderer.cs (98%) rename PrivaPub/{Services/Federation => Federation/Signing}/HttpSignatures.cs (98%) diff --git a/CLAUDE.md b/CLAUDE.md index 30f8aec..94af610 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,13 +73,16 @@ PrivaPub/ ASP.NET Core Web API, net10.0 Middleware/SocialPubConfigurations.cs every DI registration (auth, federation, services, swagger, CORS) Controllers/ClientToServer/ /clientapi/*: RootUser (signup/login/invitations/recovery), PrivateAvatar, Group, Post (posts + DMs), Admin, Data - Controllers/ServerToServer/ PeasantsController (actor, outbox, followers, following, posts, inboxes), + Federation/ + Controllers/ PeasantsController (actor, outbox, followers, following, posts, inboxes), WellKnownController (webfinger, nodeinfo), UsersController (redirect) + Actors/ LocalActorService (LocalActor, Keys), RemoteActorService (signed fetch, + WebFinger, ForeignAvatar cache) + Signing/ HttpSignatures (draft-cavage sign/verify) + Inbox/ InboxService (Follow/Undo/Create/Delete/Update) + Outbox/ DeliveryService + DeliveryWorker + Rendering/ ActivityPubRenderer (JsonObject builders) Services/ RootUsersService, GroupUsersService, PostsService, AppConfigurationService, … - Services/Federation/ LocalActorService (LocalActor, Keys), HttpSignatures (draft-cavage), - RemoteActorService (signed fetch, WebFinger, ForeignAvatar cache), - ActivityPubRenderer (JsonObject builders), DeliveryService + DeliveryWorker, - InboxService (Follow/Undo/Create/Delete/Update) Models/ Mongo entities: User/, Group/, Post/, Federation/, AppConfiguration StaticServices/ DbEntities (Find accessors), AuthTokenManager (JWT), PasswordHasher Data/InitDb.cs first-run seeding (languages) diff --git a/PrivaPub/Services/Federation/LocalActorService.cs b/PrivaPub/Federation/Actors/LocalActorService.cs similarity index 99% rename from PrivaPub/Services/Federation/LocalActorService.cs rename to PrivaPub/Federation/Actors/LocalActorService.cs index 9be1d19..5312b38 100644 --- a/PrivaPub/Services/Federation/LocalActorService.cs +++ b/PrivaPub/Federation/Actors/LocalActorService.cs @@ -11,7 +11,7 @@ using System.Security.Cryptography; using GroupEntity = PrivaPub.Models.Group.Group; -namespace PrivaPub.Services.Federation +namespace PrivaPub.Federation.Actors { public class LocalActor { diff --git a/PrivaPub/Services/Federation/RemoteActorService.cs b/PrivaPub/Federation/Actors/RemoteActorService.cs similarity index 99% rename from PrivaPub/Services/Federation/RemoteActorService.cs rename to PrivaPub/Federation/Actors/RemoteActorService.cs index 6fe62a4..82907b6 100644 --- a/PrivaPub/Services/Federation/RemoteActorService.cs +++ b/PrivaPub/Federation/Actors/RemoteActorService.cs @@ -5,8 +5,9 @@ using PrivaPub.StaticServices; using System.Net.Http.Headers; using System.Text.Json; +using PrivaPub.Federation.Signing; -namespace PrivaPub.Services.Federation +namespace PrivaPub.Federation.Actors { public interface IRemoteActorService { diff --git a/PrivaPub/Controllers/ServerToServer/PeasantsController.cs b/PrivaPub/Federation/Controllers/PeasantsController.cs similarity index 97% rename from PrivaPub/Controllers/ServerToServer/PeasantsController.cs rename to PrivaPub/Federation/Controllers/PeasantsController.cs index 6206d6b..549e5ac 100644 --- a/PrivaPub/Controllers/ServerToServer/PeasantsController.cs +++ b/PrivaPub/Federation/Controllers/PeasantsController.cs @@ -3,14 +3,16 @@ using Microsoft.AspNetCore.Mvc; using MongoDB.Entities; using PrivaPub.Models.Federation; -using PrivaPub.Services.Federation; using PrivaPub.StaticServices; using System.Text.Json.Nodes; using PostEntity = PrivaPub.Models.Post.Post; +using PrivaPub.Federation.Actors; +using PrivaPub.Federation.Rendering; +using PrivaPub.Federation.Inbox; -namespace PrivaPub.Controllers.ServerToServer +namespace PrivaPub.Federation.Controllers { [ApiController, Route("peasants")] public class PeasantsController : ControllerBase diff --git a/PrivaPub/Controllers/ServerToServer/UsersController.cs b/PrivaPub/Federation/Controllers/UsersController.cs similarity index 85% rename from PrivaPub/Controllers/ServerToServer/UsersController.cs rename to PrivaPub/Federation/Controllers/UsersController.cs index 9bbed5d..c22ef5c 100644 --- a/PrivaPub/Controllers/ServerToServer/UsersController.cs +++ b/PrivaPub/Federation/Controllers/UsersController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; -namespace PrivaPub.Controllers.ServerToServer +namespace PrivaPub.Federation.Controllers { [ApiController, Route("users")] public class UsersController : ControllerBase diff --git a/PrivaPub/Controllers/ServerToServer/WellKnownController.cs b/PrivaPub/Federation/Controllers/WellKnownController.cs similarity index 97% rename from PrivaPub/Controllers/ServerToServer/WellKnownController.cs rename to PrivaPub/Federation/Controllers/WellKnownController.cs index c8e16aa..27e951e 100644 --- a/PrivaPub/Controllers/ServerToServer/WellKnownController.cs +++ b/PrivaPub/Federation/Controllers/WellKnownController.cs @@ -4,14 +4,14 @@ using MongoDB.Entities; using PrivaPub.Models.Federation; using PrivaPub.Models.User; -using PrivaPub.Services.Federation; using PrivaPub.StaticServices; using System.Text.Json.Nodes; using PostEntity = PrivaPub.Models.Post.Post; +using PrivaPub.Federation.Actors; -namespace PrivaPub.Controllers.ServerToServer +namespace PrivaPub.Federation.Controllers { [ApiController] public class WellKnownController : ControllerBase diff --git a/PrivaPub/Services/Federation/InboxService.cs b/PrivaPub/Federation/Inbox/InboxService.cs similarity index 98% rename from PrivaPub/Services/Federation/InboxService.cs rename to PrivaPub/Federation/Inbox/InboxService.cs index d1327b5..11a5659 100644 --- a/PrivaPub/Services/Federation/InboxService.cs +++ b/PrivaPub/Federation/Inbox/InboxService.cs @@ -11,8 +11,12 @@ using System.Text.Json.Nodes; using DmPostEntity = PrivaPub.Models.Post.DmPost; using GroupEntity = PrivaPub.Models.Group.Group; using PostEntity = PrivaPub.Models.Post.Post; +using PrivaPub.Federation.Actors; +using PrivaPub.Federation.Signing; +using PrivaPub.Federation.Rendering; +using PrivaPub.Federation.Outbox; -namespace PrivaPub.Services.Federation +namespace PrivaPub.Federation.Inbox { public sealed record InboxResult(int StatusCode, string Error = default); diff --git a/PrivaPub/Services/Federation/DeliveryService.cs b/PrivaPub/Federation/Outbox/DeliveryService.cs similarity index 98% rename from PrivaPub/Services/Federation/DeliveryService.cs rename to PrivaPub/Federation/Outbox/DeliveryService.cs index d2cd960..4554451 100644 --- a/PrivaPub/Services/Federation/DeliveryService.cs +++ b/PrivaPub/Federation/Outbox/DeliveryService.cs @@ -7,8 +7,10 @@ using System.Net; using System.Net.Http.Headers; using System.Text; using System.Text.Json.Nodes; +using PrivaPub.Federation.Actors; +using PrivaPub.Federation.Signing; -namespace PrivaPub.Services.Federation +namespace PrivaPub.Federation.Outbox { public interface IDeliveryService { diff --git a/PrivaPub/Services/Federation/ActivityPubRenderer.cs b/PrivaPub/Federation/Rendering/ActivityPubRenderer.cs similarity index 98% rename from PrivaPub/Services/Federation/ActivityPubRenderer.cs rename to PrivaPub/Federation/Rendering/ActivityPubRenderer.cs index 802210c..e2a72a0 100644 --- a/PrivaPub/Services/Federation/ActivityPubRenderer.cs +++ b/PrivaPub/Federation/Rendering/ActivityPubRenderer.cs @@ -7,8 +7,9 @@ using System.Text.Json.Nodes; using PostEntity = PrivaPub.Models.Post.Post; using DmPostEntity = PrivaPub.Models.Post.DmPost; +using PrivaPub.Federation.Actors; -namespace PrivaPub.Services.Federation +namespace PrivaPub.Federation.Rendering { public static class ActivityPubRenderer { diff --git a/PrivaPub/Services/Federation/HttpSignatures.cs b/PrivaPub/Federation/Signing/HttpSignatures.cs similarity index 98% rename from PrivaPub/Services/Federation/HttpSignatures.cs rename to PrivaPub/Federation/Signing/HttpSignatures.cs index 6bcb03c..b15824f 100644 --- a/PrivaPub/Services/Federation/HttpSignatures.cs +++ b/PrivaPub/Federation/Signing/HttpSignatures.cs @@ -1,8 +1,9 @@ using System.Globalization; using System.Security.Cryptography; using System.Text; +using PrivaPub.Federation.Actors; -namespace PrivaPub.Services.Federation +namespace PrivaPub.Federation.Signing { public sealed record SignatureParameters(string KeyId, string Algorithm, string[] Headers, byte[] Signature, string Created, string Expires); diff --git a/PrivaPub/Middleware/SocialPubConfigurations.cs b/PrivaPub/Middleware/SocialPubConfigurations.cs index 2333ce6..4e754b0 100644 --- a/PrivaPub/Middleware/SocialPubConfigurations.cs +++ b/PrivaPub/Middleware/SocialPubConfigurations.cs @@ -11,7 +11,9 @@ using System.Text.Json.Serialization; using Microsoft.OpenApi; using PrivaPub.Services.ClientToServer.Private; using PrivaPub.Services.ClientToServer.Public; -using PrivaPub.Services.Federation; +using PrivaPub.Federation.Actors; +using PrivaPub.Federation.Outbox; +using PrivaPub.Federation.Inbox; namespace PrivaPub.Middleware { diff --git a/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs b/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs index 810a88b..5fd606a 100644 --- a/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs +++ b/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs @@ -7,8 +7,8 @@ using PrivaPub.ClientModels.User; using PrivaPub.ClientModels.User.Avatar; using PrivaPub.Models.User; using PrivaPub.Resources; -using PrivaPub.Services.Federation; using PrivaPub.StaticServices; +using PrivaPub.Federation.Actors; namespace PrivaPub.Services.ClientToServer.Private { diff --git a/PrivaPub/Services/GroupUsersService.cs b/PrivaPub/Services/GroupUsersService.cs index 04556ee..e9a1dc8 100644 --- a/PrivaPub/Services/GroupUsersService.cs +++ b/PrivaPub/Services/GroupUsersService.cs @@ -7,10 +7,12 @@ using PrivaPub.ClientModels.Group; using PrivaPub.Models.Federation; using PrivaPub.Models.Group; using PrivaPub.Resources; -using PrivaPub.Services.Federation; using PrivaPub.StaticServices; using GroupEntity = PrivaPub.Models.Group.Group; +using PrivaPub.Federation.Actors; +using PrivaPub.Federation.Rendering; +using PrivaPub.Federation.Outbox; namespace PrivaPub.Services { diff --git a/PrivaPub/Services/PostsService.cs b/PrivaPub/Services/PostsService.cs index b579da2..348d5e5 100644 --- a/PrivaPub/Services/PostsService.cs +++ b/PrivaPub/Services/PostsService.cs @@ -7,13 +7,15 @@ using PrivaPub.ClientModels.Post; using PrivaPub.Models.Federation; using PrivaPub.Models.Group; using PrivaPub.Resources; -using PrivaPub.Services.Federation; using PrivaPub.StaticServices; using System.Text.Json.Nodes; using DmPostEntity = PrivaPub.Models.Post.DmPost; using PostEntity = PrivaPub.Models.Post.Post; +using PrivaPub.Federation.Actors; +using PrivaPub.Federation.Rendering; +using PrivaPub.Federation.Outbox; namespace PrivaPub.Services {