simple-web-app

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

auth.rs (805B)


      1 use argon2::{
      2     password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
      3     Argon2,
      4 };
      5 
      6 use crate::error::AppError;
      7 
      8 pub fn hash_password(password: &str) -> Result<String, AppError> {
      9     let salt = SaltString::generate(&mut OsRng);
     10     let argon2 = Argon2::default();
     11     let hash = argon2
     12         .hash_password(password.as_bytes(), &salt)
     13         .map_err(|e| AppError::Database(format!("Password hash error: {}", e)))?;
     14     Ok(hash.to_string())
     15 }
     16 
     17 pub fn verify_password(password: &str, hash: &str) -> Result<bool, AppError> {
     18     let parsed_hash = PasswordHash::new(hash)
     19         .map_err(|e| AppError::Database(format!("Invalid hash format: {}", e)))?;
     20     Ok(Argon2::default()
     21         .verify_password(password.as_bytes(), &parsed_hash)
     22         .is_ok())
     23 }