forked from mirrors/gotosocial
[bugfix] Use account ID host as accDomain if 2nd webfinger lookup fails (#1630)
This commit is contained in:
parent
7db81cde44
commit
66bedc4747
1 changed files with 23 additions and 6 deletions
|
@ -222,14 +222,31 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.
|
||||||
if account.Username == "" {
|
if account.Username == "" {
|
||||||
// No username was provided, so no webfinger was attempted earlier.
|
// No username was provided, so no webfinger was attempted earlier.
|
||||||
//
|
//
|
||||||
// Now we have a username we can attempt it, this ensures up-to-date accountdomain info.
|
// Now we have a username we can attempt again, to ensure up-to-date
|
||||||
accDomain, _, err := d.fingerRemoteAccount(ctx, transport, latestAcc.Username, uri.Host)
|
// accountDomain info. For this final attempt we should use the domain
|
||||||
|
// of the ID of the dereffed account, rather than the URI we were given.
|
||||||
|
//
|
||||||
|
// This avoids cases where we were given a URI like
|
||||||
|
// https://example.org/@someone@somewhere.else and we've been redirected
|
||||||
|
// from example.org to somewhere.else: we want to take somewhere.else
|
||||||
|
// as the accountDomain then, not the example.org we were redirected from.
|
||||||
|
|
||||||
switch {
|
// Assume the host from the returned ActivityPub representation.
|
||||||
case err != nil:
|
idProp := apubAcc.GetJSONLDId()
|
||||||
log.Errorf(ctx, "error webfingering[2] remote account %s@%s: %v", latestAcc.Username, uri.Host, err)
|
if idProp == nil || !idProp.IsIRI() {
|
||||||
|
return nil, errors.New("enrichAccount: no id property found on person, or id was not an iri")
|
||||||
|
}
|
||||||
|
accHost := idProp.GetIRI().Host
|
||||||
|
|
||||||
case err == nil:
|
accDomain, _, err := d.fingerRemoteAccount(ctx, transport, latestAcc.Username, accHost)
|
||||||
|
if err != nil {
|
||||||
|
// We still couldn't webfinger the account, so we're not certain
|
||||||
|
// what the accountDomain actually is. Still, we can make a solid
|
||||||
|
// guess that it's the Host of the ActivityPub URI of the account.
|
||||||
|
// If we're wrong, we can just try again in a couple days.
|
||||||
|
log.Errorf(ctx, "error webfingering[2] remote account %s@%s: %v", latestAcc.Username, accHost, err)
|
||||||
|
latestAcc.Domain = accHost
|
||||||
|
} else {
|
||||||
// Update account with latest info.
|
// Update account with latest info.
|
||||||
latestAcc.Domain = accDomain
|
latestAcc.Domain = accDomain
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue