connection

This commit is contained in:
Brandon Thomas committed 2026-05-13 12:57:46 -04:00
1 parent b356172ac9
commit e57b034b60
8 files changed
+117 -6

No files matched your search

@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO users\nSET\n token = ?,\n \n is_temporary = ?,\n \n username = ?,\n display_name = ?,\n\n username_is_generated = ?,\n username_is_not_customized = ?,\n\n email_address = ?,\n email_gravatar_hash = ?,\n\n email_confirmed = FALSE,\n email_confirmed_by_google = ?,\n email_is_synthetic = ?,\n \n was_eagerly_provisioned = ?,\n\n profile_markdown = ?,\n profile_rendered_html = ?,\n user_role_slug = ?,\n\n password_hash = ?,\n is_without_password = ?,\n\n maybe_feature_flags = ?,\n\n ip_address_creation = ?,\n ip_address_last_login = ?,\n ip_address_last_update = ?,\n\n maybe_source = ?,\n\n maybe_signup_method = ?,\n\n maybe_referral_url = ?,\n maybe_landing_url = ?,\n\n maybe_referral_partner = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 25
},
"nullable": []
},
"hash": "445952fe5d4206412b2a8060c51e942ec03fc229a4ca56d04554fd033529fa4c"
}
@@ -0,0 +1,25 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n token as `token: tokens::tokens::users::UserToken`\nFROM users\n WHERE username = ?\nLIMIT 1\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "token: tokens::tokens::users::UserToken",
"type_info": {
"type": "VarString",
"flags": "NOT_NULL | UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 128
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false
]
},
"hash": "566a2d56735180e0f17484789d0debd03c68bda20354882e111476bab6132723"
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO users\nSET\n token = ?,\n \n is_temporary = ?,\n \n username = ?,\n display_name = ?,\n\n username_is_generated = ?,\n username_is_not_customized = ?,\n\n email_address = ?,\n email_gravatar_hash = ?,\n\n email_confirmed = FALSE,\n email_confirmed_by_google = ?,\n email_is_synthetic = ?,\n \n was_eagerly_provisioned = ?,\n\n profile_markdown = ?,\n profile_rendered_html = ?,\n user_role_slug = ?,\n\n password_hash = ?,\n is_without_password = ?,\n\n maybe_feature_flags = ?,\n\n ip_address_creation = ?,\n ip_address_last_login = ?,\n ip_address_last_update = ?,\n\n maybe_source = ?,\n\n maybe_signup_method = ?,\n\n maybe_referral_url = ?,\n maybe_landing_url = ?,\n\n maybe_referral_partner = ?,\n maybe_referral_user_token = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 26
},
"nullable": []
},
"hash": "867b22640ae6c49c26973a32d36439933dceef881313a7f3385d61ebe5faeb34"
}
@@ -0,0 +1,46 @@
use std::marker::PhantomData;
use sqlx::{Executor, MySql};
use tokens::tokens::users::UserToken;
pub struct GetUserTokenByUsernameArgs<'e, 'c, E>
where
E: 'e + Executor<'c, Database = MySql>,
{
pub username: &'e str,
pub mysql_executor: E,
pub phantom: PhantomData<&'c E>,
}
pub async fn get_user_token_by_username_with_executor<'e, 'c: 'e, E>(
args: GetUserTokenByUsernameArgs<'e, 'c, E>,
) -> Result<Option<UserToken>, sqlx::Error>
where
E: 'e + Executor<'c, Database = MySql>,
{
let username = args.username.to_lowercase();
let result = sqlx::query_as!(
UsernameRecord,
r#"
SELECT
token as `token: tokens::tokens::users::UserToken`
FROM users
WHERE username = ?
LIMIT 1
"#,
username
)
.fetch_one(args.mysql_executor)
.await;
match result {
Ok(record) => Ok(Some(record.token)),
Err(sqlx::Error::RowNotFound) => Ok(None),
Err(err) => Err(err),
}
}
struct UsernameRecord {
token: UserToken,
}
@@ -1,4 +1,5 @@
pub mod get_user_token_by_username;
pub mod get_user_token_by_username_with_executor;
pub mod get_username_by_user_token;
pub mod lookup_user_for_login_by_email;
pub mod lookup_user_for_login_by_email_with_transactor;
@@ -5,7 +5,8 @@ use crate::endpoints::checkout_with_user_signup::user_creation_case::user_creati
use crate::endpoints::checkout_with_user_signup::user_exists_case::user_exists_case;
use crate::utils::artcraft_stripe_config::ArtcraftStripeConfigWithClient;
use crate::utils::common_web_error::CommonWebError;
use mysql_queries::queries::users::user::get::get_user_token_by_username::get_user_token_by_username;
use mysql_queries::queries::users::user::get::get_user_token_by_username_with_executor::{get_user_token_by_username_with_executor, GetUserTokenByUsernameArgs};
use std::marker::PhantomData;
use actix_artcraft::sessions::user_sessions::http_user_session_manager::HttpUserSessionManager;
use actix_web::web::{Data, Json};
use actix_web::{web, HttpRequest, HttpResponse};
@@ -105,7 +106,11 @@ pub async fn stripe_artcraft_create_subscription_checkout_with_user_signup_handl
if lookup_username.is_empty() {
None
} else {
match get_user_token_by_username(&lookup_username, &mysql_pool).await {
match get_user_token_by_username_with_executor(GetUserTokenByUsernameArgs {
username: &lookup_username,
mysql_executor: &mut *mysql_connection,
phantom: PhantomData,
}).await {
Ok(token) => token,
Err(err) => {
warn!("Referral user lookup failed (continuing): {:?}", err);
@@ -9,7 +9,8 @@ use std::fmt::Formatter;
use crate::util::cleaners::sanitize_referral_username::sanitize_referral_username;
use crate::http_server::validations::is_reserved_username::is_reserved_username;
use mysql_queries::queries::users::user::get::get_user_token_by_username::get_user_token_by_username;
use mysql_queries::queries::users::user::get::get_user_token_by_username_with_executor::{get_user_token_by_username_with_executor, GetUserTokenByUsernameArgs};
use std::marker::PhantomData;
use crate::http_server::validations::validate_passwords::validate_passwords;
use crate::http_server::validations::validate_username::validate_username;
use crate::util::enroll_in_studio::enroll_in_studio;
@@ -225,7 +226,11 @@ pub async fn create_account_handler(
if lookup_username.is_empty() {
None
} else {
match get_user_token_by_username(&lookup_username, &mysql_pool).await {
match get_user_token_by_username_with_executor(GetUserTokenByUsernameArgs {
username: &lookup_username,
mysql_executor: &**mysql_pool,
phantom: PhantomData,
}).await {
Ok(token) => token,
Err(err) => {
warn!("Referral user lookup failed (continuing): {:?}", err);
@@ -20,7 +20,8 @@ use http_server_common::request::get_request_ip::get_request_ip;
use http_server_common::response::serialize_as_json_error::serialize_as_json_error;
use log::{info, warn};
use mysql_queries::queries::google_sign_in_accounts::get_google_sign_in_account_by_subject::get_google_sign_in_account;
use mysql_queries::queries::users::user::get::get_user_token_by_username::get_user_token_by_username;
use mysql_queries::queries::users::user::get::get_user_token_by_username_with_executor::{get_user_token_by_username_with_executor, GetUserTokenByUsernameArgs};
use std::marker::PhantomData;
use mysql_queries::queries::users::user_sessions::create_user_session_with_transactor::create_user_session_with_transactor;
use mysql_queries::utils::transactor::Transactor;
use sqlx::{Acquire, MySqlPool};
@@ -266,7 +267,11 @@ pub async fn google_sso_handler(
if lookup_username.is_empty() {
None
} else {
match get_user_token_by_username(&lookup_username, &mysql_pool).await {
match get_user_token_by_username_with_executor(GetUserTokenByUsernameArgs {
username: &lookup_username,
mysql_executor: &mut *mysql_connection,
phantom: PhantomData,
}).await {
Ok(token) => token,
Err(err) => {
warn!("Referral user lookup failed (continuing): {:?}", err);