mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[chore] reformat GetAccount() functionality, support updating accounts based on last_fetch (#1411)
* reformat GetAccount() functionality, and add UpdateAccount() function. * use fetched_at instead of last_webfingered_at * catch local "not found" errors. small formatting / error string changes * remove now unused error type * return nil when wrapping nil error * update expected error messages * return correct url for foss satan webfinger * add AP model for Some_User * normalize local domain * return notretrievable where appropriate * expose NewErrNotRetrievable * ensure webfinger for new accounts searched by uri * update local account short circuit * allow enrich to fail for already-known accounts * remove unused LastWebfingeredAt * expose test maps on mock http client * update Update test * reformat GetAccount() functionality, and add UpdateAccount() function. * use fetched_at instead of last_webfingered_at * catch local "not found" errors. small formatting / error string changes * remove nil error checks (we shouldn't be passing nil errors to newError() initializers) * remove mutex unlock on transport init fail (it hasn't yet been locked!) * woops add back the error wrapping to use ErrNotRetrievable * caches were never being started... 🙈 --------- Signed-off-by: kim <grufwub@gmail.com> Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
This commit is contained in:
@ -33,7 +33,7 @@ import (
|
||||
"github.com/superseriousbusiness/gotosocial/internal/uris"
|
||||
)
|
||||
|
||||
func (c *converter) ASRepresentationToAccount(ctx context.Context, accountable ap.Accountable, accountDomain string, update bool) (*gtsmodel.Account, error) {
|
||||
func (c *converter) ASRepresentationToAccount(ctx context.Context, accountable ap.Accountable, accountDomain string) (*gtsmodel.Account, error) {
|
||||
// first check if we actually already know this account
|
||||
uriProp := accountable.GetJSONLDId()
|
||||
if uriProp == nil || !uriProp.IsIRI() {
|
||||
@ -41,18 +41,6 @@ func (c *converter) ASRepresentationToAccount(ctx context.Context, accountable a
|
||||
}
|
||||
uri := uriProp.GetIRI()
|
||||
|
||||
if !update {
|
||||
acct, err := c.db.GetAccountByURI(ctx, uri.String())
|
||||
if err == nil {
|
||||
// we already know this account so we can skip generating it
|
||||
return acct, nil
|
||||
}
|
||||
if err != db.ErrNoEntries {
|
||||
// we don't know the account and there's been a real error
|
||||
return nil, fmt.Errorf("error getting account with uri %s from the database: %s", uri.String(), err)
|
||||
}
|
||||
}
|
||||
|
||||
// we don't know the account, or we're being told to update it, so we need to generate it from the person -- at least we already have the URI!
|
||||
acct := >smodel.Account{}
|
||||
acct.URI = uri.String()
|
||||
@ -169,16 +157,12 @@ func (c *converter) ASRepresentationToAccount(ctx context.Context, accountable a
|
||||
acct.InboxURI = accountable.GetActivityStreamsInbox().GetIRI().String()
|
||||
}
|
||||
|
||||
// SharedInboxURI
|
||||
if sharedInboxURI := ap.ExtractSharedInbox(accountable); sharedInboxURI != nil {
|
||||
var sharedInbox string
|
||||
|
||||
// only trust shared inbox if it has at least two domains,
|
||||
// from the right, in common with the domain of the account
|
||||
if dns.CompareDomainName(acct.Domain, sharedInboxURI.Host) >= 2 {
|
||||
sharedInbox = sharedInboxURI.String()
|
||||
}
|
||||
|
||||
// SharedInboxURI:
|
||||
// only trust shared inbox if it has at least two domains,
|
||||
// from the right, in common with the domain of the account
|
||||
if sharedInboxURI := ap.ExtractSharedInbox(accountable); // nocollapse
|
||||
sharedInboxURI != nil && dns.CompareDomainName(acct.Domain, sharedInboxURI.Host) >= 2 {
|
||||
sharedInbox := sharedInboxURI.String()
|
||||
acct.SharedInboxURI = &sharedInbox
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user