mirror of
https://github.com/hoernschen/dendrite.git
synced 2024-12-27 07:28:27 +00:00
Send device update to local users if remote display name changes (#2215)
* Send device_list update to satisfy sytest * Fix build issue from merged in change Co-authored-by: Neil Alexander <neilalexander@users.noreply.github.com>
This commit is contained in:
parent
cfff1b0aaa
commit
41dc651b25
3 changed files with 12 additions and 5 deletions
|
@ -224,7 +224,7 @@ func (u *DeviceListUpdater) update(ctx context.Context, event gomatrixserverlib.
|
||||||
}).Info("DeviceListUpdater.Update")
|
}).Info("DeviceListUpdater.Update")
|
||||||
|
|
||||||
// if we haven't missed anything update the database and notify users
|
// if we haven't missed anything update the database and notify users
|
||||||
if exists {
|
if exists || event.Deleted {
|
||||||
k := event.Keys
|
k := event.Keys
|
||||||
if event.Deleted {
|
if event.Deleted {
|
||||||
k = nil
|
k = nil
|
||||||
|
@ -267,7 +267,7 @@ func (u *DeviceListUpdater) update(ctx context.Context, event gomatrixserverlib.
|
||||||
return false, fmt.Errorf("failed to store remote device keys for %s (%s): %w", event.UserID, event.DeviceID, err)
|
return false, fmt.Errorf("failed to store remote device keys for %s (%s): %w", event.UserID, event.DeviceID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = emitDeviceKeyChanges(u.producer, existingKeys, keys); err != nil {
|
if err = emitDeviceKeyChanges(u.producer, existingKeys, keys, false); err != nil {
|
||||||
return false, fmt.Errorf("failed to produce device key changes for %s (%s): %w", event.UserID, event.DeviceID, err)
|
return false, fmt.Errorf("failed to produce device key changes for %s (%s): %w", event.UserID, event.DeviceID, err)
|
||||||
}
|
}
|
||||||
return false, nil
|
return false, nil
|
||||||
|
@ -473,7 +473,7 @@ func (u *DeviceListUpdater) updateDeviceList(res *gomatrixserverlib.RespUserDevi
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to mark device list as fresh: %w", err)
|
return fmt.Errorf("failed to mark device list as fresh: %w", err)
|
||||||
}
|
}
|
||||||
err = emitDeviceKeyChanges(u.producer, existingKeys, keys)
|
err = emitDeviceKeyChanges(u.producer, existingKeys, keys, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to emit key changes for fresh device list: %w", err)
|
return fmt.Errorf("failed to emit key changes for fresh device list: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -648,7 +648,7 @@ func (a *KeyInternalAPI) uploadLocalDeviceKeys(ctx context.Context, req *api.Per
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = emitDeviceKeyChanges(a.Producer, existingKeys, keysToStore)
|
err = emitDeviceKeyChanges(a.Producer, existingKeys, keysToStore, req.OnlyDisplayNameUpdates)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.GetLogger(ctx).Errorf("Failed to emitDeviceKeyChanges: %s", err)
|
util.GetLogger(ctx).Errorf("Failed to emitDeviceKeyChanges: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -710,7 +710,11 @@ func (a *KeyInternalAPI) uploadOneTimeKeys(ctx context.Context, req *api.Perform
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func emitDeviceKeyChanges(producer KeyChangeProducer, existing, new []api.DeviceMessage) error {
|
func emitDeviceKeyChanges(producer KeyChangeProducer, existing, new []api.DeviceMessage, onlyUpdateDisplayName bool) error {
|
||||||
|
// if we only want to update the display names, we can skip the checks below
|
||||||
|
if onlyUpdateDisplayName {
|
||||||
|
return producer.ProduceKeyChanges(new)
|
||||||
|
}
|
||||||
// find keys in new that are not in existing
|
// find keys in new that are not in existing
|
||||||
var keysAdded []api.DeviceMessage
|
var keysAdded []api.DeviceMessage
|
||||||
for _, newKey := range new {
|
for _, newKey := range new {
|
||||||
|
|
|
@ -597,4 +597,7 @@ Device list doesn't change if remote server is down
|
||||||
/context/ on non world readable room does not work
|
/context/ on non world readable room does not work
|
||||||
/context/ returns correct number of events
|
/context/ returns correct number of events
|
||||||
/context/ with lazy_load_members filter works
|
/context/ with lazy_load_members filter works
|
||||||
|
Can query remote device keys using POST after notification
|
||||||
|
Device deletion propagates over federation
|
||||||
|
Get left notifs in sync and /keys/changes when other user leaves
|
||||||
Remote banned user is kicked and may not rejoin until unbanned
|
Remote banned user is kicked and may not rejoin until unbanned
|
||||||
|
|
Loading…
Reference in a new issue