aboutsummaryrefslogtreecommitdiff
path: root/syncapi
diff options
context:
space:
mode:
authordevonh <devon.dmytro@gmail.com>2023-09-26 17:44:49 +0000
committerGitHub <noreply@github.com>2023-09-26 17:44:49 +0000
commit16d922de701ca28966127b2e1160d65527f65e8e (patch)
tree4fc4c20ed936dbe7fc980905bfe91e43d5197aad /syncapi
parentd065219de1c2860c9cf28e8d8169fabfb71dcc31 (diff)
Complement fixes for pseudoIDs (#3206)
Diffstat (limited to 'syncapi')
-rw-r--r--syncapi/synctypes/clientevent.go112
1 files changed, 61 insertions, 51 deletions
diff --git a/syncapi/synctypes/clientevent.go b/syncapi/synctypes/clientevent.go
index 6812f833..fe4f6c07 100644
--- a/syncapi/synctypes/clientevent.go
+++ b/syncapi/synctypes/clientevent.go
@@ -347,71 +347,81 @@ func updatePowerLevelEvent(userIDForSender spec.UserIDForSender, se gomatrixserv
return se, nil
}
- pls, err := gomatrixserverlib.NewPowerLevelContentFromEvent(se)
- if err != nil {
- return nil, err
- }
- newPls := make(map[string]int64)
- var userID *spec.UserID
- for user, level := range pls.Users {
- if eventFormat != FormatSyncFederation {
- userID, err = userIDForSender(se.RoomID(), spec.SenderID(user))
- if err != nil {
- return nil, err
+ newEv := se.JSON()
+
+ usersField := gjson.GetBytes(se.JSON(), "content.users")
+ if usersField.Exists() {
+ pls, err := gomatrixserverlib.NewPowerLevelContentFromEvent(se)
+ if err != nil {
+ return nil, err
+ }
+
+ newPls := make(map[string]int64)
+ var userID *spec.UserID
+ for user, level := range pls.Users {
+ if eventFormat != FormatSyncFederation {
+ userID, err = userIDForSender(se.RoomID(), spec.SenderID(user))
+ if err != nil {
+ return nil, err
+ }
+ user = userID.String()
}
- user = userID.String()
+ newPls[user] = level
}
- newPls[user] = level
- }
- var newPlBytes, newEv []byte
- newPlBytes, err = json.Marshal(newPls)
- if err != nil {
- return nil, err
- }
- newEv, err = sjson.SetRawBytes(se.JSON(), "content.users", newPlBytes)
- if err != nil {
- return nil, err
- }
- // do the same for prev content
- prevContent := gjson.GetBytes(se.JSON(), "unsigned.prev_content")
- if !prevContent.Exists() {
- var evNew gomatrixserverlib.PDU
- evNew, err = gomatrixserverlib.MustGetRoomVersion(se.Version()).NewEventFromTrustedJSON(newEv, false)
+ var newPlBytes []byte
+ newPlBytes, err = json.Marshal(newPls)
+ if err != nil {
+ return nil, err
+ }
+ newEv, err = sjson.SetRawBytes(se.JSON(), "content.users", newPlBytes)
if err != nil {
return nil, err
}
-
- return evNew, err
- }
- pls = gomatrixserverlib.PowerLevelContent{}
- err = json.Unmarshal([]byte(prevContent.Raw), &pls)
- if err != nil {
- return nil, err
}
- newPls = make(map[string]int64)
- for user, level := range pls.Users {
- if eventFormat != FormatSyncFederation {
- userID, err = userIDForSender(se.RoomID(), spec.SenderID(user))
+ // do the same for prev content
+ prevUsersField := gjson.GetBytes(se.JSON(), "unsigned.prev_content.users")
+ if prevUsersField.Exists() {
+ prevContent := gjson.GetBytes(se.JSON(), "unsigned.prev_content")
+ if !prevContent.Exists() {
+ evNew, err := gomatrixserverlib.MustGetRoomVersion(se.Version()).NewEventFromTrustedJSON(newEv, false)
if err != nil {
return nil, err
}
- user = userID.String()
+
+ return evNew, err
+ }
+ pls := gomatrixserverlib.PowerLevelContent{}
+ err := json.Unmarshal([]byte(prevContent.Raw), &pls)
+ if err != nil {
+ return nil, err
+ }
+
+ newPls := make(map[string]int64)
+ for user, level := range pls.Users {
+ if eventFormat != FormatSyncFederation {
+ userID, userErr := userIDForSender(se.RoomID(), spec.SenderID(user))
+ if userErr != nil {
+ return nil, userErr
+ }
+ user = userID.String()
+ }
+ newPls[user] = level
+ }
+
+ var newPlBytes []byte
+ newPlBytes, err = json.Marshal(newPls)
+ if err != nil {
+ return nil, err
+ }
+ newEv, err = sjson.SetRawBytes(newEv, "unsigned.prev_content.users", newPlBytes)
+ if err != nil {
+ return nil, err
}
- newPls[user] = level
- }
- newPlBytes, err = json.Marshal(newPls)
- if err != nil {
- return nil, err
- }
- newEv, err = sjson.SetRawBytes(newEv, "unsigned.prev_content.users", newPlBytes)
- if err != nil {
- return nil, err
}
- var evNew gomatrixserverlib.PDU
- evNew, err = gomatrixserverlib.MustGetRoomVersion(se.Version()).NewEventFromTrustedJSONWithEventID(se.EventID(), newEv, false)
+ evNew, err := gomatrixserverlib.MustGetRoomVersion(se.Version()).NewEventFromTrustedJSONWithEventID(se.EventID(), newEv, false)
if err != nil {
return nil, err
}