use UserToken in an existing flow

This commit is contained in:
Brandon Thomas committed 2022-12-12 22:44:04 -05:00
1 parent b1d5244620
commit b9e2c87025
5 files changed
+34 -7

No files matched your search

@@ -7,7 +7,12 @@ pub async fn lookup_user_for_login_by_email(email: &str, pool: &MySqlPool) -> An
let record = sqlx::query_as!(
UserRecordForLogin,
r#"
SELECT token, username, email_address, password_hash, is_banned
SELECT
token as `token: tokens::users::user::UserToken`,
username,
email_address,
password_hash,
is_banned
FROM users
WHERE email_address = ?
LIMIT 1
@@ -8,7 +8,12 @@ pub async fn lookup_user_for_login_by_username(username: &str, pool: &MySqlPool)
let record = sqlx::query_as!(
UserRecordForLogin,
r#"
SELECT token, username, email_address, password_hash, is_banned
SELECT
token as `token: tokens::users::user::UserToken`,
username,
email_address,
password_hash,
is_banned
FROM users
WHERE username = ?
LIMIT 1
@@ -1,7 +1,9 @@
use tokens::users::user::UserToken;
/// Shared result type for user lookups for login (via email or username)
#[derive(Debug)]
pub struct UserRecordForLogin {
pub token: String,
pub token: UserToken,
pub username: String,
pub email_address: String,
pub password_hash: Vec<u8>,
+16 -1
View File
@@ -3,12 +3,27 @@ use serde::{Deserializer, Serializer};
use sqlx_core::database::{Database, HasValueRef};
use sqlx_core::decode::Decode;
use std::error::Error;
use std::fmt::{Debug, Display, Formatter};
#[derive(Clone, PartialEq, Eq, Debug, sqlx::Type)]
#[derive(Clone, PartialEq, Eq, sqlx::Type)]
pub struct UserToken {
pub value: String,
}
// TODO: Macros should implement all of the following:
impl Display for UserToken {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.value)
}
}
impl Debug for UserToken {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.value)
}
}
impl serde::Serialize for UserToken {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(&self.value)
@@ -137,7 +137,7 @@ pub async fn login_handler(
let ip_address = get_request_ip(&http_request);
let create_session_result =
create_user_session(&user.token, &ip_address, &mysql_pool).await;
create_user_session(&user.token.value, &ip_address, &mysql_pool).await;
let session_token = match create_session_result {
Ok(token) => token,
@@ -147,9 +147,9 @@ pub async fn login_handler(
}
};
info!("login session created");
info!("login session created for user: {}", &user.token);
let session_cookie = match session_cookie_manager.create_cookie(&session_token, &user.token) {
let session_cookie = match session_cookie_manager.create_cookie(&session_token, &user.token.value) {
Ok(cookie) => cookie,
Err(_) => return Err(LoginErrorResponse::server_error()),
};