Handle invite types in membership updaters

This commit is contained in:
Neil Alexander 2020-04-23 16:44:59 +01:00
parent 5a17fb3dbb
commit d236317878
3 changed files with 13 additions and 4 deletions

1
go.mod
View file

@ -27,6 +27,7 @@ require (
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.4.1 github.com/prometheus/client_golang v1.4.1
github.com/sirupsen/logrus v1.4.2 github.com/sirupsen/logrus v1.4.2
github.com/tidwall/gjson v1.6.0
github.com/uber/jaeger-client-go v2.15.0+incompatible github.com/uber/jaeger-client-go v2.15.0+incompatible
github.com/uber/jaeger-lib v1.5.0 github.com/uber/jaeger-lib v1.5.0
go.uber.org/atomic v1.4.0 go.uber.org/atomic v1.4.0

View file

@ -266,7 +266,7 @@ func processInviteEvent(
return err return err
} }
outputUpdates, err := updateToInviteMembership(updater, event, inviteStrippedState, nil, input.Event.RoomVersion) outputUpdates, err := updateToInviteMembership(updater, event, nil, input.Event.RoomVersion)
if err != nil { if err != nil {
return err return err
} }

View file

@ -22,6 +22,7 @@ import (
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/types" "github.com/matrix-org/dendrite/roomserver/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/tidwall/gjson"
) )
// updateMembership updates the current membership and the invites for each // updateMembership updates the current membership and the invites for each
@ -112,8 +113,8 @@ func updateMembership(
} }
switch newMembership { switch newMembership {
//case gomatrixserverlib.Invite: case gomatrixserverlib.Invite:
// return updateToInviteMembership(mu, add, updates, updater.RoomVersion()) return updateToInviteMembership(mu, *add, updates, updater.RoomVersion())
case gomatrixserverlib.Join: case gomatrixserverlib.Join:
return updateToJoinMembership(mu, add, updates) return updateToJoinMembership(mu, add, updates)
case gomatrixserverlib.Leave, gomatrixserverlib.Ban: case gomatrixserverlib.Leave, gomatrixserverlib.Ban:
@ -128,7 +129,6 @@ func updateMembership(
func updateToInviteMembership( func updateToInviteMembership(
mu types.MembershipUpdater, mu types.MembershipUpdater,
add gomatrixserverlib.Event, add gomatrixserverlib.Event,
addState json.RawMessage,
updates []api.OutputEvent, updates []api.OutputEvent,
roomVersion gomatrixserverlib.RoomVersion, roomVersion gomatrixserverlib.RoomVersion,
) ([]api.OutputEvent, error) { ) ([]api.OutputEvent, error) {
@ -141,6 +141,14 @@ func updateToInviteMembership(
return nil, err return nil, err
} }
if needsSending { if needsSending {
// If there's any invite_room_state in the unsigned key from another
// homeserver then let's capture it.
var addState json.RawMessage
if unsigned := gjson.GetBytes(add.Unsigned(), "invite_room_state"); unsigned.Exists() {
if a, ok := unsigned.Value().([]byte); ok {
addState = a
}
}
// We notify the consumers using a special event even though we will // We notify the consumers using a special event even though we will
// notify them about the change in current state as part of the normal // notify them about the change in current state as part of the normal
// room event stream. This ensures that the consumers only have to // room event stream. This ensures that the consumers only have to