diff options
Diffstat (limited to 'internal/federation')
| -rw-r--r-- | internal/federation/dereferencing/account.go | 54 | ||||
| -rw-r--r-- | internal/federation/dereferencing/dereferencer.go | 4 | ||||
| -rw-r--r-- | internal/federation/dereferencing/emoji.go | 2 | ||||
| -rw-r--r-- | internal/federation/dereferencing/media.go | 2 | ||||
| -rw-r--r-- | internal/federation/dereferencing/status.go | 44 | ||||
| -rw-r--r-- | internal/federation/dereferencing/thread.go | 18 | ||||
| -rw-r--r-- | internal/federation/federator.go | 4 | 
7 files changed, 64 insertions, 64 deletions
| diff --git a/internal/federation/dereferencing/account.go b/internal/federation/dereferencing/account.go index 764dc1539..eec6e3e92 100644 --- a/internal/federation/dereferencing/account.go +++ b/internal/federation/dereferencing/account.go @@ -21,7 +21,6 @@ import (  	"context"  	"encoding/json"  	"errors" -	"fmt"  	"io"  	"net/url"  	"time" @@ -31,6 +30,7 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/ap"  	"github.com/superseriousbusiness/gotosocial/internal/config"  	"github.com/superseriousbusiness/gotosocial/internal/db" +	"github.com/superseriousbusiness/gotosocial/internal/gtserror"  	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"  	"github.com/superseriousbusiness/gotosocial/internal/id"  	"github.com/superseriousbusiness/gotosocial/internal/log" @@ -93,14 +93,14 @@ func (d *deref) getAccountByURI(ctx context.Context, requestUser string, uri *ur  	// Search the database for existing account with ID URI.  	account, err = d.state.DB.GetAccountByURI(ctx, uriStr)  	if err != nil && !errors.Is(err, db.ErrNoEntries) { -		return nil, nil, fmt.Errorf("GetAccountByURI: error checking database for account %s by uri: %w", uriStr, err) +		return nil, nil, gtserror.Newf("error checking database for account %s by uri: %w", uriStr, err)  	}  	if account == nil {  		// Else, search the database for existing by ID URL.  		account, err = d.state.DB.GetAccountByURL(ctx, uriStr)  		if err != nil && !errors.Is(err, db.ErrNoEntries) { -			return nil, nil, fmt.Errorf("GetAccountByURI: error checking database for account %s by url: %w", uriStr, err) +			return nil, nil, gtserror.Newf("error checking database for account %s by url: %w", uriStr, err)  		}  	} @@ -155,7 +155,7 @@ func (d *deref) GetAccountByUsernameDomain(ctx context.Context, requestUser stri  	// Search the database for existing account with USERNAME@DOMAIN.  	account, err := d.state.DB.GetAccountByUsernameDomain(ctx, username, domain)  	if err != nil && !errors.Is(err, db.ErrNoEntries) { -		return nil, nil, fmt.Errorf("GetAccountByUsernameDomain: error checking database for account %s@%s: %w", username, domain, err) +		return nil, nil, gtserror.Newf("error checking database for account %s@%s: %w", username, domain, err)  	}  	if account == nil { @@ -209,7 +209,7 @@ func (d *deref) RefreshAccount(ctx context.Context, requestUser string, account  	// Parse the URI from account.  	uri, err := url.Parse(account.URI)  	if err != nil { -		return nil, nil, fmt.Errorf("RefreshAccount: invalid account uri %q: %w", account.URI, err) +		return nil, nil, gtserror.Newf("invalid account uri %q: %w", account.URI, err)  	}  	// Try to update + deref existing account model. @@ -249,7 +249,7 @@ func (d *deref) RefreshAccountAsync(ctx context.Context, requestUser string, acc  	// Parse the URI from account.  	uri, err := url.Parse(account.URI)  	if err != nil { -		log.Errorf(ctx, "RefreshAccountAsync: invalid account uri %q: %v", account.URI, err) +		log.Errorf(ctx, "invalid account uri %q: %v", account.URI, err)  		return  	} @@ -273,7 +273,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  	// Pre-fetch a transport for requesting username, used by later deref procedures.  	tsport, err := d.transportController.NewTransportForUsername(ctx, requestUser)  	if err != nil { -		return nil, nil, fmt.Errorf("enrichAccount: couldn't create transport: %w", err) +		return nil, nil, gtserror.Newf("couldn't create transport: %w", err)  	}  	if account.Username != "" { @@ -282,7 +282,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  		if err != nil {  			if account.URI == "" {  				// this is a new account (to us) with username@domain but failed webfinger, nothing more we can do. -				return nil, nil, &ErrNotRetrievable{fmt.Errorf("enrichAccount: error webfingering account: %w", err)} +				return nil, nil, &ErrNotRetrievable{gtserror.Newf("error webfingering account: %w", err)}  			}  			// Simply log this error and move on, we already have an account URI. @@ -298,7 +298,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  				// After webfinger, we now have correct account domain from which we can do a final DB check.  				alreadyAccount, err := d.state.DB.GetAccountByUsernameDomain(ctx, account.Username, accDomain)  				if err != nil && !errors.Is(err, db.ErrNoEntries) { -					return nil, nil, fmt.Errorf("enrichAccount: db err looking for account again after webfinger: %w", err) +					return nil, nil, gtserror.Newf("db err looking for account again after webfinger: %w", err)  				}  				if alreadyAccount != nil { @@ -318,15 +318,15 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  		// No URI provided / found, must parse from account.  		uri, err = url.Parse(account.URI)  		if err != nil { -			return nil, nil, fmt.Errorf("enrichAccount: invalid uri %q: %w", account.URI, err) +			return nil, nil, gtserror.Newf("invalid uri %q: %w", account.URI, err)  		}  	}  	// Check whether this account URI is a blocked domain / subdomain.  	if blocked, err := d.state.DB.IsDomainBlocked(ctx, uri.Host); err != nil { -		return nil, nil, fmt.Errorf("enrichAccount: error checking blocked domain: %w", err) +		return nil, nil, gtserror.Newf("error checking blocked domain: %w", err)  	} else if blocked { -		return nil, nil, fmt.Errorf("enrichAccount: %s is blocked", uri.Host) +		return nil, nil, gtserror.Newf("%s is blocked", uri.Host)  	}  	// Mark deref+update handshake start. @@ -341,13 +341,13 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  		// Dereference latest version of the account.  		b, err := tsport.Dereference(ctx, uri)  		if err != nil { -			return nil, nil, &ErrNotRetrievable{fmt.Errorf("enrichAccount: error deferencing %s: %w", uri, err)} +			return nil, nil, &ErrNotRetrievable{gtserror.Newf("error deferencing %s: %w", uri, err)}  		}  		// Attempt to resolve ActivityPub account from data.  		apubAcc, err = ap.ResolveAccountable(ctx, b)  		if err != nil { -			return nil, nil, fmt.Errorf("enrichAccount: error resolving accountable from data for account %s: %w", uri, err) +			return nil, nil, gtserror.Newf("error resolving accountable from data for account %s: %w", uri, err)  		}  		// Convert the dereferenced AP account object to our GTS model. @@ -356,7 +356,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  			account.Domain,  		)  		if err != nil { -			return nil, nil, fmt.Errorf("enrichAccount: error converting accountable to gts model for account %s: %w", uri, err) +			return nil, nil, gtserror.Newf("error converting accountable to gts model for account %s: %w", uri, err)  		}  	} @@ -375,7 +375,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  		// Assume the host from the returned ActivityPub representation.  		idProp := apubAcc.GetJSONLDId()  		if idProp == nil || !idProp.IsIRI() { -			return nil, nil, errors.New("enrichAccount: no id property found on person, or id was not an iri") +			return nil, nil, gtserror.New("no id property found on person, or id was not an iri")  		}  		// Get IRI host value. @@ -471,7 +471,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  		}  		if err != nil { -			return nil, nil, fmt.Errorf("enrichAccount: error putting in database: %w", err) +			return nil, nil, gtserror.Newf("error putting in database: %w", err)  		}  	} else {  		// Set time of update from the last-fetched date. @@ -483,7 +483,7 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  		// This is an existing account, update the model in the database.  		if err := d.state.DB.UpdateAccount(ctx, latestAcc); err != nil { -			return nil, nil, fmt.Errorf("enrichAccount: error updating database: %w", err) +			return nil, nil, gtserror.Newf("error updating database: %w", err)  		}  	} @@ -513,7 +513,7 @@ func (d *deref) fetchRemoteAccountAvatar(ctx context.Context, tsport transport.T  		}  		// Create new media processing request from the media manager instance. -		processing, err = d.mediaManager.PreProcessMedia(ctx, data, nil, accountID, &media.AdditionalMediaInfo{ +		processing, err = d.mediaManager.PreProcessMedia(ctx, data, accountID, &media.AdditionalMediaInfo{  			Avatar:    func() *bool { v := true; return &v }(),  			RemoteURL: &avatarURL,  		}) @@ -566,7 +566,7 @@ func (d *deref) fetchRemoteAccountHeader(ctx context.Context, tsport transport.T  		}  		// Create new media processing request from the media manager instance. -		processing, err = d.mediaManager.PreProcessMedia(ctx, data, nil, accountID, &media.AdditionalMediaInfo{ +		processing, err = d.mediaManager.PreProcessMedia(ctx, data, accountID, &media.AdditionalMediaInfo{  			Header:    func() *bool { v := true; return &v }(),  			RemoteURL: &headerURL,  		}) @@ -719,7 +719,7 @@ func (d *deref) dereferenceAccountFeatured(ctx context.Context, requestUser stri  	// Pre-fetch a transport for requesting username, used by later deref procedures.  	tsport, err := d.transportController.NewTransportForUsername(ctx, requestUser)  	if err != nil { -		return fmt.Errorf("enrichAccount: couldn't create transport: %w", err) +		return gtserror.Newf("couldn't create transport: %w", err)  	}  	b, err := tsport.Dereference(ctx, uri) @@ -729,32 +729,32 @@ func (d *deref) dereferenceAccountFeatured(ctx context.Context, requestUser stri  	m := make(map[string]interface{})  	if err := json.Unmarshal(b, &m); err != nil { -		return fmt.Errorf("error unmarshalling bytes into json: %w", err) +		return gtserror.Newf("error unmarshalling bytes into json: %w", err)  	}  	t, err := streams.ToType(ctx, m)  	if err != nil { -		return fmt.Errorf("error resolving json into ap vocab type: %w", err) +		return gtserror.Newf("error resolving json into ap vocab type: %w", err)  	}  	if t.GetTypeName() != ap.ObjectOrderedCollection { -		return fmt.Errorf("%s was not an OrderedCollection", uri) +		return gtserror.Newf("%s was not an OrderedCollection", uri)  	}  	collection, ok := t.(vocab.ActivityStreamsOrderedCollection)  	if !ok { -		return errors.New("couldn't coerce OrderedCollection") +		return gtserror.New("couldn't coerce OrderedCollection")  	}  	items := collection.GetActivityStreamsOrderedItems()  	if items == nil { -		return errors.New("nil orderedItems") +		return gtserror.New("nil orderedItems")  	}  	// Get previous pinned statuses (we'll need these later).  	wasPinned, err := d.state.DB.GetAccountPinnedStatuses(ctx, account.ID)  	if err != nil && !errors.Is(err, db.ErrNoEntries) { -		return fmt.Errorf("error getting account pinned statuses: %w", err) +		return gtserror.Newf("error getting account pinned statuses: %w", err)  	}  	statusURIs := make([]*url.URL, 0, items.Len()) diff --git a/internal/federation/dereferencing/dereferencer.go b/internal/federation/dereferencing/dereferencer.go index 26d3432d0..2902ebcbc 100644 --- a/internal/federation/dereferencing/dereferencer.go +++ b/internal/federation/dereferencing/dereferencer.go @@ -81,7 +81,7 @@ type deref struct {  	state               *state.State  	typeConverter       typeutils.TypeConverter  	transportController transport.Controller -	mediaManager        media.Manager +	mediaManager        *media.Manager  	derefAvatars        map[string]*media.ProcessingMedia  	derefAvatarsMu      mutexes.Mutex  	derefHeaders        map[string]*media.ProcessingMedia @@ -93,7 +93,7 @@ type deref struct {  }  // NewDereferencer returns a Dereferencer initialized with the given parameters. -func NewDereferencer(state *state.State, typeConverter typeutils.TypeConverter, transportController transport.Controller, mediaManager media.Manager) Dereferencer { +func NewDereferencer(state *state.State, typeConverter typeutils.TypeConverter, transportController transport.Controller, mediaManager *media.Manager) Dereferencer {  	return &deref{  		state:               state,  		typeConverter:       typeConverter, diff --git a/internal/federation/dereferencing/emoji.go b/internal/federation/dereferencing/emoji.go index 857d0c040..3ce3c7f10 100644 --- a/internal/federation/dereferencing/emoji.go +++ b/internal/federation/dereferencing/emoji.go @@ -60,7 +60,7 @@ func (d *deref) GetRemoteEmoji(ctx context.Context, requestingUsername string, r  			return t.DereferenceMedia(innerCtx, derefURI)  		} -		newProcessing, err := d.mediaManager.PreProcessEmoji(ctx, dataFunc, nil, shortcode, id, emojiURI, ai, refresh) +		newProcessing, err := d.mediaManager.PreProcessEmoji(ctx, dataFunc, shortcode, id, emojiURI, ai, refresh)  		if err != nil {  			return nil, fmt.Errorf("GetRemoteEmoji: error processing emoji %s: %s", shortcodeDomain, err)  		} diff --git a/internal/federation/dereferencing/media.go b/internal/federation/dereferencing/media.go index e57aa8161..315da1c39 100644 --- a/internal/federation/dereferencing/media.go +++ b/internal/federation/dereferencing/media.go @@ -45,7 +45,7 @@ func (d *deref) GetRemoteMedia(ctx context.Context, requestingUsername string, a  		return t.DereferenceMedia(innerCtx, derefURI)  	} -	processingMedia, err := d.mediaManager.ProcessMedia(ctx, dataFunc, nil, accountID, ai) +	processingMedia, err := d.mediaManager.ProcessMedia(ctx, dataFunc, accountID, ai)  	if err != nil {  		return nil, fmt.Errorf("GetRemoteMedia: error processing attachment: %s", err)  	} diff --git a/internal/federation/dereferencing/status.go b/internal/federation/dereferencing/status.go index dfec0605f..fede8b3ea 100644 --- a/internal/federation/dereferencing/status.go +++ b/internal/federation/dereferencing/status.go @@ -20,7 +20,6 @@ package dereferencing  import (  	"context"  	"errors" -	"fmt"  	"io"  	"net/url"  	"time" @@ -28,6 +27,7 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/ap"  	"github.com/superseriousbusiness/gotosocial/internal/config"  	"github.com/superseriousbusiness/gotosocial/internal/db" +	"github.com/superseriousbusiness/gotosocial/internal/gtserror"  	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"  	"github.com/superseriousbusiness/gotosocial/internal/id"  	"github.com/superseriousbusiness/gotosocial/internal/log" @@ -83,14 +83,14 @@ func (d *deref) getStatusByURI(ctx context.Context, requestUser string, uri *url  	// Search the database for existing status with ID URI.  	status, err = d.state.DB.GetStatusByURI(ctx, uriStr)  	if err != nil && !errors.Is(err, db.ErrNoEntries) { -		return nil, nil, fmt.Errorf("GetStatusByURI: error checking database for status %s by uri: %w", uriStr, err) +		return nil, nil, gtserror.Newf("error checking database for status %s by uri: %w", uriStr, err)  	}  	if status == nil {  		// Else, search the database for existing by ID URL.  		status, err = d.state.DB.GetStatusByURL(ctx, uriStr)  		if err != nil && !errors.Is(err, db.ErrNoEntries) { -			return nil, nil, fmt.Errorf("GetStatusByURI: error checking database for status %s by url: %w", uriStr, err) +			return nil, nil, gtserror.Newf("error checking database for status %s by url: %w", uriStr, err)  		}  	} @@ -138,7 +138,7 @@ func (d *deref) RefreshStatus(ctx context.Context, requestUser string, status *g  	// Parse the URI from status.  	uri, err := url.Parse(status.URI)  	if err != nil { -		return nil, nil, fmt.Errorf("RefreshStatus: invalid status uri %q: %w", status.URI, err) +		return nil, nil, gtserror.Newf("invalid status uri %q: %w", status.URI, err)  	}  	// Try to update + deref existing status model. @@ -170,7 +170,7 @@ func (d *deref) RefreshStatusAsync(ctx context.Context, requestUser string, stat  	// Parse the URI from status.  	uri, err := url.Parse(status.URI)  	if err != nil { -		log.Errorf(ctx, "RefreshStatusAsync: invalid status uri %q: %v", status.URI, err) +		log.Errorf(ctx, "invalid status uri %q: %v", status.URI, err)  		return  	} @@ -192,14 +192,14 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  	// Pre-fetch a transport for requesting username, used by later dereferencing.  	tsport, err := d.transportController.NewTransportForUsername(ctx, requestUser)  	if err != nil { -		return nil, nil, fmt.Errorf("enrichStatus: couldn't create transport: %w", err) +		return nil, nil, gtserror.Newf("couldn't create transport: %w", err)  	}  	// Check whether this account URI is a blocked domain / subdomain.  	if blocked, err := d.state.DB.IsDomainBlocked(ctx, uri.Host); err != nil { -		return nil, nil, fmt.Errorf("enrichStatus: error checking blocked domain: %w", err) +		return nil, nil, gtserror.Newf("error checking blocked domain: %w", err)  	} else if blocked { -		return nil, nil, fmt.Errorf("enrichStatus: %s is blocked", uri.Host) +		return nil, nil, gtserror.Newf("%s is blocked", uri.Host)  	}  	var derefd bool @@ -208,13 +208,13 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  		// Dereference latest version of the status.  		b, err := tsport.Dereference(ctx, uri)  		if err != nil { -			return nil, nil, &ErrNotRetrievable{fmt.Errorf("enrichStatus: error deferencing %s: %w", uri, err)} +			return nil, nil, &ErrNotRetrievable{gtserror.Newf("error deferencing %s: %w", uri, err)}  		}  		// Attempt to resolve ActivityPub status from data.  		apubStatus, err = ap.ResolveStatusable(ctx, b)  		if err != nil { -			return nil, nil, fmt.Errorf("enrichStatus: error resolving statusable from data for account %s: %w", uri, err) +			return nil, nil, gtserror.Newf("error resolving statusable from data for account %s: %w", uri, err)  		}  		// Mark as deref'd. @@ -224,14 +224,14 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  	// Get the attributed-to status in order to fetch profile.  	attributedTo, err := ap.ExtractAttributedTo(apubStatus)  	if err != nil { -		return nil, nil, errors.New("enrichStatus: attributedTo was empty") +		return nil, nil, gtserror.New("attributedTo was empty")  	}  	// Ensure we have the author account of the status dereferenced (+ up-to-date).  	if author, _, err := d.getAccountByURI(ctx, requestUser, attributedTo); err != nil {  		if status.AccountID == "" {  			// Provided status account is nil, i.e. this is a new status / author, so a deref fail is unrecoverable. -			return nil, nil, fmt.Errorf("enrichStatus: failed to dereference status author %s: %w", uri, err) +			return nil, nil, gtserror.Newf("failed to dereference status author %s: %w", uri, err)  		}  	} else if status.AccountID != "" && status.AccountID != author.ID {  		// There already existed an account for this status author, but account ID changed. This shouldn't happen! @@ -247,7 +247,7 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  		// may contain out-of-date information, convert AP model to our GTS model.  		latestStatus, err = d.typeConverter.ASStatusToStatus(ctx, apubStatus)  		if err != nil { -			return nil, nil, fmt.Errorf("enrichStatus: error converting statusable to gts model for status %s: %w", uri, err) +			return nil, nil, gtserror.Newf("error converting statusable to gts model for status %s: %w", uri, err)  		}  	} @@ -258,7 +258,7 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  		// Generate new status ID from the provided creation date.  		latestStatus.ID, err = id.NewULIDFromTime(latestStatus.CreatedAt)  		if err != nil { -			return nil, nil, fmt.Errorf("enrichStatus: invalid created at date: %w", err) +			return nil, nil, gtserror.Newf("invalid created at date: %w", err)  		}  	} @@ -268,19 +268,19 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  	// Ensure the status' mentions are populated, and pass in existing to check for changes.  	if err := d.fetchStatusMentions(ctx, requestUser, status, latestStatus); err != nil { -		return nil, nil, fmt.Errorf("enrichStatus: error populating mentions for status %s: %w", uri, err) +		return nil, nil, gtserror.Newf("error populating mentions for status %s: %w", uri, err)  	}  	// TODO: populateStatusTags()  	// Ensure the status' media attachments are populated, passing in existing to check for changes.  	if err := d.fetchStatusAttachments(ctx, tsport, status, latestStatus); err != nil { -		return nil, nil, fmt.Errorf("enrichStatus: error populating attachments for status %s: %w", uri, err) +		return nil, nil, gtserror.Newf("error populating attachments for status %s: %w", uri, err)  	}  	// Ensure the status' emoji attachments are populated, passing in existing to check for changes.  	if err := d.fetchStatusEmojis(ctx, requestUser, status, latestStatus); err != nil { -		return nil, nil, fmt.Errorf("enrichStatus: error populating emojis for status %s: %w", uri, err) +		return nil, nil, gtserror.Newf("error populating emojis for status %s: %w", uri, err)  	}  	if status.CreatedAt.IsZero() { @@ -297,12 +297,12 @@ func (d *deref) enrichStatus(ctx context.Context, requestUser string, uri *url.U  		}  		if err != nil { -			return nil, nil, fmt.Errorf("enrichStatus: error putting in database: %w", err) +			return nil, nil, gtserror.Newf("error putting in database: %w", err)  		}  	} else {  		// This is an existing status, update the model in the database.  		if err := d.state.DB.UpdateStatus(ctx, latestStatus); err != nil { -			return nil, nil, fmt.Errorf("enrichStatus: error updating database: %w", err) +			return nil, nil, gtserror.Newf("error updating database: %w", err)  		}  	} @@ -359,7 +359,7 @@ func (d *deref) fetchStatusMentions(ctx context.Context, requestUser string, exi  		// Place the new mention into the database.  		if err := d.state.DB.PutMention(ctx, mention); err != nil { -			return fmt.Errorf("error putting mention in database: %w", err) +			return gtserror.Newf("error putting mention in database: %w", err)  		}  		// Set the *new* mention and ID. @@ -406,7 +406,7 @@ func (d *deref) fetchStatusAttachments(ctx context.Context, tsport transport.Tra  		// Start pre-processing remote media at remote URL.  		processing, err := d.mediaManager.PreProcessMedia(ctx, func(ctx context.Context) (io.ReadCloser, int64, error) {  			return tsport.DereferenceMedia(ctx, remoteURL) -		}, nil, status.AccountID, &media.AdditionalMediaInfo{ +		}, status.AccountID, &media.AdditionalMediaInfo{  			StatusID:    &status.ID,  			RemoteURL:   &placeholder.RemoteURL,  			Description: &placeholder.Description, @@ -447,7 +447,7 @@ func (d *deref) fetchStatusEmojis(ctx context.Context, requestUser string, exist  	// Fetch the full-fleshed-out emoji objects for our status.  	emojis, err := d.populateEmojis(ctx, status.Emojis, requestUser)  	if err != nil { -		return fmt.Errorf("failed to populate emojis: %w", err) +		return gtserror.Newf("failed to populate emojis: %w", err)  	}  	// Iterate over and get their IDs. diff --git a/internal/federation/dereferencing/thread.go b/internal/federation/dereferencing/thread.go index b516f837b..3b58b4eed 100644 --- a/internal/federation/dereferencing/thread.go +++ b/internal/federation/dereferencing/thread.go @@ -19,13 +19,13 @@ package dereferencing  import (  	"context" -	"fmt"  	"net/url"  	"codeberg.org/gruf/go-kv"  	"github.com/superseriousbusiness/activity/streams/vocab"  	"github.com/superseriousbusiness/gotosocial/internal/ap"  	"github.com/superseriousbusiness/gotosocial/internal/config" +	"github.com/superseriousbusiness/gotosocial/internal/gtserror"  	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"  	"github.com/superseriousbusiness/gotosocial/internal/log"  	"github.com/superseriousbusiness/gotosocial/internal/uris" @@ -39,12 +39,12 @@ const maxIter = 1000  func (d *deref) dereferenceThread(ctx context.Context, username string, statusIRI *url.URL, status *gtsmodel.Status, statusable ap.Statusable) {  	// Ensure that ancestors have been fully dereferenced  	if err := d.dereferenceStatusAncestors(ctx, username, status); err != nil { -		log.Errorf(ctx, "error dereferencing status ancestors: %v", err) +		log.Error(ctx, err) // log entry and error will include caller prefixes  	}  	// Ensure that descendants have been fully dereferenced  	if err := d.dereferenceStatusDescendants(ctx, username, statusIRI, statusable); err != nil { -		log.Errorf(ctx, "error dereferencing status descendants: %v", err) +		log.Error(ctx, err) // log entry and error will include caller prefixes  	}  } @@ -72,7 +72,7 @@ func (d *deref) dereferenceStatusAncestors(ctx context.Context, username string,  		// Parse this status's replied IRI  		replyIRI, err := url.Parse(status.InReplyToURI)  		if err != nil { -			return fmt.Errorf("invalid status InReplyToURI %q: %w", status.InReplyToURI, err) +			return gtserror.Newf("invalid status InReplyToURI %q: %w", status.InReplyToURI, err)  		}  		if replyIRI.Host == config.GetHost() { @@ -81,13 +81,13 @@ func (d *deref) dereferenceStatusAncestors(ctx context.Context, username string,  			// This is our status, extract ID from path  			_, id, err := uris.ParseStatusesPath(replyIRI)  			if err != nil { -				return fmt.Errorf("invalid local status IRI %q: %w", status.InReplyToURI, err) +				return gtserror.Newf("invalid local status IRI %q: %w", status.InReplyToURI, err)  			}  			// Fetch this status from the database  			localStatus, err := d.state.DB.GetStatusByID(ctx, id)  			if err != nil { -				return fmt.Errorf("error fetching local status %q: %w", id, err) +				return gtserror.Newf("error fetching local status %q: %w", id, err)  			}  			// Set the fetched status @@ -102,7 +102,7 @@ func (d *deref) dereferenceStatusAncestors(ctx context.Context, username string,  				replyIRI,  			)  			if err != nil { -				return fmt.Errorf("error fetching remote status %q: %w", status.InReplyToURI, err) +				return gtserror.Newf("error fetching remote status %q: %w", status.InReplyToURI, err)  			}  			// Set the fetched status @@ -110,7 +110,7 @@ func (d *deref) dereferenceStatusAncestors(ctx context.Context, username string,  		}  	} -	return fmt.Errorf("reached %d ancestor iterations for %q", maxIter, ogIRI) +	return gtserror.Newf("reached %d ancestor iterations for %q", maxIter, ogIRI)  }  func (d *deref) dereferenceStatusDescendants(ctx context.Context, username string, statusIRI *url.URL, parent ap.Statusable) error { @@ -312,5 +312,5 @@ stackLoop:  		}  	} -	return fmt.Errorf("reached %d descendant iterations for %q", maxIter, ogIRI.String()) +	return gtserror.Newf("reached %d descendant iterations for %q", maxIter, ogIRI.String())  } diff --git a/internal/federation/federator.go b/internal/federation/federator.go index c5aed6e62..40af08d25 100644 --- a/internal/federation/federator.go +++ b/internal/federation/federator.go @@ -62,13 +62,13 @@ type federator struct {  	clock               pub.Clock  	typeConverter       typeutils.TypeConverter  	transportController transport.Controller -	mediaManager        media.Manager +	mediaManager        *media.Manager  	actor               pub.FederatingActor  	dereferencing.Dereferencer  }  // NewFederator returns a new federator -func NewFederator(state *state.State, federatingDB federatingdb.DB, transportController transport.Controller, typeConverter typeutils.TypeConverter, mediaManager media.Manager) Federator { +func NewFederator(state *state.State, federatingDB federatingdb.DB, transportController transport.Controller, typeConverter typeutils.TypeConverter, mediaManager *media.Manager) Federator {  	dereferencer := dereferencing.NewDereferencer(state, typeConverter, transportController, mediaManager)  	clock := &Clock{} | 
