diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -60,6 +60,19 @@ impl User { User { name, hashed_password, id, tokovec: base_tokens, sessions: HashMap::new() } } + fn update_name(&mut self, new_name: String) { + self.name = new_name; + } + + fn update_password(&mut self, old_password: String, new_password: String) -> Result<(), String> { + if User::hash(&old_password) == self.hashed_password { + self.hashed_password = User::hash(&new_password); + return Ok(()); + } else { + return Err("Old Password is Incorrect".into()) + } + } + fn hash(t: &String) -> String { let hashed = Sha256::digest(&t); let hashed = base16ct::lower::encode_string(&hashed); @@ -189,6 +202,17 @@ impl DB { Err("User Not Found".into()) } + pub async fn update_user(&mut self, id: UID, session: &String, name: String, old_password: String, new_password: String) -> Result<(), String> { + self.get_user_authenticated(id, session).await?; + let user = self.get_mut_user(id).await?; + user.update_name(name); + user.update_password(old_password, new_password)?; + + self.save().await?; + + Ok(()) + } + pub async fn get_user_authenticated(&self, id: UID, session: &String) -> Result<&User, String> { match self.get_user(id) { Ok(u) => { |