forked from Chewing_Bever/rusty-bever
23 lines
695 B
Rust
23 lines
695 B
Rust
use crate::errors::AuthError;
|
|
use crate::models::User;
|
|
use crate::schema::users::dsl as users;
|
|
use argon2::verify_encoded;
|
|
use diesel::prelude::*;
|
|
use diesel::PgConnection;
|
|
|
|
pub fn verify_user(conn: &PgConnection, username: &str, password: &str) -> Result<User, AuthError> {
|
|
// TODO handle non-"NotFound" Diesel errors accordingely
|
|
let user = match users::users
|
|
.filter(users::username.eq(username))
|
|
.first::<User>(conn)
|
|
{
|
|
Err(_) => return Err(AuthError::UnknownUser),
|
|
Ok(user) => user,
|
|
};
|
|
|
|
match verify_encoded(user.password.as_str(), password.as_bytes()) {
|
|
Ok(true) => Ok(user),
|
|
_ => Err(AuthError::InvalidPassword),
|
|
}
|
|
}
|