katbin/src/core/users/service.rs
ATechnoHazard d1625ce721
users: Add routes and methods to activate user
Signed-off-by: ATechnoHazard <amolele@gmail.com>
2020-07-01 23:53:15 +05:30

43 lines
1.3 KiB
Rust

use anyhow::Result;
use bcrypt::{hash, DEFAULT_COST};
use diesel::pg::PgConnection;
use diesel::result::Error;
use crate::core::users::entity::User;
use super::postgres;
pub fn create_user(user: &mut User, conn: &PgConnection) -> Result<usize> {
let hashed_pass = hash(user.password.as_ref().unwrap().as_bytes(), DEFAULT_COST)?;
user.password = Some(hashed_pass);
postgres::create_user(user, conn)
}
pub fn create_or_fetch_user(id: String, conn: &PgConnection) -> Result<User> {
let user = match postgres::find_user(id.clone(), conn) {
Ok(user) => user,
Err(err) => match err.downcast_ref::<Error>() {
Some(Error::NotFound) => {
let new_user = User {
id: id.clone(),
username: None,
password: None,
activated: Some(false),
};
postgres::create_user(&new_user, conn)?;
new_user
}
_ => return Err(err),
},
};
Ok(user)
}
pub fn activate_user(user: &mut User, conn: &PgConnection) -> Result<User> {
let hashed_pass = hash(user.password.as_ref().unwrap().as_bytes(), DEFAULT_COST)?;
user.password = Some(hashed_pass);
let mut activated_user = postgres::update_user(user, conn)?;
activated_user.password = None;
Ok(activated_user)
}