Convert pseudoIDs for sync response invites

This commit is contained in:
Devon Hudson 2023-09-14 09:13:05 -06:00
parent a10f103d55
commit fb5c9666c0
No known key found for this signature in database
GPG key ID: CD06B18E77F6A628
2 changed files with 22 additions and 9 deletions

View file

@ -153,12 +153,10 @@ func ToClientEvent(se gomatrixserverlib.PDU, format ClientEventFormat, userIDFor
// TODO: Set Signatures & Hashes fields
}
if format != FormatSyncFederation {
if se.Version() == gomatrixserverlib.RoomVersionPseudoIDs {
err := updatePseudoIDs(&ce, se, userIDForSender, format)
if err != nil {
return nil, err
}
if format != FormatSyncFederation && se.Version() == gomatrixserverlib.RoomVersionPseudoIDs {
err := updatePseudoIDs(&ce, se, userIDForSender, format)
if err != nil {
return nil, err
}
}
@ -282,7 +280,7 @@ func updateInviteEvent(userIDForSender spec.UserIDForSender, ev gomatrixserverli
return nil, err
}
newState, err := getUpdatedInviteRoomState(userIDForSender, inviteRoomState, ev, *validRoomID, eventFormat)
newState, err := GetUpdatedInviteRoomState(userIDForSender, inviteRoomState, ev, *validRoomID, eventFormat)
if err != nil {
return nil, err
}
@ -306,7 +304,7 @@ type InviteRoomStateEvent struct {
Type string `json:"type"`
}
func getUpdatedInviteRoomState(userIDForSender spec.UserIDForSender, inviteRoomState gjson.Result, event gomatrixserverlib.PDU, roomID spec.RoomID, eventFormat ClientEventFormat) (spec.RawJSON, error) {
func GetUpdatedInviteRoomState(userIDForSender spec.UserIDForSender, inviteRoomState gjson.Result, event gomatrixserverlib.PDU, roomID spec.RoomID, eventFormat ClientEventFormat) (spec.RawJSON, error) {
var res spec.RawJSON
inviteStateEvents := []InviteRoomStateEvent{}
err := json.Unmarshal([]byte(inviteRoomState.Raw), &inviteStateEvents)

View file

@ -541,7 +541,22 @@ func NewInviteResponse(ctx context.Context, rsAPI api.QuerySenderIDAPI, event *t
// If there is then unmarshal it into the response. This will contain the
// partial room state such as join rules, room name etc.
if inviteRoomState := gjson.GetBytes(event.Unsigned(), "invite_room_state"); inviteRoomState.Exists() {
_ = json.Unmarshal([]byte(inviteRoomState.Raw), &res.InviteState.Events)
if event.Version() == gomatrixserverlib.RoomVersionPseudoIDs && eventFormat != synctypes.FormatSyncFederation {
roomID, err := spec.NewRoomID(event.RoomID())
if err != nil {
return nil, err
}
updatedInvite, err := synctypes.GetUpdatedInviteRoomState(func(roomID spec.RoomID, senderID spec.SenderID) (*spec.UserID, error) {
return rsAPI.QueryUserIDForSender(ctx, roomID, senderID)
}, inviteRoomState, event.PDU, *roomID, eventFormat)
if err != nil {
return nil, err
}
_ = json.Unmarshal(updatedInvite, &res.InviteState.Events)
} else {
_ = json.Unmarshal([]byte(inviteRoomState.Raw), &res.InviteState.Events)
}
}
// Clear unsigned so it doesn't have pseudoIDs converted during ToClientEvent