Fixed Basic Serialization/Deserialization to json
This commit is contained in:
parent
ef1ceafffe
commit
572928a271
|
@ -1319,9 +1319,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.60"
|
version = "1.0.66"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
|
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
@ -1661,9 +1661,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.164"
|
version = "1.0.174"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
|
checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
@ -1679,9 +1679,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.164"
|
version = "1.0.174"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
|
checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1690,9 +1690,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.97"
|
version = "1.0.103"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a"
|
checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
|
@ -1833,9 +1833,9 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.18"
|
version = "2.0.27"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
|
checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -21,13 +21,13 @@ tokio = { version = "1", features = ["full", "macros", "signal"] }
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
serde = { version = "1.0", features = ["derive", "rc"] }
|
serde = { version = "1.0", features = ["derive", "rc"] }
|
||||||
serde_with = "3.0.0"
|
serde_with = "3.0.0"
|
||||||
serde_json = "1.0.87"
|
|
||||||
zkp = "0.8.0"
|
zkp = "0.8.0"
|
||||||
|
|
||||||
lox-library = { path = "../lox-library", version = "0.1.0"}
|
lox-library = { path = "../lox-library", version = "0.1.0"}
|
||||||
lox_utils = { path = "../lox-utils", version = "0.1.0"}
|
lox_utils = { path = "../lox-utils", version = "0.1.0"}
|
||||||
rdsys_backend = { path = "../rdsys-backend-api", version = "0.2"}
|
rdsys_backend = { path = "../rdsys-backend-api", version = "0.2"}
|
||||||
clap = { version = "4.3.17", features = ["derive"] }
|
clap = { version = "4.3.17", features = ["derive"] }
|
||||||
|
serde_json = "1.0.103"
|
||||||
|
|
||||||
[dependencies.chrono]
|
[dependencies.chrono]
|
||||||
version = "0.4.19"
|
version = "0.4.19"
|
||||||
|
|
|
@ -12,12 +12,14 @@ use lox_library::{BridgeAuth, BridgeDb};
|
||||||
|
|
||||||
use rdsys_backend::{proto::ResourceDiff, start_stream};
|
use rdsys_backend::{proto::ResourceDiff, start_stream};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
use std::env;
|
||||||
use std::{
|
use std::{
|
||||||
convert::Infallible,
|
convert::Infallible,
|
||||||
|
error::Error,
|
||||||
fs::File,
|
fs::File,
|
||||||
io::BufReader,
|
io::BufReader,
|
||||||
net::SocketAddr,
|
net::SocketAddr,
|
||||||
path::PathBuf,
|
path::{Path, PathBuf},
|
||||||
sync::{Arc, Mutex},
|
sync::{Arc, Mutex},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
@ -44,11 +46,11 @@ async fn shutdown_signal() {
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(author, version, about, long_about = None)]
|
#[command(author, version, about, long_about = None)]
|
||||||
struct Args {
|
struct Args {
|
||||||
/// Name of the person to greet
|
/// Name/path of the configuration file
|
||||||
#[arg(short, long, default_value = "config.json")]
|
#[arg(short, long, default_value = "config.json")]
|
||||||
config: PathBuf,
|
config: PathBuf,
|
||||||
|
|
||||||
/// Number of times to greet
|
/// Optional name/path of the db file
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
db: Option<PathBuf>,
|
db: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
@ -120,17 +122,36 @@ async fn create_context_manager(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn read_context_from_file<P: AsRef<Path>>(
|
||||||
|
path: P,
|
||||||
|
) -> Result<lox_context::LoxServerContext, Box<dyn Error>> {
|
||||||
|
let file = File::open(path)?;
|
||||||
|
let reader = BufReader::new(file);
|
||||||
|
let context = serde_json::from_reader(reader)?;
|
||||||
|
Ok(context)
|
||||||
|
}
|
||||||
|
|
||||||
// Context Manager handles the Lox BridgeDB and Bridge Authority, ensuring
|
// Context Manager handles the Lox BridgeDB and Bridge Authority, ensuring
|
||||||
// that the DB can be updated from the rdsys stream and client requests
|
// that the DB can be updated from the rdsys stream and client requests
|
||||||
// can be responded to with an updated BridgeDB state
|
// can be responded to with an updated BridgeDB state
|
||||||
async fn context_manager(db_path: Option<PathBuf>, mut context_rx: mpsc::Receiver<Command>) {
|
async fn context_manager(db_path: Option<PathBuf>, mut context_rx: mpsc::Receiver<Command>) {
|
||||||
let context: lox_context::LoxServerContext;
|
let context: lox_context::LoxServerContext;
|
||||||
if let Some(existing_db) = db_path.as_deref() {
|
if let Some(existing_db) = db_path.as_deref() {
|
||||||
let file = File::open(existing_db).expect("Should have been able to read config.json file");
|
context = read_context_from_file(existing_db).unwrap();
|
||||||
let reader = BufReader::new(file);
|
} else {
|
||||||
// Read the JSON contents of the file as a ResourceIn
|
let current_path = env::current_dir().expect("Unable to access current dir");
|
||||||
context =
|
if let Some(last_modified_file) = std::fs::read_dir(current_path)
|
||||||
serde_json::from_reader(reader).expect("Reading SerializableContext from JSON failed.");
|
.expect("Couldn't read local directory")
|
||||||
|
.flatten() // Remove failed
|
||||||
|
.filter(|f| {
|
||||||
|
f.metadata().unwrap().is_file()
|
||||||
|
&& (f.file_name().into_string().unwrap().contains("_lox.json"))
|
||||||
|
}) // Filter out directories (only consider files)
|
||||||
|
.max_by_key(|x| x.metadata().unwrap().modified().unwrap())
|
||||||
|
// Get the most recently modified file
|
||||||
|
{
|
||||||
|
println!("Reading from file {:?}", last_modified_file);
|
||||||
|
context = read_context_from_file(&last_modified_file.path()).unwrap();
|
||||||
} else {
|
} else {
|
||||||
let new_db = BridgeDb::new();
|
let new_db = BridgeDb::new();
|
||||||
let new_ba = BridgeAuth::new(new_db.pubkey);
|
let new_ba = BridgeAuth::new(new_db.pubkey);
|
||||||
|
@ -141,6 +162,7 @@ async fn context_manager(db_path: Option<PathBuf>, mut context_rx: mpsc::Receive
|
||||||
to_be_replaced_bridges: Arc::new(Mutex::new(Vec::new())),
|
to_be_replaced_bridges: Arc::new(Mutex::new(Vec::new())),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while let Some(cmd) = context_rx.recv().await {
|
while let Some(cmd) = context_rx.recv().await {
|
||||||
use Command::*;
|
use Command::*;
|
||||||
|
@ -287,7 +309,7 @@ async fn context_manager(db_path: Option<PathBuf>, mut context_rx: mpsc::Receive
|
||||||
*/
|
*/
|
||||||
context.allocate_leftover_bridges();
|
context.allocate_leftover_bridges();
|
||||||
context.encrypt_table();
|
context.encrypt_table();
|
||||||
let mut date = Local::now().format("%Y-%m-%d").to_string();
|
let mut date = Local::now().format("%Y-%m-%d_%H:%M:%S").to_string();
|
||||||
let path = "_lox.json";
|
let path = "_lox.json";
|
||||||
date.push_str(path);
|
date.push_str(path);
|
||||||
let file = File::create(&date).expect("Unable to write to file!");
|
let file = File::create(&date).expect("Unable to write to file!");
|
||||||
|
|
|
@ -17,7 +17,7 @@ bincode = "1"
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
||||||
rand = "0.7"
|
rand = "0.7"
|
||||||
serde = "1.0.164"
|
serde = "1.0.164"
|
||||||
serde_with = "3.0.0"
|
serde_with = {version = "3.0.0", features = ["json"]}
|
||||||
sha2 = "0.9"
|
sha2 = "0.9"
|
||||||
statistical = "1.0.0"
|
statistical = "1.0.0"
|
||||||
lazy_static = "1"
|
lazy_static = "1"
|
||||||
|
|
|
@ -237,7 +237,7 @@ struct K {
|
||||||
/// the encrypted buckets. The encrypted buckets will be exposed to the
|
/// the encrypted buckets. The encrypted buckets will be exposed to the
|
||||||
/// users of the system, and each user credential will contain the
|
/// users of the system, and each user credential will contain the
|
||||||
/// decryption key for one bucket.
|
/// decryption key for one bucket.
|
||||||
//#[serde_as]
|
#[serde_as]
|
||||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||||
pub struct BridgeTable {
|
pub struct BridgeTable {
|
||||||
// All structures in the bridgetable are indexed by counter
|
// All structures in the bridgetable are indexed by counter
|
||||||
|
@ -246,6 +246,7 @@ pub struct BridgeTable {
|
||||||
pub buckets: HashMap<u32, [BridgeLine; MAX_BRIDGES_PER_BUCKET]>,
|
pub buckets: HashMap<u32, [BridgeLine; MAX_BRIDGES_PER_BUCKET]>,
|
||||||
pub encbuckets: HashMap<u32, EncryptedBucket>,
|
pub encbuckets: HashMap<u32, EncryptedBucket>,
|
||||||
/// Individual bridges that are reachable
|
/// Individual bridges that are reachable
|
||||||
|
#[serde_as(as = "HashMap<serde_with::json::JsonString, _>")]
|
||||||
pub reachable: HashMap<BridgeLine, Vec<(u32, usize)>>,
|
pub reachable: HashMap<BridgeLine, Vec<(u32, usize)>>,
|
||||||
/// bucket ids of "hot spare" buckets. These buckets are not handed
|
/// bucket ids of "hot spare" buckets. These buckets are not handed
|
||||||
/// to users, nor do they have any Migration credentials pointing to
|
/// to users, nor do they have any Migration credentials pointing to
|
||||||
|
|
Loading…
Reference in New Issue