|
1 | 1 | use crate::{ |
2 | 2 | config::db::Connection, |
3 | 3 | constants, |
4 | | - models::{ |
5 | | - login_history::LoginHistory, |
6 | | - user_token::UserToken, |
7 | | - }, |
| 4 | + models::{login_history::LoginHistory, user_token::UserToken}, |
8 | 5 | schema::users::{self, dsl::*}, |
9 | 6 | }; |
10 | 7 | use bcrypt::{hash, verify, DEFAULT_COST}; |
@@ -49,34 +46,37 @@ impl User { |
49 | 46 | password: hashed_pwd, |
50 | 47 | ..user |
51 | 48 | }; |
52 | | - diesel::insert_into(users) |
53 | | - .values(&user) |
54 | | - .execute(conn); |
| 49 | + diesel::insert_into(users).values(&user).execute(conn); |
55 | 50 | Ok(constants::MESSAGE_SIGNUP_SUCCESS.to_string()) |
56 | 51 | } else { |
57 | 52 | Err(format!("User '{}' is already registered", &user.username)) |
58 | 53 | } |
59 | 54 | } |
60 | 55 |
|
61 | 56 | pub fn login(login: LoginDTO, conn: &Connection) -> Option<LoginInfoDTO> { |
62 | | - let user_to_verify = users |
| 57 | + if let Ok(user_to_verify) = users |
63 | 58 | .filter(username.eq(&login.username_or_email)) |
64 | 59 | .or_filter(email.eq(&login.username_or_email)) |
65 | 60 | .get_result::<User>(conn) |
66 | | - .unwrap(); |
67 | | - if !user_to_verify.password.is_empty() |
68 | | - && verify(&login.password, &user_to_verify.password).unwrap() |
69 | 61 | { |
70 | | - if let Some(login_history) = LoginHistory::create(&user_to_verify.username, conn) { |
71 | | - if LoginHistory::save_login_history(login_history, conn).is_err() { |
72 | | - return None; |
73 | | - } |
74 | | - let login_session_str = User::generate_login_session(); |
75 | | - if User::update_login_session_to_db(&user_to_verify.username, &login_session_str, conn) { |
76 | | - return Some(LoginInfoDTO { |
77 | | - username: user_to_verify.username, |
78 | | - login_session: login_session_str, |
79 | | - }); |
| 62 | + if !user_to_verify.password.is_empty() |
| 63 | + && verify(&login.password, &user_to_verify.password).unwrap() |
| 64 | + { |
| 65 | + if let Some(login_history) = LoginHistory::create(&user_to_verify.username, conn) { |
| 66 | + if LoginHistory::save_login_history(login_history, conn).is_err() { |
| 67 | + return None; |
| 68 | + } |
| 69 | + let login_session_str = User::generate_login_session(); |
| 70 | + if User::update_login_session_to_db( |
| 71 | + &user_to_verify.username, |
| 72 | + &login_session_str, |
| 73 | + conn, |
| 74 | + ) { |
| 75 | + return Some(LoginInfoDTO { |
| 76 | + username: user_to_verify.username, |
| 77 | + login_session: login_session_str, |
| 78 | + }); |
| 79 | + } |
80 | 80 | } |
81 | 81 | } |
82 | 82 | } |
@@ -106,7 +106,11 @@ impl User { |
106 | 106 | Uuid::new_v4().to_simple().to_string() |
107 | 107 | } |
108 | 108 |
|
109 | | - pub fn update_login_session_to_db(un: &str, login_session_str: &str, conn: &Connection) -> bool { |
| 109 | + pub fn update_login_session_to_db( |
| 110 | + un: &str, |
| 111 | + login_session_str: &str, |
| 112 | + conn: &Connection, |
| 113 | + ) -> bool { |
110 | 114 | if let Ok(user) = User::find_user_by_username(un, conn) { |
111 | 115 | diesel::update(users.find(user.id)) |
112 | 116 | .set(login_session.eq(login_session_str.to_string())) |
|
0 commit comments