From ed7c94b9127b6eeed278d729a5384ae9cf850338 Mon Sep 17 00:00:00 2001 From: onyinyang Date: Mon, 8 Jan 2024 19:24:46 -0500 Subject: [PATCH] Send Response as json, errors with OK Status Code --- crates/lox-distributor/Cargo.toml | 2 +- crates/lox-distributor/src/lox_context.rs | 106 +++++++++++++----- crates/lox-distributor/src/main.rs | 10 +- crates/lox-distributor/src/request_handler.rs | 2 +- 4 files changed, 86 insertions(+), 34 deletions(-) diff --git a/crates/lox-distributor/Cargo.toml b/crates/lox-distributor/Cargo.toml index 46e19e9..4b138ca 100644 --- a/crates/lox-distributor/Cargo.toml +++ b/crates/lox-distributor/Cargo.toml @@ -17,7 +17,7 @@ readme = "README.md" [dependencies] julianday = "1.2.0" base64 = "0.21.6" -hyper = { version = "0.14.28", features = ["server"] } +hyper = { version = "0.14.28", features = ["deprecated", "backports","server"] } hex_fmt = "0.3" futures = "0.3.29" time = "0.3.31" diff --git a/crates/lox-distributor/src/lox_context.rs b/crates/lox-distributor/src/lox_context.rs index 4e2eb49..bc0112d 100644 --- a/crates/lox-distributor/src/lox_context.rs +++ b/crates/lox-distributor/src/lox_context.rs @@ -1,5 +1,4 @@ use hyper::{body::Bytes, header::HeaderValue, Body, Response}; - use lox_library::{ bridge_table::{BridgeLine, EncryptedBucket, MAX_BRIDGES_PER_BUCKET}, proto::{ @@ -12,6 +11,7 @@ use rdsys_backend::proto::{Resource, ResourceState}; use serde::{Deserialize, Serialize}; use lox_zkp::ProofError; +use serde_json::json; use std::{ cmp::Ordering, collections::HashMap, @@ -446,12 +446,16 @@ impl LoxServerContext { Ok(resp) => prepare_header(resp), Err(e) => { println!("Error parsing Invite to JSON"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } }, Err(e) => { println!("Error generating open invitation"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -464,7 +468,9 @@ impl LoxServerContext { Ok(resp) => prepare_header(resp), Err(e) => { println!("Error parsing encrypted bridgetable to JSON"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -476,7 +482,9 @@ impl LoxServerContext { Ok(resp) => prepare_header(resp), Err(e) => { println!("Error parsing Pubkeys to JSON"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -485,7 +493,11 @@ impl LoxServerContext { pub fn verify_and_send_open_cred(self, request: Bytes) -> Response { let req = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.open_inv(req) { Ok(resp) => { @@ -495,7 +507,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Open Invitation request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -504,7 +518,11 @@ impl LoxServerContext { pub fn verify_and_send_trust_promo(self, request: Bytes) -> Response { let req: trust_promotion::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.trust_promo(req) { Ok(resp) => { @@ -514,7 +532,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Trust Promotion request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -523,7 +543,11 @@ impl LoxServerContext { pub fn verify_and_send_trust_migration(self, request: Bytes) -> Response { let req: migration::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.trust_migration(req) { Ok(resp) => { @@ -533,7 +557,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Trust Migration request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -542,7 +568,11 @@ impl LoxServerContext { pub fn verify_and_send_level_up(self, request: Bytes) -> Response { let req: level_up::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.level_up(req) { Ok(resp) => { @@ -552,7 +582,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Level up request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -561,7 +593,11 @@ impl LoxServerContext { pub fn verify_and_send_issue_invite(self, request: Bytes) -> Response { let req: issue_invite::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.issue_invite(req) { Ok(resp) => { @@ -571,7 +607,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Issue invite request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -580,7 +618,11 @@ impl LoxServerContext { pub fn verify_and_send_redeem_invite(self, request: Bytes) -> Response { let req: redeem_invite::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.redeem_invite(req) { Ok(resp) => { @@ -590,7 +632,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Redeem Invite request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -599,7 +643,11 @@ impl LoxServerContext { pub fn verify_and_send_check_blockage(self, request: Bytes) -> Response { let req: check_blockage::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.check_blockage(req) { Ok(resp) => { @@ -609,7 +657,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Check blockage request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -618,7 +668,11 @@ impl LoxServerContext { pub fn verify_and_send_blockage_migration(self, request: Bytes) -> Response { let req: blockage_migration::Request = match serde_json::from_slice(&request) { Ok(req) => req, - Err(e) => return prepare_error_header(e.to_string()), + Err(e) => { + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + return prepare_header(val); + } }; match self.blockage_migration(req) { Ok(resp) => { @@ -628,7 +682,9 @@ impl LoxServerContext { } Err(e) => { println!("Invalid Blockage Migration request, Proof Error"); - prepare_error_header(e.to_string()) + let response = json!({"error": e.to_string()}); + let val = serde_json::to_string(&response).unwrap(); + prepare_header(val) } } } @@ -641,11 +697,3 @@ fn prepare_header(response: String) -> Response { .insert("Access-Control-Allow-Origin", HeaderValue::from_static("*")); resp } - -// Prepare HTTP Response for errored Server Request -fn prepare_error_header(error: String) -> Response { - Response::builder() - .status(hyper::StatusCode::BAD_REQUEST) - .body(Body::from(error)) - .unwrap() -} diff --git a/crates/lox-distributor/src/main.rs b/crates/lox-distributor/src/main.rs index acd912c..214fd62 100644 --- a/crates/lox-distributor/src/main.rs +++ b/crates/lox-distributor/src/main.rs @@ -130,9 +130,13 @@ async fn rdsys_request(rtype: ResourceInfo, tx: mpsc::Sender) { rtype.token.clone(), rtype.types.clone(), ) - .await{ - Ok(resources)=> resources, - Err(e) => {println!("No resources received from rdsys: {:?}", e); continue}, + .await + { + Ok(resources) => resources, + Err(e) => { + println!("No resources received from rdsys: {:?}", e); + continue; + } }; tx.send(resources).await.unwrap(); } diff --git a/crates/lox-distributor/src/request_handler.rs b/crates/lox-distributor/src/request_handler.rs index dcfb0bf..560146b 100644 --- a/crates/lox-distributor/src/request_handler.rs +++ b/crates/lox-distributor/src/request_handler.rs @@ -336,7 +336,7 @@ mod tests { .body(Body::empty()) .unwrap(); let not_found_response = handle(th.context.clone(), req).await.unwrap(); - assert_eq!(not_found_response.status(), StatusCode::BAD_REQUEST); + assert_eq!(not_found_response.status(), StatusCode::OK) } #[tokio::test]