dialtone_sqlx 0.1.0

Dialtone SQLx Back-End
Documentation
use crate::db::user_principal::check_bcrypt;
use crate::logic::user::auth::bcrypted_pw;
use anyhow::anyhow;
use sqlx::types::chrono::{DateTime, Utc};
use sqlx::PgPool;

pub async fn authn_user(
    pool: &PgPool,
    acct: &str,
    password: &str,
    login_from: &str,
    login_at: DateTime<Utc>,
) -> anyhow::Result<bool> {
    let acct = acct.to_lowercase();
    let bcrypt_password = bcrypted_pw(&acct, password)?;
    let login_data =
        check_bcrypt::check_bcrypt(pool, &acct, &bcrypt_password, login_from, login_at).await?;
    if let Some(last_login) = login_data {
        let retval = last_login
            .first()
            .ok_or_else(|| anyhow!("no login data. something went way wrong"))?
            .success;
        Ok(retval)
    } else {
        Ok(false)
    }
}