Rearrange pseudoID power_levels user logic

This commit is contained in:
Devon Hudson 2023-09-26 11:14:49 -06:00
parent 1d992aea75
commit 3df55333b7
No known key found for this signature in database
GPG key ID: CD06B18E77F6A628

View file

@ -347,25 +347,29 @@ func updatePowerLevelEvent(userIDForSender spec.UserIDForSender, se gomatrixserv
return se, nil 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
}
user = userID.String()
}
newPls[user] = level
}
var newPlBytes []byte
newEv := se.JSON() newEv := se.JSON()
if len(pls.Users) > 0 {
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()
}
newPls[user] = level
}
var newPlBytes []byte
newPlBytes, err = json.Marshal(newPls) newPlBytes, err = json.Marshal(newPls)
if err != nil { if err != nil {
return nil, err return nil, err
@ -377,34 +381,36 @@ func updatePowerLevelEvent(userIDForSender spec.UserIDForSender, se gomatrixserv
} }
// do the same for prev content // do the same for prev content
prevContent := gjson.GetBytes(se.JSON(), "unsigned.prev_content") prevUsersField := gjson.GetBytes(se.JSON(), "unsigned.prev_content.users")
if !prevContent.Exists() { if prevUsersField.Exists() {
var evNew gomatrixserverlib.PDU prevContent := gjson.GetBytes(se.JSON(), "unsigned.prev_content")
evNew, err = gomatrixserverlib.MustGetRoomVersion(se.Version()).NewEventFromTrustedJSON(newEv, false) if !prevContent.Exists() {
evNew, err := gomatrixserverlib.MustGetRoomVersion(se.Version()).NewEventFromTrustedJSON(newEv, false)
if err != nil {
return nil, err
}
return evNew, err
}
pls := gomatrixserverlib.PowerLevelContent{}
err := json.Unmarshal([]byte(prevContent.Raw), &pls)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return evNew, err newPls := make(map[string]int64)
} for user, level := range pls.Users {
pls = gomatrixserverlib.PowerLevelContent{} if eventFormat != FormatSyncFederation {
err = json.Unmarshal([]byte(prevContent.Raw), &pls) userID, err := userIDForSender(se.RoomID(), spec.SenderID(user))
if err != nil { if err != nil {
return nil, err return nil, err
} }
user = userID.String()
newPls = make(map[string]int64)
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() newPls[user] = level
} }
newPls[user] = level
} var newPlBytes []byte
if len(pls.Users) > 0 {
newPlBytes, err = json.Marshal(newPls) newPlBytes, err = json.Marshal(newPls)
if err != nil { if err != nil {
return nil, err return nil, err
@ -415,8 +421,7 @@ func updatePowerLevelEvent(userIDForSender spec.UserIDForSender, se gomatrixserv
} }
} }
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 { if err != nil {
return nil, err return nil, err
} }