diff options
Diffstat (limited to 'federationapi')
-rw-r--r-- | federationapi/routing/join.go | 11 | ||||
-rw-r--r-- | federationapi/routing/leave.go | 19 |
2 files changed, 16 insertions, 14 deletions
diff --git a/federationapi/routing/join.go b/federationapi/routing/join.go index 4874f4d1..ffdadd52 100644 --- a/federationapi/routing/join.go +++ b/federationapi/routing/join.go @@ -165,7 +165,7 @@ func SendJoin( } // Check that a state key is provided. - if event.StateKey() == nil || (event.StateKey() != nil && *event.StateKey() == "") { + if event.StateKey() == nil || event.StateKeyEquals("") { return util.JSONResponse{ Code: http.StatusBadRequest, JSON: jsonerror.BadJSON( @@ -253,11 +253,12 @@ func SendJoin( // there isn't much point in sending another join event into the room. alreadyJoined := false for _, se := range stateAndAuthChainResponse.StateEvents { + if !se.StateKeyEquals(*event.StateKey()) { + continue + } if membership, merr := se.Membership(); merr == nil { - if se.StateKey() != nil && *se.StateKey() == *event.StateKey() { - alreadyJoined = (membership == "join") - break - } + alreadyJoined = (membership == gomatrixserverlib.Join) + break } } diff --git a/federationapi/routing/leave.go b/federationapi/routing/leave.go index d265886b..d2fbfc71 100644 --- a/federationapi/routing/leave.go +++ b/federationapi/routing/leave.go @@ -81,15 +81,16 @@ func MakeLeave( // event. This means that /send_leave will be a no-op, which helps // to reject invites multiple times - hopefully. for _, state := range queryRes.StateEvents { - if state.Type() == gomatrixserverlib.MRoomMember && state.StateKeyEquals(userID) { - if mem, merr := state.Membership(); merr == nil && mem == gomatrixserverlib.Leave { - return util.JSONResponse{ - Code: http.StatusOK, - JSON: map[string]interface{}{ - "room_version": event.RoomVersion, - "event": state, - }, - } + if !state.StateKeyEquals(userID) { + continue + } + if mem, merr := state.Membership(); merr == nil && mem == gomatrixserverlib.Leave { + return util.JSONResponse{ + Code: http.StatusOK, + JSON: map[string]interface{}{ + "room_version": event.RoomVersion, + "event": state, + }, } } } |