|
|
@ -1,5 +1,4 @@ |
|
|
|
use diesel::prelude::*;
|
|
|
|
use diesel::sqlite::Sqlite;
|
|
|
|
|
|
|
|
use crate::errors;
|
|
|
|
use crate::models;
|
|
|
@ -25,7 +24,7 @@ pub fn _find_user_by_name( |
|
|
|
user_name: String,
|
|
|
|
conn: &SqliteConnection,
|
|
|
|
) -> Result<Option<models::UserDTO>, errors::DomainError> {
|
|
|
|
let maybe_user = _get_user_by_name(user_name)
|
|
|
|
let maybe_user = query::_get_user_by_name(&user_name)
|
|
|
|
.first::<models::UserDTO>(conn)
|
|
|
|
.optional();
|
|
|
|
|
|
|
@ -51,35 +50,20 @@ pub fn insert_new_user( |
|
|
|
// modules inside a function's scope (rather than the normal module's scope)
|
|
|
|
// to prevent import collisions and namespace pollution.
|
|
|
|
use crate::schema::users::dsl::*;
|
|
|
|
|
|
|
|
// let new_user = models::User {
|
|
|
|
// id: Uuid::new_v4().to_string(),
|
|
|
|
// name: nu.name.to_string(),
|
|
|
|
// };
|
|
|
|
|
|
|
|
// let x = users.load::<models::User>(conn).optional();
|
|
|
|
// let target = users.find("4");
|
|
|
|
// let test_user = models::User {
|
|
|
|
// id: "5".to_owned(),
|
|
|
|
// name: "who".to_owned(),
|
|
|
|
// };
|
|
|
|
// let update_result = diesel::update(target).set(&test_user).execute(conn);
|
|
|
|
|
|
|
|
// let mut nu2 = nu.clone();
|
|
|
|
let mut nu2 = Rc::make_mut(&mut nu);
|
|
|
|
nu2.password = hash(nu2.password.clone(), DEFAULT_COST)?;
|
|
|
|
nu2.password = hash(&nu2.password, DEFAULT_COST)?;
|
|
|
|
|
|
|
|
diesel::insert_into(users)
|
|
|
|
.values(nu.as_ref())
|
|
|
|
.execute(conn)?;
|
|
|
|
let user =
|
|
|
|
_get_user_by_name(nu.name.clone()).first::<models::UserDTO>(conn)?;
|
|
|
|
query::_get_user_by_name(&nu.name).first::<models::UserDTO>(conn)?;
|
|
|
|
Ok(user)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn verify_password(
|
|
|
|
user_name: String,
|
|
|
|
given_password: String,
|
|
|
|
pub fn verify_password<'a>(
|
|
|
|
user_name: &'a String,
|
|
|
|
given_password: &'a String,
|
|
|
|
conn: &SqliteConnection,
|
|
|
|
) -> Result<bool, errors::DomainError> {
|
|
|
|
use crate::schema::users::dsl::*;
|
|
|
@ -87,18 +71,25 @@ pub fn verify_password( |
|
|
|
.select(password)
|
|
|
|
.filter(name.eq(user_name))
|
|
|
|
.first::<String>(conn)?;
|
|
|
|
Ok(verify(given_password.as_str(), password_hash.as_str())?)
|
|
|
|
Ok(verify(given_password, password_hash.as_str())?)
|
|
|
|
}
|
|
|
|
fn _get_user_by_name(
|
|
|
|
user_name: String,
|
|
|
|
) -> crate::schema::users::BoxedQuery<
|
|
|
|
'static,
|
|
|
|
Sqlite,
|
|
|
|
(diesel::sql_types::Text, diesel::sql_types::Timestamp),
|
|
|
|
> {
|
|
|
|
use crate::schema::users::dsl::*;
|
|
|
|
users
|
|
|
|
.select((name, created_at))
|
|
|
|
.filter(name.eq(user_name))
|
|
|
|
.into_boxed()
|
|
|
|
|
|
|
|
mod query {
|
|
|
|
use diesel::prelude::*;
|
|
|
|
use diesel::sql_types::Text;
|
|
|
|
use diesel::sql_types::Timestamp;
|
|
|
|
use diesel::sqlite::Sqlite;
|
|
|
|
|
|
|
|
/// <'a, B, T> where a = lifetime, B = Backend, T = SQL data types
|
|
|
|
type Query<'a, B, T> = crate::schema::users::BoxedQuery<'a, B, T>;
|
|
|
|
|
|
|
|
pub fn _get_user_by_name<'a>(
|
|
|
|
user_name: &'a String,
|
|
|
|
) -> Query<'a, Sqlite, (Text, Timestamp)> {
|
|
|
|
use crate::schema::users::dsl::*;
|
|
|
|
users
|
|
|
|
.select((name, created_at))
|
|
|
|
.filter(name.eq(user_name))
|
|
|
|
.into_boxed()
|
|
|
|
}
|
|
|
|
}
|