diff --git a/crates/lox-distributor/src/main.rs b/crates/lox-distributor/src/main.rs index 74d64c8..0e0f1fe 100644 --- a/crates/lox-distributor/src/main.rs +++ b/crates/lox-distributor/src/main.rs @@ -19,7 +19,7 @@ use rand::RngCore; use serde::{Deserialize, Serialize}; use serde_json; -use serde_with::serde_as; +use serde_with::{serde_as}; #[serde_as] #[derive(Serialize, Deserialize)] @@ -31,7 +31,7 @@ pub struct Invite { #[serde_as] #[derive(Serialize, Deserialize)] pub struct EncBridgeTable { - #[serde_as(as = "Vec<[_; ENC_BUCKET_BYTES]>")] + #[serde_as(as = "Vec<[_; ENC_BUCKET_BYTES]>")] etable: Vec<[u8; ENC_BUCKET_BYTES]>, } @@ -98,9 +98,7 @@ async fn handle( .unwrap()), _ => match (req.method(), req.uri().path()) { (&Method::GET, "/invite") => Ok::<_, Infallible>(generate_invite(context.db)), - (&Method::GET, "/reachability") => { - Ok::<_, Infallible>(send_reachability_cred(context.ba)) - } + (&Method::GET, "/reachability") => Ok::<_, Infallible>(send_reachability_cred(context.ba)), (&Method::GET, "/pubkeys") => Ok::<_, Infallible>(send_keys(context.ba)), (&Method::POST, "/openreq") => Ok::<_, Infallible>({ let bytes = body::to_bytes(req.into_body()).await.unwrap(); @@ -118,6 +116,10 @@ async fn handle( let bytes = body::to_bytes(req.into_body()).await.unwrap(); verify_and_send_level_up(bytes, context.ba) }), + (&Method::POST, "/issueinvite") => Ok::<_, Infallible>({ + let bytes = body::to_bytes(req.into_body()).await.unwrap(); + verify_and_send_issue_invite(bytes, context.ba) + }), _ => { // Return 404 not found response. Ok(Response::builder() @@ -129,6 +131,7 @@ async fn handle( } } + fn generate_invite(db: Arc>) -> Response { let obj = db.lock().unwrap(); let invite = Invite { @@ -145,13 +148,14 @@ fn generate_invite(db: Arc>) -> Response { // Return the serialized encrypted bridge table fn send_reachability_cred(ba: Arc>) -> Response { let mut ba_obj = ba.lock().unwrap(); - ba_obj.advance_days(85); // FOR TESTING ONLY + ba_obj.advance_days(85); // FOR TESTING ONLY println!("Today's date according to server: {}", ba_obj.today()); let enc_table = ba_obj.enc_bridge_table().clone(); - let etable = EncBridgeTable { etable: enc_table }; + let etable = EncBridgeTable { + etable: enc_table, + }; let mut resp = Response::new(Body::from(serde_json::to_string(&etable).unwrap())); - resp.headers_mut() - .insert("Access-Control-Allow-Origin", HeaderValue::from_static("*")); + resp.headers_mut().insert("Access-Control-Allow-Origin", HeaderValue::from_static("*")); resp } @@ -207,11 +211,21 @@ fn verify_and_send_level_up(request: Bytes, ba: Arc>) -> Respo prepare_header(level_up_resp_str) } +fn verify_and_send_issue_invite(request: Bytes, ba: Arc>) -> Response { + let req: proto::issue_invite::Request = serde_json::from_slice(&request).unwrap(); + let mut ba_obj = ba.lock().unwrap(); + let response = ba_obj.handle_issue_invite(req).unwrap(); + let issue_invite_resp_str = serde_json::to_string(&response).unwrap(); + prepare_header(issue_invite_resp_str) +} + + fn prepare_header(response: String) -> Response { let mut resp = Response::new(Body::from(response)); resp.headers_mut() .insert("Access-Control-Allow-Origin", HeaderValue::from_static("*")); resp + } async fn shutdown_signal() {