Fix sytest uploading signed devices gets propagated over federation
(#2162)
* Remove unneeded logging
* Add MasterKey & SelfSigningKey to update
Avoid panic if signatures are not present
* Add passing test
* Revert "Add MasterKey & SelfSigningKey to update"
This reverts commit 2c81b34884
.
* Send MasterKey & SelfSigningKey with update
* Debugging
* Remove delete() so we also query signingkeys
This commit is contained in:
parent
cf447dd52a
commit
ac25065a54
|
@ -18,6 +18,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/federationapi/queue"
|
"github.com/matrix-org/dendrite/federationapi/queue"
|
||||||
"github.com/matrix-org/dendrite/federationapi/storage"
|
"github.com/matrix-org/dendrite/federationapi/storage"
|
||||||
"github.com/matrix-org/dendrite/federationapi/types"
|
"github.com/matrix-org/dendrite/federationapi/types"
|
||||||
|
@ -113,11 +114,6 @@ func (s *OutputRoomEventConsumer) onMessage(ctx context.Context, msg *nats.Msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case api.OutputTypeNewInviteEvent:
|
|
||||||
log.WithField("type", output.Type).Debug(
|
|
||||||
"received new invite, send device keys",
|
|
||||||
)
|
|
||||||
|
|
||||||
case api.OutputTypeNewInboundPeek:
|
case api.OutputTypeNewInboundPeek:
|
||||||
if err := s.processInboundPeek(*output.NewInboundPeek); err != nil {
|
if err := s.processInboundPeek(*output.NewInboundPeek); err != nil {
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
|
|
|
@ -308,8 +308,12 @@ func (a *KeyInternalAPI) PerformUploadDeviceSignatures(ctx context.Context, req
|
||||||
|
|
||||||
// Finally, generate a notification that we updated the signatures.
|
// Finally, generate a notification that we updated the signatures.
|
||||||
for userID := range req.Signatures {
|
for userID := range req.Signatures {
|
||||||
|
masterKey := queryRes.MasterKeys[userID]
|
||||||
|
selfSigningKey := queryRes.SelfSigningKeys[userID]
|
||||||
update := eduserverAPI.CrossSigningKeyUpdate{
|
update := eduserverAPI.CrossSigningKeyUpdate{
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
|
MasterKey: &masterKey,
|
||||||
|
SelfSigningKey: &selfSigningKey,
|
||||||
}
|
}
|
||||||
if err := a.Producer.ProduceSigningKeyUpdate(update); err != nil {
|
if err := a.Producer.ProduceSigningKeyUpdate(update); err != nil {
|
||||||
res.Error = &api.KeyError{
|
res.Error = &api.KeyError{
|
||||||
|
|
|
@ -326,8 +326,14 @@ func (a *KeyInternalAPI) QueryKeys(ctx context.Context, req *api.QueryKeysReques
|
||||||
if err = json.Unmarshal(key, &deviceKey); err != nil {
|
if err = json.Unmarshal(key, &deviceKey); err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if deviceKey.Signatures == nil {
|
||||||
|
deviceKey.Signatures = map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.Base64Bytes{}
|
||||||
|
}
|
||||||
for sourceUserID, forSourceUser := range sigMap {
|
for sourceUserID, forSourceUser := range sigMap {
|
||||||
for sourceKeyID, sourceSig := range forSourceUser {
|
for sourceKeyID, sourceSig := range forSourceUser {
|
||||||
|
if _, ok := deviceKey.Signatures[sourceUserID]; !ok {
|
||||||
|
deviceKey.Signatures[sourceUserID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.Base64Bytes{}
|
||||||
|
}
|
||||||
deviceKey.Signatures[sourceUserID][sourceKeyID] = sourceSig
|
deviceKey.Signatures[sourceUserID][sourceKeyID] = sourceSig
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -447,7 +453,6 @@ func (a *KeyInternalAPI) queryRemoteKeysOnServer(
|
||||||
for userID, deviceIDs := range devKeys {
|
for userID, deviceIDs := range devKeys {
|
||||||
if len(deviceIDs) == 0 {
|
if len(deviceIDs) == 0 {
|
||||||
userIDsForAllDevices[userID] = struct{}{}
|
userIDsForAllDevices[userID] = struct{}{}
|
||||||
delete(devKeys, userID)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// for cross-signing keys, it's probably easier just to hit /keys/query if we aren't already doing
|
// for cross-signing keys, it's probably easier just to hit /keys/query if we aren't already doing
|
||||||
|
|
|
@ -591,3 +591,4 @@ Can receive redactions from regular users over federation in room version 9
|
||||||
Forward extremities remain so even after the next events are populated as outliers
|
Forward extremities remain so even after the next events are populated as outliers
|
||||||
If a device list update goes missing, the server resyncs on the next one
|
If a device list update goes missing, the server resyncs on the next one
|
||||||
uploading self-signing key notifies over federation
|
uploading self-signing key notifies over federation
|
||||||
|
uploading signed devices gets propagated over federation
|
||||||
|
|
Loading…
Reference in a new issue