From 19979216185894d99a108adcc8e3d356a5979dd4 Mon Sep 17 00:00:00 2001 From: curly Date: Wed, 17 Jul 2024 19:25:00 -0600 Subject: config --- src/db.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 10 deletions(-) (limited to 'src/db.rs') diff --git a/src/db.rs b/src/db.rs index 2e81393..6e0399a 100644 --- a/src/db.rs +++ b/src/db.rs @@ -1,6 +1,8 @@ use serde::{Serialize, Deserialize}; use sha2::{Digest, Sha256}; use std::collections::HashMap; +use std::io::ErrorKind; +use std::net::{IpAddr, Ipv4Addr}; use std::path::PathBuf; use std::{fs::File, io::Write}; @@ -9,11 +11,40 @@ use crate::uid::{self, UID}; #[derive(Serialize, Deserialize)] pub struct Config { dbsave: PathBuf, - realm: String, + address: IpAddr, + port: u16, } impl Config { pub fn new() -> Config { - Config { dbsave: "db.json".into(), realm: "localhost".into() } + Config { dbsave: "db.json".into(), address: IpAddr::V4(Ipv4Addr::new(0,0,0,0)), port: 9050} + } + + pub fn load(path: PathBuf) -> Result { + match File::open(path) { + Ok(n) => { + match serde_json::from_reader(n) { + Ok(n) => Ok(n), + Err(_) => Err(()) + } + }, + Err(n) => match n.kind() { + ErrorKind::PermissionDenied => panic!("Could not open config file"), + _ => Err(()) + } + } + } + + pub fn genconfig() { + let f = File::create("config.json").unwrap(); + let config = Config::new(); + serde_json::to_writer(f, &config).unwrap(); + } + + pub fn port(&self) -> u16 { + self.port + } + pub fn address(&self) -> IpAddr { + self.address } } @@ -162,20 +193,26 @@ impl User { } } +fn dbsave_default() -> PathBuf { + "".into() +} + #[derive(Serialize, Deserialize)] pub struct DB { pub uid_generator: uid::Generator, users: Vec, - config: Config, + #[serde(skip_serializing)] + #[serde(default = "dbsave_default")] + dbsave: PathBuf, registration_keys: Vec, } impl DB { async fn save(&self) -> Result<(), String> { - let mut f = match File::create(&self.config.dbsave) { + let mut f = match File::create(&self.dbsave) { Ok(n) => n, Err(n) => { match n.kind() { - std::io::ErrorKind::PermissionDenied => panic!("{:?}: Permission Denied", &self.config.dbsave), + std::io::ErrorKind::PermissionDenied => panic!("{:?}: Permission Denied", &self.dbsave), n => return Err(n.to_string()), } }, @@ -189,11 +226,14 @@ impl DB { Err(n) => return Err(n.to_string()), }; } - pub fn load(c: Config) -> Self { + pub fn load(c: &Config) -> Self { match File::open(&c.dbsave) { Ok(n) => { - match serde_json::from_reader(n) { - Ok(n) => n, + match serde_json::from_reader::(n) { + Ok(mut n) => { + n.dbsave = c.dbsave.clone(); + n + }, Err(n) => panic!("{}", n), } }, @@ -203,8 +243,8 @@ impl DB { }, } } - pub fn new(config: Config) -> Self { - DB { uid_generator: uid::Generator::new(), users: vec![], config, registration_keys: vec!["ADMIN".into()] } + pub fn new(config: &Config) -> Self { + DB { uid_generator: uid::Generator::new(), dbsave: config.dbsave.clone(), users: vec![], registration_keys: vec!["ADMIN".into()] } } pub fn get_user(&self, id: UID) -> Result<&User, String> { -- cgit v1.2.3