mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-16 19:33:09 -06:00
Handle room versions a bit better
This commit is contained in:
parent
a9cb39a566
commit
3f15500a53
|
|
@ -111,6 +111,7 @@ func (c *RoomserverProducer) SendInvite(
|
||||||
InputInviteEvents: []api.InputInviteEvent{{
|
InputInviteEvents: []api.InputInviteEvent{{
|
||||||
Event: inviteEvent,
|
Event: inviteEvent,
|
||||||
InviteRoomState: inviteRoomState,
|
InviteRoomState: inviteRoomState,
|
||||||
|
RoomVersion: inviteEvent.RoomVersion,
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
var response api.InputRoomEventsResponse
|
var response api.InputRoomEventsResponse
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,9 @@ func (r joinRoomReq) joinRoomUsingServers(
|
||||||
}{roomID},
|
}{roomID},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// TODO: This needs to be re-thought, as in the case of an invite, the room
|
||||||
|
// will exist in the database in roomserver_rooms but won't have any state
|
||||||
|
// events, therefore this below check fails.
|
||||||
if err != common.ErrRoomNoExists {
|
if err != common.ErrRoomNoExists {
|
||||||
util.GetLogger(r.req.Context()).WithError(err).Error("common.BuildEvent failed")
|
util.GetLogger(r.req.Context()).WithError(err).Error("common.BuildEvent failed")
|
||||||
return jsonerror.InternalServerError()
|
return jsonerror.InternalServerError()
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ type TransactionID struct {
|
||||||
// the usual context a matrix room event would have. We usually do not have
|
// the usual context a matrix room event would have. We usually do not have
|
||||||
// access to the events needed to check the event auth rules for the invite.
|
// access to the events needed to check the event auth rules for the invite.
|
||||||
type InputInviteEvent struct {
|
type InputInviteEvent struct {
|
||||||
|
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
|
||||||
Event gomatrixserverlib.HeaderedEvent `json:"event"`
|
Event gomatrixserverlib.HeaderedEvent `json:"event"`
|
||||||
InviteRoomState []gomatrixserverlib.InviteV2StrippedState `json:"invite_room_state"`
|
InviteRoomState []gomatrixserverlib.InviteV2StrippedState `json:"invite_room_state"`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -116,10 +116,10 @@ type OutputNewRoomEvent struct {
|
||||||
// Invite events can be received outside of an existing room so have to be
|
// Invite events can be received outside of an existing room so have to be
|
||||||
// tracked separately from the room events themselves.
|
// tracked separately from the room events themselves.
|
||||||
type OutputNewInviteEvent struct {
|
type OutputNewInviteEvent struct {
|
||||||
|
// The room version of the invited room.
|
||||||
|
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
|
||||||
// The "m.room.member" invite event.
|
// The "m.room.member" invite event.
|
||||||
Event gomatrixserverlib.HeaderedEvent `json:"event"`
|
Event gomatrixserverlib.HeaderedEvent `json:"event"`
|
||||||
// The stripped room state supplied with the invite.
|
|
||||||
InviteRoomState []gomatrixserverlib.InviteV2StrippedState `json:"invite_room_state"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// An OutputRetireInviteEvent is written whenever an existing invite is no longer
|
// An OutputRetireInviteEvent is written whenever an existing invite is no longer
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ type RoomEventDatabase interface {
|
||||||
// Build a membership updater for the target user in a room.
|
// Build a membership updater for the target user in a room.
|
||||||
MembershipUpdater(
|
MembershipUpdater(
|
||||||
ctx context.Context, roomID, targerUserID string,
|
ctx context.Context, roomID, targerUserID string,
|
||||||
|
roomVersion gomatrixserverlib.RoomVersion,
|
||||||
) (types.MembershipUpdater, error)
|
) (types.MembershipUpdater, error)
|
||||||
// Look up event ID by transaction's info.
|
// Look up event ID by transaction's info.
|
||||||
// This is used to determine if the room event is processed/processing already.
|
// This is used to determine if the room event is processed/processing already.
|
||||||
|
|
@ -197,10 +198,11 @@ func processInviteEvent(
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"event_id": input.Event.EventID(),
|
"event_id": input.Event.EventID(),
|
||||||
"room_id": roomID,
|
"room_id": roomID,
|
||||||
|
"room_version": input.RoomVersion,
|
||||||
"target_user_id": targetUserID,
|
"target_user_id": targetUserID,
|
||||||
}).Info("processing invite event")
|
}).Info("processing invite event")
|
||||||
|
|
||||||
updater, err := db.MembershipUpdater(ctx, roomID, targetUserID)
|
updater, err := db.MembershipUpdater(ctx, roomID, targetUserID, input.RoomVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,8 @@ func updateToInviteMembership(
|
||||||
// consider a single stream of events when determining whether a user
|
// consider a single stream of events when determining whether a user
|
||||||
// is invited, rather than having to combine multiple streams themselves.
|
// is invited, rather than having to combine multiple streams themselves.
|
||||||
onie := api.OutputNewInviteEvent{
|
onie := api.OutputNewInviteEvent{
|
||||||
Event: (*add).Headered(roomVersion),
|
Event: (*add).Headered(roomVersion),
|
||||||
|
RoomVersion: roomVersion,
|
||||||
}
|
}
|
||||||
updates = append(updates, api.OutputEvent{
|
updates = append(updates, api.OutputEvent{
|
||||||
Type: api.OutputTypeNewInviteEvent,
|
Type: api.OutputTypeNewInviteEvent,
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ type Database interface {
|
||||||
GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error)
|
GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error)
|
||||||
GetCreatorIDForAlias(ctx context.Context, alias string) (string, error)
|
GetCreatorIDForAlias(ctx context.Context, alias string) (string, error)
|
||||||
RemoveRoomAlias(ctx context.Context, alias string) error
|
RemoveRoomAlias(ctx context.Context, alias string) error
|
||||||
MembershipUpdater(ctx context.Context, roomID, targetUserID string) (types.MembershipUpdater, error)
|
MembershipUpdater(ctx context.Context, roomID, targetUserID string, roomVersion gomatrixserverlib.RoomVersion) (types.MembershipUpdater, error)
|
||||||
GetMembership(ctx context.Context, roomNID types.RoomNID, requestSenderUserID string) (membershipEventNID types.EventNID, stillInRoom bool, err error)
|
GetMembership(ctx context.Context, roomNID types.RoomNID, requestSenderUserID string) (membershipEventNID types.EventNID, stillInRoom bool, err error)
|
||||||
GetMembershipEventNIDsForRoom(ctx context.Context, roomNID types.RoomNID, joinOnly bool) ([]types.EventNID, error)
|
GetMembershipEventNIDsForRoom(ctx context.Context, roomNID types.RoomNID, joinOnly bool) ([]types.EventNID, error)
|
||||||
EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error)
|
EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error)
|
||||||
|
|
|
||||||
|
|
@ -540,6 +540,7 @@ func (d *Database) StateEntriesForTuples(
|
||||||
// MembershipUpdater implements input.RoomEventDatabase
|
// MembershipUpdater implements input.RoomEventDatabase
|
||||||
func (d *Database) MembershipUpdater(
|
func (d *Database) MembershipUpdater(
|
||||||
ctx context.Context, roomID, targetUserID string,
|
ctx context.Context, roomID, targetUserID string,
|
||||||
|
roomVersion gomatrixserverlib.RoomVersion,
|
||||||
) (types.MembershipUpdater, error) {
|
) (types.MembershipUpdater, error) {
|
||||||
txn, err := d.db.Begin()
|
txn, err := d.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -552,8 +553,7 @@ func (d *Database) MembershipUpdater(
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// TODO: Room version here
|
roomNID, err := d.assignRoomNID(ctx, txn, roomID, roomVersion)
|
||||||
roomNID, err := d.assignRoomNID(ctx, txn, roomID, "1")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -663,6 +663,7 @@ func (d *Database) StateEntriesForTuples(
|
||||||
// MembershipUpdater implements input.RoomEventDatabase
|
// MembershipUpdater implements input.RoomEventDatabase
|
||||||
func (d *Database) MembershipUpdater(
|
func (d *Database) MembershipUpdater(
|
||||||
ctx context.Context, roomID, targetUserID string,
|
ctx context.Context, roomID, targetUserID string,
|
||||||
|
roomVersion gomatrixserverlib.RoomVersion,
|
||||||
) (updater types.MembershipUpdater, err error) {
|
) (updater types.MembershipUpdater, err error) {
|
||||||
var txn *sql.Tx
|
var txn *sql.Tx
|
||||||
txn, err = d.db.Begin()
|
txn, err = d.db.Begin()
|
||||||
|
|
@ -688,8 +689,7 @@ func (d *Database) MembershipUpdater(
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// TODO: Room version here
|
roomNID, err := d.assignRoomNID(ctx, txn, roomID, roomVersion)
|
||||||
roomNID, err := d.assignRoomNID(ctx, txn, roomID, "1")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue