From aa396c78d30c129bb2145765d3990571dbc025bb Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:45:46 +0100 Subject: [feature] serdes for moved/also_known_as (#2600) * [feature] serdes for moved/also_known_as * document `alsoKnownAs` and `movedTo` properties * only implicitly populate AKA uris from DB for local accounts * don't let remotes store more than 20 AKA uris to avoid shenanigans --- internal/ap/normalize.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'internal/ap/normalize.go') diff --git a/internal/ap/normalize.go b/internal/ap/normalize.go index a27527b84..8e0a022c1 100644 --- a/internal/ap/normalize.go +++ b/internal/ap/normalize.go @@ -391,6 +391,36 @@ func NormalizeOutgoingAttachmentProp(item WithAttachment, rawJSON map[string]int rawJSON["attachment"] = []interface{}{attachment} } +// NormalizeOutgoingAlsoKnownAsProp replaces single-entry alsoKnownAs values with +// single-entry arrays, for better compatibility with other AP implementations. +// +// Ie: +// +// "alsoKnownAs": "https://example.org/users/some_user" +// +// becomes: +// +// "alsoKnownAs": ["https://example.org/users/some_user"] +// +// Noop for items with no attachments, or with attachments that are already a slice. +func NormalizeOutgoingAlsoKnownAsProp(item WithAlsoKnownAs, rawJSON map[string]interface{}) { + alsoKnownAs, ok := rawJSON["alsoKnownAs"] + if !ok { + // No 'alsoKnownAs', + // nothing to change. + return + } + + if _, ok := alsoKnownAs.([]interface{}); ok { + // Already slice, + // nothing to change. + return + } + + // Coerce single-object to slice. + rawJSON["alsoKnownAs"] = []interface{}{alsoKnownAs} +} + // NormalizeOutgoingContentProp normalizes go-fed's funky formatting of content and // contentMap properties to a format better understood by other AP implementations. // -- cgit v1.2.3