diff options
Diffstat (limited to 'internal/processing/common')
| -rw-r--r-- | internal/processing/common/status.go | 34 | 
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/processing/common/status.go b/internal/processing/common/status.go index da5cf1290..01f2ab72d 100644 --- a/internal/processing/common/status.go +++ b/internal/processing/common/status.go @@ -31,6 +31,40 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/log"  ) +// GetOwnStatus fetches the given status with ID, +// and ensures that it belongs to given requester. +func (p *Processor) GetOwnStatus( +	ctx context.Context, +	requester *gtsmodel.Account, +	targetID string, +) ( +	*gtsmodel.Status, +	gtserror.WithCode, +) { +	target, err := p.state.DB.GetStatusByID(ctx, targetID) +	if err != nil && !errors.Is(err, db.ErrNoEntries) { +		err := gtserror.Newf("error getting from db: %w", err) +		return nil, gtserror.NewErrorInternalError(err) +	} + +	switch { +	case target == nil: +		const text = "target status not found" +		return nil, gtserror.NewErrorNotFound( +			errors.New(text), +			text, +		) + +	case target.AccountID != requester.ID: +		return nil, gtserror.NewErrorNotFound( +			errors.New("status does not belong to requester"), +			"target status not found", +		) +	} + +	return target, nil +} +  // GetTargetStatusBy fetches the target status with db load  // function, given the authorized (or, nil) requester's  // account. This returns an approprate gtserror.WithCode  | 
