diff options
| author | gennyble <gen@nyble.dev> | 2026-09-25 03:56:11 -0500 |
|---|---|---|
| committer | gennyble <gen@nyble.dev> | 2026-09-25 03:56:11 -0500 |
| commit | ba592de54cd3dce52eb2096dabbe748107f5db2b (patch) | |
| tree | 4a23377e9788630e09c669e9ed18aecd27673ee7 /knowing/src/password.rs | |
| parent | f4d8e8d03c1b80d5c59ee85631d5a78048892a32 (diff) | |
splorm auth
Diffstat (limited to 'knowing/src/password.rs')
| -rw-r--r-- | knowing/src/password.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/knowing/src/password.rs b/knowing/src/password.rs new file mode 100644 index 0000000..013a9f7 --- /dev/null +++ b/knowing/src/password.rs @@ -0,0 +1,35 @@ +use argon2::{Argon2, PasswordHasher, PasswordVerifier as ArgonPasswordVerifier}; +use somethings::auth::HashedPassword; + +use crate::Error; + +pub trait IntoHashedPassword { + fn hash_password(self) -> HashedPassword; +} + +impl IntoHashedPassword for String { + fn hash_password(self) -> HashedPassword { + let a2 = Argon2::default(); + let a2_hash = a2.hash_password(self.as_bytes()).unwrap(); + + HashedPassword::new(a2_hash.to_string()) + } +} + +pub trait PasswordVerifier: Sized { + fn get_password_hash(&self) -> &HashedPassword; + fn verify_password(&self, plain: String) -> Result<(), Error> { + let a2_phash = argon2::PasswordHash::new(&self.get_password_hash().to_string()) + .map_err(|_| Error::AuthenticationFailed)?; + + Argon2::default() + .verify_password(plain.as_bytes(), &a2_phash) + .map_err(|_| Error::AuthenticationFailed) + } +} + +impl PasswordVerifier for HashedPassword { + fn get_password_hash(&self) -> &HashedPassword { + self + } +} |
