aboutsummaryrefslogtreecommitdiff
path: root/userapi
diff options
context:
space:
mode:
authordevonh <devon.dmytro@gmail.com>2023-06-12 11:19:25 +0000
committerGitHub <noreply@github.com>2023-06-12 11:19:25 +0000
commit77d9e4e93dd01f6baa82bd6236850c1007346cac (patch)
tree20be66224646cc82199028cf89f4cd7fab80b97f /userapi
parent832ccc32f6a023665e250eee44b5f678e985d50e (diff)
Cleanup remaining statekey usage for senderIDs (#3106)
Diffstat (limited to 'userapi')
-rw-r--r--userapi/consumers/roomserver.go36
-rw-r--r--userapi/util/notify_test.go3
2 files changed, 34 insertions, 5 deletions
diff --git a/userapi/consumers/roomserver.go b/userapi/consumers/roomserver.go
index df507eb2..b2dc477a 100644
--- a/userapi/consumers/roomserver.go
+++ b/userapi/consumers/roomserver.go
@@ -306,7 +306,16 @@ func (s *OutputRoomEventConsumer) processMessage(ctx context.Context, event *rst
if queryErr == nil && userID != nil {
sender = *userID
}
- cevent := synctypes.ToClientEvent(event, synctypes.FormatAll, sender)
+
+ sk := event.StateKey()
+ if sk != nil && *sk != "" {
+ skUserID, queryErr := s.rsAPI.QueryUserIDForSender(ctx, event.RoomID(), spec.SenderID(*event.StateKey()))
+ if queryErr == nil && skUserID != nil {
+ skString := skUserID.String()
+ sk = &skString
+ }
+ }
+ cevent := synctypes.ToClientEvent(event, synctypes.FormatAll, sender, sk)
var member *localMembership
member, err = newLocalMembership(&cevent)
if err != nil {
@@ -539,12 +548,21 @@ func (s *OutputRoomEventConsumer) notifyLocal(ctx context.Context, event *rstype
if err == nil && userID != nil {
sender = *userID
}
+
+ sk := event.StateKey()
+ if sk != nil && *sk != "" {
+ skUserID, queryErr := s.rsAPI.QueryUserIDForSender(ctx, event.RoomID(), spec.SenderID(*event.StateKey()))
+ if queryErr == nil && skUserID != nil {
+ skString := skUserID.String()
+ sk = &skString
+ }
+ }
n := &api.Notification{
Actions: actions,
// UNSPEC: the spec doesn't say this is a ClientEvent, but the
// fields seem to match. room_id should be missing, which
// matches the behaviour of FormatSync.
- Event: synctypes.ToClientEvent(event, synctypes.FormatSync, sender),
+ Event: synctypes.ToClientEvent(event, synctypes.FormatSync, sender, sk),
// TODO: this is per-device, but it's not part of the primary
// key. So inserting one notification per profile tag doesn't
// make sense. What is this supposed to be? Sytests require it
@@ -792,10 +810,20 @@ func (s *OutputRoomEventConsumer) notifyHTTP(ctx context.Context, event *rstypes
Type: event.Type(),
},
}
- if mem, err := event.Membership(); err == nil {
+ if mem, memberErr := event.Membership(); memberErr == nil {
req.Notification.Membership = mem
}
- if event.StateKey() != nil && *event.StateKey() == fmt.Sprintf("@%s:%s", localpart, s.cfg.Matrix.ServerName) {
+ userID, err := spec.NewUserID(fmt.Sprintf("@%s:%s", localpart, s.cfg.Matrix.ServerName), true)
+ if err != nil {
+ logger.WithError(err).Errorf("Failed to convert local user to userID %s", localpart)
+ return nil, err
+ }
+ localSender, err := s.rsAPI.QuerySenderIDForUser(ctx, event.RoomID(), *userID)
+ if err != nil {
+ logger.WithError(err).Errorf("Failed to get local user senderID for room %s: %s", userID.String(), event.RoomID())
+ return nil, err
+ }
+ if event.StateKey() != nil && *event.StateKey() == string(localSender) {
req.Notification.UserIsTarget = true
}
}
diff --git a/userapi/util/notify_test.go b/userapi/util/notify_test.go
index 27dd373c..3017069b 100644
--- a/userapi/util/notify_test.go
+++ b/userapi/util/notify_test.go
@@ -104,8 +104,9 @@ func TestNotifyUserCountsAsync(t *testing.T) {
if err != nil {
t.Error(err)
}
+ sk := ""
if err := db.InsertNotification(ctx, aliceLocalpart, serverName, dummyEvent.EventID(), 0, nil, &api.Notification{
- Event: synctypes.ToClientEvent(dummyEvent, synctypes.FormatAll, *sender),
+ Event: synctypes.ToClientEvent(dummyEvent, synctypes.FormatAll, *sender, &sk),
}); err != nil {
t.Error(err)
}