Made verify_master_pass compute the hash in a blocking thread
This commit is contained in:
parent
83aa2c90b1
commit
e129934aac
@ -3,6 +3,7 @@
|
|||||||
use rand::{rngs::OsRng, RngCore};
|
use rand::{rngs::OsRng, RngCore};
|
||||||
use scrypt::{scrypt, Params};
|
use scrypt::{scrypt, Params};
|
||||||
use sea_orm::{entity::prelude::*, ActiveValue::Set, QuerySelect};
|
use sea_orm::{entity::prelude::*, ActiveValue::Set, QuerySelect};
|
||||||
|
use tokio::task::spawn_blocking;
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
|
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
|
||||||
#[sea_orm(table_name = "master_pass")]
|
#[sea_orm(table_name = "master_pass")]
|
||||||
@ -43,7 +44,7 @@ impl ActiveModel {
|
|||||||
impl Entity {
|
impl Entity {
|
||||||
pub async fn verify_master_pass(
|
pub async fn verify_master_pass(
|
||||||
user_id: u64,
|
user_id: u64,
|
||||||
master_pass: &str,
|
master_pass: String,
|
||||||
db: &DatabaseConnection,
|
db: &DatabaseConnection,
|
||||||
) -> crate::Result<Option<bool>> {
|
) -> crate::Result<Option<bool>> {
|
||||||
let model = match Self::find_by_id(user_id).one(db).await {
|
let model = match Self::find_by_id(user_id).one(db).await {
|
||||||
@ -51,8 +52,10 @@ impl Entity {
|
|||||||
Ok(None) => return Ok(None),
|
Ok(None) => return Ok(None),
|
||||||
Err(err) => return Err(err.into()),
|
Err(err) => return Err(err.into()),
|
||||||
};
|
};
|
||||||
let password_hash = hash_password(master_pass.as_ref(), &model.salt)?;
|
let (hash, salt) = (model.password_hash, model.salt);
|
||||||
Ok(Some(password_hash == model.password_hash))
|
let password_hash =
|
||||||
|
spawn_blocking(move || hash_password(master_pass.as_bytes(), &salt)).await??;
|
||||||
|
Ok(Some(password_hash == hash))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if the master password for the user exists
|
/// Checks if the master password for the user exists
|
||||||
|
@ -12,7 +12,8 @@ pub async fn check_master_pass<'a>(
|
|||||||
db: &'a DatabaseConnection,
|
db: &'a DatabaseConnection,
|
||||||
master_pass: &'a str,
|
master_pass: &'a str,
|
||||||
) -> crate::Result<bool> {
|
) -> crate::Result<bool> {
|
||||||
let result = MasterPass::verify_master_pass(msg.from().unwrap().id.0, master_pass, db).await;
|
let result =
|
||||||
|
MasterPass::verify_master_pass(msg.from().unwrap().id.0, master_pass.to_owned(), db).await;
|
||||||
match result {
|
match result {
|
||||||
Ok(Some(true)) => Ok(true),
|
Ok(Some(true)) => Ok(true),
|
||||||
Ok(Some(false)) => {
|
Ok(Some(false)) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user