diff --git a/internal/gtsmodel/interactionpolicy.go b/internal/gtsmodel/interactionpolicy.go index 4fa5f4d8e..a7455a108 100644 --- a/internal/gtsmodel/interactionpolicy.go +++ b/internal/gtsmodel/interactionpolicy.go @@ -244,6 +244,12 @@ func (pr1 *PolicyRules) DifferentFrom(pr2 *PolicyRules) bool { return true } + // If they're both nil we don't + // need to check anything else. + if pr1 == nil && pr2 == nil { + return false + } + // Check if AutomaticApproval // differs between the two. if slices.Compare( diff --git a/internal/typeutils/internaltoas.go b/internal/typeutils/internaltoas.go index feb794e51..6255ee8e2 100644 --- a/internal/typeutils/internaltoas.go +++ b/internal/typeutils/internaltoas.go @@ -2438,8 +2438,8 @@ func (c *Converter) InteractionReqToASAuthorization( } // appendASInteractionAuthorization is a utility function -// that sets `approvedBy`, and `likeAuthorization`, -// `replyAuthorization`, or `announceAuthorization`. +// that sets `approvedBy`, and (if possible) `likeAuthorization`, +// `replyAuthorization`, and/or `announceAuthorization`. func (c *Converter) appendASInteractionAuthorization( ctx context.Context, approvedByURIStr string, @@ -2458,11 +2458,28 @@ func (c *Converter) appendASInteractionAuthorization( gtscontext.SetBarebones(ctx), approvedByURIStr, ) - if err != nil { + if err != nil && !errors.Is(err, db.ErrNoEntries) { return gtserror.Newf("db error checking for int req: %w", err) } - // Make sure it's actually accepted. + // If the interaction request is nil, + // that means we originally sent out + // the interaction request impolitely, + // and it was accepted impolitely. + // Ie., behavior from <= v0.20.0. + // + // If this is so, just set `approvedBy` + // to given approvedByURIStr and bail, + // as there's nothing else we can do. + if intReq == nil { + if wap, ok := t.(ap.WithApprovedBy); ok { + ap.SetApprovedBy(wap, approvedByURI) + } + return nil + } + + // Make sure interaction request + // has actually been accepted. if !intReq.IsAccepted() { return gtserror.Newf( "approvedByURIStr %s corresponded to not-accepted interaction request %s",