Work on lox_auth handling requests

(Client side still needs to be implemented)
This commit is contained in:
Vecna 2023-02-05 21:26:13 -05:00
parent e1f4305733
commit 035b4f9195
4 changed files with 82 additions and 11 deletions

View File

@ -9,6 +9,7 @@ edition = "2021"
lox = { git = "https://git-crysp.uwaterloo.ca/iang/lox.git", branch = "vvecna/lox_test" }
ed25519-dalek = { version = "1", features = ["serde"] }
serde = "1"
bincode = "1"
serde_json = "1.0"
# TODO: reduce feature set to just the ones needed
tokio = { version = "1.20", features = ["full"] }

View File

@ -49,13 +49,11 @@ async fn main() {
.expect("Failed to write to bridgedb pubkey file");
}
let mut cmd_lambda = |cmd: Vec<u8>| perform_command(cmd, &bridgedb);
listen(addr, &mut cmd_lambda).await;
listen(addr, &mut |request: Vec<u8>| handle_request(request, &mut bridgedb)).await;
}
fn perform_command(cmd: Vec<u8>, bridgedb: &BridgeDb) -> Vec<u8> {
if cmd[0] == 1 {
fn handle_request(request: Vec<u8>, bridgedb: &mut BridgeDb) -> Vec<u8> {
if request[0] == 1 {
// note, the bridgedb currently has no buckets
return bridgedb.invite().to_vec();
}

View File

@ -3,7 +3,12 @@
mod server_net;
use crate::server_net::listen;
#[path = "../request_type.rs"]
mod request_type;
use crate::request_type::RequestType;
use lox::BridgeAuth;
use lox::proto::*;
use std::env::args;
use std::fs::File;
use std::io::Write;
@ -65,12 +70,50 @@ async fn main() {
.expect("Failed to write to lox_auth pubkeys file");
}
let mut cmd_lambda = |cmd: Vec<u8>| perform_command(cmd, &lox_auth);
listen(addr, &mut cmd_lambda).await;
listen(addr, &mut |request: Vec<u8>| handle_request(request, &mut lox_auth)).await;
}
fn perform_command(cmd: Vec<u8>, lox_auth: &BridgeAuth) -> Vec<u8> {
// just send something back for now
"ACK".into()
fn handle_request(request: Vec<u8>, lox_auth: &mut BridgeAuth) -> Vec<u8> {
match RequestType::try_from(request[0]).unwrap() {
RequestType::BlockageMigration => {
let decoded: blockage_migration::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_blockage_migration(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::CheckBlockage => {
let decoded: check_blockage::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_check_blockage(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::IssueInvite => {
let decoded: issue_invite::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_issue_invite(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::LevelUp => {
let decoded: level_up::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_level_up(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::Migration => {
let decoded: migration::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_migration(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::OpenInvite => {
let decoded: open_invite::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_open_invite(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::RedeemInvite => {
let decoded: redeem_invite::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_redeem_invite(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
RequestType::TrustPromotion => {
let decoded: trust_promotion::Request = bincode::deserialize(&request[1..]).unwrap();
let resp = lox_auth.handle_trust_promotion(decoded).unwrap();
bincode::serialize(&resp).unwrap()
},
}
}

29
src/request_type.rs Normal file
View File

@ -0,0 +1,29 @@
/*! Types of requests we might encounter. */
pub enum RequestType {
BlockageMigration,
CheckBlockage,
IssueInvite,
LevelUp,
Migration,
OpenInvite,
RedeemInvite,
TrustPromotion,
}
impl TryFrom<u8> for RequestType {
type Error = &'static str;
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
1 => Ok(RequestType::BlockageMigration),
2 => Ok(RequestType::CheckBlockage),
3 => Ok(RequestType::IssueInvite),
4 => Ok(RequestType::LevelUp),
5 => Ok(RequestType::Migration),
6 => Ok(RequestType::OpenInvite),
7 => Ok(RequestType::RedeemInvite),
8 => Ok(RequestType::TrustPromotion),
_ => Err("Byte given does not represent a valid request type."),
}
}
}