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] [dependencies]
julianday = "1.2.0" julianday = "1.2.0"
base64 = "0.21.6" base64 = "0.21.6"
hyper = { version = "0.14.28", features = ["server"] } hyper = { version = "0.14.28", features = ["deprecated", "backports","server"] }
hex_fmt = "0.3" hex_fmt = "0.3"
futures = "0.3.29" futures = "0.3.29"
time = "0.3.31" time = "0.3.31"

View File

@ -1,5 +1,4 @@
use hyper::{body::Bytes, header::HeaderValue, Body, Response}; use hyper::{body::Bytes, header::HeaderValue, Body, Response};
use lox_library::{ use lox_library::{
bridge_table::{BridgeLine, EncryptedBucket, MAX_BRIDGES_PER_BUCKET}, bridge_table::{BridgeLine, EncryptedBucket, MAX_BRIDGES_PER_BUCKET},
proto::{ proto::{
@ -12,6 +11,7 @@ use rdsys_backend::proto::{Resource, ResourceState};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use lox_zkp::ProofError; use lox_zkp::ProofError;
use serde_json::json;
use std::{ use std::{
cmp::Ordering, cmp::Ordering,
collections::HashMap, collections::HashMap,
@ -446,12 +446,16 @@ impl LoxServerContext {
Ok(resp) => prepare_header(resp), Ok(resp) => prepare_header(resp),
Err(e) => { Err(e) => {
println!("Error parsing Invite to JSON"); 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) => { Err(e) => {
println!("Error generating open invitation"); 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), Ok(resp) => prepare_header(resp),
Err(e) => { Err(e) => {
println!("Error parsing encrypted bridgetable to JSON"); 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), Ok(resp) => prepare_header(resp),
Err(e) => { Err(e) => {
println!("Error parsing Pubkeys to JSON"); 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> { pub fn verify_and_send_open_cred(self, request: Bytes) -> Response<Body> {
let req = match serde_json::from_slice(&request) { let req = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.open_inv(req) {
Ok(resp) => { Ok(resp) => {
@ -495,7 +507,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Open Invitation request, Proof Error"); 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> { pub fn verify_and_send_trust_promo(self, request: Bytes) -> Response<Body> {
let req: trust_promotion::Request = match serde_json::from_slice(&request) { let req: trust_promotion::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.trust_promo(req) {
Ok(resp) => { Ok(resp) => {
@ -514,7 +532,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Trust Promotion request, Proof Error"); 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> { pub fn verify_and_send_trust_migration(self, request: Bytes) -> Response<Body> {
let req: migration::Request = match serde_json::from_slice(&request) { let req: migration::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.trust_migration(req) {
Ok(resp) => { Ok(resp) => {
@ -533,7 +557,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Trust Migration request, Proof Error"); 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> { pub fn verify_and_send_level_up(self, request: Bytes) -> Response<Body> {
let req: level_up::Request = match serde_json::from_slice(&request) { let req: level_up::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.level_up(req) {
Ok(resp) => { Ok(resp) => {
@ -552,7 +582,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Level up request, Proof Error"); 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> { pub fn verify_and_send_issue_invite(self, request: Bytes) -> Response<Body> {
let req: issue_invite::Request = match serde_json::from_slice(&request) { let req: issue_invite::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.issue_invite(req) {
Ok(resp) => { Ok(resp) => {
@ -571,7 +607,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Issue invite request, Proof Error"); 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> { pub fn verify_and_send_redeem_invite(self, request: Bytes) -> Response<Body> {
let req: redeem_invite::Request = match serde_json::from_slice(&request) { let req: redeem_invite::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.redeem_invite(req) {
Ok(resp) => { Ok(resp) => {
@ -590,7 +632,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Redeem Invite request, Proof Error"); 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> { pub fn verify_and_send_check_blockage(self, request: Bytes) -> Response<Body> {
let req: check_blockage::Request = match serde_json::from_slice(&request) { let req: check_blockage::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.check_blockage(req) {
Ok(resp) => { Ok(resp) => {
@ -609,7 +657,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Check blockage request, Proof Error"); 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> { pub fn verify_and_send_blockage_migration(self, request: Bytes) -> Response<Body> {
let req: blockage_migration::Request = match serde_json::from_slice(&request) { let req: blockage_migration::Request = match serde_json::from_slice(&request) {
Ok(req) => req, 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) { match self.blockage_migration(req) {
Ok(resp) => { Ok(resp) => {
@ -628,7 +682,9 @@ impl LoxServerContext {
} }
Err(e) => { Err(e) => {
println!("Invalid Blockage Migration request, Proof Error"); 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("*")); .insert("Access-Control-Allow-Origin", HeaderValue::from_static("*"));
resp 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.token.clone(),
rtype.types.clone(), rtype.types.clone(),
) )
.await{ .await
Ok(resources)=> resources, {
Err(e) => {println!("No resources received from rdsys: {:?}", e); continue}, Ok(resources) => resources,
Err(e) => {
println!("No resources received from rdsys: {:?}", e);
continue;
}
}; };
tx.send(resources).await.unwrap(); tx.send(resources).await.unwrap();
} }

View File

@ -336,7 +336,7 @@ mod tests {
.body(Body::empty()) .body(Body::empty())
.unwrap(); .unwrap();
let not_found_response = handle(th.context.clone(), req).await.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] #[tokio::test]