47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
use argon2::password_hash::SaltString;
|
|
use argon2::PasswordHasher;
|
|
use argon2::password_hash::rand_core::OsRng;
|
|
use log::{error, info};
|
|
use rusqlite::{Connection, params};
|
|
|
|
const CREATE_USER: &str = "
|
|
INSERT INTO users (name, pass) VALUES (?1, ?2)
|
|
";
|
|
|
|
const SELECT_USER: &str ="
|
|
SELECT * FROM users WHERE name = ?1
|
|
";
|
|
|
|
struct User {
|
|
id: u64,
|
|
name: String,
|
|
pass: String
|
|
}
|
|
|
|
pub fn create(connection: &Connection, name: &str, pass: &str) -> Result<(), ()> {
|
|
let argon2 = argon2::Argon2::default();
|
|
let salt = SaltString::generate(&mut OsRng);
|
|
|
|
let pass = match argon2.hash_password(pass.as_bytes(), &salt) {
|
|
Ok(pass) => pass.to_string(),
|
|
Err(e) => {
|
|
error!("{e:?}");
|
|
return Err(());
|
|
},
|
|
};
|
|
info!("Hashed password for user {}", name);
|
|
|
|
match connection.execute(CREATE_USER, params![name, pass]) {
|
|
Ok(_) => return Ok(()),
|
|
Err(e) => {
|
|
error!("{e:?}");
|
|
return Err(())
|
|
},
|
|
}
|
|
}
|
|
|
|
pub fn verify(connection: &Connection, name: &str, pass: &str) {
|
|
// match connection.query_one(SELECT_USER, params![name], |row| {})) {
|
|
|
|
// }
|
|
} |