Use spec consts

This commit is contained in:
Kegan Dougal 2023-04-18 14:56:38 +01:00
parent 1818cc880a
commit 0bf57a0708
80 changed files with 417 additions and 386 deletions

View file

@ -27,7 +27,7 @@ import (
"github.com/matrix-org/dendrite/setup/jetstream" "github.com/matrix-org/dendrite/setup/jetstream"
"github.com/matrix-org/dendrite/test" "github.com/matrix-org/dendrite/test"
"github.com/matrix-org/dendrite/userapi" "github.com/matrix-org/dendrite/userapi"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/test/testrig" "github.com/matrix-org/dendrite/test/testrig"
) )
@ -326,7 +326,7 @@ func TestRoomserverConsumerOneInvite(t *testing.T) {
room := test.NewRoom(t, alice) room := test.NewRoom(t, alice)
// Invite Bob // Invite Bob
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -345,7 +345,7 @@ func TestRoomserverConsumerOneInvite(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
for _, ev := range txn.Events { for _, ev := range txn.Events {
if ev.Type != gomatrixserverlib.MRoomMember { if ev.Type != spec.MRoomMember {
continue continue
} }
// Usually we would check the event content for the membership, but since // Usually we would check the event content for the membership, but since

View file

@ -26,6 +26,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/nats-io/nats.go" "github.com/nats-io/nats.go"
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
@ -240,7 +241,7 @@ func (s *OutputRoomEventConsumer) appserviceIsInterestedInEvent(ctx context.Cont
return true return true
} }
if event.Type() == gomatrixserverlib.MRoomMember && event.StateKey() != nil { if event.Type() == spec.MRoomMember && event.StateKey() != nil {
if appservice.IsInterestedInUserID(*event.StateKey()) { if appservice.IsInterestedInUserID(*event.StateKey()) {
return true return true
} }
@ -286,7 +287,7 @@ func (s *OutputRoomEventConsumer) appserviceJoinedAtEvent(ctx context.Context, e
switch { switch {
case ev.StateKey == nil: case ev.StateKey == nil:
continue continue
case ev.Type != gomatrixserverlib.MRoomMember: case ev.Type != spec.MRoomMember:
continue continue
} }
var membership gomatrixserverlib.MemberContent var membership gomatrixserverlib.MemberContent
@ -294,7 +295,7 @@ func (s *OutputRoomEventConsumer) appserviceJoinedAtEvent(ctx context.Context, e
switch { switch {
case err != nil: case err != nil:
continue continue
case membership.Membership == gomatrixserverlib.Join: case membership.Membership == spec.Join:
if appservice.IsInterestedInUserID(*ev.StateKey) { if appservice.IsInterestedInUserID(*ev.StateKey) {
return true return true
} }

View file

@ -18,8 +18,8 @@ import (
"github.com/matrix-org/dendrite/setup/config" "github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/setup/jetstream" "github.com/matrix-org/dendrite/setup/jetstream"
"github.com/matrix-org/dendrite/syncapi" "github.com/matrix-org/dendrite/syncapi"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
@ -123,7 +123,7 @@ func TestPurgeRoom(t *testing.T) {
room := test.NewRoom(t, aliceAdmin, test.RoomPreset(test.PresetTrustedPrivateChat)) room := test.NewRoom(t, aliceAdmin, test.RoomPreset(test.PresetTrustedPrivateChat))
// Invite Bob // Invite Bob
room.CreateAndInsert(t, aliceAdmin, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, aliceAdmin, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -194,7 +194,7 @@ func TestAdminEvacuateRoom(t *testing.T) {
room := test.NewRoom(t, aliceAdmin) room := test.NewRoom(t, aliceAdmin)
// Join Bob // Join Bob
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -291,10 +291,10 @@ func TestAdminEvacuateUser(t *testing.T) {
room2 := test.NewRoom(t, aliceAdmin) room2 := test.NewRoom(t, aliceAdmin)
// Join Bob // Join Bob
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room2.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room2.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))

View file

@ -22,6 +22,7 @@ import (
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
) )
@ -31,7 +32,7 @@ func GetAliases(
req *http.Request, rsAPI api.ClientRoomserverAPI, device *userapi.Device, roomID string, req *http.Request, rsAPI api.ClientRoomserverAPI, device *userapi.Device, roomID string,
) util.JSONResponse { ) util.JSONResponse {
stateTuple := gomatrixserverlib.StateKeyTuple{ stateTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomHistoryVisibility, EventType: spec.MRoomHistoryVisibility,
StateKey: "", StateKey: "",
} }
stateReq := &api.QueryCurrentStateRequest{ stateReq := &api.QueryCurrentStateRequest{
@ -53,7 +54,7 @@ func GetAliases(
return util.ErrorResponse(fmt.Errorf("historyVisEvent.HistoryVisibility: %w", err)) return util.ErrorResponse(fmt.Errorf("historyVisEvent.HistoryVisibility: %w", err))
} }
} }
if visibility != gomatrixserverlib.WorldReadable { if visibility != spec.WorldReadable {
queryReq := api.QueryMembershipForUserRequest{ queryReq := api.QueryMembershipForUserRequest{
RoomID: roomID, RoomID: roomID,
UserID: device.UserID, UserID: device.UserID,

View file

@ -27,6 +27,7 @@ import (
roomserverVersion "github.com/matrix-org/dendrite/roomserver/version" roomserverVersion "github.com/matrix-org/dendrite/roomserver/version"
"github.com/matrix-org/dendrite/userapi/api" "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/clientapi/httputil" "github.com/matrix-org/dendrite/clientapi/httputil"
"github.com/matrix-org/dendrite/clientapi/jsonerror" "github.com/matrix-org/dendrite/clientapi/jsonerror"
@ -234,7 +235,7 @@ func createRoom(
createContent["room_version"] = roomVersion createContent["room_version"] = roomVersion
powerLevelContent := eventutil.InitialPowerLevelsContent(userID) powerLevelContent := eventutil.InitialPowerLevelsContent(userID)
joinRuleContent := gomatrixserverlib.JoinRuleContent{ joinRuleContent := gomatrixserverlib.JoinRuleContent{
JoinRule: gomatrixserverlib.Invite, JoinRule: spec.Invite,
} }
historyVisibilityContent := gomatrixserverlib.HistoryVisibilityContent{ historyVisibilityContent := gomatrixserverlib.HistoryVisibilityContent{
HistoryVisibility: historyVisibilityShared, HistoryVisibility: historyVisibilityShared,
@ -254,40 +255,40 @@ func createRoom(
switch r.Preset { switch r.Preset {
case presetPrivateChat: case presetPrivateChat:
joinRuleContent.JoinRule = gomatrixserverlib.Invite joinRuleContent.JoinRule = spec.Invite
historyVisibilityContent.HistoryVisibility = historyVisibilityShared historyVisibilityContent.HistoryVisibility = historyVisibilityShared
case presetTrustedPrivateChat: case presetTrustedPrivateChat:
joinRuleContent.JoinRule = gomatrixserverlib.Invite joinRuleContent.JoinRule = spec.Invite
historyVisibilityContent.HistoryVisibility = historyVisibilityShared historyVisibilityContent.HistoryVisibility = historyVisibilityShared
for _, invitee := range r.Invite { for _, invitee := range r.Invite {
powerLevelContent.Users[invitee] = 100 powerLevelContent.Users[invitee] = 100
} }
case presetPublicChat: case presetPublicChat:
joinRuleContent.JoinRule = gomatrixserverlib.Public joinRuleContent.JoinRule = spec.Public
historyVisibilityContent.HistoryVisibility = historyVisibilityShared historyVisibilityContent.HistoryVisibility = historyVisibilityShared
} }
createEvent := fledglingEvent{ createEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomCreate, Type: spec.MRoomCreate,
Content: createContent, Content: createContent,
} }
powerLevelEvent := fledglingEvent{ powerLevelEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomPowerLevels, Type: spec.MRoomPowerLevels,
Content: powerLevelContent, Content: powerLevelContent,
} }
joinRuleEvent := fledglingEvent{ joinRuleEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomJoinRules, Type: spec.MRoomJoinRules,
Content: joinRuleContent, Content: joinRuleContent,
} }
historyVisibilityEvent := fledglingEvent{ historyVisibilityEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomHistoryVisibility, Type: spec.MRoomHistoryVisibility,
Content: historyVisibilityContent, Content: historyVisibilityContent,
} }
membershipEvent := fledglingEvent{ membershipEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomMember, Type: spec.MRoomMember,
StateKey: userID, StateKey: userID,
Content: gomatrixserverlib.MemberContent{ Content: gomatrixserverlib.MemberContent{
Membership: gomatrixserverlib.Join, Membership: spec.Join,
DisplayName: profile.DisplayName, DisplayName: profile.DisplayName,
AvatarURL: profile.AvatarURL, AvatarURL: profile.AvatarURL,
}, },
@ -300,7 +301,7 @@ func createRoom(
if r.Name != "" { if r.Name != "" {
nameEvent = &fledglingEvent{ nameEvent = &fledglingEvent{
Type: gomatrixserverlib.MRoomName, Type: spec.MRoomName,
Content: eventutil.NameContent{ Content: eventutil.NameContent{
Name: r.Name, Name: r.Name,
}, },
@ -309,7 +310,7 @@ func createRoom(
if r.Topic != "" { if r.Topic != "" {
topicEvent = &fledglingEvent{ topicEvent = &fledglingEvent{
Type: gomatrixserverlib.MRoomTopic, Type: spec.MRoomTopic,
Content: eventutil.TopicContent{ Content: eventutil.TopicContent{
Topic: r.Topic, Topic: r.Topic,
}, },
@ -318,7 +319,7 @@ func createRoom(
if r.GuestCanJoin { if r.GuestCanJoin {
guestAccessEvent = &fledglingEvent{ guestAccessEvent = &fledglingEvent{
Type: gomatrixserverlib.MRoomGuestAccess, Type: spec.MRoomGuestAccess,
Content: eventutil.GuestAccessContent{ Content: eventutil.GuestAccessContent{
GuestAccess: "can_join", GuestAccess: "can_join",
}, },
@ -348,7 +349,7 @@ func createRoom(
} }
aliasEvent = &fledglingEvent{ aliasEvent = &fledglingEvent{
Type: gomatrixserverlib.MRoomCanonicalAlias, Type: spec.MRoomCanonicalAlias,
Content: eventutil.CanonicalAlias{ Content: eventutil.CanonicalAlias{
Alias: roomAlias, Alias: roomAlias,
}, },
@ -363,25 +364,25 @@ func createRoom(
} }
switch r.InitialState[i].Type { switch r.InitialState[i].Type {
case gomatrixserverlib.MRoomCreate: case spec.MRoomCreate:
continue continue
case gomatrixserverlib.MRoomPowerLevels: case spec.MRoomPowerLevels:
powerLevelEvent = r.InitialState[i] powerLevelEvent = r.InitialState[i]
case gomatrixserverlib.MRoomJoinRules: case spec.MRoomJoinRules:
joinRuleEvent = r.InitialState[i] joinRuleEvent = r.InitialState[i]
case gomatrixserverlib.MRoomHistoryVisibility: case spec.MRoomHistoryVisibility:
historyVisibilityEvent = r.InitialState[i] historyVisibilityEvent = r.InitialState[i]
case gomatrixserverlib.MRoomGuestAccess: case spec.MRoomGuestAccess:
guestAccessEvent = &r.InitialState[i] guestAccessEvent = &r.InitialState[i]
case gomatrixserverlib.MRoomName: case spec.MRoomName:
nameEvent = &r.InitialState[i] nameEvent = &r.InitialState[i]
case gomatrixserverlib.MRoomTopic: case spec.MRoomTopic:
topicEvent = &r.InitialState[i] topicEvent = &r.InitialState[i]
default: default:
@ -516,21 +517,21 @@ func createRoom(
// Chosen events from the spec: // Chosen events from the spec:
// https://spec.matrix.org/v1.3/client-server-api/#stripped-state // https://spec.matrix.org/v1.3/client-server-api/#stripped-state
switch event.Type() { switch event.Type() {
case gomatrixserverlib.MRoomCreate: case spec.MRoomCreate:
fallthrough fallthrough
case gomatrixserverlib.MRoomName: case spec.MRoomName:
fallthrough fallthrough
case gomatrixserverlib.MRoomAvatar: case spec.MRoomAvatar:
fallthrough fallthrough
case gomatrixserverlib.MRoomTopic: case spec.MRoomTopic:
fallthrough fallthrough
case gomatrixserverlib.MRoomCanonicalAlias: case spec.MRoomCanonicalAlias:
fallthrough fallthrough
case gomatrixserverlib.MRoomEncryption: case spec.MRoomEncryption:
fallthrough fallthrough
case gomatrixserverlib.MRoomMember: case spec.MRoomMember:
fallthrough fallthrough
case gomatrixserverlib.MRoomJoinRules: case spec.MRoomJoinRules:
ev := event.Event ev := event.Event
globalStrippedState = append( globalStrippedState = append(
globalStrippedState, globalStrippedState,
@ -543,7 +544,7 @@ func createRoom(
for _, invitee := range r.Invite { for _, invitee := range r.Invite {
// Build the invite event. // Build the invite event.
inviteEvent, err := buildMembershipEvent( inviteEvent, err := buildMembershipEvent(
ctx, invitee, "", profileAPI, device, gomatrixserverlib.Invite, ctx, invitee, "", profileAPI, device, spec.Invite,
roomID, r.IsDirect, cfg, evTime, rsAPI, asAPI, roomID, r.IsDirect, cfg, evTime, rsAPI, asAPI,
) )
if err != nil { if err != nil {

View file

@ -254,7 +254,7 @@ func GetVisibility(
var v roomVisibility var v roomVisibility
if len(res.RoomIDs) == 1 { if len(res.RoomIDs) == 1 {
v.Visibility = gomatrixserverlib.Public v.Visibility = spec.Public
} else { } else {
v.Visibility = "private" v.Visibility = "private"
} }
@ -279,7 +279,7 @@ func SetVisibility(
queryEventsReq := roomserverAPI.QueryLatestEventsAndStateRequest{ queryEventsReq := roomserverAPI.QueryLatestEventsAndStateRequest{
RoomID: roomID, RoomID: roomID,
StateToFetch: []gomatrixserverlib.StateKeyTuple{{ StateToFetch: []gomatrixserverlib.StateKeyTuple{{
EventType: gomatrixserverlib.MRoomPowerLevels, EventType: spec.MRoomPowerLevels,
StateKey: "", StateKey: "",
}}, }},
} }
@ -292,7 +292,7 @@ func SetVisibility(
// NOTSPEC: Check if the user's power is greater than power required to change m.room.canonical_alias event // NOTSPEC: Check if the user's power is greater than power required to change m.room.canonical_alias event
power, _ := gomatrixserverlib.NewPowerLevelContentFromEvent(queryEventsRes.StateEvents[0].Event) power, _ := gomatrixserverlib.NewPowerLevelContentFromEvent(queryEventsRes.StateEvents[0].Event)
if power.UserLevel(dev.UserID) < power.EventLevel(gomatrixserverlib.MRoomCanonicalAlias, true) { if power.UserLevel(dev.UserID) < power.EventLevel(spec.MRoomCanonicalAlias, true) {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusForbidden, Code: http.StatusForbidden,
JSON: jsonerror.Forbidden("userID doesn't have power level to change visibility"), JSON: jsonerror.Forbidden("userID doesn't have power level to change visibility"),

View file

@ -21,6 +21,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
appserviceAPI "github.com/matrix-org/dendrite/appservice/api" appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes" "github.com/matrix-org/dendrite/clientapi/auth/authtypes"
@ -70,7 +71,7 @@ func SendBan(
} }
} }
return sendMembership(req.Context(), profileAPI, device, roomID, gomatrixserverlib.Ban, body.Reason, cfg, body.UserID, evTime, rsAPI, asAPI) return sendMembership(req.Context(), profileAPI, device, roomID, spec.Ban, body.Reason, cfg, body.UserID, evTime, rsAPI, asAPI)
} }
func sendMembership(ctx context.Context, profileAPI userapi.ClientUserAPI, device *userapi.Device, func sendMembership(ctx context.Context, profileAPI userapi.ClientUserAPI, device *userapi.Device,
@ -149,14 +150,14 @@ func SendKick(
return util.ErrorResponse(err) return util.ErrorResponse(err)
} }
// kick is only valid if the user is not currently banned or left (that is, they are joined or invited) // kick is only valid if the user is not currently banned or left (that is, they are joined or invited)
if queryRes.Membership != gomatrixserverlib.Join && queryRes.Membership != gomatrixserverlib.Invite { if queryRes.Membership != spec.Join && queryRes.Membership != spec.Invite {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusForbidden, Code: http.StatusForbidden,
JSON: jsonerror.Unknown("cannot /kick banned or left users"), JSON: jsonerror.Unknown("cannot /kick banned or left users"),
} }
} }
// TODO: should we be using SendLeave instead? // TODO: should we be using SendLeave instead?
return sendMembership(req.Context(), profileAPI, device, roomID, gomatrixserverlib.Leave, body.Reason, cfg, body.UserID, evTime, rsAPI, asAPI) return sendMembership(req.Context(), profileAPI, device, roomID, spec.Leave, body.Reason, cfg, body.UserID, evTime, rsAPI, asAPI)
} }
func SendUnban( func SendUnban(
@ -190,14 +191,14 @@ func SendUnban(
} }
// unban is only valid if the user is currently banned // unban is only valid if the user is currently banned
if queryRes.Membership != gomatrixserverlib.Ban { if queryRes.Membership != spec.Ban {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusBadRequest, Code: http.StatusBadRequest,
JSON: jsonerror.Unknown("can only /unban users that are banned"), JSON: jsonerror.Unknown("can only /unban users that are banned"),
} }
} }
// TODO: should we be using SendLeave instead? // TODO: should we be using SendLeave instead?
return sendMembership(req.Context(), profileAPI, device, roomID, gomatrixserverlib.Leave, body.Reason, cfg, body.UserID, evTime, rsAPI, asAPI) return sendMembership(req.Context(), profileAPI, device, roomID, spec.Leave, body.Reason, cfg, body.UserID, evTime, rsAPI, asAPI)
} }
func SendInvite( func SendInvite(
@ -255,7 +256,7 @@ func sendInvite(
asAPI appserviceAPI.AppServiceInternalAPI, evTime time.Time, asAPI appserviceAPI.AppServiceInternalAPI, evTime time.Time,
) (util.JSONResponse, error) { ) (util.JSONResponse, error) {
event, err := buildMembershipEvent( event, err := buildMembershipEvent(
ctx, userID, reason, profileAPI, device, gomatrixserverlib.Invite, ctx, userID, reason, profileAPI, device, spec.Invite,
roomID, false, cfg, evTime, rsAPI, asAPI, roomID, false, cfg, evTime, rsAPI, asAPI,
) )
if err != nil { if err != nil {
@ -480,7 +481,7 @@ func SendForget(
func getPowerlevels(req *http.Request, rsAPI roomserverAPI.ClientRoomserverAPI, roomID string) (*gomatrixserverlib.PowerLevelContent, *util.JSONResponse) { func getPowerlevels(req *http.Request, rsAPI roomserverAPI.ClientRoomserverAPI, roomID string) (*gomatrixserverlib.PowerLevelContent, *util.JSONResponse) {
plEvent := roomserverAPI.GetStateEvent(req.Context(), rsAPI, roomID, gomatrixserverlib.StateKeyTuple{ plEvent := roomserverAPI.GetStateEvent(req.Context(), rsAPI, roomID, gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomPowerLevels, EventType: spec.MRoomPowerLevels,
StateKey: "", StateKey: "",
}) })
if plEvent == nil { if plEvent == nil {

View file

@ -21,6 +21,7 @@ import (
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
appserviceAPI "github.com/matrix-org/dendrite/appservice/api" appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
"github.com/matrix-org/dendrite/clientapi/auth/authtypes" "github.com/matrix-org/dendrite/clientapi/auth/authtypes"
@ -351,7 +352,7 @@ func buildMembershipEvents(
} }
content := gomatrixserverlib.MemberContent{ content := gomatrixserverlib.MemberContent{
Membership: gomatrixserverlib.Join, Membership: spec.Join,
} }
content.DisplayName = newProfile.DisplayName content.DisplayName = newProfile.DisplayName

View file

@ -20,6 +20,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil" "github.com/matrix-org/dendrite/clientapi/httputil"
@ -77,7 +78,7 @@ func SendRedaction(
allowedToRedact := ev.Sender() == device.UserID allowedToRedact := ev.Sender() == device.UserID
if !allowedToRedact { if !allowedToRedact {
plEvent := roomserverAPI.GetStateEvent(req.Context(), rsAPI, roomID, gomatrixserverlib.StateKeyTuple{ plEvent := roomserverAPI.GetStateEvent(req.Context(), rsAPI, roomID, gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomPowerLevels, EventType: spec.MRoomPowerLevels,
StateKey: "", StateKey: "",
}) })
if plEvent == nil { if plEvent == nil {
@ -114,7 +115,7 @@ func SendRedaction(
builder := gomatrixserverlib.EventBuilder{ builder := gomatrixserverlib.EventBuilder{
Sender: device.UserID, Sender: device.UserID,
RoomID: roomID, RoomID: roomID,
Type: gomatrixserverlib.MRoomRedaction, Type: spec.MRoomRedaction,
Redacts: eventID, Redacts: eventID,
} }
err := builder.SetContent(r) err := builder.SetContent(r)

View file

@ -22,8 +22,8 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/matrix-org/dendrite/setup/base" "github.com/matrix-org/dendrite/setup/base"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/nats-io/nats.go" "github.com/nats-io/nats.go"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
@ -257,7 +257,7 @@ func Setup(
}), }),
).Methods(http.MethodPost, http.MethodOptions) ).Methods(http.MethodPost, http.MethodOptions)
v3mux.Handle("/join/{roomIDOrAlias}", v3mux.Handle("/join/{roomIDOrAlias}",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI(spec.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
if r := rateLimits.Limit(req, device); r != nil { if r := rateLimits.Limit(req, device); r != nil {
return *r return *r
} }
@ -273,7 +273,7 @@ func Setup(
if mscCfg.Enabled("msc2753") { if mscCfg.Enabled("msc2753") {
v3mux.Handle("/peek/{roomIDOrAlias}", v3mux.Handle("/peek/{roomIDOrAlias}",
httputil.MakeAuthAPI(gomatrixserverlib.Peek, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI(spec.Peek, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
if r := rateLimits.Limit(req, device); r != nil { if r := rateLimits.Limit(req, device); r != nil {
return *r return *r
} }
@ -293,7 +293,7 @@ func Setup(
}, httputil.WithAllowGuests()), }, httputil.WithAllowGuests()),
).Methods(http.MethodGet, http.MethodOptions) ).Methods(http.MethodGet, http.MethodOptions)
v3mux.Handle("/rooms/{roomID}/join", v3mux.Handle("/rooms/{roomID}/join",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI(spec.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
if r := rateLimits.Limit(req, device); r != nil { if r := rateLimits.Limit(req, device); r != nil {
return *r return *r
} }
@ -1398,7 +1398,7 @@ func Setup(
}, httputil.WithAllowGuests()), }, httputil.WithAllowGuests()),
).Methods(http.MethodPost, http.MethodOptions) ).Methods(http.MethodPost, http.MethodOptions)
v3mux.Handle("/rooms/{roomId}/receipt/{receiptType}/{eventId}", v3mux.Handle("/rooms/{roomId}/receipt/{receiptType}/{eventId}",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI(spec.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
if r := rateLimits.Limit(req, device); r != nil { if r := rateLimits.Limit(req, device); r != nil {
return *r return *r
} }

View file

@ -24,6 +24,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -117,7 +118,7 @@ func SendEvent(
// If we're sending a membership update, make sure to strip the authorised // If we're sending a membership update, make sure to strip the authorised
// via key if it is present, otherwise other servers won't be able to auth // via key if it is present, otherwise other servers won't be able to auth
// the event if the room is set to the "restricted" join rule. // the event if the room is set to the "restricted" join rule.
if eventType == gomatrixserverlib.MRoomMember { if eventType == spec.MRoomMember {
delete(r, "join_authorised_via_users_server") delete(r, "join_authorised_via_users_server")
} }
@ -136,7 +137,7 @@ func SendEvent(
timeToGenerateEvent := time.Since(startedGeneratingEvent) timeToGenerateEvent := time.Since(startedGeneratingEvent)
// validate that the aliases exists // validate that the aliases exists
if eventType == gomatrixserverlib.MRoomCanonicalAlias && stateKey != nil && *stateKey == "" { if eventType == spec.MRoomCanonicalAlias && stateKey != nil && *stateKey == "" {
aliasReq := api.AliasEvent{} aliasReq := api.AliasEvent{}
if err = json.Unmarshal(e.Content(), &aliasReq); err != nil { if err = json.Unmarshal(e.Content(), &aliasReq); err != nil {
return util.ErrorResponse(fmt.Errorf("unable to parse alias event: %w", err)) return util.ErrorResponse(fmt.Errorf("unable to parse alias event: %w", err))

View file

@ -25,6 +25,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@ -68,7 +69,7 @@ func OnIncomingStateRequest(ctx context.Context, device *userapi.Device, rsAPI a
// that marks the room as world-readable. If we don't then we assume that // that marks the room as world-readable. If we don't then we assume that
// the room is not world-readable. // the room is not world-readable.
for _, ev := range stateRes.StateEvents { for _, ev := range stateRes.StateEvents {
if ev.Type() == gomatrixserverlib.MRoomHistoryVisibility { if ev.Type() == spec.MRoomHistoryVisibility {
content := map[string]string{} content := map[string]string{}
if err := json.Unmarshal(ev.Content(), &content); err != nil { if err := json.Unmarshal(ev.Content(), &content); err != nil {
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for history visibility failed") util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for history visibility failed")
@ -185,9 +186,9 @@ func OnIncomingStateTypeRequest(
StateKey: stateKey, StateKey: stateKey,
}, },
} }
if evType != gomatrixserverlib.MRoomHistoryVisibility && stateKey != "" { if evType != spec.MRoomHistoryVisibility && stateKey != "" {
stateToFetch = append(stateToFetch, gomatrixserverlib.StateKeyTuple{ stateToFetch = append(stateToFetch, gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomHistoryVisibility, EventType: spec.MRoomHistoryVisibility,
StateKey: "", StateKey: "",
}) })
} }
@ -208,7 +209,7 @@ func OnIncomingStateTypeRequest(
// that marks the room as world-readable. If we don't then we assume that // that marks the room as world-readable. If we don't then we assume that
// the room is not world-readable. // the room is not world-readable.
for _, ev := range stateRes.StateEvents { for _, ev := range stateRes.StateEvents {
if ev.Type() == gomatrixserverlib.MRoomHistoryVisibility { if ev.Type() == spec.MRoomHistoryVisibility {
content := map[string]string{} content := map[string]string{}
if err := json.Unmarshal(ev.Content(), &content); err != nil { if err := json.Unmarshal(ev.Content(), &content); err != nil {
util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for history visibility failed") util.GetLogger(ctx).WithError(err).Error("json.Unmarshal for history visibility failed")
@ -242,7 +243,7 @@ func OnIncomingStateTypeRequest(
} }
// If the user has never been in the room then stop at this point. // If the user has never been in the room then stop at this point.
// We won't tell the user about a room they have never joined. // We won't tell the user about a room they have never joined.
if !membershipRes.HasBeenInRoom || membershipRes.Membership == gomatrixserverlib.Ban { if !membershipRes.HasBeenInRoom || membershipRes.Membership == spec.Ban {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusForbidden, Code: http.StatusForbidden,
JSON: jsonerror.Forbidden(fmt.Sprintf("Unknown room %q or user %q has never joined this room", roomID, device.UserID)), JSON: jsonerror.Forbidden(fmt.Sprintf("Unknown room %q or user %q has never joined this room", roomID, device.UserID)),

View file

@ -141,7 +141,7 @@ func (t *KeyChangeConsumer) onDeviceKeyMessage(m api.DeviceMessage) bool {
} }
// Pack the EDU and marshal it // Pack the EDU and marshal it
edu := &gomatrixserverlib.EDU{ edu := &gomatrixserverlib.EDU{
Type: gomatrixserverlib.MDeviceListUpdate, Type: spec.MDeviceListUpdate,
Origin: string(originServerName), Origin: string(originServerName),
} }
event := gomatrixserverlib.DeviceListUpdateEvent{ event := gomatrixserverlib.DeviceListUpdateEvent{

View file

@ -143,7 +143,7 @@ func (t *OutputPresenceConsumer) onMessage(ctx context.Context, msgs []*nats.Msg
} }
edu := &gomatrixserverlib.EDU{ edu := &gomatrixserverlib.EDU{
Type: gomatrixserverlib.MPresence, Type: spec.MPresence,
Origin: string(serverName), Origin: string(serverName),
} }
if edu.Content, err = json.Marshal(content); err != nil { if edu.Content, err = json.Marshal(content); err != nil {

View file

@ -134,7 +134,7 @@ func (t *OutputReceiptConsumer) onMessage(ctx context.Context, msgs []*nats.Msg)
} }
edu := &gomatrixserverlib.EDU{ edu := &gomatrixserverlib.EDU{
Type: gomatrixserverlib.MReceipt, Type: spec.MReceipt,
Origin: string(receiptServerName), Origin: string(receiptServerName),
} }
if edu.Content, err = json.Marshal(content); err != nil { if edu.Content, err = json.Marshal(content); err != nil {

View file

@ -208,9 +208,9 @@ func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent, rew
} }
// If we added new hosts, inform them about our known presence events for this room // If we added new hosts, inform them about our known presence events for this room
if s.cfg.Matrix.Presence.EnableOutbound && len(addsJoinedHosts) > 0 && ore.Event.Type() == gomatrixserverlib.MRoomMember && ore.Event.StateKey() != nil { if s.cfg.Matrix.Presence.EnableOutbound && len(addsJoinedHosts) > 0 && ore.Event.Type() == spec.MRoomMember && ore.Event.StateKey() != nil {
membership, _ := ore.Event.Membership() membership, _ := ore.Event.Membership()
if membership == gomatrixserverlib.Join { if membership == spec.Join {
s.sendPresence(ore.Event.RoomID(), addsJoinedHosts) s.sendPresence(ore.Event.RoomID(), addsJoinedHosts)
} }
} }
@ -302,7 +302,7 @@ func (s *OutputRoomEventConsumer) sendPresence(roomID string, addedJoined []type
} }
edu := &gomatrixserverlib.EDU{ edu := &gomatrixserverlib.EDU{
Type: gomatrixserverlib.MPresence, Type: spec.MPresence,
Origin: string(s.cfg.Matrix.ServerName), Origin: string(s.cfg.Matrix.ServerName),
} }
if edu.Content, err = json.Marshal(content); err != nil { if edu.Content, err = json.Marshal(content); err != nil {
@ -399,7 +399,7 @@ func JoinedHostsFromEvents(evs []*gomatrixserverlib.Event) ([]types.JoinedHost,
if err != nil { if err != nil {
return nil, err return nil, err
} }
if membership != gomatrixserverlib.Join { if membership != spec.Join {
continue continue
} }
_, serverName, err := gomatrixserverlib.SplitID('@', *ev.StateKey()) _, serverName, err := gomatrixserverlib.SplitID('@', *ev.StateKey())

View file

@ -108,7 +108,7 @@ func (t *OutputSendToDeviceConsumer) onMessage(ctx context.Context, msgs []*nats
// Pack the EDU and marshal it // Pack the EDU and marshal it
edu := &gomatrixserverlib.EDU{ edu := &gomatrixserverlib.EDU{
Type: gomatrixserverlib.MDirectToDevice, Type: spec.MDirectToDevice,
Origin: string(originServerName), Origin: string(originServerName),
} }
tdm := gomatrixserverlib.ToDeviceMessage{ tdm := gomatrixserverlib.ToDeviceMessage{

View file

@ -148,7 +148,7 @@ func (f *fedClient) SendTransaction(ctx context.Context, t gomatrixserverlib.Tra
f.fedClientMutex.Lock() f.fedClientMutex.Lock()
defer f.fedClientMutex.Unlock() defer f.fedClientMutex.Unlock()
for _, edu := range t.EDUs { for _, edu := range t.EDUs {
if edu.Type == gomatrixserverlib.MDeviceListUpdate { if edu.Type == spec.MDeviceListUpdate {
f.sentTxn = true f.sentTxn = true
} }
} }

View file

@ -177,7 +177,7 @@ func (r *FederationInternalAPI) performJoinUsingServer(
// Set all the fields to be what they should be, this should be a no-op // Set all the fields to be what they should be, this should be a no-op
// but it's possible that the remote server returned us something "odd" // but it's possible that the remote server returned us something "odd"
respMakeJoin.JoinEvent.Type = gomatrixserverlib.MRoomMember respMakeJoin.JoinEvent.Type = spec.MRoomMember
respMakeJoin.JoinEvent.Sender = userID respMakeJoin.JoinEvent.Sender = userID
respMakeJoin.JoinEvent.StateKey = &userID respMakeJoin.JoinEvent.StateKey = &userID
respMakeJoin.JoinEvent.RoomID = roomID respMakeJoin.JoinEvent.RoomID = roomID
@ -186,7 +186,7 @@ func (r *FederationInternalAPI) performJoinUsingServer(
content = map[string]interface{}{} content = map[string]interface{}{}
} }
_ = json.Unmarshal(respMakeJoin.JoinEvent.Content, &content) _ = json.Unmarshal(respMakeJoin.JoinEvent.Content, &content)
content["membership"] = gomatrixserverlib.Join content["membership"] = spec.Join
if err = respMakeJoin.JoinEvent.SetContent(content); err != nil { if err = respMakeJoin.JoinEvent.SetContent(content); err != nil {
return fmt.Errorf("respMakeJoin.JoinEvent.SetContent: %w", err) return fmt.Errorf("respMakeJoin.JoinEvent.SetContent: %w", err)
} }
@ -317,7 +317,7 @@ func (r *FederationInternalAPI) performJoinUsingServer(
func isWellFormedMembershipEvent(event *gomatrixserverlib.Event, roomID, userID string) bool { func isWellFormedMembershipEvent(event *gomatrixserverlib.Event, roomID, userID string) bool {
if membership, err := event.Membership(); err != nil { if membership, err := event.Membership(); err != nil {
return false return false
} else if membership != gomatrixserverlib.Join { } else if membership != spec.Join {
return false return false
} }
if event.RoomID() != roomID { if event.RoomID() != roomID {
@ -554,7 +554,7 @@ func (r *FederationInternalAPI) PerformLeave(
// Set all the fields to be what they should be, this should be a no-op // Set all the fields to be what they should be, this should be a no-op
// but it's possible that the remote server returned us something "odd" // but it's possible that the remote server returned us something "odd"
respMakeLeave.LeaveEvent.Type = gomatrixserverlib.MRoomMember respMakeLeave.LeaveEvent.Type = spec.MRoomMember
respMakeLeave.LeaveEvent.Sender = request.UserID respMakeLeave.LeaveEvent.Sender = request.UserID
respMakeLeave.LeaveEvent.StateKey = &request.UserID respMakeLeave.LeaveEvent.StateKey = &request.UserID
respMakeLeave.LeaveEvent.RoomID = request.RoomID respMakeLeave.LeaveEvent.RoomID = request.RoomID
@ -716,7 +716,7 @@ func (r *FederationInternalAPI) MarkServersAlive(destinations []spec.ServerName)
func sanityCheckAuthChain(authChain []*gomatrixserverlib.Event) error { func sanityCheckAuthChain(authChain []*gomatrixserverlib.Event) error {
// sanity check we have a create event and it has a known room version // sanity check we have a create event and it has a known room version
for _, ev := range authChain { for _, ev := range authChain {
if ev.Type() == gomatrixserverlib.MRoomCreate && ev.StateKeyEquals("") { if ev.Type() == spec.MRoomCreate && ev.StateKeyEquals("") {
// make sure the room version is known // make sure the room version is known
content := ev.Content() content := ev.Content()
verBody := struct { verBody := struct {

View file

@ -114,7 +114,7 @@ func mustCreatePDU(t *testing.T) *gomatrixserverlib.HeaderedEvent {
func mustCreateEDU(t *testing.T) *gomatrixserverlib.EDU { func mustCreateEDU(t *testing.T) *gomatrixserverlib.EDU {
t.Helper() t.Helper()
return &gomatrixserverlib.EDU{Type: gomatrixserverlib.MTyping} return &gomatrixserverlib.EDU{Type: spec.MTyping}
} }
func testSetup(failuresUntilBlacklist uint32, failuresUntilAssumedOffline uint32, shouldTxSucceed bool, shouldTxRelaySucceed bool, t *testing.T, dbType test.DBType, realDatabase bool) (storage.Database, *stubFederationClient, *OutgoingQueues, *process.ProcessContext, func()) { func testSetup(failuresUntilBlacklist uint32, failuresUntilAssumedOffline uint32, shouldTxSucceed bool, shouldTxRelaySucceed bool, t *testing.T, dbType test.DBType, realDatabase bool) (storage.Database, *stubFederationClient, *OutgoingQueues, *process.ProcessContext, func()) {

View file

@ -125,7 +125,7 @@ func MakeJoin(
StateKey: &userID, StateKey: &userID,
} }
content := gomatrixserverlib.MemberContent{ content := gomatrixserverlib.MemberContent{
Membership: gomatrixserverlib.Join, Membership: spec.Join,
AuthorisedVia: authorisedVia, AuthorisedVia: authorisedVia,
} }
if err = builder.SetContent(content); err != nil { if err = builder.SetContent(content); err != nil {
@ -279,7 +279,7 @@ func SendJoin(
JSON: jsonerror.BadJSON("missing content.membership key"), JSON: jsonerror.BadJSON("missing content.membership key"),
} }
} }
if membership != gomatrixserverlib.Join { if membership != spec.Join {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusBadRequest, Code: http.StatusBadRequest,
JSON: jsonerror.BadJSON("membership must be 'join'"), JSON: jsonerror.BadJSON("membership must be 'join'"),
@ -350,8 +350,8 @@ func SendJoin(
continue continue
} }
if membership, merr := se.Membership(); merr == nil { if membership, merr := se.Membership(); merr == nil {
alreadyJoined = (membership == gomatrixserverlib.Join) alreadyJoined = (membership == spec.Join)
isBanned = (membership == gomatrixserverlib.Ban) isBanned = (membership == spec.Ban)
break break
} }
} }

View file

@ -57,7 +57,7 @@ func MakeLeave(
Type: "m.room.member", Type: "m.room.member",
StateKey: &userID, StateKey: &userID,
} }
err = builder.SetContent(map[string]interface{}{"membership": gomatrixserverlib.Leave}) err = builder.SetContent(map[string]interface{}{"membership": spec.Leave})
if err != nil { if err != nil {
util.GetLogger(httpReq.Context()).WithError(err).Error("builder.SetContent failed") util.GetLogger(httpReq.Context()).WithError(err).Error("builder.SetContent failed")
return jsonerror.InternalServerError() return jsonerror.InternalServerError()
@ -97,7 +97,7 @@ func MakeLeave(
if !state.StateKeyEquals(userID) { if !state.StateKeyEquals(userID) {
continue continue
} }
if mem, merr := state.Membership(); merr == nil && mem == gomatrixserverlib.Leave { if mem, merr := state.Membership(); merr == nil && mem == spec.Leave {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusOK, Code: http.StatusOK,
JSON: map[string]interface{}{ JSON: map[string]interface{}{
@ -215,7 +215,7 @@ func SendLeave(
RoomID: roomID, RoomID: roomID,
StateToFetch: []gomatrixserverlib.StateKeyTuple{ StateToFetch: []gomatrixserverlib.StateKeyTuple{
{ {
EventType: gomatrixserverlib.MRoomMember, EventType: spec.MRoomMember,
StateKey: *event.StateKey(), StateKey: *event.StateKey(),
}, },
}, },
@ -244,7 +244,7 @@ func SendLeave(
// We are/were joined/invited/banned or something. Check if // We are/were joined/invited/banned or something. Check if
// we can no-op here. // we can no-op here.
if len(queryRes.StateEvents) == 1 { if len(queryRes.StateEvents) == 1 {
if mem, merr := queryRes.StateEvents[0].Membership(); merr == nil && mem == gomatrixserverlib.Leave { if mem, merr := queryRes.StateEvents[0].Membership(); merr == nil && mem == spec.Leave {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusOK, Code: http.StatusOK,
JSON: struct{}{}, JSON: struct{}{},
@ -288,7 +288,7 @@ func SendLeave(
JSON: jsonerror.BadJSON("missing content.membership key"), JSON: jsonerror.BadJSON("missing content.membership key"),
} }
} }
if mem != gomatrixserverlib.Leave { if mem != spec.Leave {
return util.JSONResponse{ return util.JSONResponse{
Code: http.StatusBadRequest, Code: http.StatusBadRequest,
JSON: jsonerror.BadJSON("The membership in the event content must be set to leave"), JSON: jsonerror.BadJSON("The membership in the event content must be set to leave"),

View file

@ -8,6 +8,7 @@ import (
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/httputil" "github.com/matrix-org/dendrite/clientapi/httputil"
@ -126,11 +127,11 @@ func fillPublicRoomsReq(httpReq *http.Request, request *PublicRoomReq) *util.JSO
func fillInRooms(ctx context.Context, roomIDs []string, rsAPI roomserverAPI.FederationRoomserverAPI) ([]fclient.PublicRoom, error) { func fillInRooms(ctx context.Context, roomIDs []string, rsAPI roomserverAPI.FederationRoomserverAPI) ([]fclient.PublicRoom, error) {
avatarTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.avatar", StateKey: ""} avatarTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.avatar", StateKey: ""}
nameTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.name", StateKey: ""} nameTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.name", StateKey: ""}
canonicalTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomCanonicalAlias, StateKey: ""} canonicalTuple := gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomCanonicalAlias, StateKey: ""}
topicTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.topic", StateKey: ""} topicTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.topic", StateKey: ""}
guestTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.guest_access", StateKey: ""} guestTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.guest_access", StateKey: ""}
visibilityTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomHistoryVisibility, StateKey: ""} visibilityTuple := gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomHistoryVisibility, StateKey: ""}
joinRuleTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomJoinRules, StateKey: ""} joinRuleTuple := gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomJoinRules, StateKey: ""}
var stateRes roomserverAPI.QueryBulkStateContentResponse var stateRes roomserverAPI.QueryBulkStateContentResponse
err := rsAPI.QueryBulkStateContent(ctx, &roomserverAPI.QueryBulkStateContentRequest{ err := rsAPI.QueryBulkStateContent(ctx, &roomserverAPI.QueryBulkStateContentRequest{
@ -138,7 +139,7 @@ func fillInRooms(ctx context.Context, roomIDs []string, rsAPI roomserverAPI.Fede
AllowWildcards: true, AllowWildcards: true,
StateTuples: []gomatrixserverlib.StateKeyTuple{ StateTuples: []gomatrixserverlib.StateKeyTuple{
nameTuple, canonicalTuple, topicTuple, guestTuple, visibilityTuple, joinRuleTuple, avatarTuple, nameTuple, canonicalTuple, topicTuple, guestTuple, visibilityTuple, joinRuleTuple, avatarTuple,
{EventType: gomatrixserverlib.MRoomMember, StateKey: "*"}, {EventType: spec.MRoomMember, StateKey: "*"},
}, },
}, &stateRes) }, &stateRes)
if err != nil { if err != nil {
@ -154,7 +155,7 @@ func fillInRooms(ctx context.Context, roomIDs []string, rsAPI roomserverAPI.Fede
joinCount := 0 joinCount := 0
var joinRule, guestAccess string var joinRule, guestAccess string
for tuple, contentVal := range data { for tuple, contentVal := range data {
if tuple.EventType == gomatrixserverlib.MRoomMember && contentVal == "join" { if tuple.EventType == spec.MRoomMember && contentVal == "join" {
joinCount++ joinCount++
continue continue
} }
@ -178,7 +179,7 @@ func fillInRooms(ctx context.Context, roomIDs []string, rsAPI roomserverAPI.Fede
guestAccess = contentVal guestAccess = contentVal
} }
} }
if joinRule == gomatrixserverlib.Public && guestAccess == "can_join" { if joinRule == spec.Public && guestAccess == "can_join" {
pub.GuestCanJoin = true pub.GuestCanJoin = true
} }
pub.JoinedMembersCount = joinCount pub.JoinedMembersCount = joinCount

View file

@ -266,7 +266,7 @@ func createInviteFrom3PIDInvite(
content := gomatrixserverlib.MemberContent{ content := gomatrixserverlib.MemberContent{
AvatarURL: profile.AvatarURL, AvatarURL: profile.AvatarURL,
DisplayName: profile.DisplayName, DisplayName: profile.DisplayName,
Membership: gomatrixserverlib.Invite, Membership: spec.Invite,
ThirdPartyInvite: &gomatrixserverlib.MemberThirdPartyInvite{ ThirdPartyInvite: &gomatrixserverlib.MemberThirdPartyInvite{
Signed: inv.Signed, Signed: inv.Signed,
}, },

View file

@ -33,8 +33,8 @@ var defaultExpiry = time.Hour * 24
// defaultExpireEDUTypes contains EDUs which can/should be expired after a given time // defaultExpireEDUTypes contains EDUs which can/should be expired after a given time
// if the target server isn't reachable for some reason. // if the target server isn't reachable for some reason.
var defaultExpireEDUTypes = map[string]time.Duration{ var defaultExpireEDUTypes = map[string]time.Duration{
gomatrixserverlib.MTyping: time.Minute, spec.MTyping: time.Minute,
gomatrixserverlib.MPresence: time.Minute * 10, spec.MPresence: time.Minute * 10,
} }
// AssociateEDUWithDestination creates an association that the // AssociateEDUWithDestination creates an association that the
@ -57,7 +57,7 @@ func (d *Database) AssociateEDUWithDestinations(
} }
// We forcibly set m.direct_to_device and m.device_list_update events // We forcibly set m.direct_to_device and m.device_list_update events
// to 0, as we always want them to be delivered. (required for E2EE) // to 0, as we always want them to be delivered. (required for E2EE)
if eduType == gomatrixserverlib.MDirectToDevice || eduType == gomatrixserverlib.MDeviceListUpdate { if eduType == spec.MDirectToDevice || eduType == spec.MDeviceListUpdate {
expiresAt = 0 expiresAt = 0
} }
return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {

View file

@ -35,7 +35,7 @@ func mustCreateFederationDatabase(t *testing.T, dbType test.DBType) (storage.Dat
func TestExpireEDUs(t *testing.T) { func TestExpireEDUs(t *testing.T) {
var expireEDUTypes = map[string]time.Duration{ var expireEDUTypes = map[string]time.Duration{
gomatrixserverlib.MReceipt: 0, spec.MReceipt: 0,
} }
ctx := context.Background() ctx := context.Background()
@ -48,7 +48,7 @@ func TestExpireEDUs(t *testing.T) {
receipt, err := db.StoreJSON(ctx, "{}") receipt, err := db.StoreJSON(ctx, "{}")
assert.NoError(t, err) assert.NoError(t, err)
err = db.AssociateEDUWithDestinations(ctx, destinations, receipt, gomatrixserverlib.MReceipt, expireEDUTypes) err = db.AssociateEDUWithDestinations(ctx, destinations, receipt, spec.MReceipt, expireEDUTypes)
assert.NoError(t, err) assert.NoError(t, err)
} }
// add data without expiry // add data without expiry
@ -72,7 +72,7 @@ func TestExpireEDUs(t *testing.T) {
receipt, err = db.StoreJSON(ctx, "{}") receipt, err = db.StoreJSON(ctx, "{}")
assert.NoError(t, err) assert.NoError(t, err)
err = db.AssociateEDUWithDestinations(ctx, destinations, receipt, gomatrixserverlib.MDirectToDevice, expireEDUTypes) err = db.AssociateEDUWithDestinations(ctx, destinations, receipt, spec.MDirectToDevice, expireEDUTypes)
assert.NoError(t, err) assert.NoError(t, err)
err = db.DeleteExpiredEDUs(ctx) err = db.DeleteExpiredEDUs(ctx)

2
go.mod
View file

@ -22,7 +22,7 @@ require (
github.com/matrix-org/dugong v0.0.0-20210921133753-66e6b1c67e2e github.com/matrix-org/dugong v0.0.0-20210921133753-66e6b1c67e2e
github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91 github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91
github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530 github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530
github.com/matrix-org/gomatrixserverlib v0.0.0-20230418110303-b59eb925da4a github.com/matrix-org/gomatrixserverlib v0.0.0-20230418132954-2113ec20fc8e
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a
github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 github.com/matrix-org/util v0.0.0-20221111132719-399730281e66
github.com/mattn/go-sqlite3 v1.14.16 github.com/mattn/go-sqlite3 v1.14.16

2
go.sum
View file

@ -327,6 +327,8 @@ github.com/matrix-org/gomatrixserverlib v0.0.0-20230418093913-f0ab3b996ed5 h1:WV
github.com/matrix-org/gomatrixserverlib v0.0.0-20230418093913-f0ab3b996ed5/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU= github.com/matrix-org/gomatrixserverlib v0.0.0-20230418093913-f0ab3b996ed5/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230418110303-b59eb925da4a h1:84t3ixdKTJOzgmr8+KesjPY9G9g1LX0fz5zD6E4ybHA= github.com/matrix-org/gomatrixserverlib v0.0.0-20230418110303-b59eb925da4a h1:84t3ixdKTJOzgmr8+KesjPY9G9g1LX0fz5zD6E4ybHA=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230418110303-b59eb925da4a/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU= github.com/matrix-org/gomatrixserverlib v0.0.0-20230418110303-b59eb925da4a/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230418132954-2113ec20fc8e h1:nLZjU+z/W2n48/9mlCjx+QWo3Q6z777RrLi6Id2CzmM=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230418132954-2113ec20fc8e/go.mod h1:7HTbSZe+CIdmeqVyFMekwD5dFU8khWQyngKATvd12FU=
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a h1:awrPDf9LEFySxTLKYBMCiObelNx/cBuv/wzllvCCH3A= github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a h1:awrPDf9LEFySxTLKYBMCiObelNx/cBuv/wzllvCCH3A=
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a/go.mod h1:HchJX9oKMXaT2xYFs0Ha/6Zs06mxLU8k6F1ODnrGkeQ= github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a/go.mod h1:HchJX9oKMXaT2xYFs0Ha/6Zs06mxLU8k6F1ODnrGkeQ=
github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 h1:6z4KxomXSIGWqhHcfzExgkH3Z3UkIXry4ibJS4Aqz2Y= github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 h1:6z4KxomXSIGWqhHcfzExgkH3Z3UkIXry4ibJS4Aqz2Y=

View file

@ -23,6 +23,7 @@ import (
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/setup/config" "github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
) )
@ -174,7 +175,7 @@ func truncateAuthAndPrevEvents(auth, prev []gomatrixserverlib.EventReference) (
// downstream components to the roomserver when an OutputTypeRedactedEvent occurs. // downstream components to the roomserver when an OutputTypeRedactedEvent occurs.
func RedactEvent(redactionEvent, redactedEvent *gomatrixserverlib.Event) error { func RedactEvent(redactionEvent, redactedEvent *gomatrixserverlib.Event) error {
// sanity check // sanity check
if redactionEvent.Type() != gomatrixserverlib.MRoomRedaction { if redactionEvent.Type() != spec.MRoomRedaction {
return fmt.Errorf("RedactEvent: redactionEvent isn't a redaction event, is '%s'", redactionEvent.Type()) return fmt.Errorf("RedactEvent: redactionEvent isn't a redaction event, is '%s'", redactionEvent.Type())
} }
redactedEvent.Redact() redactedEvent.Redact()

View file

@ -23,6 +23,7 @@ import (
"github.com/blevesearch/bleve/v2" "github.com/blevesearch/bleve/v2"
"github.com/matrix-org/dendrite/setup/process" "github.com/matrix-org/dendrite/setup/process"
"github.com/matrix-org/gomatrixserverlib/spec"
// side effect imports to allow all possible languages // side effect imports to allow all possible languages
_ "github.com/blevesearch/bleve/v2/analysis/lang/ar" _ "github.com/blevesearch/bleve/v2/analysis/lang/ar"
@ -47,7 +48,6 @@ import (
_ "github.com/blevesearch/bleve/v2/analysis/lang/sv" _ "github.com/blevesearch/bleve/v2/analysis/lang/sv"
_ "github.com/blevesearch/bleve/v2/analysis/lang/tr" _ "github.com/blevesearch/bleve/v2/analysis/lang/tr"
"github.com/blevesearch/bleve/v2/mapping" "github.com/blevesearch/bleve/v2/mapping"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/dendrite/setup/config" "github.com/matrix-org/dendrite/setup/config"
) )
@ -79,9 +79,9 @@ func (i *IndexElement) SetContentType(v string) {
switch v { switch v {
case "m.room.message": case "m.room.message":
i.ContentType = "content.body" i.ContentType = "content.body"
case gomatrixserverlib.MRoomName: case spec.MRoomName:
i.ContentType = "content.name" i.ContentType = "content.name"
case gomatrixserverlib.MRoomTopic: case spec.MRoomTopic:
i.ContentType = "content.topic" i.ContentType = "content.topic"
} }
} }

View file

@ -19,7 +19,7 @@ import (
"testing" "testing"
"github.com/matrix-org/dendrite/setup/process" "github.com/matrix-org/dendrite/setup/process"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/matrix-org/dendrite/internal/fulltext" "github.com/matrix-org/dendrite/internal/fulltext"
@ -77,7 +77,7 @@ func mustAddTestData(t *testing.T, fts *fulltext.Search, firstStreamPos int64) (
Content: "Roomname testing", Content: "Roomname testing",
StreamPosition: streamPos, StreamPosition: streamPos,
} }
e.SetContentType(gomatrixserverlib.MRoomName) e.SetContentType(spec.MRoomName)
batchItems = append(batchItems, e) batchItems = append(batchItems, e)
e = fulltext.IndexElement{ e = fulltext.IndexElement{
EventID: util.RandomString(16), EventID: util.RandomString(16),
@ -85,7 +85,7 @@ func mustAddTestData(t *testing.T, fts *fulltext.Search, firstStreamPos int64) (
Content: "Room topic fulltext", Content: "Room topic fulltext",
StreamPosition: streamPos, StreamPosition: streamPos,
} }
e.SetContentType(gomatrixserverlib.MRoomTopic) e.SetContentType(spec.MRoomTopic)
batchItems = append(batchItems, e) batchItems = append(batchItems, e)
if err := fts.Index(batchItems...); err != nil { if err := fts.Index(batchItems...); err != nil {
t.Fatalf("failed to batch insert elements: %v", err) t.Fatalf("failed to batch insert elements: %v", err)

View file

@ -155,7 +155,7 @@ func (t *TxnReq) ProcessTransaction(ctx context.Context) (*fclient.RespSend, *ut
util.GetLogger(ctx).WithError(err).Debugf("Transaction: Failed to parse event JSON of event %s", string(pdu)) util.GetLogger(ctx).WithError(err).Debugf("Transaction: Failed to parse event JSON of event %s", string(pdu))
continue continue
} }
if event.Type() == gomatrixserverlib.MRoomCreate && event.StateKeyEquals("") { if event.Type() == spec.MRoomCreate && event.StateKeyEquals("") {
continue continue
} }
if api.IsServerBannedFromRoom(ctx, t.rsAPI, event.RoomID(), t.Origin) { if api.IsServerBannedFromRoom(ctx, t.rsAPI, event.RoomID(), t.Origin) {
@ -208,7 +208,7 @@ func (t *TxnReq) processEDUs(ctx context.Context) {
for _, e := range t.EDUs { for _, e := range t.EDUs {
EDUCountTotal.Inc() EDUCountTotal.Inc()
switch e.Type { switch e.Type {
case gomatrixserverlib.MTyping: case spec.MTyping:
// https://matrix.org/docs/spec/server_server/latest#typing-notifications // https://matrix.org/docs/spec/server_server/latest#typing-notifications
var typingPayload struct { var typingPayload struct {
RoomID string `json:"room_id"` RoomID string `json:"room_id"`
@ -229,7 +229,7 @@ func (t *TxnReq) processEDUs(ctx context.Context) {
if err := t.producer.SendTyping(ctx, typingPayload.UserID, typingPayload.RoomID, typingPayload.Typing, 30*1000); err != nil { if err := t.producer.SendTyping(ctx, typingPayload.UserID, typingPayload.RoomID, typingPayload.Typing, 30*1000); err != nil {
util.GetLogger(ctx).WithError(err).Error("Failed to send typing event to JetStream") util.GetLogger(ctx).WithError(err).Error("Failed to send typing event to JetStream")
} }
case gomatrixserverlib.MDirectToDevice: case spec.MDirectToDevice:
// https://matrix.org/docs/spec/server_server/r0.1.3#m-direct-to-device-schema // https://matrix.org/docs/spec/server_server/r0.1.3#m-direct-to-device-schema
var directPayload gomatrixserverlib.ToDeviceMessage var directPayload gomatrixserverlib.ToDeviceMessage
if err := json.Unmarshal(e.Content, &directPayload); err != nil { if err := json.Unmarshal(e.Content, &directPayload); err != nil {
@ -256,12 +256,12 @@ func (t *TxnReq) processEDUs(ctx context.Context) {
} }
} }
} }
case gomatrixserverlib.MDeviceListUpdate: case spec.MDeviceListUpdate:
if err := t.producer.SendDeviceListUpdate(ctx, e.Content, t.Origin); err != nil { if err := t.producer.SendDeviceListUpdate(ctx, e.Content, t.Origin); err != nil {
sentry.CaptureException(err) sentry.CaptureException(err)
util.GetLogger(ctx).WithError(err).Error("failed to InputDeviceListUpdate") util.GetLogger(ctx).WithError(err).Error("failed to InputDeviceListUpdate")
} }
case gomatrixserverlib.MReceipt: case spec.MReceipt:
// https://matrix.org/docs/spec/server_server/r0.1.4#receipts // https://matrix.org/docs/spec/server_server/r0.1.4#receipts
payload := map[string]types.FederationReceiptMRead{} payload := map[string]types.FederationReceiptMRead{}
@ -297,7 +297,7 @@ func (t *TxnReq) processEDUs(ctx context.Context) {
sentry.CaptureException(err) sentry.CaptureException(err)
logrus.WithError(err).Errorf("Failed to process signing key update") logrus.WithError(err).Errorf("Failed to process signing key update")
} }
case gomatrixserverlib.MPresence: case spec.MPresence:
if t.inboundPresenceEnabled { if t.inboundPresenceEnabled {
if err := t.processPresence(ctx, e); err != nil { if err := t.processPresence(ctx, e); err != nil {
logrus.WithError(err).Errorf("Failed to process presence update") logrus.WithError(err).Errorf("Failed to process presence update")

View file

@ -163,7 +163,7 @@ func TestForwardTooManyEDUsReturnsError(t *testing.T) {
Field: []gomatrixserverlib.EDU{}, Field: []gomatrixserverlib.EDU{},
} }
for i := 0; i < 101; i++ { for i := 0; i < 101; i++ {
content.Field = append(content.Field, gomatrixserverlib.EDU{Type: gomatrixserverlib.MTyping}) content.Field = append(content.Field, gomatrixserverlib.EDU{Type: spec.MTyping})
} }
assert.Greater(t, len(content.Field), 100) assert.Greater(t, len(content.Field), 100)

View file

@ -164,11 +164,11 @@ func IsServerBannedFromRoom(ctx context.Context, rsAPI FederationRoomserverAPI,
func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI QueryBulkStateContentAPI) ([]fclient.PublicRoom, error) { func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI QueryBulkStateContentAPI) ([]fclient.PublicRoom, error) {
avatarTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.avatar", StateKey: ""} avatarTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.avatar", StateKey: ""}
nameTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.name", StateKey: ""} nameTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.name", StateKey: ""}
canonicalTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomCanonicalAlias, StateKey: ""} canonicalTuple := gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomCanonicalAlias, StateKey: ""}
topicTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.topic", StateKey: ""} topicTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.topic", StateKey: ""}
guestTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.guest_access", StateKey: ""} guestTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.guest_access", StateKey: ""}
visibilityTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomHistoryVisibility, StateKey: ""} visibilityTuple := gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomHistoryVisibility, StateKey: ""}
joinRuleTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomJoinRules, StateKey: ""} joinRuleTuple := gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomJoinRules, StateKey: ""}
var stateRes QueryBulkStateContentResponse var stateRes QueryBulkStateContentResponse
err := rsAPI.QueryBulkStateContent(ctx, &QueryBulkStateContentRequest{ err := rsAPI.QueryBulkStateContent(ctx, &QueryBulkStateContentRequest{
@ -176,7 +176,7 @@ func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI QueryBulkS
AllowWildcards: true, AllowWildcards: true,
StateTuples: []gomatrixserverlib.StateKeyTuple{ StateTuples: []gomatrixserverlib.StateKeyTuple{
nameTuple, canonicalTuple, topicTuple, guestTuple, visibilityTuple, joinRuleTuple, avatarTuple, nameTuple, canonicalTuple, topicTuple, guestTuple, visibilityTuple, joinRuleTuple, avatarTuple,
{EventType: gomatrixserverlib.MRoomMember, StateKey: "*"}, {EventType: spec.MRoomMember, StateKey: "*"},
}, },
}, &stateRes) }, &stateRes)
if err != nil { if err != nil {
@ -192,7 +192,7 @@ func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI QueryBulkS
joinCount := 0 joinCount := 0
var joinRule, guestAccess string var joinRule, guestAccess string
for tuple, contentVal := range data { for tuple, contentVal := range data {
if tuple.EventType == gomatrixserverlib.MRoomMember && contentVal == "join" { if tuple.EventType == spec.MRoomMember && contentVal == "join" {
joinCount++ joinCount++
continue continue
} }
@ -216,7 +216,7 @@ func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI QueryBulkS
guestAccess = contentVal guestAccess = contentVal
} }
} }
if joinRule == gomatrixserverlib.Public && guestAccess == "can_join" { if joinRule == spec.Public && guestAccess == "can_join" {
pub.GuestCanJoin = true pub.GuestCanJoin = true
} }
pub.JoinedMembersCount = joinCount pub.JoinedMembersCount = joinCount

View file

@ -33,7 +33,7 @@ func IsServerAllowed(
return true return true
} }
// 2. If the user's membership was join, allow. // 2. If the user's membership was join, allow.
joinedUserExists := IsAnyUserOnServerWithMembership(serverName, authEvents, gomatrixserverlib.Join) joinedUserExists := IsAnyUserOnServerWithMembership(serverName, authEvents, spec.Join)
if joinedUserExists { if joinedUserExists {
return true return true
} }
@ -42,7 +42,7 @@ func IsServerAllowed(
return true return true
} }
// 4. If the user's membership was invite, and the history_visibility was set to invited, allow. // 4. If the user's membership was invite, and the history_visibility was set to invited, allow.
invitedUserExists := IsAnyUserOnServerWithMembership(serverName, authEvents, gomatrixserverlib.Invite) invitedUserExists := IsAnyUserOnServerWithMembership(serverName, authEvents, spec.Invite)
if invitedUserExists && historyVisibility == gomatrixserverlib.HistoryVisibilityInvited { if invitedUserExists && historyVisibility == gomatrixserverlib.HistoryVisibilityInvited {
return true return true
} }
@ -56,7 +56,7 @@ func HistoryVisibilityForRoom(authEvents []*gomatrixserverlib.Event) gomatrixser
// By default if no history_visibility is set, or if the value is not understood, the visibility is assumed to be shared. // By default if no history_visibility is set, or if the value is not understood, the visibility is assumed to be shared.
visibility := gomatrixserverlib.HistoryVisibilityShared visibility := gomatrixserverlib.HistoryVisibilityShared
for _, ev := range authEvents { for _, ev := range authEvents {
if ev.Type() != gomatrixserverlib.MRoomHistoryVisibility { if ev.Type() != spec.MRoomHistoryVisibility {
continue continue
} }
if vis, err := ev.HistoryVisibility(); err == nil { if vis, err := ev.HistoryVisibility(); err == nil {
@ -68,7 +68,7 @@ func HistoryVisibilityForRoom(authEvents []*gomatrixserverlib.Event) gomatrixser
func IsAnyUserOnServerWithMembership(serverName spec.ServerName, authEvents []*gomatrixserverlib.Event, wantMembership string) bool { func IsAnyUserOnServerWithMembership(serverName spec.ServerName, authEvents []*gomatrixserverlib.Event, wantMembership string) bool {
for _, ev := range authEvents { for _, ev := range authEvents {
if ev.Type() != gomatrixserverlib.MRoomMember { if ev.Type() != spec.MRoomMember {
continue continue
} }
membership, err := ev.Membership() membership, err := ev.Membership()

View file

@ -26,6 +26,7 @@ import (
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/internal/helpers" "github.com/matrix-org/dendrite/roomserver/internal/helpers"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"github.com/tidwall/sjson" "github.com/tidwall/sjson"
) )
@ -142,7 +143,7 @@ func (r *RoomserverInternalAPI) RemoveRoomAlias(
var plEvent *gomatrixserverlib.HeaderedEvent var plEvent *gomatrixserverlib.HeaderedEvent
var pls *gomatrixserverlib.PowerLevelContent var pls *gomatrixserverlib.PowerLevelContent
plEvent, err = r.DB.GetStateEvent(ctx, roomID, gomatrixserverlib.MRoomPowerLevels, "") plEvent, err = r.DB.GetStateEvent(ctx, roomID, spec.MRoomPowerLevels, "")
if err != nil { if err != nil {
return fmt.Errorf("r.DB.GetStateEvent: %w", err) return fmt.Errorf("r.DB.GetStateEvent: %w", err)
} }
@ -152,13 +153,13 @@ func (r *RoomserverInternalAPI) RemoveRoomAlias(
return fmt.Errorf("plEvent.PowerLevels: %w", err) return fmt.Errorf("plEvent.PowerLevels: %w", err)
} }
if pls.UserLevel(request.UserID) < pls.EventLevel(gomatrixserverlib.MRoomCanonicalAlias, true) { if pls.UserLevel(request.UserID) < pls.EventLevel(spec.MRoomCanonicalAlias, true) {
response.Removed = false response.Removed = false
return nil return nil
} }
} }
ev, err := r.DB.GetStateEvent(ctx, roomID, gomatrixserverlib.MRoomCanonicalAlias, "") ev, err := r.DB.GetStateEvent(ctx, roomID, spec.MRoomCanonicalAlias, "")
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return err return err
} else if ev != nil { } else if ev != nil {

View file

@ -20,6 +20,7 @@ import (
"sort" "sort"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/roomserver/state" "github.com/matrix-org/dendrite/roomserver/state"
"github.com/matrix-org/dendrite/roomserver/storage" "github.com/matrix-org/dendrite/roomserver/storage"
@ -59,7 +60,7 @@ func CheckForSoftFail(
// state because we haven't received a m.room.create event yet. // state because we haven't received a m.room.create event yet.
// If we're now processing the first create event then never // If we're now processing the first create event then never
// soft-fail it. // soft-fail it.
if len(authStateEntries) == 0 && event.Type() == gomatrixserverlib.MRoomCreate { if len(authStateEntries) == 0 && event.Type() == spec.MRoomCreate {
return false, nil return false, nil
} }

View file

@ -55,7 +55,7 @@ func UpdateToInviteMembership(
Type: api.OutputTypeRetireInviteEvent, Type: api.OutputTypeRetireInviteEvent,
RetireInviteEvent: &api.OutputRetireInviteEvent{ RetireInviteEvent: &api.OutputRetireInviteEvent{
EventID: eventID, EventID: eventID,
Membership: gomatrixserverlib.Join, Membership: spec.Join,
RetiredByEventID: add.EventID(), RetiredByEventID: add.EventID(),
TargetUserID: *add.StateKey(), TargetUserID: *add.StateKey(),
}, },
@ -94,7 +94,7 @@ func IsServerCurrentlyInRoom(ctx context.Context, db storage.Database, serverNam
for i := range events { for i := range events {
gmslEvents[i] = events[i].Event gmslEvents[i] = events[i].Event
} }
return auth.IsAnyUserOnServerWithMembership(serverName, gmslEvents, gomatrixserverlib.Join), nil return auth.IsAnyUserOnServerWithMembership(serverName, gmslEvents, spec.Join), nil
} }
func IsInvitePending( func IsInvitePending(
@ -195,7 +195,7 @@ func GetMembershipsAtState(
return nil, err return nil, err
} }
if membership == gomatrixserverlib.Join { if membership == spec.Join {
events = append(events, event) events = append(events, event)
} }
} }

View file

@ -124,7 +124,7 @@ func (r *Inputer) processRoomEvent(
if rerr != nil { if rerr != nil {
return fmt.Errorf("r.DB.RoomInfo: %w", rerr) return fmt.Errorf("r.DB.RoomInfo: %w", rerr)
} }
isCreateEvent := event.Type() == gomatrixserverlib.MRoomCreate && event.StateKeyEquals("") isCreateEvent := event.Type() == spec.MRoomCreate && event.StateKeyEquals("")
if roomInfo == nil && !isCreateEvent { if roomInfo == nil && !isCreateEvent {
return fmt.Errorf("room %s does not exist for event %s", event.RoomID(), event.EventID()) return fmt.Errorf("room %s does not exist for event %s", event.RoomID(), event.EventID())
} }
@ -477,7 +477,7 @@ func (r *Inputer) processRoomEvent(
} }
// If guest_access changed and is not can_join, kick all guest users. // If guest_access changed and is not can_join, kick all guest users.
if event.Type() == gomatrixserverlib.MRoomGuestAccess && gjson.GetBytes(event.Content(), "guest_access").Str != "can_join" { if event.Type() == spec.MRoomGuestAccess && gjson.GetBytes(event.Content(), "guest_access").Str != "can_join" {
if err = r.kickGuests(ctx, event, roomInfo); err != nil { if err = r.kickGuests(ctx, event, roomInfo); err != nil {
logrus.WithError(err).Error("failed to kick guest users on m.room.guest_access revocation") logrus.WithError(err).Error("failed to kick guest users on m.room.guest_access revocation")
} }
@ -510,7 +510,7 @@ func (r *Inputer) processStateBefore(
) (historyVisibility gomatrixserverlib.HistoryVisibility, rejectionErr error, err error) { ) (historyVisibility gomatrixserverlib.HistoryVisibility, rejectionErr error, err error) {
historyVisibility = gomatrixserverlib.HistoryVisibilityShared // Default to shared. historyVisibility = gomatrixserverlib.HistoryVisibilityShared // Default to shared.
event := input.Event.Unwrap() event := input.Event.Unwrap()
isCreateEvent := event.Type() == gomatrixserverlib.MRoomCreate && event.StateKeyEquals("") isCreateEvent := event.Type() == spec.MRoomCreate && event.StateKeyEquals("")
var stateBeforeEvent []*gomatrixserverlib.Event var stateBeforeEvent []*gomatrixserverlib.Event
switch { switch {
case isCreateEvent: case isCreateEvent:
@ -547,7 +547,7 @@ func (r *Inputer) processStateBefore(
// output events. // output events.
tuplesNeeded := gomatrixserverlib.StateNeededForAuth([]*gomatrixserverlib.Event{event}).Tuples() tuplesNeeded := gomatrixserverlib.StateNeededForAuth([]*gomatrixserverlib.Event{event}).Tuples()
tuplesNeeded = append(tuplesNeeded, gomatrixserverlib.StateKeyTuple{ tuplesNeeded = append(tuplesNeeded, gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomHistoryVisibility, EventType: spec.MRoomHistoryVisibility,
StateKey: "", StateKey: "",
}) })
stateBeforeReq := &api.QueryStateAfterEventsRequest{ stateBeforeReq := &api.QueryStateAfterEventsRequest{
@ -580,7 +580,7 @@ func (r *Inputer) processStateBefore(
// Work out what the history visibility was at the time of the // Work out what the history visibility was at the time of the
// event. // event.
for _, event := range stateBeforeEvent { for _, event := range stateBeforeEvent {
if event.Type() != gomatrixserverlib.MRoomHistoryVisibility || !event.StateKeyEquals("") { if event.Type() != spec.MRoomHistoryVisibility || !event.StateKeyEquals("") {
continue continue
} }
if hisVis, err := event.HistoryVisibility(); err == nil { if hisVis, err := event.HistoryVisibility(); err == nil {
@ -843,12 +843,12 @@ func (r *Inputer) kickGuests(ctx context.Context, event *gomatrixserverlib.Event
if err = json.Unmarshal(memberEvent.Content(), &memberContent); err != nil { if err = json.Unmarshal(memberEvent.Content(), &memberContent); err != nil {
return err return err
} }
memberContent.Membership = gomatrixserverlib.Leave memberContent.Membership = spec.Leave
stateKey := *memberEvent.StateKey() stateKey := *memberEvent.StateKey()
fledglingEvent := &gomatrixserverlib.EventBuilder{ fledglingEvent := &gomatrixserverlib.EventBuilder{
RoomID: event.RoomID(), RoomID: event.RoomID(),
Type: gomatrixserverlib.MRoomMember, Type: spec.MRoomMember,
StateKey: &stateKey, StateKey: &stateKey,
Sender: stateKey, Sender: stateKey,
PrevEvents: prevEvents, PrevEvents: prevEvents,

View file

@ -4,6 +4,7 @@ import (
"testing" "testing"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/test" "github.com/matrix-org/dendrite/test"
) )
@ -21,15 +22,15 @@ func Test_EventAuth(t *testing.T) {
// Add the legal auth events from room2 // Add the legal auth events from room2
for _, x := range room2.Events() { for _, x := range room2.Events() {
if x.Type() == gomatrixserverlib.MRoomCreate { if x.Type() == spec.MRoomCreate {
authEventIDs = append(authEventIDs, x.EventID()) authEventIDs = append(authEventIDs, x.EventID())
authEvents = append(authEvents, x.Event) authEvents = append(authEvents, x.Event)
} }
if x.Type() == gomatrixserverlib.MRoomPowerLevels { if x.Type() == spec.MRoomPowerLevels {
authEventIDs = append(authEventIDs, x.EventID()) authEventIDs = append(authEventIDs, x.EventID())
authEvents = append(authEvents, x.Event) authEvents = append(authEvents, x.Event)
} }
if x.Type() == gomatrixserverlib.MRoomJoinRules { if x.Type() == spec.MRoomJoinRules {
authEventIDs = append(authEventIDs, x.EventID()) authEventIDs = append(authEventIDs, x.EventID())
authEvents = append(authEvents, x.Event) authEvents = append(authEvents, x.Event)
} }
@ -37,7 +38,7 @@ func Test_EventAuth(t *testing.T) {
// Add the illegal auth event from room1 (rooms are different) // Add the illegal auth event from room1 (rooms are different)
for _, x := range room1.Events() { for _, x := range room1.Events() {
if x.Type() == gomatrixserverlib.MRoomMember { if x.Type() == spec.MRoomMember {
authEventIDs = append(authEventIDs, x.EventID()) authEventIDs = append(authEventIDs, x.EventID())
authEvents = append(authEvents, x.Event) authEvents = append(authEvents, x.Event)
} }

View file

@ -19,6 +19,7 @@ import (
"fmt" "fmt"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/internal" "github.com/matrix-org/dendrite/internal"
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
@ -86,7 +87,7 @@ func (r *Inputer) updateMembership(
) ([]api.OutputEvent, error) { ) ([]api.OutputEvent, error) {
var err error var err error
// Default the membership to Leave if no event was added or removed. // Default the membership to Leave if no event was added or removed.
newMembership := gomatrixserverlib.Leave newMembership := spec.Leave
if add != nil { if add != nil {
newMembership, err = add.Membership() newMembership, err = add.Membership()
if err != nil { if err != nil {
@ -120,13 +121,13 @@ func (r *Inputer) updateMembership(
} }
switch newMembership { switch newMembership {
case gomatrixserverlib.Invite: case spec.Invite:
return helpers.UpdateToInviteMembership(mu, add, updates, updater.RoomVersion()) return helpers.UpdateToInviteMembership(mu, add, updates, updater.RoomVersion())
case gomatrixserverlib.Join: case spec.Join:
return updateToJoinMembership(mu, add, updates) return updateToJoinMembership(mu, add, updates)
case gomatrixserverlib.Leave, gomatrixserverlib.Ban: case spec.Leave, spec.Ban:
return updateToLeaveMembership(mu, add, newMembership, updates) return updateToLeaveMembership(mu, add, newMembership, updates)
case gomatrixserverlib.Knock: case spec.Knock:
return updateToKnockMembership(mu, add, updates) return updateToKnockMembership(mu, add, updates)
default: default:
panic(fmt.Errorf( panic(fmt.Errorf(
@ -160,7 +161,7 @@ func updateToJoinMembership(
Type: api.OutputTypeRetireInviteEvent, Type: api.OutputTypeRetireInviteEvent,
RetireInviteEvent: &api.OutputRetireInviteEvent{ RetireInviteEvent: &api.OutputRetireInviteEvent{
EventID: eventID, EventID: eventID,
Membership: gomatrixserverlib.Join, Membership: spec.Join,
RetiredByEventID: add.EventID(), RetiredByEventID: add.EventID(),
TargetUserID: *add.StateKey(), TargetUserID: *add.StateKey(),
}, },

View file

@ -280,7 +280,7 @@ func (t *missingStateReq) lookupResolvedStateBeforeEvent(ctx context.Context, e
resolvedState := &parsedRespState{} resolvedState := &parsedRespState{}
switch len(states) { switch len(states) {
case 0: case 0:
extremityIsCreate := e.Type() == gomatrixserverlib.MRoomCreate && e.StateKeyEquals("") extremityIsCreate := e.Type() == spec.MRoomCreate && e.StateKeyEquals("")
if !extremityIsCreate { if !extremityIsCreate {
// There are no previous states and this isn't the beginning of the // There are no previous states and this isn't the beginning of the
// room - this is an error condition! // room - this is an error condition!
@ -292,7 +292,7 @@ func (t *missingStateReq) lookupResolvedStateBeforeEvent(ctx context.Context, e
// use it as-is. There's no point in resolving it again. Only trust a // use it as-is. There's no point in resolving it again. Only trust a
// trustworthy state snapshot if it actually contains some state for all // trustworthy state snapshot if it actually contains some state for all
// non-create events, otherwise we need to resolve what came from federation. // non-create events, otherwise we need to resolve what came from federation.
isCreate := e.Type() == gomatrixserverlib.MRoomCreate && e.StateKeyEquals("") isCreate := e.Type() == spec.MRoomCreate && e.StateKeyEquals("")
if states[0].trustworthy && (isCreate || len(states[0].StateEvents) > 0) { if states[0].trustworthy && (isCreate || len(states[0].StateEvents) > 0) {
resolvedState = states[0].parsedRespState resolvedState = states[0].parsedRespState
break break
@ -598,7 +598,7 @@ Event:
// If we retrieved back to the beginning of the room then there's nothing else // If we retrieved back to the beginning of the room then there's nothing else
// to do - we closed the gap. // to do - we closed the gap.
if len(earliestNewEvent.PrevEventIDs()) == 0 && earliestNewEvent.Type() == gomatrixserverlib.MRoomCreate && earliestNewEvent.StateKeyEquals("") { if len(earliestNewEvent.PrevEventIDs()) == 0 && earliestNewEvent.Type() == spec.MRoomCreate && earliestNewEvent.StateKeyEquals("") {
return newEvents, true, t.isPrevStateKnown(ctx, e), nil return newEvents, true, t.isPrevStateKnown(ctx, e), nil
} }

View file

@ -108,12 +108,12 @@ func (r *Admin) PerformAdminEvacuateRoom(
} }
return nil return nil
} }
memberContent.Membership = gomatrixserverlib.Leave memberContent.Membership = spec.Leave
stateKey := *memberEvent.StateKey() stateKey := *memberEvent.StateKey()
fledglingEvent := &gomatrixserverlib.EventBuilder{ fledglingEvent := &gomatrixserverlib.EventBuilder{
RoomID: req.RoomID, RoomID: req.RoomID,
Type: gomatrixserverlib.MRoomMember, Type: spec.MRoomMember,
StateKey: &stateKey, StateKey: &stateKey,
Sender: stateKey, Sender: stateKey,
PrevEvents: prevEvents, PrevEvents: prevEvents,
@ -196,7 +196,7 @@ func (r *Admin) PerformAdminEvacuateUser(
return nil return nil
} }
roomIDs, err := r.DB.GetRoomsByMembership(ctx, req.UserID, gomatrixserverlib.Join) roomIDs, err := r.DB.GetRoomsByMembership(ctx, req.UserID, spec.Join)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
res.Error = &api.PerformError{ res.Error = &api.PerformError{
Code: api.PerformErrorBadRequest, Code: api.PerformErrorBadRequest,
@ -205,7 +205,7 @@ func (r *Admin) PerformAdminEvacuateUser(
return nil return nil
} }
inviteRoomIDs, err := r.DB.GetRoomsByMembership(ctx, req.UserID, gomatrixserverlib.Invite) inviteRoomIDs, err := r.DB.GetRoomsByMembership(ctx, req.UserID, spec.Invite)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
res.Error = &api.PerformError{ res.Error = &api.PerformError{
Code: api.PerformErrorBadRequest, Code: api.PerformErrorBadRequest,

View file

@ -29,6 +29,7 @@ import (
"github.com/matrix-org/dendrite/setup/config" "github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/fclient" "github.com/matrix-org/gomatrixserverlib/fclient"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@ -272,9 +273,9 @@ func buildInviteStrippedState(
// "If they are set on the room, at least the state for m.room.avatar, m.room.canonical_alias, m.room.join_rules, and m.room.name SHOULD be included." // "If they are set on the room, at least the state for m.room.avatar, m.room.canonical_alias, m.room.join_rules, and m.room.name SHOULD be included."
// https://matrix.org/docs/spec/client_server/r0.6.0#m-room-member // https://matrix.org/docs/spec/client_server/r0.6.0#m-room-member
for _, t := range []string{ for _, t := range []string{
gomatrixserverlib.MRoomName, gomatrixserverlib.MRoomCanonicalAlias, spec.MRoomName, spec.MRoomCanonicalAlias,
gomatrixserverlib.MRoomJoinRules, gomatrixserverlib.MRoomAvatar, spec.MRoomJoinRules, spec.MRoomAvatar,
gomatrixserverlib.MRoomEncryption, gomatrixserverlib.MRoomCreate, spec.MRoomEncryption, spec.MRoomCreate,
} { } {
stateWanted = append(stateWanted, gomatrixserverlib.StateKeyTuple{ stateWanted = append(stateWanted, gomatrixserverlib.StateKeyTuple{
EventType: t, EventType: t,

View file

@ -205,7 +205,7 @@ func (r *Joiner) performJoinRoomByID(
} }
} }
eb := gomatrixserverlib.EventBuilder{ eb := gomatrixserverlib.EventBuilder{
Type: gomatrixserverlib.MRoomMember, Type: spec.MRoomMember,
Sender: userID, Sender: userID,
StateKey: &userID, StateKey: &userID,
RoomID: req.RoomIDOrAlias, RoomID: req.RoomIDOrAlias,
@ -221,7 +221,7 @@ func (r *Joiner) performJoinRoomByID(
if req.Content == nil { if req.Content == nil {
req.Content = map[string]interface{}{} req.Content = map[string]interface{}{}
} }
req.Content["membership"] = gomatrixserverlib.Join req.Content["membership"] = spec.Join
if authorisedVia, aerr := r.populateAuthorisedViaUserForRestrictedJoin(ctx, req); aerr != nil { if authorisedVia, aerr := r.populateAuthorisedViaUserForRestrictedJoin(ctx, req); aerr != nil {
return "", "", aerr return "", "", aerr
} else if authorisedVia != "" { } else if authorisedVia != "" {
@ -275,7 +275,7 @@ func (r *Joiner) performJoinRoomByID(
if req.IsGuest { if req.IsGuest {
var guestAccessEvent *gomatrixserverlib.HeaderedEvent var guestAccessEvent *gomatrixserverlib.HeaderedEvent
guestAccess := "forbidden" guestAccess := "forbidden"
guestAccessEvent, err = r.DB.GetStateEvent(ctx, req.RoomIDOrAlias, gomatrixserverlib.MRoomGuestAccess, "") guestAccessEvent, err = r.DB.GetStateEvent(ctx, req.RoomIDOrAlias, spec.MRoomGuestAccess, "")
if (err != nil && !errors.Is(err, sql.ErrNoRows)) || guestAccessEvent == nil { if (err != nil && !errors.Is(err, sql.ErrNoRows)) || guestAccessEvent == nil {
logrus.WithError(err).Warn("unable to get m.room.guest_access event, defaulting to 'forbidden'") logrus.WithError(err).Warn("unable to get m.room.guest_access event, defaulting to 'forbidden'")
} }

View file

@ -127,7 +127,7 @@ func (r *Leaver) performLeaveRoomByID(
RoomID: req.RoomID, RoomID: req.RoomID,
StateToFetch: []gomatrixserverlib.StateKeyTuple{ StateToFetch: []gomatrixserverlib.StateKeyTuple{
{ {
EventType: gomatrixserverlib.MRoomMember, EventType: spec.MRoomMember,
StateKey: req.UserID, StateKey: req.UserID,
}, },
}, },
@ -148,14 +148,14 @@ func (r *Leaver) performLeaveRoomByID(
if err != nil { if err != nil {
return nil, fmt.Errorf("error getting membership: %w", err) return nil, fmt.Errorf("error getting membership: %w", err)
} }
if membership != gomatrixserverlib.Join && membership != gomatrixserverlib.Invite { if membership != spec.Join && membership != spec.Invite {
return nil, fmt.Errorf("user %q is not joined to the room (membership is %q)", req.UserID, membership) return nil, fmt.Errorf("user %q is not joined to the room (membership is %q)", req.UserID, membership)
} }
// Prepare the template for the leave event. // Prepare the template for the leave event.
userID := req.UserID userID := req.UserID
eb := gomatrixserverlib.EventBuilder{ eb := gomatrixserverlib.EventBuilder{
Type: gomatrixserverlib.MRoomMember, Type: spec.MRoomMember,
Sender: userID, Sender: userID,
StateKey: &userID, StateKey: &userID,
RoomID: req.RoomID, RoomID: req.RoomID,

View file

@ -149,7 +149,7 @@ func (r *Upgrader) performRoomUpgrade(
func (r *Upgrader) getRoomPowerLevels(ctx context.Context, roomID string) (*gomatrixserverlib.PowerLevelContent, *api.PerformError) { func (r *Upgrader) getRoomPowerLevels(ctx context.Context, roomID string) (*gomatrixserverlib.PowerLevelContent, *api.PerformError) {
oldPowerLevelsEvent := api.GetStateEvent(ctx, r.URSAPI, roomID, gomatrixserverlib.StateKeyTuple{ oldPowerLevelsEvent := api.GetStateEvent(ctx, r.URSAPI, roomID, gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomPowerLevels, EventType: spec.MRoomPowerLevels,
StateKey: "", StateKey: "",
}) })
powerLevelContent, err := oldPowerLevelsEvent.PowerLevels() powerLevelContent, err := oldPowerLevelsEvent.PowerLevels()
@ -180,7 +180,7 @@ func (r *Upgrader) restrictOldRoomPowerLevels(ctx context.Context, evTime time.T
restrictedPowerLevelContent.Invite = restrictedDefaultPowerLevel restrictedPowerLevelContent.Invite = restrictedDefaultPowerLevel
restrictedPowerLevelsHeadered, resErr := r.makeHeaderedEvent(ctx, evTime, userID, roomID, fledglingEvent{ restrictedPowerLevelsHeadered, resErr := r.makeHeaderedEvent(ctx, evTime, userID, roomID, fledglingEvent{
Type: gomatrixserverlib.MRoomPowerLevels, Type: spec.MRoomPowerLevels,
StateKey: "", StateKey: "",
Content: restrictedPowerLevelContent, Content: restrictedPowerLevelContent,
}) })
@ -233,7 +233,7 @@ func moveLocalAliases(ctx context.Context,
func (r *Upgrader) clearOldCanonicalAliasEvent(ctx context.Context, oldRoom *api.QueryLatestEventsAndStateResponse, evTime time.Time, userID string, userDomain spec.ServerName, roomID string) *api.PerformError { func (r *Upgrader) clearOldCanonicalAliasEvent(ctx context.Context, oldRoom *api.QueryLatestEventsAndStateResponse, evTime time.Time, userID string, userDomain spec.ServerName, roomID string) *api.PerformError {
for _, event := range oldRoom.StateEvents { for _, event := range oldRoom.StateEvents {
if event.Type() != gomatrixserverlib.MRoomCanonicalAlias || !event.StateKeyEquals("") { if event.Type() != spec.MRoomCanonicalAlias || !event.StateKeyEquals("") {
continue continue
} }
var aliasContent struct { var aliasContent struct {
@ -252,7 +252,7 @@ func (r *Upgrader) clearOldCanonicalAliasEvent(ctx context.Context, oldRoom *api
} }
emptyCanonicalAliasEvent, resErr := r.makeHeaderedEvent(ctx, evTime, userID, roomID, fledglingEvent{ emptyCanonicalAliasEvent, resErr := r.makeHeaderedEvent(ctx, evTime, userID, roomID, fledglingEvent{
Type: gomatrixserverlib.MRoomCanonicalAlias, Type: spec.MRoomCanonicalAlias,
Content: map[string]interface{}{}, Content: map[string]interface{}{},
}) })
if resErr != nil { if resErr != nil {
@ -333,7 +333,7 @@ func (r *Upgrader) validateRoomExists(ctx context.Context, roomID string) error
func (r *Upgrader) userIsAuthorized(ctx context.Context, userID, roomID string, func (r *Upgrader) userIsAuthorized(ctx context.Context, userID, roomID string,
) bool { ) bool {
plEvent := api.GetStateEvent(ctx, r.URSAPI, roomID, gomatrixserverlib.StateKeyTuple{ plEvent := api.GetStateEvent(ctx, r.URSAPI, roomID, gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomPowerLevels, EventType: spec.MRoomPowerLevels,
StateKey: "", StateKey: "",
}) })
if plEvent == nil { if plEvent == nil {
@ -356,7 +356,7 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
// This shouldn't ever happen, but better to be safe than sorry. // This shouldn't ever happen, but better to be safe than sorry.
continue continue
} }
if event.Type() == gomatrixserverlib.MRoomMember && !event.StateKeyEquals(userID) { if event.Type() == spec.MRoomMember && !event.StateKeyEquals(userID) {
// With the exception of bans and invites which we do want to copy, we // With the exception of bans and invites which we do want to copy, we
// should ignore membership events that aren't our own, as event auth will // should ignore membership events that aren't our own, as event auth will
// prevent us from being able to create membership events on behalf of other // prevent us from being able to create membership events on behalf of other
@ -366,8 +366,8 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
continue continue
} }
switch membership { switch membership {
case gomatrixserverlib.Ban: case spec.Ban:
case gomatrixserverlib.Invite: case spec.Invite:
default: default:
continue continue
} }
@ -378,10 +378,10 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
// The following events are ones that we are going to override manually // The following events are ones that we are going to override manually
// in the following section. // in the following section.
override := map[gomatrixserverlib.StateKeyTuple]struct{}{ override := map[gomatrixserverlib.StateKeyTuple]struct{}{
{EventType: gomatrixserverlib.MRoomCreate, StateKey: ""}: {}, {EventType: spec.MRoomCreate, StateKey: ""}: {},
{EventType: gomatrixserverlib.MRoomMember, StateKey: userID}: {}, {EventType: spec.MRoomMember, StateKey: userID}: {},
{EventType: gomatrixserverlib.MRoomPowerLevels, StateKey: ""}: {}, {EventType: spec.MRoomPowerLevels, StateKey: ""}: {},
{EventType: gomatrixserverlib.MRoomJoinRules, StateKey: ""}: {}, {EventType: spec.MRoomJoinRules, StateKey: ""}: {},
} }
// The overridden events are essential events that must be present in the // The overridden events are essential events that must be present in the
@ -394,10 +394,10 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
} }
} }
oldCreateEvent := state[gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomCreate, StateKey: ""}] oldCreateEvent := state[gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomCreate, StateKey: ""}]
oldMembershipEvent := state[gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomMember, StateKey: userID}] oldMembershipEvent := state[gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomMember, StateKey: userID}]
oldPowerLevelsEvent := state[gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomPowerLevels, StateKey: ""}] oldPowerLevelsEvent := state[gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomPowerLevels, StateKey: ""}]
oldJoinRulesEvent := state[gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomJoinRules, StateKey: ""}] oldJoinRulesEvent := state[gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomJoinRules, StateKey: ""}]
// Create the new room create event. Using a map here instead of CreateContent // Create the new room create event. Using a map here instead of CreateContent
// means that we preserve any other interesting fields that might be present // means that we preserve any other interesting fields that might be present
@ -411,7 +411,7 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
RoomID: roomID, RoomID: roomID,
} }
newCreateEvent := fledglingEvent{ newCreateEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomCreate, Type: spec.MRoomCreate,
StateKey: "", StateKey: "",
Content: newCreateContent, Content: newCreateContent,
} }
@ -422,9 +422,9 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
// the events after it. // the events after it.
newMembershipContent := map[string]interface{}{} newMembershipContent := map[string]interface{}{}
_ = json.Unmarshal(oldMembershipEvent.Content(), &newMembershipContent) _ = json.Unmarshal(oldMembershipEvent.Content(), &newMembershipContent)
newMembershipContent["membership"] = gomatrixserverlib.Join newMembershipContent["membership"] = spec.Join
newMembershipEvent := fledglingEvent{ newMembershipEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomMember, Type: spec.MRoomMember,
StateKey: userID, StateKey: userID,
Content: newMembershipContent, Content: newMembershipContent,
} }
@ -448,11 +448,11 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
// existing join rules contains garbage, the room can still be // existing join rules contains garbage, the room can still be
// upgraded. // upgraded.
newJoinRulesContent := map[string]interface{}{ newJoinRulesContent := map[string]interface{}{
"join_rule": gomatrixserverlib.Invite, // sane default "join_rule": spec.Invite, // sane default
} }
_ = json.Unmarshal(oldJoinRulesEvent.Content(), &newJoinRulesContent) _ = json.Unmarshal(oldJoinRulesEvent.Content(), &newJoinRulesContent)
newJoinRulesEvent := fledglingEvent{ newJoinRulesEvent := fledglingEvent{
Type: gomatrixserverlib.MRoomJoinRules, Type: spec.MRoomJoinRules,
StateKey: "", StateKey: "",
Content: newJoinRulesContent, Content: newJoinRulesContent,
} }
@ -465,9 +465,9 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
// For some reason Sytest expects there to be a guest access event. // For some reason Sytest expects there to be a guest access event.
// Create one if it doesn't exist. // Create one if it doesn't exist.
if _, ok := state[gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomGuestAccess, StateKey: ""}]; !ok { if _, ok := state[gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomGuestAccess, StateKey: ""}]; !ok {
eventsToMake = append(eventsToMake, fledglingEvent{ eventsToMake = append(eventsToMake, fledglingEvent{
Type: gomatrixserverlib.MRoomGuestAccess, Type: spec.MRoomGuestAccess,
Content: map[string]string{ Content: map[string]string{
"guest_access": "forbidden", "guest_access": "forbidden",
}, },
@ -496,7 +496,7 @@ func (r *Upgrader) generateInitialEvents(ctx context.Context, oldRoom *api.Query
// override that now by restoring the original power levels. // override that now by restoring the original power levels.
if powerLevelsOverridden { if powerLevelsOverridden {
eventsToMake = append(eventsToMake, fledglingEvent{ eventsToMake = append(eventsToMake, fledglingEvent{
Type: gomatrixserverlib.MRoomPowerLevels, Type: spec.MRoomPowerLevels,
Content: powerLevelContent, Content: powerLevelContent,
}) })
} }
@ -682,7 +682,7 @@ func createTemporaryPowerLevels(powerLevelContent *gomatrixserverlib.PowerLevelC
// Then return the temporary power levels event. // Then return the temporary power levels event.
return fledglingEvent{ return fledglingEvent{
Type: gomatrixserverlib.MRoomPowerLevels, Type: spec.MRoomPowerLevels,
Content: tempPowerLevelContent, Content: tempPowerLevelContent,
}, powerLevelsOverridden }, powerLevelsOverridden
} }

View file

@ -306,7 +306,7 @@ func (r *Queryer) QueryMembershipAtEvent(
// a given event, overwrite any other existing membership events. // a given event, overwrite any other existing membership events.
for i := range memberships { for i := range memberships {
ev := memberships[i] ev := memberships[i]
if ev.Type() == gomatrixserverlib.MRoomMember && ev.StateKeyEquals(request.UserID) { if ev.Type() == spec.MRoomMember && ev.StateKeyEquals(request.UserID) {
response.Membership[eventID] = ev.Event.Headered(info.RoomVersion) response.Membership[eventID] = ev.Event.Headered(info.RoomVersion)
} }
} }
@ -897,7 +897,7 @@ func (r *Queryer) QueryRestrictedJoinAllowed(ctx context.Context, req *api.Query
// the flag. // the flag.
res.Resident = true res.Resident = true
// Get the join rules to work out if the join rule is "restricted". // Get the join rules to work out if the join rule is "restricted".
joinRulesEvent, err := r.DB.GetStateEvent(ctx, req.RoomID, gomatrixserverlib.MRoomJoinRules, "") joinRulesEvent, err := r.DB.GetStateEvent(ctx, req.RoomID, spec.MRoomJoinRules, "")
if err != nil { if err != nil {
return fmt.Errorf("r.DB.GetStateEvent: %w", err) return fmt.Errorf("r.DB.GetStateEvent: %w", err)
} }
@ -909,7 +909,7 @@ func (r *Queryer) QueryRestrictedJoinAllowed(ctx context.Context, req *api.Query
return fmt.Errorf("json.Unmarshal: %w", err) return fmt.Errorf("json.Unmarshal: %w", err)
} }
// If the join rule isn't "restricted" then there's nothing more to do. // If the join rule isn't "restricted" then there's nothing more to do.
res.Restricted = joinRules.JoinRule == gomatrixserverlib.Restricted res.Restricted = joinRules.JoinRule == spec.Restricted
if !res.Restricted { if !res.Restricted {
return nil return nil
} }
@ -926,7 +926,7 @@ func (r *Queryer) QueryRestrictedJoinAllowed(ctx context.Context, req *api.Query
// We need to get the power levels content so that we can determine which // We need to get the power levels content so that we can determine which
// users in the room are entitled to issue invites. We need to use one of // users in the room are entitled to issue invites. We need to use one of
// these users as the authorising user. // these users as the authorising user.
powerLevelsEvent, err := r.DB.GetStateEvent(ctx, req.RoomID, gomatrixserverlib.MRoomPowerLevels, "") powerLevelsEvent, err := r.DB.GetStateEvent(ctx, req.RoomID, spec.MRoomPowerLevels, "")
if err != nil { if err != nil {
return fmt.Errorf("r.DB.GetStateEvent: %w", err) return fmt.Errorf("r.DB.GetStateEvent: %w", err)
} }
@ -938,7 +938,7 @@ func (r *Queryer) QueryRestrictedJoinAllowed(ctx context.Context, req *api.Query
for _, rule := range joinRules.Allow { for _, rule := range joinRules.Allow {
// We only understand "m.room_membership" rules at this point in // We only understand "m.room_membership" rules at this point in
// time, so skip any rule that doesn't match those. // time, so skip any rule that doesn't match those.
if rule.Type != gomatrixserverlib.MRoomMembership { if rule.Type != spec.MRoomMembership {
continue continue
} }
// See if the room exists. If it doesn't exist or if it's a stub // See if the room exists. If it doesn't exist or if it's a stub
@ -985,7 +985,7 @@ func (r *Queryer) QueryRestrictedJoinAllowed(ctx context.Context, req *api.Query
continue continue
} }
event := events[0] event := events[0]
if event.Type() != gomatrixserverlib.MRoomMember || event.StateKey() == nil { if event.Type() != spec.MRoomMember || event.StateKey() == nil {
continue // shouldn't happen continue // shouldn't happen
} }
// Only users that have the power to invite should be chosen. // Only users that have the power to invite should be chosen.

View file

@ -10,6 +10,7 @@ import (
"github.com/matrix-org/dendrite/internal/caching" "github.com/matrix-org/dendrite/internal/caching"
"github.com/matrix-org/dendrite/internal/httputil" "github.com/matrix-org/dendrite/internal/httputil"
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/matrix-org/dendrite/roomserver/state" "github.com/matrix-org/dendrite/roomserver/state"
@ -61,10 +62,10 @@ func testSharedUsers(t *testing.T, rsAPI api.RoomserverInternalAPI) {
room := test.NewRoom(t, alice, test.RoomPreset(test.PresetTrustedPrivateChat)) room := test.NewRoom(t, alice, test.RoomPreset(test.PresetTrustedPrivateChat))
// Invite and join Bob // Invite and join Bob
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -102,7 +103,7 @@ func testKickUsers(t *testing.T, rsAPI api.RoomserverInternalAPI, usrAPI userAPI
room := test.NewRoom(t, alice, test.RoomPreset(test.PresetPublicChat), test.GuestsCanJoin(true)) room := test.NewRoom(t, alice, test.RoomPreset(test.PresetPublicChat), test.GuestsCanJoin(true))
// Join with the guest user // Join with the guest user
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -134,7 +135,7 @@ func testKickUsers(t *testing.T, rsAPI api.RoomserverInternalAPI, usrAPI userAPI
} }
// revoke guest access // revoke guest access
revokeEvent := room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomGuestAccess, map[string]string{"guest_access": "forbidden"}, test.WithStateKey("")) revokeEvent := room.CreateAndInsert(t, alice, spec.MRoomGuestAccess, map[string]string{"guest_access": "forbidden"}, test.WithStateKey(""))
if err := api.SendEvents(ctx, rsAPI, api.KindNew, []*gomatrixserverlib.HeaderedEvent{revokeEvent}, "test", "test", "test", nil, false); err != nil { if err := api.SendEvents(ctx, rsAPI, api.KindNew, []*gomatrixserverlib.HeaderedEvent{revokeEvent}, "test", "test", "test", nil, false); err != nil {
t.Errorf("failed to send events: %v", err) t.Errorf("failed to send events: %v", err)
} }
@ -164,10 +165,10 @@ func Test_QueryLeftUsers(t *testing.T) {
room := test.NewRoom(t, alice, test.RoomPreset(test.PresetTrustedPrivateChat)) room := test.NewRoom(t, alice, test.RoomPreset(test.PresetTrustedPrivateChat))
// Invite and join Bob // Invite and join Bob
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -216,7 +217,7 @@ func TestPurgeRoom(t *testing.T) {
room := test.NewRoom(t, alice, test.RoomPreset(test.PresetTrustedPrivateChat)) room := test.NewRoom(t, alice, test.RoomPreset(test.PresetTrustedPrivateChat))
// Invite Bob // Invite Bob
inviteEvent := room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ inviteEvent := room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
@ -443,7 +444,7 @@ func TestRedaction(t *testing.T) {
redactedEvent := room.CreateAndInsert(t, alice, "m.room.message", map[string]interface{}{"body": "hello world"}) redactedEvent := room.CreateAndInsert(t, alice, "m.room.message", map[string]interface{}{"body": "hello world"})
builderEv := mustCreateEvent(t, fledglingEvent{ builderEv := mustCreateEvent(t, fledglingEvent{
Type: gomatrixserverlib.MRoomRedaction, Type: spec.MRoomRedaction,
Sender: alice.ID, Sender: alice.ID,
RoomID: room.ID, RoomID: room.ID,
Redacts: redactedEvent.EventID(), Redacts: redactedEvent.EventID(),
@ -460,7 +461,7 @@ func TestRedaction(t *testing.T) {
redactedEvent := room.CreateAndInsert(t, bob, "m.room.message", map[string]interface{}{"body": "hello world"}) redactedEvent := room.CreateAndInsert(t, bob, "m.room.message", map[string]interface{}{"body": "hello world"})
builderEv := mustCreateEvent(t, fledglingEvent{ builderEv := mustCreateEvent(t, fledglingEvent{
Type: gomatrixserverlib.MRoomRedaction, Type: spec.MRoomRedaction,
Sender: alice.ID, Sender: alice.ID,
RoomID: room.ID, RoomID: room.ID,
Redacts: redactedEvent.EventID(), Redacts: redactedEvent.EventID(),
@ -477,7 +478,7 @@ func TestRedaction(t *testing.T) {
redactedEvent := room.CreateAndInsert(t, alice, "m.room.message", map[string]interface{}{"body": "hello world"}) redactedEvent := room.CreateAndInsert(t, alice, "m.room.message", map[string]interface{}{"body": "hello world"})
builderEv := mustCreateEvent(t, fledglingEvent{ builderEv := mustCreateEvent(t, fledglingEvent{
Type: gomatrixserverlib.MRoomRedaction, Type: spec.MRoomRedaction,
Sender: bob.ID, Sender: bob.ID,
RoomID: room.ID, RoomID: room.ID,
Redacts: redactedEvent.EventID(), Redacts: redactedEvent.EventID(),
@ -493,7 +494,7 @@ func TestRedaction(t *testing.T) {
redactedEvent := room.CreateAndInsert(t, bob, "m.room.message", map[string]interface{}{"body": "hello world"}) redactedEvent := room.CreateAndInsert(t, bob, "m.room.message", map[string]interface{}{"body": "hello world"})
builderEv := mustCreateEvent(t, fledglingEvent{ builderEv := mustCreateEvent(t, fledglingEvent{
Type: gomatrixserverlib.MRoomRedaction, Type: spec.MRoomRedaction,
Sender: charlie.ID, Sender: charlie.ID,
RoomID: room.ID, RoomID: room.ID,
Redacts: redactedEvent.EventID(), Redacts: redactedEvent.EventID(),
@ -523,10 +524,10 @@ func TestRedaction(t *testing.T) {
var err error var err error
room := test.NewRoom(t, alice, test.RoomPreset(test.PresetPublicChat)) room := test.NewRoom(t, alice, test.RoomPreset(test.PresetPublicChat))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, charlie, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, charlie, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(charlie.ID)) }, test.WithStateKey(charlie.ID))
@ -568,7 +569,7 @@ func TestRedaction(t *testing.T) {
if redactedEvent != nil { if redactedEvent != nil {
assert.Equal(t, ev.Redacts(), redactedEvent.EventID()) assert.Equal(t, ev.Redacts(), redactedEvent.EventID())
} }
if ev.Type() == gomatrixserverlib.MRoomRedaction { if ev.Type() == spec.MRoomRedaction {
nids, err := db.EventNIDs(ctx, []string{ev.Redacts()}) nids, err := db.EventNIDs(ctx, []string{ev.Redacts()})
assert.NoError(t, err) assert.NoError(t, err)
evs, err := db.Events(ctx, roomInfo, []types.EventNID{nids[ev.Redacts()].EventNID}) evs, err := db.Events(ctx, roomInfo, []types.EventNID{nids[ev.Redacts()].EventNID})

View file

@ -906,7 +906,7 @@ func extractRoomVersionFromCreateEvent(event *gomatrixserverlib.Event) (
var err error var err error
var roomVersion gomatrixserverlib.RoomVersion var roomVersion gomatrixserverlib.RoomVersion
// Look for m.room.create events. // Look for m.room.create events.
if event.Type() != gomatrixserverlib.MRoomCreate { if event.Type() != spec.MRoomCreate {
return gomatrixserverlib.RoomVersion(""), nil return gomatrixserverlib.RoomVersion(""), nil
} }
roomVersion = gomatrixserverlib.RoomVersionV1 roomVersion = gomatrixserverlib.RoomVersionV1
@ -950,7 +950,7 @@ func (d *EventDatabase) MaybeRedactEvent(
) )
wErr := d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { wErr := d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
isRedactionEvent := event.Type() == gomatrixserverlib.MRoomRedaction && event.StateKey() == nil isRedactionEvent := event.Type() == spec.MRoomRedaction && event.StateKey() == nil
if isRedactionEvent { if isRedactionEvent {
// an event which redacts itself should be ignored // an event which redacts itself should be ignored
if event.EventID() == event.Redacts() { if event.EventID() == event.Redacts() {
@ -1045,7 +1045,7 @@ func (d *EventDatabase) loadRedactionPair(
var redactionEvent, redactedEvent *types.Event var redactionEvent, redactedEvent *types.Event
var info *tables.RedactionInfo var info *tables.RedactionInfo
var err error var err error
isRedactionEvent := event.Type() == gomatrixserverlib.MRoomRedaction && event.StateKey() == nil isRedactionEvent := event.Type() == spec.MRoomRedaction && event.StateKey() == nil
var eventBeingRedacted string var eventBeingRedacted string
if isRedactionEvent { if isRedactionEvent {

View file

@ -200,17 +200,17 @@ func ExtractContentValue(ev *gomatrixserverlib.HeaderedEvent) string {
content := ev.Content() content := ev.Content()
key := "" key := ""
switch ev.Type() { switch ev.Type() {
case gomatrixserverlib.MRoomCreate: case spec.MRoomCreate:
key = "creator" key = "creator"
case gomatrixserverlib.MRoomCanonicalAlias: case spec.MRoomCanonicalAlias:
key = "alias" key = "alias"
case gomatrixserverlib.MRoomHistoryVisibility: case spec.MRoomHistoryVisibility:
key = "history_visibility" key = "history_visibility"
case gomatrixserverlib.MRoomJoinRules: case spec.MRoomJoinRules:
key = "join_rule" key = "join_rule"
case gomatrixserverlib.MRoomMember: case spec.MRoomMember:
key = "membership" key = "membership"
case gomatrixserverlib.MRoomName: case spec.MRoomName:
key = "name" key = "name"
case "m.room.avatar": case "m.room.avatar":
key = "url" key = "url"

View file

@ -270,7 +270,7 @@ func (w *walker) walk() util.JSONResponse {
// if this room is not a space room, skip. // if this room is not a space room, skip.
var roomType string var roomType string
create := w.stateEvent(rv.roomID, gomatrixserverlib.MRoomCreate, "") create := w.stateEvent(rv.roomID, spec.MRoomCreate, "")
if create != nil { if create != nil {
// escape the `.`s so gjson doesn't think it's nested // escape the `.`s so gjson doesn't think it's nested
roomType = gjson.GetBytes(create.Content(), strings.ReplaceAll(ConstCreateEventContentKey, ".", `\.`)).Str roomType = gjson.GetBytes(create.Content(), strings.ReplaceAll(ConstCreateEventContentKey, ".", `\.`)).Str
@ -485,11 +485,11 @@ func (w *walker) authorised(roomID, parentRoomID string) (authed, isJoinedOrInvi
func (w *walker) authorisedServer(roomID string) bool { func (w *walker) authorisedServer(roomID string) bool {
// Check history visibility / join rules first // Check history visibility / join rules first
hisVisTuple := gomatrixserverlib.StateKeyTuple{ hisVisTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomHistoryVisibility, EventType: spec.MRoomHistoryVisibility,
StateKey: "", StateKey: "",
} }
joinRuleTuple := gomatrixserverlib.StateKeyTuple{ joinRuleTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomJoinRules, EventType: spec.MRoomJoinRules,
StateKey: "", StateKey: "",
} }
var queryRoomRes roomserver.QueryCurrentStateResponse var queryRoomRes roomserver.QueryCurrentStateResponse
@ -523,11 +523,11 @@ func (w *walker) authorisedServer(roomID string) bool {
return false return false
} }
if rule == gomatrixserverlib.Public || rule == gomatrixserverlib.Knock { if rule == spec.Public || rule == spec.Knock {
return true return true
} }
if rule == gomatrixserverlib.Restricted { if rule == spec.Restricted {
allowJoinedToRoomIDs = append(allowJoinedToRoomIDs, w.restrictedJoinRuleAllowedRooms(joinRuleEv, "m.room_membership")...) allowJoinedToRoomIDs = append(allowJoinedToRoomIDs, w.restrictedJoinRuleAllowedRooms(joinRuleEv, "m.room_membership")...)
} }
} }
@ -557,15 +557,15 @@ func (w *walker) authorisedServer(roomID string) bool {
// Failing that, if the room has a restricted join rule and belongs to the space parent listed, it will return true. // Failing that, if the room has a restricted join rule and belongs to the space parent listed, it will return true.
func (w *walker) authorisedUser(roomID, parentRoomID string) (authed bool, isJoinedOrInvited bool) { func (w *walker) authorisedUser(roomID, parentRoomID string) (authed bool, isJoinedOrInvited bool) {
hisVisTuple := gomatrixserverlib.StateKeyTuple{ hisVisTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomHistoryVisibility, EventType: spec.MRoomHistoryVisibility,
StateKey: "", StateKey: "",
} }
joinRuleTuple := gomatrixserverlib.StateKeyTuple{ joinRuleTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomJoinRules, EventType: spec.MRoomJoinRules,
StateKey: "", StateKey: "",
} }
roomMemberTuple := gomatrixserverlib.StateKeyTuple{ roomMemberTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomMember, EventType: spec.MRoomMember,
StateKey: w.caller.UserID, StateKey: w.caller.UserID,
} }
var queryRes roomserver.QueryCurrentStateResponse var queryRes roomserver.QueryCurrentStateResponse
@ -582,7 +582,7 @@ func (w *walker) authorisedUser(roomID, parentRoomID string) (authed bool, isJoi
memberEv := queryRes.StateEvents[roomMemberTuple] memberEv := queryRes.StateEvents[roomMemberTuple]
if memberEv != nil { if memberEv != nil {
membership, _ := memberEv.Membership() membership, _ := memberEv.Membership()
if membership == gomatrixserverlib.Join || membership == gomatrixserverlib.Invite { if membership == spec.Join || membership == spec.Invite {
return true, true return true, true
} }
} }
@ -599,9 +599,9 @@ func (w *walker) authorisedUser(roomID, parentRoomID string) (authed bool, isJoi
rule, ruleErr := joinRuleEv.JoinRule() rule, ruleErr := joinRuleEv.JoinRule()
if ruleErr != nil { if ruleErr != nil {
util.GetLogger(w.ctx).WithError(ruleErr).WithField("parent_room_id", parentRoomID).Warn("failed to get join rule") util.GetLogger(w.ctx).WithError(ruleErr).WithField("parent_room_id", parentRoomID).Warn("failed to get join rule")
} else if rule == gomatrixserverlib.Public || rule == gomatrixserverlib.Knock { } else if rule == spec.Public || rule == spec.Knock {
allowed = true allowed = true
} else if rule == gomatrixserverlib.Restricted { } else if rule == spec.Restricted {
allowedRoomIDs := w.restrictedJoinRuleAllowedRooms(joinRuleEv, "m.room_membership") allowedRoomIDs := w.restrictedJoinRuleAllowedRooms(joinRuleEv, "m.room_membership")
// check parent is in the allowed set // check parent is in the allowed set
for _, a := range allowedRoomIDs { for _, a := range allowedRoomIDs {
@ -626,7 +626,7 @@ func (w *walker) authorisedUser(roomID, parentRoomID string) (authed bool, isJoi
memberEv = queryRes2.StateEvents[roomMemberTuple] memberEv = queryRes2.StateEvents[roomMemberTuple]
if memberEv != nil { if memberEv != nil {
membership, _ := memberEv.Membership() membership, _ := memberEv.Membership()
if membership == gomatrixserverlib.Join { if membership == spec.Join {
return true, false return true, false
} }
} }
@ -638,7 +638,7 @@ func (w *walker) authorisedUser(roomID, parentRoomID string) (authed bool, isJoi
func (w *walker) restrictedJoinRuleAllowedRooms(joinRuleEv *gomatrixserverlib.HeaderedEvent, allowType string) (allows []string) { func (w *walker) restrictedJoinRuleAllowedRooms(joinRuleEv *gomatrixserverlib.HeaderedEvent, allowType string) (allows []string) {
rule, _ := joinRuleEv.JoinRule() rule, _ := joinRuleEv.JoinRule()
if rule != gomatrixserverlib.Restricted { if rule != spec.Restricted {
return nil return nil
} }
var jrContent gomatrixserverlib.JoinRuleContent var jrContent gomatrixserverlib.JoinRuleContent
@ -657,7 +657,7 @@ func (w *walker) restrictedJoinRuleAllowedRooms(joinRuleEv *gomatrixserverlib.He
// references returns all child references pointing to or from this room. // references returns all child references pointing to or from this room.
func (w *walker) childReferences(roomID string) ([]fclient.MSC2946StrippedEvent, error) { func (w *walker) childReferences(roomID string) ([]fclient.MSC2946StrippedEvent, error) {
createTuple := gomatrixserverlib.StateKeyTuple{ createTuple := gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomCreate, EventType: spec.MRoomCreate,
StateKey: "", StateKey: "",
} }
var res roomserver.QueryCurrentStateResponse var res roomserver.QueryCurrentStateResponse

View file

@ -21,7 +21,6 @@ import (
"time" "time"
"github.com/getsentry/sentry-go" "github.com/getsentry/sentry-go"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec" "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/nats-io/nats.go" "github.com/nats-io/nats.go"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -122,9 +121,9 @@ func (s *OutputClientDataConsumer) Start() error {
switch ev.Type() { switch ev.Type() {
case "m.room.message": case "m.room.message":
e.Content = gjson.GetBytes(ev.Content(), "body").String() e.Content = gjson.GetBytes(ev.Content(), "body").String()
case gomatrixserverlib.MRoomName: case spec.MRoomName:
e.Content = gjson.GetBytes(ev.Content(), "name").String() e.Content = gjson.GetBytes(ev.Content(), "name").String()
case gomatrixserverlib.MRoomTopic: case spec.MRoomTopic:
e.Content = gjson.GetBytes(ev.Content(), "topic").String() e.Content = gjson.GetBytes(ev.Content(), "topic").String()
default: default:
continue continue

View file

@ -22,6 +22,7 @@ import (
"github.com/getsentry/sentry-go" "github.com/getsentry/sentry-go"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/nats-io/nats.go" "github.com/nats-io/nats.go"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
@ -108,7 +109,7 @@ func (s *OutputRoomEventConsumer) onMessage(ctx context.Context, msgs []*nats.Ms
// Ignore redaction events. We will add them to the database when they are // Ignore redaction events. We will add them to the database when they are
// validated (when we receive OutputTypeRedactedEvent) // validated (when we receive OutputTypeRedactedEvent)
event := output.NewRoomEvent.Event event := output.NewRoomEvent.Event
if event.Type() == gomatrixserverlib.MRoomRedaction && event.StateKey() == nil { if event.Type() == spec.MRoomRedaction && event.StateKey() == nil {
// in the special case where the event redacts itself, just pass the message through because // in the special case where the event redacts itself, just pass the message through because
// we will never see the other part of the pair // we will never see the other part of the pair
if event.Redacts() != event.EventID() { if event.Redacts() != event.EventID() {
@ -362,7 +363,7 @@ func (s *OutputRoomEventConsumer) onOldRoomEvent(
} }
func (s *OutputRoomEventConsumer) notifyJoinedPeeks(ctx context.Context, ev *gomatrixserverlib.HeaderedEvent, sp types.StreamPosition) (types.StreamPosition, error) { func (s *OutputRoomEventConsumer) notifyJoinedPeeks(ctx context.Context, ev *gomatrixserverlib.HeaderedEvent, sp types.StreamPosition) (types.StreamPosition, error) {
if ev.Type() != gomatrixserverlib.MRoomMember { if ev.Type() != spec.MRoomMember {
return sp, nil return sp, nil
} }
membership, err := ev.Membership() membership, err := ev.Membership()
@ -370,7 +371,7 @@ func (s *OutputRoomEventConsumer) notifyJoinedPeeks(ctx context.Context, ev *gom
return sp, fmt.Errorf("ev.Membership: %w", err) return sp, fmt.Errorf("ev.Membership: %w", err)
} }
// TODO: check that it's a join and not a profile change (means unmarshalling prev_content) // TODO: check that it's a join and not a profile change (means unmarshalling prev_content)
if membership == gomatrixserverlib.Join { if membership == spec.Join {
// check it's a local join // check it's a local join
if _, _, err := s.cfg.Matrix.SplitLocalID('@', *ev.StateKey()); err != nil { if _, _, err := s.cfg.Matrix.SplitLocalID('@', *ev.StateKey()); err != nil {
return sp, nil return sp, nil
@ -433,7 +434,7 @@ func (s *OutputRoomEventConsumer) onRetireInviteEvent(
// Only notify clients about retired invite events, if the user didn't accept the invite. // Only notify clients about retired invite events, if the user didn't accept the invite.
// The PDU stream will also receive an event about accepting the invitation, so there should // The PDU stream will also receive an event about accepting the invitation, so there should
// be a "smooth" transition from invite -> join, and not invite -> leave -> join // be a "smooth" transition from invite -> join, and not invite -> leave -> join
if msg.Membership == gomatrixserverlib.Join { if msg.Membership == spec.Join {
return return
} }
@ -544,11 +545,11 @@ func (s *OutputRoomEventConsumer) writeFTS(ev *gomatrixserverlib.HeaderedEvent,
switch ev.Type() { switch ev.Type() {
case "m.room.message": case "m.room.message":
e.Content = gjson.GetBytes(ev.Content(), "body").String() e.Content = gjson.GetBytes(ev.Content(), "body").String()
case gomatrixserverlib.MRoomName: case spec.MRoomName:
e.Content = gjson.GetBytes(ev.Content(), "name").String() e.Content = gjson.GetBytes(ev.Content(), "name").String()
case gomatrixserverlib.MRoomTopic: case spec.MRoomTopic:
e.Content = gjson.GetBytes(ev.Content(), "topic").String() e.Content = gjson.GetBytes(ev.Content(), "topic").String()
case gomatrixserverlib.MRoomRedaction: case spec.MRoomRedaction:
log.Tracef("Redacting event: %s", ev.Redacts()) log.Tracef("Redacting event: %s", ev.Redacts())
if err := s.fts.Delete(ev.Redacts()); err != nil { if err := s.fts.Delete(ev.Redacts()); err != nil {
return fmt.Errorf("failed to delete entry from fulltext index: %w", err) return fmt.Errorf("failed to delete entry from fulltext index: %w", err)

View file

@ -20,6 +20,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
@ -50,7 +51,7 @@ var calculateHistoryVisibilityDuration = prometheus.NewHistogramVec(
) )
var historyVisibilityPriority = map[gomatrixserverlib.HistoryVisibility]uint8{ var historyVisibilityPriority = map[gomatrixserverlib.HistoryVisibility]uint8{
gomatrixserverlib.WorldReadable: 0, spec.WorldReadable: 0,
gomatrixserverlib.HistoryVisibilityShared: 1, gomatrixserverlib.HistoryVisibilityShared: 1,
gomatrixserverlib.HistoryVisibilityInvited: 2, gomatrixserverlib.HistoryVisibilityInvited: 2,
gomatrixserverlib.HistoryVisibilityJoined: 3, gomatrixserverlib.HistoryVisibilityJoined: 3,
@ -72,23 +73,23 @@ func (ev eventVisibility) allowed() (allowed bool) {
return true return true
case gomatrixserverlib.HistoryVisibilityJoined: case gomatrixserverlib.HistoryVisibilityJoined:
// If the users membership was join, allow. // If the users membership was join, allow.
if ev.membershipAtEvent == gomatrixserverlib.Join { if ev.membershipAtEvent == spec.Join {
return true return true
} }
return false return false
case gomatrixserverlib.HistoryVisibilityShared: case gomatrixserverlib.HistoryVisibilityShared:
// If the users membership was join, allow. // If the users membership was join, allow.
// If history_visibility was set to shared, and the user joined the room at any point after the event was sent, allow. // If history_visibility was set to shared, and the user joined the room at any point after the event was sent, allow.
if ev.membershipAtEvent == gomatrixserverlib.Join || ev.membershipCurrent == gomatrixserverlib.Join { if ev.membershipAtEvent == spec.Join || ev.membershipCurrent == spec.Join {
return true return true
} }
return false return false
case gomatrixserverlib.HistoryVisibilityInvited: case gomatrixserverlib.HistoryVisibilityInvited:
// If the users membership was join, allow. // If the users membership was join, allow.
if ev.membershipAtEvent == gomatrixserverlib.Join { if ev.membershipAtEvent == spec.Join {
return true return true
} }
if ev.membershipAtEvent == gomatrixserverlib.Invite { if ev.membershipAtEvent == spec.Invite {
return true return true
} }
return false return false
@ -132,7 +133,7 @@ func ApplyHistoryVisibilityFilter(
} }
} }
// NOTSPEC: Always allow user to see their own membership events (spec contains more "rules") // NOTSPEC: Always allow user to see their own membership events (spec contains more "rules")
if ev.Type() == gomatrixserverlib.MRoomMember && ev.StateKeyEquals(userID) { if ev.Type() == spec.MRoomMember && ev.StateKeyEquals(userID) {
eventsFiltered = append(eventsFiltered, ev) eventsFiltered = append(eventsFiltered, ev)
continue continue
} }
@ -195,7 +196,7 @@ func visibilityForEvents(
for _, event := range events { for _, event := range events {
eventID := event.EventID() eventID := event.EventID()
vis := eventVisibility{ vis := eventVisibility{
membershipAtEvent: gomatrixserverlib.Leave, // default to leave, to not expose events by accident membershipAtEvent: spec.Leave, // default to leave, to not expose events by accident
visibility: event.Visibility, visibility: event.Visibility,
} }
ev, ok := membershipResp.Membership[eventID] ev, ok := membershipResp.Membership[eventID]

View file

@ -20,6 +20,7 @@ import (
keytypes "github.com/matrix-org/dendrite/userapi/types" keytypes "github.com/matrix-org/dendrite/userapi/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
@ -159,7 +160,7 @@ func TrackChangedUsers(
RoomIDs: newlyLeftRooms, RoomIDs: newlyLeftRooms,
StateTuples: []gomatrixserverlib.StateKeyTuple{ StateTuples: []gomatrixserverlib.StateKeyTuple{
{ {
EventType: gomatrixserverlib.MRoomMember, EventType: spec.MRoomMember,
StateKey: "*", StateKey: "*",
}, },
}, },
@ -170,7 +171,7 @@ func TrackChangedUsers(
} }
for _, state := range stateRes.Rooms { for _, state := range stateRes.Rooms {
for tuple, membership := range state { for tuple, membership := range state {
if membership != gomatrixserverlib.Join { if membership != spec.Join {
continue continue
} }
queryRes.UserIDsToCount[tuple.StateKey]-- queryRes.UserIDsToCount[tuple.StateKey]--
@ -201,7 +202,7 @@ func TrackChangedUsers(
RoomIDs: newlyJoinedRooms, RoomIDs: newlyJoinedRooms,
StateTuples: []gomatrixserverlib.StateKeyTuple{ StateTuples: []gomatrixserverlib.StateKeyTuple{
{ {
EventType: gomatrixserverlib.MRoomMember, EventType: spec.MRoomMember,
StateKey: "*", StateKey: "*",
}, },
}, },
@ -212,7 +213,7 @@ func TrackChangedUsers(
} }
for _, state := range stateRes.Rooms { for _, state := range stateRes.Rooms {
for tuple, membership := range state { for tuple, membership := range state {
if membership != gomatrixserverlib.Join { if membership != spec.Join {
continue continue
} }
// new user who we weren't previously sharing rooms with // new user who we weren't previously sharing rooms with
@ -283,7 +284,7 @@ func membershipEventPresent(events []synctypes.ClientEvent, userID string) bool
for _, ev := range events { for _, ev := range events {
// it's enough to know that we have our member event here, don't need to check membership content // it's enough to know that we have our member event here, don't need to check membership content
// as it's implied by being in the respective section of the sync response. // as it's implied by being in the respective section of the sync response.
if ev.Type == gomatrixserverlib.MRoomMember && ev.StateKey != nil && *ev.StateKey == userID { if ev.Type == spec.MRoomMember && ev.StateKey != nil && *ev.StateKey == userID {
// ignore e.g. join -> join changes // ignore e.g. join -> join changes
if gjson.GetBytes(ev.Unsigned, "prev_content.membership").Str == gjson.GetBytes(ev.Content, "membership").Str { if gjson.GetBytes(ev.Unsigned, "prev_content.membership").Str == gjson.GetBytes(ev.Content, "membership").Str {
continue continue
@ -302,7 +303,7 @@ func membershipEventPresent(events []synctypes.ClientEvent, userID string) bool
func membershipEvents(res *types.Response) (joinUserIDs, leaveUserIDs []string) { func membershipEvents(res *types.Response) (joinUserIDs, leaveUserIDs []string) {
for _, room := range res.Rooms.Join { for _, room := range res.Rooms.Join {
for _, ev := range room.Timeline.Events { for _, ev := range room.Timeline.Events {
if ev.Type == gomatrixserverlib.MRoomMember && ev.StateKey != nil { if ev.Type == spec.MRoomMember && ev.StateKey != nil {
if strings.Contains(string(ev.Content), `"join"`) { if strings.Contains(string(ev.Content), `"join"`) {
joinUserIDs = append(joinUserIDs, *ev.StateKey) joinUserIDs = append(joinUserIDs, *ev.StateKey)
} else if strings.Contains(string(ev.Content), `"invite"`) { } else if strings.Contains(string(ev.Content), `"invite"`) {

View file

@ -7,6 +7,7 @@ import (
"testing" "testing"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
@ -76,12 +77,12 @@ func (s *mockRoomserverAPI) QueryRoomsForUser(ctx context.Context, req *api.Quer
// QueryBulkStateContent does a bulk query for state event content in the given rooms. // QueryBulkStateContent does a bulk query for state event content in the given rooms.
func (s *mockRoomserverAPI) QueryBulkStateContent(ctx context.Context, req *api.QueryBulkStateContentRequest, res *api.QueryBulkStateContentResponse) error { func (s *mockRoomserverAPI) QueryBulkStateContent(ctx context.Context, req *api.QueryBulkStateContentRequest, res *api.QueryBulkStateContentResponse) error {
res.Rooms = make(map[string]map[gomatrixserverlib.StateKeyTuple]string) res.Rooms = make(map[string]map[gomatrixserverlib.StateKeyTuple]string)
if req.AllowWildcards && len(req.StateTuples) == 1 && req.StateTuples[0].EventType == gomatrixserverlib.MRoomMember && req.StateTuples[0].StateKey == "*" { if req.AllowWildcards && len(req.StateTuples) == 1 && req.StateTuples[0].EventType == spec.MRoomMember && req.StateTuples[0].StateKey == "*" {
for _, roomID := range req.RoomIDs { for _, roomID := range req.RoomIDs {
res.Rooms[roomID] = make(map[gomatrixserverlib.StateKeyTuple]string) res.Rooms[roomID] = make(map[gomatrixserverlib.StateKeyTuple]string)
for _, userID := range s.roomIDToJoinedMembers[roomID] { for _, userID := range s.roomIDToJoinedMembers[roomID] {
res.Rooms[roomID][gomatrixserverlib.StateKeyTuple{ res.Rooms[roomID][gomatrixserverlib.StateKeyTuple{
EventType: gomatrixserverlib.MRoomMember, EventType: spec.MRoomMember,
StateKey: userID, StateKey: userID,
}] = "join" }] = "join"
} }

View file

@ -23,6 +23,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/storage" "github.com/matrix-org/dendrite/syncapi/storage"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@ -112,16 +113,16 @@ func (n *Notifier) OnNewEvent(
} else { } else {
// Keep the joined user map up-to-date // Keep the joined user map up-to-date
switch membership { switch membership {
case gomatrixserverlib.Invite: case spec.Invite:
usersToNotify = append(usersToNotify, targetUserID) usersToNotify = append(usersToNotify, targetUserID)
case gomatrixserverlib.Join: case spec.Join:
// Manually append the new user's ID so they get notified // Manually append the new user's ID so they get notified
// along all members in the room // along all members in the room
usersToNotify = append(usersToNotify, targetUserID) usersToNotify = append(usersToNotify, targetUserID)
n._addJoinedUser(ev.RoomID(), targetUserID) n._addJoinedUser(ev.RoomID(), targetUserID)
case gomatrixserverlib.Leave: case spec.Leave:
fallthrough fallthrough
case gomatrixserverlib.Ban: case spec.Ban:
n._removeJoinedUser(ev.RoomID(), targetUserID) n._removeJoinedUser(ev.RoomID(), targetUserID)
} }
} }

View file

@ -33,6 +33,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -283,7 +284,7 @@ func applyLazyLoadMembers(
// Query missing membership events // Query missing membership events
filter := synctypes.DefaultStateFilter() filter := synctypes.DefaultStateFilter()
filter.Senders = &wantUsers filter.Senders = &wantUsers
filter.Types = &[]string{gomatrixserverlib.MRoomMember} filter.Types = &[]string{spec.MRoomMember}
memberships, err := snapshot.GetStateEventsForRoom(ctx, roomID, &filter) memberships, err := snapshot.GetStateEventsForRoom(ctx, roomID, &filter)
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -23,6 +23,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -200,7 +201,7 @@ func OnIncomingMessagesRequest(
} }
// If the user already left the room, grep events from before that // If the user already left the room, grep events from before that
if membershipResp.Membership == gomatrixserverlib.Leave { if membershipResp.Membership == spec.Leave {
var token types.TopologyToken var token types.TopologyToken
token, err = snapshot.EventPositionInTopology(req.Context(), membershipResp.EventID) token, err = snapshot.EventPositionInTopology(req.Context(), membershipResp.EventID)
if err != nil { if err != nil {
@ -369,7 +370,7 @@ func (r *messagesReq) retrieveEvents() (
func (r *messagesReq) getStartEnd(events []*gomatrixserverlib.HeaderedEvent) (start, end types.TopologyToken, err error) { func (r *messagesReq) getStartEnd(events []*gomatrixserverlib.HeaderedEvent) (start, end types.TopologyToken, err error) {
if r.backwardOrdering { if r.backwardOrdering {
start = *r.from start = *r.from
if events[len(events)-1].Type() == gomatrixserverlib.MRoomCreate { if events[len(events)-1].Type() == spec.MRoomCreate {
// NOTSPEC: We've hit the beginning of the room so there's really nowhere // NOTSPEC: We've hit the beginning of the room so there's really nowhere
// else to go. This seems to fix Element iOS from looping on /messages endlessly. // else to go. This seems to fix Element iOS from looping on /messages endlessly.
end = types.TopologyToken{} end = types.TopologyToken{}

View file

@ -18,7 +18,7 @@ import (
"net/http" "net/http"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/matrix-org/dendrite/clientapi/jsonerror" "github.com/matrix-org/dendrite/clientapi/jsonerror"
@ -96,7 +96,7 @@ func Setup(
}, httputil.WithAllowGuests())).Methods(http.MethodGet, http.MethodOptions) }, httputil.WithAllowGuests())).Methods(http.MethodGet, http.MethodOptions)
v3mux.Handle("/rooms/{roomId}/context/{eventId}", v3mux.Handle("/rooms/{roomId}/context/{eventId}",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI("context", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
vars, err := httputil.URLDecodeMapValues(mux.Vars(req)) vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
if err != nil { if err != nil {
return util.ErrorResponse(err) return util.ErrorResponse(err)
@ -112,7 +112,7 @@ func Setup(
).Methods(http.MethodGet, http.MethodOptions) ).Methods(http.MethodGet, http.MethodOptions)
v1unstablemux.Handle("/rooms/{roomId}/relations/{eventId}", v1unstablemux.Handle("/rooms/{roomId}/relations/{eventId}",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI("relations", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
vars, err := httputil.URLDecodeMapValues(mux.Vars(req)) vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
if err != nil { if err != nil {
return util.ErrorResponse(err) return util.ErrorResponse(err)
@ -126,7 +126,7 @@ func Setup(
).Methods(http.MethodGet, http.MethodOptions) ).Methods(http.MethodGet, http.MethodOptions)
v1unstablemux.Handle("/rooms/{roomId}/relations/{eventId}/{relType}", v1unstablemux.Handle("/rooms/{roomId}/relations/{eventId}/{relType}",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI("relation_type", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
vars, err := httputil.URLDecodeMapValues(mux.Vars(req)) vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
if err != nil { if err != nil {
return util.ErrorResponse(err) return util.ErrorResponse(err)
@ -140,7 +140,7 @@ func Setup(
).Methods(http.MethodGet, http.MethodOptions) ).Methods(http.MethodGet, http.MethodOptions)
v1unstablemux.Handle("/rooms/{roomId}/relations/{eventId}/{relType}/{eventType}", v1unstablemux.Handle("/rooms/{roomId}/relations/{eventId}/{relType}/{eventType}",
httputil.MakeAuthAPI(gomatrixserverlib.Join, userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse { httputil.MakeAuthAPI("relation_type_event", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
vars, err := httputil.URLDecodeMapValues(mux.Vars(req)) vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
if err != nil { if err != nil {
return util.ErrorResponse(err) return util.ErrorResponse(err)
@ -201,7 +201,7 @@ func Setup(
return util.ErrorResponse(err) return util.ErrorResponse(err)
} }
at := req.URL.Query().Get("at") at := req.URL.Query().Get("at")
membership := gomatrixserverlib.Join membership := spec.Join
return GetMemberships(req, device, vars["roomID"], syncDB, rsAPI, true, &membership, nil, at) return GetMemberships(req, device, vars["roomID"], syncDB, rsAPI, true, &membership, nil, at)
}), }),
).Methods(http.MethodGet, http.MethodOptions) ).Methods(http.MethodGet, http.MethodOptions)

View file

@ -23,6 +23,7 @@ import (
"github.com/blevesearch/bleve/v2/search" "github.com/blevesearch/bleve/v2/search"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/util" "github.com/matrix-org/util"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
@ -184,7 +185,7 @@ func Search(req *http.Request, device *api.Device, syncDB storage.Database, fts
for _, ev := range append(eventsBefore, eventsAfter...) { for _, ev := range append(eventsBefore, eventsAfter...) {
profile, ok := knownUsersProfiles[event.Sender()] profile, ok := knownUsersProfiles[event.Sender()]
if !ok { if !ok {
stateEvent, err := snapshot.GetStateEvent(ctx, ev.RoomID(), gomatrixserverlib.MRoomMember, ev.Sender()) stateEvent, err := snapshot.GetStateEvent(ctx, ev.RoomID(), spec.MRoomMember, ev.Sender())
if err != nil { if err != nil {
logrus.WithError(err).WithField("user_id", event.Sender()).Warn("failed to query userprofile") logrus.WithError(err).WithField("user_id", event.Sender()).Warn("failed to query userprofile")
continue continue

View file

@ -16,6 +16,7 @@ import (
"github.com/matrix-org/dendrite/test/testrig" "github.com/matrix-org/dendrite/test/testrig"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -216,7 +217,7 @@ func TestSearch(t *testing.T) {
for _, x := range room.Events() { for _, x := range room.Events() {
var stateEvents []*gomatrixserverlib.HeaderedEvent var stateEvents []*gomatrixserverlib.HeaderedEvent
var stateEventIDs []string var stateEventIDs []string
if x.Type() == gomatrixserverlib.MRoomMember { if x.Type() == spec.MRoomMember {
stateEvents = append(stateEvents, x) stateEvents = append(stateEvents, x)
stateEventIDs = append(stateEventIDs, x.EventID()) stateEventIDs = append(stateEventIDs, x.EventID())
} }

View file

@ -29,6 +29,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
) )
const currentRoomStateSchema = ` const currentRoomStateSchema = `
@ -278,9 +279,9 @@ func (s *currentRoomStateStatements) SelectCurrentState(
senders, notSenders := getSendersStateFilterFilter(stateFilter) senders, notSenders := getSendersStateFilterFilter(stateFilter)
// We're going to query members later, so remove them from this request // We're going to query members later, so remove them from this request
if stateFilter.LazyLoadMembers && !stateFilter.IncludeRedundantMembers { if stateFilter.LazyLoadMembers && !stateFilter.IncludeRedundantMembers {
notTypes := &[]string{gomatrixserverlib.MRoomMember} notTypes := &[]string{spec.MRoomMember}
if stateFilter.NotTypes != nil { if stateFilter.NotTypes != nil {
*stateFilter.NotTypes = append(*stateFilter.NotTypes, gomatrixserverlib.MRoomMember) *stateFilter.NotTypes = append(*stateFilter.NotTypes, spec.MRoomMember)
} else { } else {
stateFilter.NotTypes = notTypes stateFilter.NotTypes = notTypes
} }

View file

@ -562,15 +562,15 @@ func (d *Database) SelectMembershipForUser(ctx context.Context, roomID, userID s
func (d *Database) ReIndex(ctx context.Context, limit, afterID int64) (map[int64]gomatrixserverlib.HeaderedEvent, error) { func (d *Database) ReIndex(ctx context.Context, limit, afterID int64) (map[int64]gomatrixserverlib.HeaderedEvent, error) {
return d.OutputEvents.ReIndex(ctx, nil, limit, afterID, []string{ return d.OutputEvents.ReIndex(ctx, nil, limit, afterID, []string{
gomatrixserverlib.MRoomName, spec.MRoomName,
gomatrixserverlib.MRoomTopic, spec.MRoomTopic,
"m.room.message", "m.room.message",
}) })
} }
func (d *Database) UpdateRelations(ctx context.Context, event *gomatrixserverlib.HeaderedEvent) error { func (d *Database) UpdateRelations(ctx context.Context, event *gomatrixserverlib.HeaderedEvent) error {
// No need to unmarshal if the event is a redaction // No need to unmarshal if the event is a redaction
if event.Type() == gomatrixserverlib.MRoomRedaction { if event.Type() == spec.MRoomRedaction {
return nil return nil
} }
var content gomatrixserverlib.RelationContent var content gomatrixserverlib.RelationContent

View file

@ -7,6 +7,7 @@ import (
"math" "math"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"github.com/matrix-org/dendrite/internal/eventutil" "github.com/matrix-org/dendrite/internal/eventutil"
@ -98,11 +99,11 @@ func (d *DatabaseTransaction) MembershipCount(ctx context.Context, roomID, membe
func (d *DatabaseTransaction) GetRoomSummary(ctx context.Context, roomID, userID string) (*types.Summary, error) { func (d *DatabaseTransaction) GetRoomSummary(ctx context.Context, roomID, userID string) (*types.Summary, error) {
summary := &types.Summary{Heroes: []string{}} summary := &types.Summary{Heroes: []string{}}
joinCount, err := d.CurrentRoomState.SelectMembershipCount(ctx, d.txn, roomID, gomatrixserverlib.Join) joinCount, err := d.CurrentRoomState.SelectMembershipCount(ctx, d.txn, roomID, spec.Join)
if err != nil { if err != nil {
return summary, err return summary, err
} }
inviteCount, err := d.CurrentRoomState.SelectMembershipCount(ctx, d.txn, roomID, gomatrixserverlib.Invite) inviteCount, err := d.CurrentRoomState.SelectMembershipCount(ctx, d.txn, roomID, spec.Invite)
if err != nil { if err != nil {
return summary, err return summary, err
} }
@ -111,7 +112,7 @@ func (d *DatabaseTransaction) GetRoomSummary(ctx context.Context, roomID, userID
// Get the room name and canonical alias, if any // Get the room name and canonical alias, if any
filter := synctypes.DefaultStateFilter() filter := synctypes.DefaultStateFilter()
filterTypes := []string{gomatrixserverlib.MRoomName, gomatrixserverlib.MRoomCanonicalAlias} filterTypes := []string{spec.MRoomName, spec.MRoomCanonicalAlias}
filterRooms := []string{roomID} filterRooms := []string{roomID}
filter.Types = &filterTypes filter.Types = &filterTypes
@ -123,11 +124,11 @@ func (d *DatabaseTransaction) GetRoomSummary(ctx context.Context, roomID, userID
for _, ev := range evs { for _, ev := range evs {
switch ev.Type() { switch ev.Type() {
case gomatrixserverlib.MRoomName: case spec.MRoomName:
if gjson.GetBytes(ev.Content(), "name").Str != "" { if gjson.GetBytes(ev.Content(), "name").Str != "" {
return summary, nil return summary, nil
} }
case gomatrixserverlib.MRoomCanonicalAlias: case spec.MRoomCanonicalAlias:
if gjson.GetBytes(ev.Content(), "alias").Str != "" { if gjson.GetBytes(ev.Content(), "alias").Str != "" {
return summary, nil return summary, nil
} }
@ -135,14 +136,14 @@ func (d *DatabaseTransaction) GetRoomSummary(ctx context.Context, roomID, userID
} }
// If there's no room name or canonical alias, get the room heroes, excluding the user // If there's no room name or canonical alias, get the room heroes, excluding the user
heroes, err := d.CurrentRoomState.SelectRoomHeroes(ctx, d.txn, roomID, userID, []string{gomatrixserverlib.Join, gomatrixserverlib.Invite}) heroes, err := d.CurrentRoomState.SelectRoomHeroes(ctx, d.txn, roomID, userID, []string{spec.Join, spec.Invite})
if err != nil { if err != nil {
return summary, err return summary, err
} }
// "When no joined or invited members are available, this should consist of the banned and left users" // "When no joined or invited members are available, this should consist of the banned and left users"
if len(heroes) == 0 { if len(heroes) == 0 {
heroes, err = d.CurrentRoomState.SelectRoomHeroes(ctx, d.txn, roomID, userID, []string{gomatrixserverlib.Leave, gomatrixserverlib.Ban}) heroes, err = d.CurrentRoomState.SelectRoomHeroes(ctx, d.txn, roomID, userID, []string{spec.Leave, spec.Ban})
if err != nil { if err != nil {
return summary, err return summary, err
} }
@ -349,7 +350,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
joinedRoomIDs := make([]string, 0, len(memberships)) joinedRoomIDs := make([]string, 0, len(memberships))
for roomID, membership := range memberships { for roomID, membership := range memberships {
allRoomIDs = append(allRoomIDs, roomID) allRoomIDs = append(allRoomIDs, roomID)
if membership == gomatrixserverlib.Join { if membership == spec.Join {
joinedRoomIDs = append(joinedRoomIDs, roomID) joinedRoomIDs = append(joinedRoomIDs, roomID)
} }
} }
@ -415,7 +416,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
} }
if !peek.Deleted { if !peek.Deleted {
deltas = append(deltas, types.StateDelta{ deltas = append(deltas, types.StateDelta{
Membership: gomatrixserverlib.Peek, Membership: spec.Peek,
StateEvents: d.StreamEventsToEvents(device, state[peek.RoomID]), StateEvents: d.StreamEventsToEvents(device, state[peek.RoomID]),
RoomID: peek.RoomID, RoomID: peek.RoomID,
}) })
@ -433,7 +434,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
continue continue
} }
if membership == gomatrixserverlib.Join { if membership == spec.Join {
// If our membership is now join but the previous membership wasn't // If our membership is now join but the previous membership wasn't
// then this is a "join transition", so we'll insert this room. // then this is a "join transition", so we'll insert this room.
if prevMembership != membership { if prevMembership != membership {
@ -472,7 +473,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
// join transitions above. // join transitions above.
for _, joinedRoomID := range joinedRoomIDs { for _, joinedRoomID := range joinedRoomIDs {
deltas = append(deltas, types.StateDelta{ deltas = append(deltas, types.StateDelta{
Membership: gomatrixserverlib.Join, Membership: spec.Join,
StateEvents: d.StreamEventsToEvents(device, stateFiltered[joinedRoomID]), StateEvents: d.StreamEventsToEvents(device, stateFiltered[joinedRoomID]),
RoomID: joinedRoomID, RoomID: joinedRoomID,
NewlyJoined: newlyJoinedRooms[joinedRoomID], NewlyJoined: newlyJoinedRooms[joinedRoomID],
@ -505,7 +506,7 @@ func (d *DatabaseTransaction) GetStateDeltasForFullStateSync(
joinedRoomIDs := make([]string, 0, len(memberships)) joinedRoomIDs := make([]string, 0, len(memberships))
for roomID, membership := range memberships { for roomID, membership := range memberships {
allRoomIDs = append(allRoomIDs, roomID) allRoomIDs = append(allRoomIDs, roomID)
if membership == gomatrixserverlib.Join { if membership == spec.Join {
joinedRoomIDs = append(joinedRoomIDs, roomID) joinedRoomIDs = append(joinedRoomIDs, roomID)
} }
} }
@ -529,7 +530,7 @@ func (d *DatabaseTransaction) GetStateDeltasForFullStateSync(
return nil, nil, stateErr return nil, nil, stateErr
} }
deltas[peek.RoomID] = types.StateDelta{ deltas[peek.RoomID] = types.StateDelta{
Membership: gomatrixserverlib.Peek, Membership: spec.Peek,
StateEvents: d.StreamEventsToEvents(device, s), StateEvents: d.StreamEventsToEvents(device, s),
RoomID: peek.RoomID, RoomID: peek.RoomID,
} }
@ -555,7 +556,7 @@ func (d *DatabaseTransaction) GetStateDeltasForFullStateSync(
for roomID, stateStreamEvents := range state { for roomID, stateStreamEvents := range state {
for _, ev := range stateStreamEvents { for _, ev := range stateStreamEvents {
if membership, _ := getMembershipFromEvent(ev.Event, userID); membership != "" { if membership, _ := getMembershipFromEvent(ev.Event, userID); membership != "" {
if membership != gomatrixserverlib.Join { // We've already added full state for all joined rooms above. if membership != spec.Join { // We've already added full state for all joined rooms above.
deltas[roomID] = types.StateDelta{ deltas[roomID] = types.StateDelta{
Membership: membership, Membership: membership,
MembershipPos: ev.StreamPosition, MembershipPos: ev.StreamPosition,
@ -579,7 +580,7 @@ func (d *DatabaseTransaction) GetStateDeltasForFullStateSync(
return nil, nil, stateErr return nil, nil, stateErr
} }
deltas[joinedRoomID] = types.StateDelta{ deltas[joinedRoomID] = types.StateDelta{
Membership: gomatrixserverlib.Join, Membership: spec.Join,
StateEvents: d.StreamEventsToEvents(device, s), StateEvents: d.StreamEventsToEvents(device, s),
RoomID: joinedRoomID, RoomID: joinedRoomID,
} }
@ -636,7 +637,7 @@ func (d *DatabaseTransaction) GetRoomReceipts(ctx context.Context, roomIDs []str
func (d *DatabaseTransaction) GetUserUnreadNotificationCountsForRooms(ctx context.Context, userID string, rooms map[string]string) (map[string]*eventutil.NotificationData, error) { func (d *DatabaseTransaction) GetUserUnreadNotificationCountsForRooms(ctx context.Context, userID string, rooms map[string]string) (map[string]*eventutil.NotificationData, error) {
roomIDs := make([]string, 0, len(rooms)) roomIDs := make([]string, 0, len(rooms))
for roomID, membership := range rooms { for roomID, membership := range rooms {
if membership != gomatrixserverlib.Join { if membership != spec.Join {
continue continue
} }
roomIDs = append(roomIDs, roomID) roomIDs = append(roomIDs, roomID)

View file

@ -30,6 +30,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
) )
const currentRoomStateSchema = ` const currentRoomStateSchema = `
@ -270,9 +271,9 @@ func (s *currentRoomStateStatements) SelectCurrentState(
) ([]*gomatrixserverlib.HeaderedEvent, error) { ) ([]*gomatrixserverlib.HeaderedEvent, error) {
// We're going to query members later, so remove them from this request // We're going to query members later, so remove them from this request
if stateFilter.LazyLoadMembers && !stateFilter.IncludeRedundantMembers { if stateFilter.LazyLoadMembers && !stateFilter.IncludeRedundantMembers {
notTypes := &[]string{gomatrixserverlib.MRoomMember} notTypes := &[]string{spec.MRoomMember}
if stateFilter.NotTypes != nil { if stateFilter.NotTypes != nil {
*stateFilter.NotTypes = append(*stateFilter.NotTypes, gomatrixserverlib.MRoomMember) *stateFilter.NotTypes = append(*stateFilter.NotTypes, spec.MRoomMember)
} else { } else {
stateFilter.NotTypes = notTypes stateFilter.NotTypes = notTypes
} }

View file

@ -16,6 +16,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/dendrite/test" "github.com/matrix-org/dendrite/test"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@ -777,7 +778,7 @@ func TestRoomSummary(t *testing.T) {
name: "invited user", name: "invited user",
wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(1), Heroes: []string{bob.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(1), Heroes: []string{bob.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -786,10 +787,10 @@ func TestRoomSummary(t *testing.T) {
name: "invited user, but declined", name: "invited user, but declined",
wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(0), Heroes: []string{bob.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(0), Heroes: []string{bob.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -798,10 +799,10 @@ func TestRoomSummary(t *testing.T) {
name: "joined user after invitation", name: "joined user after invitation",
wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(0), Heroes: []string{bob.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(0), Heroes: []string{bob.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -810,10 +811,10 @@ func TestRoomSummary(t *testing.T) {
name: "multiple joined user", name: "multiple joined user",
wantSummary: &types.Summary{JoinedMemberCount: pointer(3), InvitedMemberCount: pointer(0), Heroes: []string{charlie.ID, bob.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(3), InvitedMemberCount: pointer(0), Heroes: []string{charlie.ID, bob.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, charlie, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, charlie, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(charlie.ID)) }, test.WithStateKey(charlie.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -822,10 +823,10 @@ func TestRoomSummary(t *testing.T) {
name: "multiple joined/invited user", name: "multiple joined/invited user",
wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(1), Heroes: []string{charlie.ID, bob.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(1), Heroes: []string{charlie.ID, bob.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(charlie.ID)) }, test.WithStateKey(charlie.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -834,13 +835,13 @@ func TestRoomSummary(t *testing.T) {
name: "multiple joined/invited/left user", name: "multiple joined/invited/left user",
wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(1), Heroes: []string{charlie.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(1), Heroes: []string{charlie.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "invite", "membership": "invite",
}, test.WithStateKey(charlie.ID)) }, test.WithStateKey(charlie.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -849,10 +850,10 @@ func TestRoomSummary(t *testing.T) {
name: "leaving user after joining", name: "leaving user after joining",
wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(0), Heroes: []string{bob.ID}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(1), InvitedMemberCount: pointer(0), Heroes: []string{bob.ID}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -862,7 +863,7 @@ func TestRoomSummary(t *testing.T) {
wantSummary: &types.Summary{JoinedMemberCount: pointer(len(moreUserIDs) + 1), InvitedMemberCount: pointer(0), Heroes: moreUserIDs[:5]}, wantSummary: &types.Summary{JoinedMemberCount: pointer(len(moreUserIDs) + 1), InvitedMemberCount: pointer(0), Heroes: moreUserIDs[:5]},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
for _, x := range moreUsers { for _, x := range moreUsers {
room.CreateAndInsert(t, x, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, x, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(x.ID)) }, test.WithStateKey(x.ID))
} }
@ -872,10 +873,10 @@ func TestRoomSummary(t *testing.T) {
name: "canonical alias set", name: "canonical alias set",
wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(0), Heroes: []string{}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(0), Heroes: []string{}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomCanonicalAlias, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomCanonicalAlias, map[string]interface{}{
"alias": "myalias", "alias": "myalias",
}, test.WithStateKey("")) }, test.WithStateKey(""))
}, },
@ -884,10 +885,10 @@ func TestRoomSummary(t *testing.T) {
name: "room name set", name: "room name set",
wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(0), Heroes: []string{}}, wantSummary: &types.Summary{JoinedMemberCount: pointer(2), InvitedMemberCount: pointer(0), Heroes: []string{}},
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomName, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomName, map[string]interface{}{
"name": "my room name", "name": "my room name",
}, test.WithStateKey("")) }, test.WithStateKey(""))
}, },

View file

@ -14,7 +14,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/dendrite/test" "github.com/matrix-org/dendrite/test"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib/spec"
) )
func newCurrentRoomStateTable(t *testing.T, dbType test.DBType) (tables.CurrentRoomState, *sql.DB, func()) { func newCurrentRoomStateTable(t *testing.T, dbType test.DBType) (tables.CurrentRoomState, *sql.DB, func()) {
@ -115,7 +115,7 @@ func testCurrentState(t *testing.T, ctx context.Context, txn *sql.Tx, tab tables
t.Fatalf("expected %d state events, got %d", expectCount, gotCount) t.Fatalf("expected %d state events, got %d", expectCount, gotCount)
} }
// same as above, but with existing NotTypes defined // same as above, but with existing NotTypes defined
notTypes := []string{gomatrixserverlib.MRoomMember} notTypes := []string{spec.MRoomMember}
filter.NotTypes = &notTypes filter.NotTypes = &notTypes
evs, err = tab.SelectCurrentState(ctx, txn, room.ID, &filter, nil) evs, err = tab.SelectCurrentState(ctx, txn, room.ID, &filter, nil)
if err != nil { if err != nil {

View file

@ -7,6 +7,7 @@ import (
"time" "time"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/setup/config" "github.com/matrix-org/dendrite/setup/config"
@ -65,7 +66,7 @@ func TestMembershipsTable(t *testing.T) {
u := test.NewUser(t) u := test.NewUser(t)
users = append(users, u.ID) users = append(users, u.ID)
ev := room.CreateAndInsert(t, u, gomatrixserverlib.MRoomMember, map[string]interface{}{ ev := room.CreateAndInsert(t, u, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(u.ID)) }, test.WithStateKey(u.ID))
userEvents = append(userEvents, ev) userEvents = append(userEvents, ev)
@ -92,7 +93,7 @@ func TestMembershipsTable(t *testing.T) {
func testMembershipCount(t *testing.T, ctx context.Context, table tables.Memberships, room *test.Room) { func testMembershipCount(t *testing.T, ctx context.Context, table tables.Memberships, room *test.Room) {
t.Run("membership counts are correct", func(t *testing.T) { t.Run("membership counts are correct", func(t *testing.T) {
// After 10 events, we should have 6 users (5 create related [incl. one member event], 5 member events = 6 users) // After 10 events, we should have 6 users (5 create related [incl. one member event], 5 member events = 6 users)
count, err := table.SelectMembershipCount(ctx, nil, room.ID, gomatrixserverlib.Join, 10) count, err := table.SelectMembershipCount(ctx, nil, room.ID, spec.Join, 10)
if err != nil { if err != nil {
t.Fatalf("failed to get membership count: %s", err) t.Fatalf("failed to get membership count: %s", err)
} }
@ -102,7 +103,7 @@ func testMembershipCount(t *testing.T, ctx context.Context, table tables.Members
} }
// After 100 events, we should have all 11 users // After 100 events, we should have all 11 users
count, err = table.SelectMembershipCount(ctx, nil, room.ID, gomatrixserverlib.Join, 100) count, err = table.SelectMembershipCount(ctx, nil, room.ID, spec.Join, 100)
if err != nil { if err != nil {
t.Fatalf("failed to get membership count: %s", err) t.Fatalf("failed to get membership count: %s", err)
} }
@ -126,12 +127,12 @@ func testUpsert(t *testing.T, ctx context.Context, table tables.Memberships, mem
if pos != expectedPos { if pos != expectedPos {
t.Fatalf("expected pos to be %d, got %d", expectedPos, pos) t.Fatalf("expected pos to be %d, got %d", expectedPos, pos)
} }
if membership != gomatrixserverlib.Join { if membership != spec.Join {
t.Fatalf("expected membership to be join, got %s", membership) t.Fatalf("expected membership to be join, got %s", membership)
} }
// Create a new event which gets upserted and should not cause issues // Create a new event which gets upserted and should not cause issues
ev := room.CreateAndInsert(t, user, gomatrixserverlib.MRoomMember, map[string]interface{}{ ev := room.CreateAndInsert(t, user, spec.MRoomMember, map[string]interface{}{
"membership": gomatrixserverlib.Join, "membership": spec.Join,
}, test.WithStateKey(user.ID)) }, test.WithStateKey(user.ID))
// Insert the same event again, but with different positions, which should get updated // Insert the same event again, but with different positions, which should get updated
if err = table.UpsertMembership(ctx, nil, ev, 2, 2); err != nil { if err = table.UpsertMembership(ctx, nil, ev, 2, 2); err != nil {
@ -147,7 +148,7 @@ func testUpsert(t *testing.T, ctx context.Context, table tables.Memberships, mem
if pos != expectedPos { if pos != expectedPos {
t.Fatalf("expected pos to be %d, got %d", expectedPos, pos) t.Fatalf("expected pos to be %d, got %d", expectedPos, pos)
} }
if membership != gomatrixserverlib.Join { if membership != spec.Join {
t.Fatalf("expected membership to be join, got %s", membership) t.Fatalf("expected membership to be join, got %s", membership)
} }
@ -155,7 +156,7 @@ func testUpsert(t *testing.T, ctx context.Context, table tables.Memberships, mem
if membership, _, err = table.SelectMembershipForUser(ctx, nil, room.ID, user.ID, 1); err != nil { if membership, _, err = table.SelectMembershipForUser(ctx, nil, room.ID, user.ID, 1); err != nil {
t.Fatalf("failed to select membership: %s", err) t.Fatalf("failed to select membership: %s", err)
} }
if membership != gomatrixserverlib.Leave { if membership != spec.Leave {
t.Fatalf("expected membership to be leave, got %s", membership) t.Fatalf("expected membership to be leave, got %s", membership)
} }
}) })

View file

@ -15,6 +15,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/test" "github.com/matrix-org/dendrite/test"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
) )
func newOutputRoomEventsTable(t *testing.T, dbType test.DBType) (tables.Events, *sql.DB, func()) { func newOutputRoomEventsTable(t *testing.T, dbType test.DBType) (tables.Events, *sql.DB, func()) {
@ -110,11 +111,11 @@ func TestReindex(t *testing.T) {
alice := test.NewUser(t) alice := test.NewUser(t)
room := test.NewRoom(t, alice) room := test.NewRoom(t, alice)
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomName, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomName, map[string]interface{}{
"name": "my new room name", "name": "my new room name",
}, test.WithStateKey("")) }, test.WithStateKey(""))
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomTopic, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomTopic, map[string]interface{}{
"topic": "my new room topic", "topic": "my new room topic",
}, test.WithStateKey("")) }, test.WithStateKey(""))
@ -141,8 +142,8 @@ func TestReindex(t *testing.T) {
} }
events, err := tab.ReIndex(ctx, nil, 10, 0, []string{ events, err := tab.ReIndex(ctx, nil, 10, 0, []string{
gomatrixserverlib.MRoomName, spec.MRoomName,
gomatrixserverlib.MRoomTopic, spec.MRoomTopic,
"m.room.message"}) "m.room.message"})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)

View file

@ -8,7 +8,6 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec" "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/syncapi/storage" "github.com/matrix-org/dendrite/syncapi/storage"
@ -80,7 +79,7 @@ func (p *InviteStreamProvider) IncrementalSync(
membership, _, err := snapshot.SelectMembershipForUser(ctx, roomID, req.Device.UserID, math.MaxInt64) membership, _, err := snapshot.SelectMembershipForUser(ctx, roomID, req.Device.UserID, math.MaxInt64)
// Skip if the user is an existing member of the room. // Skip if the user is an existing member of the room.
// Otherwise, the NewLeaveResponse will eject the user from the room unintentionally // Otherwise, the NewLeaveResponse will eject the user from the room unintentionally
if membership == gomatrixserverlib.Join || if membership == spec.Join ||
err != nil { err != nil {
continue continue
} }

View file

@ -13,6 +13,7 @@ import (
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/syncapi/notifier" "github.com/matrix-org/dendrite/syncapi/notifier"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
@ -70,7 +71,7 @@ func (p *PDUStreamProvider) CompleteSync(
} }
// Extract room state and recent events for all rooms the user is joined to. // Extract room state and recent events for all rooms the user is joined to.
joinedRoomIDs, err := snapshot.RoomIDsWithMembership(ctx, req.Device.UserID, gomatrixserverlib.Join) joinedRoomIDs, err := snapshot.RoomIDsWithMembership(ctx, req.Device.UserID, spec.Join)
if err != nil { if err != nil {
req.Log.WithError(err).Error("p.DB.RoomIDsWithMembership failed") req.Log.WithError(err).Error("p.DB.RoomIDsWithMembership failed")
return from return from
@ -110,7 +111,7 @@ func (p *PDUStreamProvider) CompleteSync(
continue continue
} }
req.Response.Rooms.Join[roomID] = jr req.Response.Rooms.Join[roomID] = jr
req.Rooms[roomID] = gomatrixserverlib.Join req.Rooms[roomID] = spec.Join
} }
// Add peeked rooms. // Add peeked rooms.
@ -185,7 +186,7 @@ func (p *PDUStreamProvider) IncrementalSync(
} }
for _, roomID := range syncJoinedRooms { for _, roomID := range syncJoinedRooms {
req.Rooms[roomID] = gomatrixserverlib.Join req.Rooms[roomID] = spec.Join
} }
if len(stateDeltas) == 0 { if len(stateDeltas) == 0 {
@ -312,8 +313,8 @@ func (p *PDUStreamProvider) addRoomDeltaToResponse(
hasMembershipChange := false hasMembershipChange := false
for _, recentEvent := range recentStreamEvents { for _, recentEvent := range recentStreamEvents {
if recentEvent.Type() == gomatrixserverlib.MRoomMember && recentEvent.StateKey() != nil { if recentEvent.Type() == spec.MRoomMember && recentEvent.StateKey() != nil {
if membership, _ := recentEvent.Membership(); membership == gomatrixserverlib.Join { if membership, _ := recentEvent.Membership(); membership == spec.Join {
req.MembershipChanges[*recentEvent.StateKey()] = struct{}{} req.MembershipChanges[*recentEvent.StateKey()] = struct{}{}
} }
hasMembershipChange = true hasMembershipChange = true
@ -357,7 +358,7 @@ func (p *PDUStreamProvider) addRoomDeltaToResponse(
} }
switch delta.Membership { switch delta.Membership {
case gomatrixserverlib.Join: case spec.Join:
jr := types.NewJoinResponse() jr := types.NewJoinResponse()
if hasMembershipChange { if hasMembershipChange {
jr.Summary, err = snapshot.GetRoomSummary(ctx, delta.RoomID, device.UserID) jr.Summary, err = snapshot.GetRoomSummary(ctx, delta.RoomID, device.UserID)
@ -373,7 +374,7 @@ func (p *PDUStreamProvider) addRoomDeltaToResponse(
jr.State.Events = synctypes.HeaderedToClientEvents(delta.StateEvents, synctypes.FormatSync) jr.State.Events = synctypes.HeaderedToClientEvents(delta.StateEvents, synctypes.FormatSync)
req.Response.Rooms.Join[delta.RoomID] = jr req.Response.Rooms.Join[delta.RoomID] = jr
case gomatrixserverlib.Peek: case spec.Peek:
jr := types.NewJoinResponse() jr := types.NewJoinResponse()
jr.Timeline.PrevBatch = &prevBatch jr.Timeline.PrevBatch = &prevBatch
// TODO: Apply history visibility on peeked rooms // TODO: Apply history visibility on peeked rooms
@ -382,10 +383,10 @@ func (p *PDUStreamProvider) addRoomDeltaToResponse(
jr.State.Events = synctypes.HeaderedToClientEvents(delta.StateEvents, synctypes.FormatSync) jr.State.Events = synctypes.HeaderedToClientEvents(delta.StateEvents, synctypes.FormatSync)
req.Response.Rooms.Peek[delta.RoomID] = jr req.Response.Rooms.Peek[delta.RoomID] = jr
case gomatrixserverlib.Leave: case spec.Leave:
fallthrough // transitions to leave are the same as ban fallthrough // transitions to leave are the same as ban
case gomatrixserverlib.Ban: case spec.Ban:
lr := types.NewLeaveResponse() lr := types.NewLeaveResponse()
lr.Timeline.PrevBatch = &prevBatch lr.Timeline.PrevBatch = &prevBatch
lr.Timeline.Events = synctypes.HeaderedToClientEvents(events, synctypes.FormatSync) lr.Timeline.Events = synctypes.HeaderedToClientEvents(events, synctypes.FormatSync)
@ -527,7 +528,7 @@ func (p *PDUStreamProvider) getJoinResponseForCompleteSync(
event := events[0] event := events[0]
// If this is the beginning of the room, we can't go back further. We're going to return // If this is the beginning of the room, we can't go back further. We're going to return
// the TopologyToken from the last event instead. (Synapse returns the /sync next_Batch) // the TopologyToken from the last event instead. (Synapse returns the /sync next_Batch)
if event.Type() == gomatrixserverlib.MRoomCreate && event.StateKeyEquals("") { if event.Type() == spec.MRoomCreate && event.StateKeyEquals("") {
event = events[len(events)-1] event = events[len(events)-1]
} }
backwardTopologyPos, backwardStreamPos, err = snapshot.PositionInTopology(ctx, event.EventID()) backwardTopologyPos, backwardStreamPos, err = snapshot.PositionInTopology(ctx, event.EventID())
@ -575,7 +576,7 @@ func (p *PDUStreamProvider) lazyLoadMembers(
newStateEvents := make([]*gomatrixserverlib.HeaderedEvent, 0, len(stateEvents)) newStateEvents := make([]*gomatrixserverlib.HeaderedEvent, 0, len(stateEvents))
// Remove existing membership events we don't care about, e.g. users not in the timeline.events // Remove existing membership events we don't care about, e.g. users not in the timeline.events
for _, event := range stateEvents { for _, event := range stateEvents {
if event.Type() == gomatrixserverlib.MRoomMember && event.StateKey() != nil { if event.Type() == spec.MRoomMember && event.StateKey() != nil {
// If this is a gapped incremental sync, we still want this membership // If this is a gapped incremental sync, we still want this membership
isGappedIncremental := limited && incremental isGappedIncremental := limited && incremental
// We want this users membership event, keep it in the list // We want this users membership event, keep it in the list
@ -598,7 +599,7 @@ func (p *PDUStreamProvider) lazyLoadMembers(
// Query missing membership events // Query missing membership events
filter := synctypes.DefaultStateFilter() filter := synctypes.DefaultStateFilter()
filter.Senders = &wantUsers filter.Senders = &wantUsers
filter.Types = &[]string{gomatrixserverlib.MRoomMember} filter.Types = &[]string{spec.MRoomMember}
memberships, err := snapshot.GetStateEventsForRoom(ctx, roomID, &filter) memberships, err := snapshot.GetStateEventsForRoom(ctx, roomID, &filter)
if err != nil { if err != nil {
return stateEvents, err return stateEvents, err

View file

@ -20,13 +20,13 @@ import (
"fmt" "fmt"
"sync" "sync"
"github.com/matrix-org/gomatrixserverlib"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
"github.com/matrix-org/dendrite/syncapi/notifier" "github.com/matrix-org/dendrite/syncapi/notifier"
"github.com/matrix-org/dendrite/syncapi/storage" "github.com/matrix-org/dendrite/syncapi/storage"
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/gomatrixserverlib/spec"
) )
type PresenceStreamProvider struct { type PresenceStreamProvider struct {
@ -134,7 +134,7 @@ func (p *PresenceStreamProvider) IncrementalSync(
req.Response.Presence.Events = append(req.Response.Presence.Events, synctypes.ClientEvent{ req.Response.Presence.Events = append(req.Response.Presence.Events, synctypes.ClientEvent{
Content: content, Content: content,
Sender: presence.UserID, Sender: presence.UserID,
Type: gomatrixserverlib.MPresence, Type: spec.MPresence,
}) })
if presence.StreamPos > lastPos { if presence.StreamPos > lastPos {
lastPos = presence.StreamPos lastPos = presence.StreamPos
@ -207,7 +207,7 @@ func membershipEventPresent(events []synctypes.ClientEvent, userID string) bool
for _, ev := range events { for _, ev := range events {
// it's enough to know that we have our member event here, don't need to check membership content // it's enough to know that we have our member event here, don't need to check membership content
// as it's implied by being in the respective section of the sync response. // as it's implied by being in the respective section of the sync response.
if ev.Type == gomatrixserverlib.MRoomMember && ev.StateKey != nil && *ev.StateKey == userID { if ev.Type == spec.MRoomMember && ev.StateKey != nil && *ev.StateKey == userID {
// ignore e.g. join -> join changes // ignore e.g. join -> join changes
if gjson.GetBytes(ev.Unsigned, "prev_content.membership").Str == gjson.GetBytes(ev.Content, "membership").Str { if gjson.GetBytes(ev.Unsigned, "prev_content.membership").Str == gjson.GetBytes(ev.Content, "membership").Str {
continue continue

View file

@ -4,7 +4,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec" "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/syncapi/storage" "github.com/matrix-org/dendrite/syncapi/storage"
@ -47,7 +46,7 @@ func (p *ReceiptStreamProvider) IncrementalSync(
) types.StreamPosition { ) types.StreamPosition {
var joinedRooms []string var joinedRooms []string
for roomID, membership := range req.Rooms { for roomID, membership := range req.Rooms {
if membership == gomatrixserverlib.Join { if membership == spec.Join {
joinedRooms = append(joinedRooms, roomID) joinedRooms = append(joinedRooms, roomID)
} }
} }
@ -89,7 +88,7 @@ func (p *ReceiptStreamProvider) IncrementalSync(
} }
ev := synctypes.ClientEvent{ ev := synctypes.ClientEvent{
Type: gomatrixserverlib.MReceipt, Type: spec.MReceipt,
} }
content := make(map[string]ReceiptMRead) content := make(map[string]ReceiptMRead)
for _, receipt := range receipts { for _, receipt := range receipts {

View file

@ -4,12 +4,11 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/dendrite/internal/caching" "github.com/matrix-org/dendrite/internal/caching"
"github.com/matrix-org/dendrite/syncapi/storage" "github.com/matrix-org/dendrite/syncapi/storage"
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
"github.com/matrix-org/dendrite/syncapi/types" "github.com/matrix-org/dendrite/syncapi/types"
"github.com/matrix-org/gomatrixserverlib/spec"
) )
type TypingStreamProvider struct { type TypingStreamProvider struct {
@ -33,7 +32,7 @@ func (p *TypingStreamProvider) IncrementalSync(
) types.StreamPosition { ) types.StreamPosition {
var err error var err error
for roomID, membership := range req.Rooms { for roomID, membership := range req.Rooms {
if membership != gomatrixserverlib.Join { if membership != spec.Join {
continue continue
} }
@ -53,7 +52,7 @@ func (p *TypingStreamProvider) IncrementalSync(
} }
} }
ev := synctypes.ClientEvent{ ev := synctypes.ClientEvent{
Type: gomatrixserverlib.MTyping, Type: spec.MTyping,
} }
ev.Content, err = json.Marshal(map[string]interface{}{ ev.Content, err = json.Marshal(map[string]interface{}{
"user_ids": typingUsers, "user_ids": typingUsers,

View file

@ -15,6 +15,7 @@ import (
"github.com/matrix-org/dendrite/internal/sqlutil" "github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/setup/config" "github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/gomatrixserverlib/spec"
"github.com/nats-io/nats.go" "github.com/nats-io/nats.go"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
@ -612,10 +613,10 @@ func TestGetMembership(t *testing.T) {
})) }))
}, },
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(alice.ID)) }, test.WithStateKey(alice.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -631,10 +632,10 @@ func TestGetMembership(t *testing.T) {
})) }))
}, },
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(alice.ID)) }, test.WithStateKey(alice.ID))
}, },
@ -650,7 +651,7 @@ func TestGetMembership(t *testing.T) {
})) }))
}, },
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, alice, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, alice, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(alice.ID)) }, test.WithStateKey(alice.ID))
}, },
@ -666,7 +667,7 @@ func TestGetMembership(t *testing.T) {
})) }))
}, },
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -706,10 +707,10 @@ func TestGetMembership(t *testing.T) {
})) }))
}, },
additionalEvents: func(t *testing.T, room *test.Room) { additionalEvents: func(t *testing.T, room *test.Room) {
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
room.CreateAndInsert(t, bob, gomatrixserverlib.MRoomMember, map[string]interface{}{ room.CreateAndInsert(t, bob, spec.MRoomMember, map[string]interface{}{
"membership": "leave", "membership": "leave",
}, test.WithStateKey(bob.ID)) }, test.WithStateKey(bob.ID))
}, },
@ -1141,7 +1142,7 @@ func TestUpdateRelations(t *testing.T) {
}, },
{ {
name: "redactions are ignored", name: "redactions are ignored",
eventType: gomatrixserverlib.MRoomRedaction, eventType: spec.MRoomRedaction,
eventContent: map[string]interface{}{ eventContent: map[string]interface{}{
"m.relates_to": map[string]interface{}{ "m.relates_to": map[string]interface{}{
"event_id": "$randomEventID", "event_id": "$randomEventID",

View file

@ -4,11 +4,11 @@ import (
"context" "context"
"time" "time"
"github.com/matrix-org/gomatrixserverlib"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/matrix-org/dendrite/syncapi/synctypes" "github.com/matrix-org/dendrite/syncapi/synctypes"
userapi "github.com/matrix-org/dendrite/userapi/api" userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib/spec"
) )
type SyncRequest struct { type SyncRequest struct {
@ -35,11 +35,11 @@ func (r *SyncRequest) IsRoomPresent(roomID string) bool {
return false return false
} }
switch membership { switch membership {
case gomatrixserverlib.Join: case spec.Join:
return true return true
case gomatrixserverlib.Invite: case spec.Invite:
return true return true
case gomatrixserverlib.Peek: case spec.Peek:
return true return true
default: default:
return false return false

View file

@ -112,18 +112,18 @@ func (r *Room) insertCreateEvents(t *testing.T) {
hisVis.HistoryVisibility = r.visibility hisVis.HistoryVisibility = r.visibility
} }
r.CreateAndInsert(t, r.creator, gomatrixserverlib.MRoomCreate, map[string]interface{}{ r.CreateAndInsert(t, r.creator, spec.MRoomCreate, map[string]interface{}{
"creator": r.creator.ID, "creator": r.creator.ID,
"room_version": r.Version, "room_version": r.Version,
}, WithStateKey("")) }, WithStateKey(""))
r.CreateAndInsert(t, r.creator, gomatrixserverlib.MRoomMember, map[string]interface{}{ r.CreateAndInsert(t, r.creator, spec.MRoomMember, map[string]interface{}{
"membership": "join", "membership": "join",
}, WithStateKey(r.creator.ID)) }, WithStateKey(r.creator.ID))
r.CreateAndInsert(t, r.creator, gomatrixserverlib.MRoomPowerLevels, plContent, WithStateKey("")) r.CreateAndInsert(t, r.creator, spec.MRoomPowerLevels, plContent, WithStateKey(""))
r.CreateAndInsert(t, r.creator, gomatrixserverlib.MRoomJoinRules, joinRule, WithStateKey("")) r.CreateAndInsert(t, r.creator, spec.MRoomJoinRules, joinRule, WithStateKey(""))
r.CreateAndInsert(t, r.creator, gomatrixserverlib.MRoomHistoryVisibility, hisVis, WithStateKey("")) r.CreateAndInsert(t, r.creator, spec.MRoomHistoryVisibility, hisVis, WithStateKey(""))
if r.guestCanJoin { if r.guestCanJoin {
r.CreateAndInsert(t, r.creator, gomatrixserverlib.MRoomGuestAccess, map[string]string{ r.CreateAndInsert(t, r.creator, spec.MRoomGuestAccess, map[string]string{
"guest_access": "can_join", "guest_access": "can_join",
}, WithStateKey("")) }, WithStateKey(""))
} }

View file

@ -299,14 +299,14 @@ func (s *OutputRoomEventConsumer) processMessage(ctx context.Context, event *gom
} }
switch { switch {
case event.Type() == gomatrixserverlib.MRoomMember: case event.Type() == spec.MRoomMember:
cevent := synctypes.HeaderedToClientEvent(event, synctypes.FormatAll) cevent := synctypes.HeaderedToClientEvent(event, synctypes.FormatAll)
var member *localMembership var member *localMembership
member, err = newLocalMembership(&cevent) member, err = newLocalMembership(&cevent)
if err != nil { if err != nil {
return fmt.Errorf("newLocalMembership: %w", err) return fmt.Errorf("newLocalMembership: %w", err)
} }
if member.Membership == gomatrixserverlib.Invite && member.Domain == s.cfg.Matrix.ServerName { if member.Membership == spec.Invite && member.Domain == s.cfg.Matrix.ServerName {
// localRoomMembers only adds joined members. An invite // localRoomMembers only adds joined members. An invite
// should also be pushed to the target user. // should also be pushed to the target user.
members = append(members, member) members = append(members, member)
@ -419,7 +419,7 @@ func (s *OutputRoomEventConsumer) localRoomMembers(ctx context.Context, roomID s
log.WithError(err).Errorf("Parsing MemberContent") log.WithError(err).Errorf("Parsing MemberContent")
continue continue
} }
if member.Membership != gomatrixserverlib.Join { if member.Membership != spec.Join {
continue continue
} }
if member.Domain != s.cfg.Matrix.ServerName { if member.Domain != s.cfg.Matrix.ServerName {
@ -437,7 +437,7 @@ func (s *OutputRoomEventConsumer) localRoomMembers(ctx context.Context, roomID s
// m.room.canonical_alias is consulted. Returns an empty string if the // m.room.canonical_alias is consulted. Returns an empty string if the
// room has no name. // room has no name.
func (s *OutputRoomEventConsumer) roomName(ctx context.Context, event *gomatrixserverlib.HeaderedEvent) (string, error) { func (s *OutputRoomEventConsumer) roomName(ctx context.Context, event *gomatrixserverlib.HeaderedEvent) (string, error) {
if event.Type() == gomatrixserverlib.MRoomName { if event.Type() == spec.MRoomName {
name, err := unmarshalRoomName(event) name, err := unmarshalRoomName(event)
if err != nil { if err != nil {
return "", err return "", err
@ -462,7 +462,7 @@ func (s *OutputRoomEventConsumer) roomName(ctx context.Context, event *gomatrixs
return unmarshalRoomName(eventS) return unmarshalRoomName(eventS)
} }
if event.Type() == gomatrixserverlib.MRoomCanonicalAlias { if event.Type() == spec.MRoomCanonicalAlias {
alias, err := unmarshalCanonicalAlias(event) alias, err := unmarshalCanonicalAlias(event)
if err != nil { if err != nil {
return "", err return "", err
@ -481,8 +481,8 @@ func (s *OutputRoomEventConsumer) roomName(ctx context.Context, event *gomatrixs
} }
var ( var (
canonicalAliasTuple = gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomCanonicalAlias} canonicalAliasTuple = gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomCanonicalAlias}
roomNameTuple = gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomName} roomNameTuple = gomatrixserverlib.StateKeyTuple{EventType: spec.MRoomName}
) )
func unmarshalRoomName(event *gomatrixserverlib.HeaderedEvent) (string, error) { func unmarshalRoomName(event *gomatrixserverlib.HeaderedEvent) (string, error) {
@ -685,7 +685,7 @@ func (rse *ruleSetEvalContext) HasPowerLevel(userID, levelKey string) (bool, err
req := &rsapi.QueryLatestEventsAndStateRequest{ req := &rsapi.QueryLatestEventsAndStateRequest{
RoomID: rse.roomID, RoomID: rse.roomID,
StateToFetch: []gomatrixserverlib.StateKeyTuple{ StateToFetch: []gomatrixserverlib.StateKeyTuple{
{EventType: gomatrixserverlib.MRoomPowerLevels}, {EventType: spec.MRoomPowerLevels},
}, },
} }
var res rsapi.QueryLatestEventsAndStateResponse var res rsapi.QueryLatestEventsAndStateResponse
@ -693,7 +693,7 @@ func (rse *ruleSetEvalContext) HasPowerLevel(userID, levelKey string) (bool, err
return false, err return false, err
} }
for _, ev := range res.StateEvents { for _, ev := range res.StateEvents {
if ev.Type() != gomatrixserverlib.MRoomPowerLevels { if ev.Type() != spec.MRoomPowerLevels {
continue continue
} }