From 01f2f80154fdb5eee7a9fd622876b4133b4e4e60 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 14 Jul 2020 11:35:19 +0100 Subject: [PATCH] Generate random message ID --- federationsender/consumers/eduserver.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/federationsender/consumers/eduserver.go b/federationsender/consumers/eduserver.go index c63dae14a..8c6c409a4 100644 --- a/federationsender/consumers/eduserver.go +++ b/federationsender/consumers/eduserver.go @@ -16,6 +16,8 @@ import ( "context" "encoding/json" "fmt" + "math/rand" + "time" "github.com/Shopify/sarama" "github.com/matrix-org/dendrite/eduserver/api" @@ -106,13 +108,23 @@ func (t *OutputEDUConsumer) onSendToDeviceEvent(msg *sarama.ConsumerMessage) err return nil } + // Generate a random message ID for idempotency + chars := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + random := rand.New(rand.NewSource(time.Now().UnixNano())) + messageID := make([]byte, 32) + for i := range messageID { + messageID[i] = chars[random.Intn(len(chars))] + } + + // Pack the EDU and marshal it edu := &gomatrixserverlib.EDU{ Type: gomatrixserverlib.MDirectToDevice, Origin: string(t.ServerName), } tdm := gomatrixserverlib.ToDeviceMessage{ - Sender: ote.Sender, - Type: ote.Type, + Sender: ote.Sender, + Type: ote.Type, + MessageID: string(messageID), Messages: map[string]map[string]json.RawMessage{ ote.UserID: { ote.DeviceID: ote.Content,