daoyi_cloud_common/utils/
mod.rs1use argon2::password_hash::rand_core::OsRng;
2use argon2::{Argon2, PasswordHash, password_hash::SaltString};
3use rand::Rng;
4use rand::distr::Alphanumeric;
5use std::iter;
6
7#[allow(dead_code)]
8#[inline]
9pub fn random_string(limit: usize) -> String {
10 iter::repeat(())
11 .map(|_| rand::rng().sample(Alphanumeric))
12 .map(char::from)
13 .take(limit)
14 .collect()
15}
16
17pub fn verify_password(password: &str, password_hash: &str) -> anyhow::Result<()> {
18 let hash = PasswordHash::new(&password_hash)
19 .map_err(|e| anyhow::anyhow!("invalid password hash: {}", e))?;
20 let result = hash.verify_password(&[&Argon2::default()], password);
21 match result {
22 Ok(_) => Ok(()),
23 Err(_) => Err(anyhow::anyhow!("invalid password")),
24 }
25}
26
27pub fn hash_password(password: &str) -> anyhow::Result<String> {
28 let salt = SaltString::generate(&mut OsRng);
29 Ok(PasswordHash::generate(Argon2::default(), password, &salt)
30 .map_err(|e| anyhow::anyhow!("failed to generate password hash: {}", e))?
31 .to_string())
32}