From 60558b6544069c42147c3ad679f7e06d52b26874 Mon Sep 17 00:00:00 2001 From: Xin Liu Date: Thu, 8 Aug 2024 19:14:58 +0900 Subject: [PATCH] chore: handle http `OPTIONS` method Signed-off-by: Xin Liu --- src/backend/ggml.rs | 80 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/backend/ggml.rs b/src/backend/ggml.rs index 3fdf72a..3b2399a 100644 --- a/src/backend/ggml.rs +++ b/src/backend/ggml.rs @@ -78,6 +78,27 @@ pub(crate) async fn embeddings_handler(mut req: Request) -> Response // log info!(target: "embeddings_handler", "Handling the coming embeddings request"); + if req.method().eq(&hyper::http::Method::OPTIONS) { + let result = Response::builder() + .header("Access-Control-Allow-Origin", "*") + .header("Access-Control-Allow-Methods", "*") + .header("Access-Control-Allow-Headers", "*") + .header("Content-Type", "application/json") + .body(Body::empty()); + + match result { + Ok(response) => return response, + Err(e) => { + let err_msg = e.to_string(); + + // log + error!(target: "embeddings_handler", "{}", &err_msg); + + return error::internal_server_error(err_msg); + } + } + } + // parse request let body_bytes = match to_bytes(req.body_mut()).await { Ok(body_bytes) => body_bytes, @@ -1067,6 +1088,25 @@ pub(crate) async fn files_handler(req: Request) -> Response { error::internal_server_error(err_msg) } } + } else if req.method() == Method::OPTIONS { + let result = Response::builder() + .header("Access-Control-Allow-Origin", "*") + .header("Access-Control-Allow-Methods", "*") + .header("Access-Control-Allow-Headers", "*") + .header("Content-Type", "application/json") + .body(Body::empty()); + + match result { + Ok(response) => return response, + Err(e) => { + let err_msg = e.to_string(); + + // log + error!(target: "files_handler", "{}", &err_msg); + + return error::internal_server_error(err_msg); + } + } } else { let err_msg = "Invalid HTTP Method."; @@ -1085,6 +1125,27 @@ pub(crate) async fn chunks_handler(mut req: Request) -> Response { // log info!(target: "chunks_handler", "Handling the coming chunks request"); + if req.method().eq(&hyper::http::Method::OPTIONS) { + let result = Response::builder() + .header("Access-Control-Allow-Origin", "*") + .header("Access-Control-Allow-Methods", "*") + .header("Access-Control-Allow-Headers", "*") + .header("Content-Type", "application/json") + .body(Body::empty()); + + match result { + Ok(response) => return response, + Err(e) => { + let err_msg = e.to_string(); + + // log + error!(target: "chunks_handler", "{}", &err_msg); + + return error::internal_server_error(err_msg); + } + } + } + // parse request let body_bytes = match to_bytes(req.body_mut()).await { Ok(body_bytes) => body_bytes, @@ -1392,6 +1453,25 @@ pub(crate) async fn doc_to_embeddings_handler( error!(target: "doc_to_embeddings_handler", "{}", &err_msg); return error::internal_server_error(err_msg); + } else if req.method() == Method::OPTIONS { + let result = Response::builder() + .header("Access-Control-Allow-Origin", "*") + .header("Access-Control-Allow-Methods", "*") + .header("Access-Control-Allow-Headers", "*") + .header("Content-Type", "application/json") + .body(Body::empty()); + + match result { + Ok(response) => return response, + Err(e) => { + let err_msg = e.to_string(); + + // log + error!(target: "doc_to_embeddings_handler", "{}", &err_msg); + + return error::internal_server_error(err_msg); + } + } } else { let err_msg = "Invalid HTTP Method.";