diff options
-rw-r--r-- | src/db.rs | 51 |
1 files changed, 29 insertions, 22 deletions
@@ -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<Token>, } 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<Config, ()> { @@ -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<Token>, } 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<Token>) -> 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<User>, #[serde(skip_serializing)] - #[serde(default = "dbsave_default")] - dbsave: PathBuf, + #[serde(default = "config_default")] + config: Config, registration_keys: Vec<String>, } 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::<std::fs::File, DB>(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 { |