You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: Enhance ActivityPub compliance with Move activity handling and featured collection support; add integration tests for actor document and migration scenarios
Copy file name to clipboardExpand all lines: README.md
+120-6Lines changed: 120 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,13 +6,104 @@ A modular .NET library for building ActivityPub-enabled applications.
6
6
7
7
Broca provides a complete, standards-compliant implementation of the ActivityPub protocol for .NET developers. It offers both client and server capabilities with a clean API that makes federation simple.
8
8
9
-
**Key Features:**
10
-
- ✅ Full ActivityPub client and server implementation
11
-
- ✅ HTTP Signatures for authenticated federation
9
+
## Features
10
+
11
+
### Core ActivityPub Protocol
12
+
13
+
**Client-to-Server (C2S)**
14
+
- ✅ Post activities to outbox (Create, Like, Follow, Announce, Undo)
15
+
- ✅ Server-assigned activity IDs with proper URL structure
16
+
- ✅ Follow/Unfollow relationship management
17
+
- ✅ HTTP Signature authentication for outbox operations
18
+
- ✅ API key-based client authentication
19
+
20
+
**Server-to-Server (S2S) Federation**
21
+
- ✅ Cross-server activity delivery with HTTP Signatures
22
+
- ✅ Background delivery queue with retry logic
23
+
- ✅ Follow/Accept/Reject workflow (auto-accept and manual approval modes)
24
+
- ✅ Undo operations (Follow, Like, Announce)
25
+
- ✅ Delete activities with Tombstone support
26
+
- ✅ Update Person for profile changes
27
+
- ✅ Move activity for account migration with `alsoKnownAs` validation
28
+
- ✅ Date validation (reject stale or future-dated requests)
29
+
- ✅ Actor caching and refresh
30
+
31
+
**Shared Inbox**
32
+
- ✅ Efficient batch delivery to multiple local users
33
+
- ✅ To, Cc, and Bcc addressing support
34
+
- ✅ Public addressing (`https://www.w3.org/ns/activitystreams#Public`)
All critical and high-priority federation features are complete. See [docs/s2s-compliance-todo.md](docs/s2s-compliance-todo.md) for detailed compliance tracking.
All tests use real HTTP clients and in-memory servers to validate end-to-end behavior, not mocked implementations. This ensures that Broca works correctly with actual ActivityPub clients and servers in the fediverse.
425
+
312
426
## Contributing
313
427
314
428
Contributions are welcome! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for development workflow and guidelines.
### M1 · `Move` activity not handled (account migration)
17
+
### ✅ M1 · `Move` activity handled (COMPLETED)
18
18
19
19
**File:**`InboxProcessor.cs`
20
20
21
-
`Move` is used by Mastodon for account portability. Currently falls to `_ => true` (accepted but not processed).
21
+
`Move` is used by Mastodon for account portability. When a user migrates to a new account, followers are automatically migrated.
22
22
23
-
**Fix:**Handle`Move` by updating the follower's following list: replace the old actor IRI with the new one (if the new actor's `alsoKnownAs` references the old one, to prevent spoofing).
23
+
**Implementation:**Handles`Move` by updating the follower's following list: replaces the old actor IRI with the new one if the new actor's `alsoKnownAs` references the old one (prevents spoofing).
24
24
25
-
**Priority:**Medium - required for full Mastodon compatibility, but low usage.
25
+
**Status:**✅ Implemented and tested with security validation.
26
26
27
27
---
28
28
@@ -38,15 +38,15 @@ Mastodon expects a `featured` property on the actor document pointing to an `Ord
38
38
39
39
---
40
40
41
-
### M3 · Actor document missing `alsoKnownAs` field
41
+
### ✅ M3 · `alsoKnownAs` field supported (COMPLETED)
42
42
43
-
**File:**`ActorController.cs` → `Get`
43
+
**File:**`ActorController.cs`
44
44
45
-
Required for `Move`-based account migration. Actors need to be able to declare aliases.
45
+
Required for `Move`-based account migration. Actors can declare aliases via the `alsoKnownAs` property.
46
46
47
-
**Fix:**Support an `alsoKnownAs` property in the actor's stored extension data and expose it in the actor document response.
47
+
**Implementation:**Supported via actor's ExtensionData dictionary. Set as a JSON array of actor URI strings.
48
48
49
-
**Priority:**Medium - required for M1 (Move activity) to be fully functional.
49
+
**Status:**✅ No code changes required - ExtensionData already serializes arbitrary fields in actor documents.
50
50
51
51
---
52
52
@@ -80,9 +80,9 @@ The outer `Split(',')` then inner `Split('=', 2)` approach is correct for most c
80
80
81
81
| Order | Item | Effort | Notes |
82
82
|-------|------|--------|-------|
83
-
| 1 |M2 — `featured` collection on actor | Small|Quick win — collection infrastructure exists|
0 commit comments