All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 13m48s
32 lines
886 B
Rust
32 lines
886 B
Rust
use argon2::{
|
|
Argon2, PasswordHash, PasswordHasher, PasswordVerifier,
|
|
password_hash::{SaltString, rand_core::OsRng},
|
|
};
|
|
|
|
use crate::errors::ApiError;
|
|
|
|
pub fn hash(text: &str) -> Result<String, ApiError> {
|
|
let salt = SaltString::generate(&mut OsRng);
|
|
let argon2 = Argon2::default();
|
|
|
|
let password_hash = argon2
|
|
.hash_password(text.as_bytes(), &salt)
|
|
.map_err(|e| {
|
|
tracing::error!("Hash error: {}", e);
|
|
ApiError::Internal
|
|
})?;
|
|
|
|
Ok(password_hash.to_string())
|
|
}
|
|
|
|
pub fn verify(text: &str, hash: &str) -> Result<bool, ApiError> {
|
|
let parsed_hash = PasswordHash::new(hash)
|
|
.map_err(|e| {
|
|
tracing::error!("Hash parsing error: {}", e);
|
|
ApiError::Internal
|
|
})?;
|
|
|
|
let argon2 = Argon2::default();
|
|
Ok(argon2.verify_password(text.as_bytes(), &parsed_hash).is_ok())
|
|
}
|