mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-07-31 13:22:46 +00:00
Notify clients when devices are deleted (#1233)
* Recheck device lists when join/leave events come in * Add PerformDeviceDeletion * Notify clients when devices are deleted * Unbreak things * Remove debug logging
This commit is contained in:
parent
292a9ddd82
commit
a7e67e65a8
25 changed files with 183 additions and 47 deletions
|
@ -35,6 +35,7 @@ type OutputRoomEventConsumer struct {
|
|||
rsConsumer *internal.ContinualConsumer
|
||||
db storage.Database
|
||||
notifier *sync.Notifier
|
||||
keyChanges *OutputKeyChangeEventConsumer
|
||||
}
|
||||
|
||||
// NewOutputRoomEventConsumer creates a new OutputRoomEventConsumer. Call Start() to begin consuming from room servers.
|
||||
|
@ -44,6 +45,7 @@ func NewOutputRoomEventConsumer(
|
|||
n *sync.Notifier,
|
||||
store storage.Database,
|
||||
rsAPI api.RoomserverInternalAPI,
|
||||
keyChanges *OutputKeyChangeEventConsumer,
|
||||
) *OutputRoomEventConsumer {
|
||||
|
||||
consumer := internal.ContinualConsumer{
|
||||
|
@ -56,6 +58,7 @@ func NewOutputRoomEventConsumer(
|
|||
db: store,
|
||||
notifier: n,
|
||||
rsAPI: rsAPI,
|
||||
keyChanges: keyChanges,
|
||||
}
|
||||
consumer.ProcessMessage = s.onMessage
|
||||
|
||||
|
@ -160,9 +163,29 @@ func (s *OutputRoomEventConsumer) onNewRoomEvent(
|
|||
}
|
||||
s.notifier.OnNewEvent(&ev, "", nil, types.NewStreamToken(pduPos, 0, nil))
|
||||
|
||||
s.notifyKeyChanges(&ev)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *OutputRoomEventConsumer) notifyKeyChanges(ev *gomatrixserverlib.HeaderedEvent) {
|
||||
if ev.Type() != gomatrixserverlib.MRoomMember || ev.StateKey() == nil {
|
||||
return
|
||||
}
|
||||
membership, err := ev.Membership()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
switch membership {
|
||||
case gomatrixserverlib.Join:
|
||||
s.keyChanges.OnJoinEvent(ev)
|
||||
case gomatrixserverlib.Ban:
|
||||
fallthrough
|
||||
case gomatrixserverlib.Leave:
|
||||
s.keyChanges.OnLeaveEvent(ev)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *OutputRoomEventConsumer) onNewInviteEvent(
|
||||
ctx context.Context, msg api.OutputNewInviteEvent,
|
||||
) error {
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/matrix-org/dendrite/currentstateserver/api"
|
||||
keyapi "github.com/matrix-org/dendrite/keyserver/api"
|
||||
"github.com/matrix-org/dendrite/syncapi/types"
|
||||
userapi "github.com/matrix-org/dendrite/userapi/api"
|
||||
"github.com/matrix-org/gomatrixserverlib"
|
||||
)
|
||||
|
||||
|
@ -29,6 +30,8 @@ type mockKeyAPI struct{}
|
|||
func (k *mockKeyAPI) PerformUploadKeys(ctx context.Context, req *keyapi.PerformUploadKeysRequest, res *keyapi.PerformUploadKeysResponse) {
|
||||
}
|
||||
|
||||
func (k *mockKeyAPI) SetUserAPI(i userapi.UserInternalAPI) {}
|
||||
|
||||
// PerformClaimKeys claims one-time keys for use in pre-key messages
|
||||
func (k *mockKeyAPI) PerformClaimKeys(ctx context.Context, req *keyapi.PerformClaimKeysRequest, res *keyapi.PerformClaimKeysResponse) {
|
||||
}
|
||||
|
|
|
@ -64,8 +64,16 @@ func AddPublicRoutes(
|
|||
|
||||
requestPool := sync.NewRequestPool(syncDB, notifier, userAPI, keyAPI, currentStateAPI)
|
||||
|
||||
keyChangeConsumer := consumers.NewOutputKeyChangeEventConsumer(
|
||||
cfg.Matrix.ServerName, string(cfg.Kafka.Topics.OutputKeyChangeEvent),
|
||||
consumer, notifier, keyAPI, currentStateAPI, syncDB,
|
||||
)
|
||||
if err = keyChangeConsumer.Start(); err != nil {
|
||||
logrus.WithError(err).Panicf("failed to start key change consumer")
|
||||
}
|
||||
|
||||
roomConsumer := consumers.NewOutputRoomEventConsumer(
|
||||
cfg, consumer, notifier, syncDB, rsAPI,
|
||||
cfg, consumer, notifier, syncDB, rsAPI, keyChangeConsumer,
|
||||
)
|
||||
if err = roomConsumer.Start(); err != nil {
|
||||
logrus.WithError(err).Panicf("failed to start room server consumer")
|
||||
|
@ -92,13 +100,5 @@ func AddPublicRoutes(
|
|||
logrus.WithError(err).Panicf("failed to start send-to-device consumer")
|
||||
}
|
||||
|
||||
keyChangeConsumer := consumers.NewOutputKeyChangeEventConsumer(
|
||||
cfg.Matrix.ServerName, string(cfg.Kafka.Topics.OutputKeyChangeEvent),
|
||||
consumer, notifier, keyAPI, currentStateAPI, syncDB,
|
||||
)
|
||||
if err = keyChangeConsumer.Start(); err != nil {
|
||||
logrus.WithError(err).Panicf("failed to start key change consumer")
|
||||
}
|
||||
|
||||
routing.Setup(router, requestPool, syncDB, userAPI, federation, rsAPI, cfg)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue