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

View file

@ -541,8 +541,23 @@ func NewInviteResponse(ctx context.Context, rsAPI api.QuerySenderIDAPI, event *t
// If there is then unmarshal it into the response. This will contain the // If there is then unmarshal it into the response. This will contain the
// partial room state such as join rules, room name etc. // partial room state such as join rules, room name etc.
if inviteRoomState := gjson.GetBytes(event.Unsigned(), "invite_room_state"); inviteRoomState.Exists() { if inviteRoomState := gjson.GetBytes(event.Unsigned(), "invite_room_state"); inviteRoomState.Exists() {
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) _ = json.Unmarshal([]byte(inviteRoomState.Raw), &res.InviteState.Events)
} }
}
// Clear unsigned so it doesn't have pseudoIDs converted during ToClientEvent // Clear unsigned so it doesn't have pseudoIDs converted during ToClientEvent
eventNoUnsigned, err := event.SetUnsigned(nil) eventNoUnsigned, err := event.SetUnsigned(nil)