mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-07-31 21:32:46 +00:00
Fetch missing auth events, implement QueryMissingAuthPrevEvents, try other servers in room for /event and /get_missing_events (#1450)
* Try to ask other servers in the room for missing events if the origin won't provide them * Logging * More logging * Implement QueryMissingAuthPrevEvents * Try to get missing auth events badly * Use processEvent * Logging * Update QueryMissingAuthPrevEvents * Try to find missing auth events * Patchy fix for test * Logging tweaks * Send auth events as outliers * Update check in QueryMissingAuthPrevEvents * Error responses * More return codes * Don't return error on reject/soft-fail since it was ultimately handled * More tweaks * More error tweaks
This commit is contained in:
parent
4ff7ac7b65
commit
738b829a23
12 changed files with 291 additions and 81 deletions
|
@ -98,6 +98,38 @@ func (r *Queryer) QueryStateAfterEvents(
|
|||
return nil
|
||||
}
|
||||
|
||||
// QueryMissingAuthPrevEvents implements api.RoomserverInternalAPI
|
||||
func (r *Queryer) QueryMissingAuthPrevEvents(
|
||||
ctx context.Context,
|
||||
request *api.QueryMissingAuthPrevEventsRequest,
|
||||
response *api.QueryMissingAuthPrevEventsResponse,
|
||||
) error {
|
||||
info, err := r.DB.RoomInfo(ctx, request.RoomID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if info == nil {
|
||||
return errors.New("room doesn't exist")
|
||||
}
|
||||
|
||||
response.RoomExists = !info.IsStub
|
||||
response.RoomVersion = info.RoomVersion
|
||||
|
||||
for _, authEventID := range request.AuthEventIDs {
|
||||
if nids, err := r.DB.EventNIDs(ctx, []string{authEventID}); err != nil || len(nids) == 0 {
|
||||
response.MissingAuthEventIDs = append(response.MissingAuthEventIDs, authEventID)
|
||||
}
|
||||
}
|
||||
|
||||
for _, prevEventID := range request.PrevEventIDs {
|
||||
if nids, err := r.DB.EventNIDs(ctx, []string{prevEventID}); err != nil || len(nids) == 0 {
|
||||
response.MissingPrevEventIDs = append(response.MissingPrevEventIDs, prevEventID)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// QueryEventsByID implements api.RoomserverInternalAPI
|
||||
func (r *Queryer) QueryEventsByID(
|
||||
ctx context.Context,
|
||||
|
@ -255,19 +287,24 @@ func (r *Queryer) QueryServerJoinedToRoom(
|
|||
return fmt.Errorf("r.DB.Events: %w", err)
|
||||
}
|
||||
|
||||
servers := map[gomatrixserverlib.ServerName]struct{}{}
|
||||
for _, e := range events {
|
||||
if e.Type() == gomatrixserverlib.MRoomMember && e.StateKey() != nil {
|
||||
_, serverName, err := gomatrixserverlib.SplitID('@', *e.StateKey())
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
servers[serverName] = struct{}{}
|
||||
if serverName == request.ServerName {
|
||||
response.IsInRoom = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for server := range servers {
|
||||
response.ServerNames = append(response.ServerNames, server)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue