Send Response as json, errors with OK Status Code

This commit is contained in:
onyinyang 2024-01-08 19:24:46 -05:00
parent c2a40658e3
commit ed7c94b912
No known key found for this signature in database
GPG Key ID: 156A6435430C2036
4 changed files with 86 additions and 34 deletions

View File

@ -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"

View File

@ -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<Body> {
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<Body> {
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<Body> {
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<Body> {
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<Body> {
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<Body> {
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<Body> {
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<Body> {
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<Body> {
.insert("Access-Control-Allow-Origin", HeaderValue::from_static("*"));
resp
}
// Prepare HTTP Response for errored Server Request
fn prepare_error_header(error: String) -> Response<Body> {
Response::builder()
.status(hyper::StatusCode::BAD_REQUEST)
.body(Body::from(error))
.unwrap()
}

View File

@ -130,9 +130,13 @@ async fn rdsys_request(rtype: ResourceInfo, tx: mpsc::Sender<ResourceState>) {
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();
}

View File

@ -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]