Adding framework for salt & hashing passwords before creating admin users, still requires integration at this stage

This commit is contained in:
2025-03-10 23:20:56 -07:00
parent a7bae463a2
commit 503ba812f2
5 changed files with 62 additions and 2 deletions

View File

@@ -9,3 +9,4 @@ postgres = "0.19.9"
base64 = "0.22.1"
serde = { version = "1.0.215", features = ["derive"] }
serde_json = "1.0.133"
argon2 = "0.5.3"

View File

@@ -5,6 +5,7 @@ use clap::Parser;
use postgres::{Client, NoTls};
use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine as _};
use serde::Serialize;
use argon2::{Argon2, PasswordHasher, password_hash::Salt, PasswordHash};
const PASSWORD_LENGTH: usize = 64;
@@ -32,14 +33,24 @@ struct Config {
bubble: Admin
}
fn random_string(size: usize) -> String {
// Next we'll generate a bunch of random numbers
// Generates a URL safe string of random text of a given size
// Internally uses /dev/urandom to generate that string
let mut buffer = vec![0; size];
let mut f = std::fs::File::open("/dev/urandom").unwrap();
f.read_exact(&mut buffer).unwrap();
URL_SAFE_NO_PAD.encode(buffer)
}
fn salt_and_hash(password: &str) -> String {
let salt = random_string(8);
let salt: Salt = salt.as_str().try_into().unwrap();
let a2 = Argon2::default();
let hash = a2.hash_password(password.as_bytes(), salt).unwrap();
hash.to_string()
}
fn admin(username: &str, password_size: usize) -> Admin {
Admin {
username: username.to_string(),