From e5e257c2597dec1997b101fb5555a7e83972985f Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Thu, 9 Feb 2023 10:34:44 +0100 Subject: [PATCH] [bugfix] Fix error on searching for account w/accountDomain by host (#1465) --- internal/federation/dereferencing/account.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/internal/federation/dereferencing/account.go b/internal/federation/dereferencing/account.go index ceb7820dc..14864c1b5 100644 --- a/internal/federation/dereferencing/account.go +++ b/internal/federation/dereferencing/account.go @@ -162,6 +162,24 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url. } if err == nil { + if account.Domain != accDomain { + // We have the correct accountDomain now; if it was different from + // the account domain we were provided, do another db lookup to check + // if we already had the account in the db under the account domain we + // just discovered, otherwise we risk thinking this is a new account + // and trying to put it into the database again (which will cause issues). + alreadyAccount, err := d.db.GetAccountByUsernameDomain(ctx, account.Username, accDomain) + if err != nil && !errors.Is(err, db.ErrNoEntries) { + return nil, fmt.Errorf("enrichAccount: db err looking for account again after webfinger: %w", err) + } + + if err == nil { + // We already had the account in the database; + // continue by enriching that one instead. + account = alreadyAccount + } + } + // Update account with latest info. account.URI = accURI.String() account.Domain = accDomain