From bef0dfc66cd7fd11d17fa1cb900d582071a8d5ba Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Sun, 25 Aug 2024 12:18:39 +0200 Subject: [PATCH] [bugfix] Carry-over `ApprovedByURI` to avoid marking already-approved remote statuses as pending approval (#3231) * [bugfix] Carry-over pendingApproval + approvedByURI to avoid pending already-approved remote statuses * don't carry over pending_approval, not necessary * comment --- internal/federation/dereferencing/status.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/internal/federation/dereferencing/status.go b/internal/federation/dereferencing/status.go index fa9906066..271ced21a 100644 --- a/internal/federation/dereferencing/status.go +++ b/internal/federation/dereferencing/status.go @@ -514,6 +514,17 @@ func (d *Dereferencer) enrichStatus( latestStatus.FetchedAt = time.Now() latestStatus.Local = status.Local + // Carry-over approvals. Remote instances might not yet + // serve statuses with the `approved_by` field, but we + // might have marked a status as pre-approved on our side + // based on the author's inclusion in a followers/following + // collection. By carrying over previously-set values we + // can avoid marking such statuses as "pending" again. + // + // If a remote has in the meantime retracted its approval, + // the next call to 'isPermittedStatus' will catch that. + latestStatus.ApprovedByURI = status.ApprovedByURI + // Check if this is a permitted status we should accept. // Function also sets "PendingApproval" bool as necessary. permit, err := d.isPermittedStatus(ctx, requestUser, status, latestStatus)