From 22072ec07daabaa46352c764d7b62d3cf32251cc Mon Sep 17 00:00:00 2001 From: curly Date: Wed, 17 Jul 2024 19:57:50 -0600 Subject: tokens in config --- src/db.rs | 51 +++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/db.rs b/src/db.rs index 6e0399a..d4a24d7 100644 --- a/src/db.rs +++ b/src/db.rs @@ -8,15 +8,27 @@ use std::{fs::File, io::Write}; use crate::uid::{self, UID}; -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Clone)] pub struct Config { dbsave: PathBuf, address: IpAddr, port: u16, + base_tokens: Vec, } impl Config { pub fn new() -> Config { - Config { dbsave: "db.json".into(), address: IpAddr::V4(Ipv4Addr::new(0,0,0,0)), port: 9050} + Config { + dbsave: "db.json".into(), + address: IpAddr::V4(Ipv4Addr::new(0,0,0,0)), + port: 9050, + base_tokens: vec![ + Token::new(Color::White, 5), + Token::new(Color::Red, 5), + Token::new(Color::Green, 5), + Token::new(Color::Blue, 5), + Token::new(Color::Yellow, 5), + ], + } } pub fn load(path: PathBuf) -> Result { @@ -29,7 +41,10 @@ impl Config { }, Err(n) => match n.kind() { ErrorKind::PermissionDenied => panic!("Could not open config file"), - _ => Err(()) + _ => { + Config::genconfig(); + Err(()) + } } } } @@ -37,7 +52,7 @@ impl Config { pub fn genconfig() { let f = File::create("config.json").unwrap(); let config = Config::new(); - serde_json::to_writer(f, &config).unwrap(); + serde_json::to_writer_pretty(f, &config).unwrap(); } pub fn port(&self) -> u16 { @@ -83,15 +98,7 @@ pub struct User { tokovec: Vec, } impl User { - pub fn new(name: String, password: String, id: UID, admin: bool) -> User { - let base_tokens = vec![ - Token::new(Color::White, 2), - Token::new(Color::Red, 2), - Token::new(Color::Blue, 2), - Token::new(Color::Green, 2), - Token::new(Color::Yellow, 2), - ]; - + pub fn new(name: String, password: String, id: UID, admin: bool, base_tokens: Vec) -> User { let hashed_password = User::hash(&password); User { name, is_admin: admin, hashed_password, id, tokovec: base_tokens, sessions: HashMap::new() } @@ -193,8 +200,8 @@ impl User { } } -fn dbsave_default() -> PathBuf { - "".into() +fn config_default() -> Config { + Config::new() } #[derive(Serialize, Deserialize)] @@ -202,17 +209,17 @@ pub struct DB { pub uid_generator: uid::Generator, users: Vec, #[serde(skip_serializing)] - #[serde(default = "dbsave_default")] - dbsave: PathBuf, + #[serde(default = "config_default")] + config: Config, registration_keys: Vec, } impl DB { async fn save(&self) -> Result<(), String> { - let mut f = match File::create(&self.dbsave) { + let mut f = match File::create(&self.config.dbsave) { Ok(n) => n, Err(n) => { match n.kind() { - std::io::ErrorKind::PermissionDenied => panic!("{:?}: Permission Denied", &self.dbsave), + std::io::ErrorKind::PermissionDenied => panic!("{:?}: Permission Denied", &self.config.dbsave), n => return Err(n.to_string()), } }, @@ -231,7 +238,7 @@ impl DB { Ok(n) => { match serde_json::from_reader::(n) { Ok(mut n) => { - n.dbsave = c.dbsave.clone(); + n.config = c.clone(); n }, Err(n) => panic!("{}", n), @@ -244,7 +251,7 @@ impl DB { } } pub fn new(config: &Config) -> Self { - DB { uid_generator: uid::Generator::new(), dbsave: config.dbsave.clone(), users: vec![], registration_keys: vec!["ADMIN".into()] } + DB { uid_generator: uid::Generator::new(), config: config.clone(), users: vec![], registration_keys: vec!["ADMIN".into()] } } pub fn get_user(&self, id: UID) -> Result<&User, String> { @@ -382,7 +389,7 @@ impl DB { if key == "ADMIN" { is_admin = true; } - let user = User::new(name, password, id, is_admin); + let user = User::new(name, password, id, is_admin, self.config.base_tokens.clone()); self.users.push(user.clone()); match self.save().await { -- cgit v1.2.3