diff --git a/src/web/api.rs b/src/web/api.rs index 38163bb9..c132e9e8 100644 --- a/src/web/api.rs +++ b/src/web/api.rs @@ -4,7 +4,10 @@ use std::{collections::HashMap, fs, path::PathBuf, str::FromStr, sync::Arc}; use futures::{sink::SinkExt, stream::StreamExt}; -use hyper::{body, Body, Method, Request, Response, StatusCode}; +use hyper::{ + body::{self, Bytes}, + Body, Method, Request, Response, StatusCode, +}; use hyper_tungstenite::{is_upgrade_request, tungstenite::Message, upgrade, HyperWebsocket}; use opener::OpenError; use rbx_dom_weak::{ @@ -132,7 +135,10 @@ impl ApiService { let session_id = self.serve_session.session_id(); let tree_mutation_sender = self.serve_session.tree_mutation_sender(); - let body = body::to_bytes(request.into_body()).await.unwrap(); + let body = match read_request_body(request.into_body()).await { + Ok(body) => body, + Err(response) => return response, + }; let request: WriteRequest = match deserialize_msgpack(&body) { Ok(request) => request, @@ -221,7 +227,10 @@ impl ApiService { /// `Value` property set to point to the requested Instance. async fn handle_api_serialize(&self, request: Request
) -> Response { let session_id = self.serve_session.session_id(); - let body = body::to_bytes(request.into_body()).await.unwrap(); + let body = match read_request_body(request.into_body()).await { + Ok(body) => body, + Err(response) => return response, + }; let request: SerializeRequest = match deserialize_msgpack(&body) { Ok(request) => request, @@ -290,7 +299,10 @@ impl ApiService { /// endpoint is used. async fn handle_api_ref_patch(self, request: Request) -> Response { let session_id = self.serve_session.session_id(); - let body = body::to_bytes(request.into_body()).await.unwrap(); + let body = match read_request_body(request.into_body()).await { + Ok(body) => body, + Err(response) => return response, + }; let request: RefPatchRequest = match deserialize_msgpack(&body) { Ok(request) => request, @@ -423,6 +435,15 @@ impl ApiService { } } +async fn read_request_body(body: Body) -> Result