user-service 0.4.1

A user management microservice.
Documentation
use argon2::Argon2;
use password_hash::{PasswordHash, PasswordVerifier, Salt};
use rand::{distributions::Alphanumeric, Rng};

fn get_salt() -> String {
    rand::thread_rng()
        .sample_iter(&Alphanumeric)
        .take(Salt::RECOMMENDED_LENGTH)
        .map(char::from)
        .collect()
}

pub fn generate(password: &str) -> String {
    PasswordHash::generate(Argon2::default(), password, &get_salt())
        .unwrap()
        .serialize()
        .as_str()
        .to_owned()
}

pub fn validate(hash: &str, password: &str) -> bool {
    let algorithms: &[&dyn PasswordVerifier] = &[&Argon2::default()];

    PasswordHash::new(hash)
        .unwrap()
        .verify_password(algorithms, password)
        .is_ok()
}