Reformat lox context to include request handling fns
This commit is contained in:
parent
39577b95ca
commit
2bb043b6b8
|
@ -200,11 +200,10 @@ impl LoxServerContext {
|
||||||
let mut ba_obj = self.ba.lock().unwrap();
|
let mut ba_obj = self.ba.lock().unwrap();
|
||||||
ba_obj.handle_blockage_migration(req)
|
ba_obj.handle_blockage_migration(req)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Generate and return an open invitation token
|
// Generate and return an open invitation token
|
||||||
pub fn generate_invite(context: LoxServerContext) -> Response<Body> {
|
pub fn generate_invite(self) -> Response<Body> {
|
||||||
let invite = context.gen_invite();
|
let invite = self.gen_invite();
|
||||||
match serde_json::to_string(&invite) {
|
match serde_json::to_string(&invite) {
|
||||||
Ok(resp) => prepare_header(resp),
|
Ok(resp) => prepare_header(resp),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -212,11 +211,11 @@ pub fn generate_invite(context: LoxServerContext) -> Response<Body> {
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the serialized encrypted bridge table
|
// Return the serialized encrypted bridge table
|
||||||
pub fn send_reachability_cred(context: LoxServerContext) -> Response<Body> {
|
pub fn send_reachability_cred(self) -> Response<Body> {
|
||||||
let enc_table = context.encrypt_table();
|
let enc_table = self.encrypt_table();
|
||||||
let etable = lox_utils::EncBridgeTable { etable: enc_table };
|
let etable = lox_utils::EncBridgeTable { etable: enc_table };
|
||||||
match serde_json::to_string(&etable) {
|
match serde_json::to_string(&etable) {
|
||||||
Ok(resp) => prepare_header(resp),
|
Ok(resp) => prepare_header(resp),
|
||||||
|
@ -225,11 +224,11 @@ pub fn send_reachability_cred(context: LoxServerContext) -> Response<Body> {
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the serialized pubkeys for the Bridge Authority
|
// Return the serialized pubkeys for the Bridge Authority
|
||||||
pub fn send_keys(context: LoxServerContext) -> Response<Body> {
|
pub fn send_keys(self) -> Response<Body> {
|
||||||
let pubkeys = context.pubkeys();
|
let pubkeys = self.pubkeys();
|
||||||
match serde_json::to_string(&pubkeys) {
|
match serde_json::to_string(&pubkeys) {
|
||||||
Ok(resp) => prepare_header(resp),
|
Ok(resp) => prepare_header(resp),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -237,14 +236,14 @@ pub fn send_keys(context: LoxServerContext) -> Response<Body> {
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_open_cred(request: Bytes, context: LoxServerContext) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.open_inv(req) {
|
match self.open_inv(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -254,14 +253,14 @@ pub fn verify_and_send_open_cred(request: Bytes, context: LoxServerContext) -> R
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_trust_promo(request: Bytes, context: LoxServerContext) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.trust_promo(req) {
|
match self.trust_promo(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -271,17 +270,14 @@ pub fn verify_and_send_trust_promo(request: Bytes, context: LoxServerContext) ->
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_trust_migration(
|
pub fn verify_and_send_trust_migration(self, request: Bytes) -> Response<Body> {
|
||||||
request: Bytes,
|
|
||||||
context: LoxServerContext,
|
|
||||||
) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.trust_migration(req) {
|
match self.trust_migration(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -291,14 +287,14 @@ pub fn verify_and_send_trust_migration(
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_level_up(request: Bytes, context: LoxServerContext) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.level_up(req) {
|
match self.level_up(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -308,14 +304,14 @@ pub fn verify_and_send_level_up(request: Bytes, context: LoxServerContext) -> Re
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_issue_invite(request: Bytes, context: LoxServerContext) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.issue_invite(req) {
|
match self.issue_invite(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -325,14 +321,14 @@ pub fn verify_and_send_issue_invite(request: Bytes, context: LoxServerContext) -
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_redeem_invite(request: Bytes, context: LoxServerContext) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.redeem_invite(req) {
|
match self.redeem_invite(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -342,14 +338,14 @@ pub fn verify_and_send_redeem_invite(request: Bytes, context: LoxServerContext)
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_check_blockage(request: Bytes, context: LoxServerContext) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.check_blockage(req) {
|
match self.check_blockage(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -359,17 +355,14 @@ pub fn verify_and_send_check_blockage(request: Bytes, context: LoxServerContext)
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_and_send_blockage_migration(
|
pub fn verify_and_send_blockage_migration(self, request: Bytes) -> Response<Body> {
|
||||||
request: Bytes,
|
|
||||||
context: LoxServerContext,
|
|
||||||
) -> 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) => return prepare_error_header(e.to_string()),
|
||||||
};
|
};
|
||||||
match context.blockage_migration(req) {
|
match self.blockage_migration(req) {
|
||||||
Ok(resp) => {
|
Ok(resp) => {
|
||||||
let response = serde_json::to_string(&resp).unwrap();
|
let response = serde_json::to_string(&resp).unwrap();
|
||||||
prepare_header(response)
|
prepare_header(response)
|
||||||
|
@ -379,6 +372,7 @@ pub fn verify_and_send_blockage_migration(
|
||||||
prepare_error_header(e.to_string())
|
prepare_error_header(e.to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prepare_header(response: String) -> Response<Body> {
|
fn prepare_header(response: String) -> Response<Body> {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
use crate::lox_context;
|
|
||||||
use crate::lox_context::LoxServerContext;
|
use crate::lox_context::LoxServerContext;
|
||||||
use hyper::{body, header::HeaderValue, Body, Method, Request, Response, StatusCode};
|
use hyper::{body, header::HeaderValue, Body, Method, Request, Response, StatusCode};
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
|
@ -17,47 +16,43 @@ pub async fn handle(
|
||||||
.body(Body::from("Allow POST"))
|
.body(Body::from("Allow POST"))
|
||||||
.unwrap()),
|
.unwrap()),
|
||||||
_ => match (req.method(), req.uri().path()) {
|
_ => match (req.method(), req.uri().path()) {
|
||||||
(&Method::POST, "/invite") => {
|
(&Method::POST, "/invite") => Ok::<_, Infallible>(cloned_context.generate_invite()),
|
||||||
Ok::<_, Infallible>(lox_context::generate_invite(cloned_context))
|
|
||||||
}
|
|
||||||
(&Method::POST, "/reachability") => {
|
(&Method::POST, "/reachability") => {
|
||||||
Ok::<_, Infallible>(lox_context::send_reachability_cred(cloned_context))
|
Ok::<_, Infallible>(cloned_context.send_reachability_cred())
|
||||||
}
|
|
||||||
(&Method::POST, "/pubkeys") => {
|
|
||||||
Ok::<_, Infallible>(lox_context::send_keys(cloned_context))
|
|
||||||
}
|
}
|
||||||
|
(&Method::POST, "/pubkeys") => Ok::<_, Infallible>(cloned_context.send_keys()),
|
||||||
(&Method::POST, "/openreq") => Ok::<_, Infallible>({
|
(&Method::POST, "/openreq") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_open_cred(bytes, cloned_context)
|
cloned_context.verify_and_send_open_cred(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/trustpromo") => Ok::<_, Infallible>({
|
(&Method::POST, "/trustpromo") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_trust_promo(bytes, cloned_context)
|
cloned_context.verify_and_send_trust_promo(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/trustmig") => Ok::<_, Infallible>({
|
(&Method::POST, "/trustmig") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_trust_migration(bytes, cloned_context)
|
cloned_context.verify_and_send_trust_migration(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/levelup") => Ok::<_, Infallible>({
|
(&Method::POST, "/levelup") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_level_up(bytes, cloned_context)
|
cloned_context.verify_and_send_level_up(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/issueinvite") => Ok::<_, Infallible>({
|
(&Method::POST, "/issueinvite") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_issue_invite(bytes, cloned_context)
|
cloned_context.verify_and_send_issue_invite(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/redeem") => Ok::<_, Infallible>({
|
(&Method::POST, "/redeem") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_redeem_invite(bytes, cloned_context)
|
cloned_context.verify_and_send_redeem_invite(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/checkblockage") => Ok::<_, Infallible>({
|
(&Method::POST, "/checkblockage") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
// TEST ONLY: Block all existing bridges and add new ones for migration
|
// TEST ONLY: Block all existing bridges and add new ones for migration
|
||||||
lox_context::verify_and_send_check_blockage(bytes, cloned_context)
|
cloned_context.verify_and_send_check_blockage(bytes)
|
||||||
}),
|
}),
|
||||||
(&Method::POST, "/blockagemigration") => Ok::<_, Infallible>({
|
(&Method::POST, "/blockagemigration") => Ok::<_, Infallible>({
|
||||||
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
let bytes = body::to_bytes(req.into_body()).await.unwrap();
|
||||||
lox_context::verify_and_send_blockage_migration(bytes, cloned_context)
|
cloned_context.verify_and_send_blockage_migration(bytes)
|
||||||
}),
|
}),
|
||||||
_ => {
|
_ => {
|
||||||
// Return 404 not found response.
|
// Return 404 not found response.
|
||||||
|
@ -72,6 +67,8 @@ pub async fn handle(
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use crate::lox_context;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
use chrono::{Duration, Utc};
|
use chrono::{Duration, Utc};
|
||||||
|
|
Loading…
Reference in New Issue