Fall back to federation if we can't satisfy with any of our local users

This commit is contained in:
Neil Alexander 2021-11-15 15:16:57 +00:00
parent 2890218c4b
commit 0c3d2f0f64
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 11 additions and 4 deletions

View file

@ -604,8 +604,9 @@ func verifyRestrictedMembershipForSendJoin(
} }
// If there's no `join_authorised_via_users_server` key then there's // If there's no `join_authorised_via_users_server` key then there's
// nothing else to do. Return the original event and it'll either // nothing else to do. This might be because it's a join -> join transition
// succeed for some other reason or it will fail auth. // or the response to an invite. Return the original event and it'll either
// pass auth for some other reason or it will fail auth correctly.
if memberContent.AuthorisedVia == "" { if memberContent.AuthorisedVia == "" {
return event, nil return event, nil
} }

View file

@ -209,8 +209,6 @@ func (r *FederationSenderInternalAPI) performJoinUsingServer(
return fmt.Errorf("respMakeJoin.JoinEvent.Build: %w", err) return fmt.Errorf("respMakeJoin.JoinEvent.Build: %w", err)
} }
fmt.Println("Join event:", event.EventID())
// No longer reuse the request context from this point forward. // No longer reuse the request context from this point forward.
// We don't want the client timing out to interrupt the join. // We don't want the client timing out to interrupt the join.
var cancel context.CancelFunc var cancel context.CancelFunc

View file

@ -250,11 +250,19 @@ func (r *Joiner) performJoinRoomByID(
if restricted, roomIDs, rerr := r.checkIfRestrictedJoin(ctx, req); rerr != nil { if restricted, roomIDs, rerr := r.checkIfRestrictedJoin(ctx, req); rerr != nil {
return "", "", err return "", "", err
} else if restricted { } else if restricted {
success := false
for _, roomID := range roomIDs { for _, roomID := range roomIDs {
if err = r.attemptRestrictedJoinUsingRoomID(ctx, req, roomID, &eb); err == nil { if err = r.attemptRestrictedJoinUsingRoomID(ctx, req, roomID, &eb); err == nil {
success = true
break break
} }
} }
if !success {
// We haven't been able to validate the join using any of our own
// local users, so we now need to depend on a remote server to help.
joinedVia, err = r.performFederatedJoinRoomByID(ctx, req)
return req.RoomIDOrAlias, joinedVia, err
}
} }
// Try to construct an actual join event from the template. // Try to construct an actual join event from the template.