Refuse /send_join without m.room.create
@@ -154,16 +154,23 @@ func SendJoin(
// Fetch the state and auth chain. We do this before we send the events
// on, in case this fails.
- var stateAndAuthChainRepsonse api.QueryStateAndAuthChainResponse
+ var stateAndAuthChainResponse api.QueryStateAndAuthChainResponse
err = query.QueryStateAndAuthChain(httpReq.Context(), &api.QueryStateAndAuthChainRequest{
PrevEventIDs: event.PrevEventIDs(),
AuthEventIDs: event.AuthEventIDs(),
RoomID: roomID,
- }, &stateAndAuthChainRepsonse)
+ }, &stateAndAuthChainResponse)
if err != nil {
return httputil.LogThenError(httpReq, err)
}
+ if !stateAndAuthChainResponse.RoomExists {
+ return util.JSONResponse{
+ Code: http.StatusNotFound,
+ JSON: jsonerror.NotFound("Room does not exist"),
+ }
+ }
+
// Send the events to the room server.
// We are responsible for notifying other servers that the user has joined
// the room, so set SendAsServer to cfg.Matrix.ServerName
@@ -177,8 +184,8 @@ func SendJoin(
return util.JSONResponse{
Code: http.StatusOK,
JSON: map[string]interface{}{
- "state": stateAndAuthChainRepsonse.StateEvents,
- "auth_chain": stateAndAuthChainRepsonse.AuthChainEvents,
+ "state": stateAndAuthChainResponse.StateEvents,
+ "auth_chain": stateAndAuthChainResponse.AuthChainEvents,
},
}
}
