Generate random message ID

This commit is contained in:
Neil Alexander 2020-07-14 11:35:19 +01:00
parent fef9ed2a17
commit 01f2f80154
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -16,6 +16,8 @@ import (
"context"
"encoding/json"
"fmt"
"math/rand"
"time"
"github.com/Shopify/sarama"
"github.com/matrix-org/dendrite/eduserver/api"
@ -106,6 +108,15 @@ 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),
@ -113,6 +124,7 @@ func (t *OutputEDUConsumer) onSendToDeviceEvent(msg *sarama.ConsumerMessage) err
tdm := gomatrixserverlib.ToDeviceMessage{
Sender: ote.Sender,
Type: ote.Type,
MessageID: string(messageID),
Messages: map[string]map[string]json.RawMessage{
ote.UserID: {
ote.DeviceID: ote.Content,