From 69a193dae543641a2db6823fa6493c02f56fafbd Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Fri, 23 Sep 2022 21:27:35 +0200 Subject: [feature] Allow delivery to sharedInboxes where possible (#847) * update Activity * add instance-deliver-to-shared-inboxes setting * update activity version again * add SharedInboxURI field to accounts * serdes for endpoints/sharedInbox * deliver to sharedInbox if one is available * update tests * only assign shared inbox if shared domain * look for shared inbox if currently nil * go fmt * finger to get params.RemoteAccountID if necessary * make comments clearer * compare dns more consistently --- internal/ap/extract.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'internal/ap/extract.go') diff --git a/internal/ap/extract.go b/internal/ap/extract.go index e1566059c..2d3a6fd9c 100644 --- a/internal/ap/extract.go +++ b/internal/ap/extract.go @@ -702,3 +702,33 @@ func ExtractSensitive(withSensitive WithSensitive) bool { return false } + +// ExtractSharedInbox extracts the sharedInbox URI properly from an Actor. +// Returns nil if this property is not set. +func ExtractSharedInbox(withEndpoints WithEndpoints) *url.URL { + endpointsProp := withEndpoints.GetActivityStreamsEndpoints() + if endpointsProp == nil { + return nil + } + + for iter := endpointsProp.Begin(); iter != endpointsProp.End(); iter = iter.Next() { + if iter.IsActivityStreamsEndpoints() { + endpoints := iter.Get() + if endpoints == nil { + return nil + } + sharedInboxProp := endpoints.GetActivityStreamsSharedInbox() + if sharedInboxProp == nil { + return nil + } + + if !sharedInboxProp.IsIRI() { + return nil + } + + return sharedInboxProp.GetIRI() + } + } + + return nil +} -- cgit v1.2.3