Add SQLx operation tracing (#5223)
* wip: vendor sqlx-tracing * (compiles) standardize pg types used * more standardization * general log message improvements * wip: improve sqlx-tracing architecture * unify sqlx::Executor type * wip: try fix sqlx tracing * wip: sqlx-tracing compiles * so close * it compiles * fix ci
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
use crate::auth::validate::get_user_record_from_bearer_token;
|
||||
use crate::database::PgPool;
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::models::analytics::Download;
|
||||
use crate::models::ids::ProjectId;
|
||||
@@ -11,7 +12,6 @@ use crate::util::date::get_current_tenths_of_ms;
|
||||
use crate::util::guards::admin_key_guard;
|
||||
use actix_web::{HttpRequest, HttpResponse, patch, post, web};
|
||||
use serde::Deserialize;
|
||||
use sqlx::PgPool;
|
||||
use std::collections::HashMap;
|
||||
use std::net::Ipv4Addr;
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use std::{collections::HashMap, net::Ipv4Addr, sync::Arc};
|
||||
|
||||
use crate::database::PgPool;
|
||||
use crate::{
|
||||
auth::get_user_from_headers,
|
||||
database::{
|
||||
@@ -21,7 +22,6 @@ use actix_web::{HttpRequest, delete, get, patch, post, put, web};
|
||||
use ariadne::ids::UserId;
|
||||
use chrono::Utc;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
use tracing::trace;
|
||||
use url::Url;
|
||||
|
||||
@@ -254,7 +254,7 @@ async fn create(
|
||||
affiliate: affiliate_id,
|
||||
source_name: body.source_name.clone(),
|
||||
};
|
||||
code.insert(&mut *transaction)
|
||||
code.insert(&mut transaction)
|
||||
.await
|
||||
.wrap_internal_err("failed to insert affiliate code")?;
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ use crate::database::models::{
|
||||
user_subscription_item,
|
||||
};
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::database::{PgPool, PgTransaction};
|
||||
use crate::models::billing::{
|
||||
Charge, ChargeStatus, ChargeType, PaymentPlatform, Price, PriceDuration,
|
||||
Product, ProductMetadata, ProductPrice, SubscriptionMetadata,
|
||||
@@ -29,7 +30,6 @@ use chrono::{Duration, Utc};
|
||||
use rust_decimal::Decimal;
|
||||
use rust_decimal::prelude::ToPrimitive;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::{PgPool, Postgres, Transaction};
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
use stripe::{
|
||||
@@ -449,7 +449,7 @@ pub async fn reprocess_charge_tax(
|
||||
|
||||
let mut txn = pool.begin().await?;
|
||||
|
||||
let charge_refund = charge_item::DBCharge::get(id.into(), &mut *txn)
|
||||
let charge_refund = charge_item::DBCharge::get(id.into(), &mut txn)
|
||||
.await?
|
||||
.ok_or_else(|| ApiError::NotFound)?;
|
||||
|
||||
@@ -466,10 +466,9 @@ pub async fn reprocess_charge_tax(
|
||||
));
|
||||
}
|
||||
None => {
|
||||
let charge =
|
||||
charge_item::DBCharge::get(parent_charge_id, &mut *txn)
|
||||
.await?
|
||||
.ok_or_else(|| ApiError::NotFound)?;
|
||||
let charge = charge_item::DBCharge::get(parent_charge_id, &mut txn)
|
||||
.await?
|
||||
.ok_or_else(|| ApiError::NotFound)?;
|
||||
|
||||
let payment_platform_id = charge
|
||||
.payment_platform_id
|
||||
@@ -503,7 +502,7 @@ pub async fn reprocess_charge_tax(
|
||||
};
|
||||
|
||||
let tax_id =
|
||||
product_info_by_product_price_id(charge.price_id, &mut *txn)
|
||||
product_info_by_product_price_id(charge.price_id, &mut txn)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
ApiError::InvalidInput(
|
||||
@@ -634,13 +633,13 @@ pub async fn edit_subscription(
|
||||
/// if this operation will require immediate payment or if the user can be
|
||||
/// charged only after the promotion interval ends.
|
||||
async fn promotion_payment_requirement(
|
||||
txn: &mut sqlx::PgTransaction<'_>,
|
||||
txn: &mut PgTransaction<'_>,
|
||||
current_product_price: &product_item::DBProductPrice,
|
||||
new_product_price: &product_item::DBProductPrice,
|
||||
) -> Result<PaymentRequirement, ApiError> {
|
||||
let new_product = product_item::DBProduct::get(
|
||||
new_product_price.product_id,
|
||||
&mut **txn,
|
||||
&mut *txn,
|
||||
)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
@@ -650,7 +649,7 @@ pub async fn edit_subscription(
|
||||
})?;
|
||||
let current_product = product_item::DBProduct::get(
|
||||
current_product_price.product_id,
|
||||
&mut **txn,
|
||||
&mut *txn,
|
||||
)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
@@ -769,7 +768,7 @@ pub async fn edit_subscription(
|
||||
|
||||
let mut open_charge = charge_item::DBCharge::get_open_subscription(
|
||||
subscription.id,
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
@@ -780,7 +779,7 @@ pub async fn edit_subscription(
|
||||
|
||||
let current_price = product_item::DBProductPrice::get(
|
||||
subscription.price_id,
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
@@ -798,7 +797,7 @@ pub async fn edit_subscription(
|
||||
if cancelled {
|
||||
DBUsersSubscriptionsAffiliations::deactivate(
|
||||
subscription.id,
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
open_charge.status = ChargeStatus::Cancelled;
|
||||
@@ -822,7 +821,7 @@ pub async fn edit_subscription(
|
||||
open_charge.status = if cancelled {
|
||||
DBUsersSubscriptionsAffiliations::deactivate(
|
||||
subscription.id,
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
ChargeStatus::Cancelled
|
||||
@@ -845,7 +844,7 @@ pub async fn edit_subscription(
|
||||
let new_product_price =
|
||||
product_item::DBProductPrice::get_all_product_prices(
|
||||
product_id.into(),
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?
|
||||
.into_iter()
|
||||
@@ -1650,7 +1649,7 @@ pub async fn stripe_webhook(
|
||||
pool: &PgPool,
|
||||
redis: &RedisPool,
|
||||
charge_status: ChargeStatus,
|
||||
transaction: &mut Transaction<'_, Postgres>,
|
||||
transaction: &mut PgTransaction<'_>,
|
||||
) -> Result<PaymentIntentMetadata, ApiError> {
|
||||
'metadata: {
|
||||
let Some(user_id) = metadata
|
||||
@@ -1977,7 +1976,7 @@ pub async fn stripe_webhook(
|
||||
metadata.user_item.id
|
||||
as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
}
|
||||
ProductMetadata::Pyro {
|
||||
@@ -2161,7 +2160,7 @@ pub async fn stripe_webhook(
|
||||
{
|
||||
let open_charge = DBCharge::get_open_subscription(
|
||||
subscription.id,
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
|
||||
@@ -2269,7 +2268,7 @@ pub async fn stripe_webhook(
|
||||
),
|
||||
deactivated_at: None,
|
||||
}
|
||||
.insert(&mut *transaction)
|
||||
.insert(&mut transaction)
|
||||
.await?;
|
||||
}
|
||||
};
|
||||
@@ -2409,7 +2408,7 @@ pub async fn stripe_webhook(
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn apply_credit_many(
|
||||
transaction: &mut Transaction<'_, Postgres>,
|
||||
transaction: &mut PgTransaction<'_>,
|
||||
redis: &RedisPool,
|
||||
current_user_id: crate::database::models::ids::DBUserId,
|
||||
subscription_ids: Vec<crate::models::ids::UserSubscriptionId>,
|
||||
@@ -2423,7 +2422,7 @@ async fn apply_credit_many(
|
||||
.collect();
|
||||
let subs = user_subscription_item::DBUserSubscription::get_many(
|
||||
&subs_ids,
|
||||
&mut **transaction,
|
||||
&mut *transaction,
|
||||
)
|
||||
.await?;
|
||||
|
||||
@@ -2451,7 +2450,7 @@ async fn apply_credit_many(
|
||||
|
||||
let mut open_charge = charge_item::DBCharge::get_open_subscription(
|
||||
subscription.id,
|
||||
&mut **transaction,
|
||||
&mut *transaction,
|
||||
)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
@@ -2598,7 +2597,7 @@ pub async fn credit(
|
||||
server_ids.dedup();
|
||||
let subs = user_subscription_item::DBUserSubscription::get_many_by_server_ids(
|
||||
&server_ids,
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
if subs.is_empty() {
|
||||
@@ -2622,7 +2621,7 @@ pub async fn credit(
|
||||
archon_client.get_active_servers_by_region(®ion).await?;
|
||||
let subs = user_subscription_item::DBUserSubscription::get_many_by_server_ids(
|
||||
&servers.into_iter().map(|id| id.to_string()).collect::<Vec<String>>(),
|
||||
&mut *transaction,
|
||||
&mut transaction,
|
||||
)
|
||||
.await?;
|
||||
if subs.is_empty() {
|
||||
|
||||
@@ -10,10 +10,10 @@ use crate::models::v3::users::User;
|
||||
use crate::routes::ApiError;
|
||||
use crate::util::anrok;
|
||||
|
||||
use crate::database::PgPool;
|
||||
use ariadne::ids::base62_impl::to_base62;
|
||||
use ariadne::ids::*;
|
||||
use serde::Deserialize;
|
||||
use sqlx::PgPool;
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
use stripe::{
|
||||
@@ -92,7 +92,7 @@ impl AttachedCharge {
|
||||
}
|
||||
|
||||
pub async fn from_charge_request_type(
|
||||
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
|
||||
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
|
||||
charge_request_type: ChargeRequestType,
|
||||
) -> Result<Self, ApiError> {
|
||||
Ok(match charge_request_type {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use std::{collections::HashMap, fmt::Write, sync::LazyLock, time::Instant};
|
||||
|
||||
use crate::database::PgPool;
|
||||
use actix_web::{HttpRequest, HttpResponse, get, post, web};
|
||||
use chrono::{DateTime, Utc};
|
||||
use eyre::eyre;
|
||||
use reqwest::header::{HeaderMap, HeaderValue, USER_AGENT};
|
||||
use serde::Deserialize;
|
||||
use sqlx::PgPool;
|
||||
use tokio::sync::Mutex;
|
||||
use tracing::info;
|
||||
|
||||
@@ -200,7 +200,7 @@ async fn ingest_report_deserialized(
|
||||
"#,
|
||||
DBProjectId::from(report.project_id) as _,
|
||||
)
|
||||
.fetch_one(&mut *transaction)
|
||||
.fetch_one(&mut transaction)
|
||||
.await
|
||||
.wrap_internal_err("failed to check if pending issue details exist")?;
|
||||
|
||||
@@ -292,7 +292,7 @@ async fn ingest_report_deserialized(
|
||||
}
|
||||
|
||||
pub async fn run(
|
||||
exec: impl sqlx::Executor<'_, Database = sqlx::Postgres>,
|
||||
exec: impl crate::database::Executor<'_, Database = sqlx::Postgres>,
|
||||
run_parameters: DelphiRunParameters,
|
||||
) -> Result<HttpResponse, ApiError> {
|
||||
let file_data = sqlx::query!(
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use crate::auth::get_user_from_headers;
|
||||
use crate::database::PgPool;
|
||||
use crate::database::models::ids::DBUserId;
|
||||
use crate::database::models::notification_item::NotificationBuilder;
|
||||
use crate::database::models::user_item::DBUser;
|
||||
@@ -14,7 +15,6 @@ use actix_web::web;
|
||||
use actix_web::{HttpResponse, post};
|
||||
use ariadne::ids::UserId;
|
||||
use serde::Deserialize;
|
||||
use sqlx::PgPool;
|
||||
|
||||
pub fn config(cfg: &mut web::ServiceConfig) {
|
||||
cfg.service(create).service(send_custom_email);
|
||||
@@ -41,7 +41,7 @@ pub async fn create(
|
||||
|
||||
let mut txn = pool.begin().await?;
|
||||
|
||||
if !DBUser::exists_many(&user_ids, &mut *txn).await? {
|
||||
if !DBUser::exists_many(&user_ids, &mut txn).await? {
|
||||
return Err(ApiError::InvalidInput(
|
||||
"One of the specified users do not exist.".to_owned(),
|
||||
));
|
||||
|
||||
@@ -2,6 +2,8 @@ use crate::auth::validate::{
|
||||
get_full_user_from_headers, get_user_record_from_bearer_token,
|
||||
};
|
||||
use crate::auth::{AuthProvider, AuthenticationError, get_user_from_headers};
|
||||
use crate::database::PgPool;
|
||||
use crate::database::PgTransaction;
|
||||
use crate::database::models::flow_item::DBFlow;
|
||||
use crate::database::models::notification_item::NotificationBuilder;
|
||||
use crate::database::models::{DBUser, DBUserId};
|
||||
@@ -34,7 +36,6 @@ use rand_chacha::ChaCha20Rng;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use reqwest::header::AUTHORIZATION;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::postgres::PgPool;
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
use std::sync::Arc;
|
||||
@@ -80,7 +81,7 @@ impl TempUser {
|
||||
async fn create_account(
|
||||
self,
|
||||
provider: AuthProvider,
|
||||
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
|
||||
transaction: &mut PgTransaction<'_>,
|
||||
client: &PgPool,
|
||||
file_host: &Arc<dyn FileHost + Send + Sync>,
|
||||
redis: &RedisPool,
|
||||
@@ -834,7 +835,7 @@ impl AuthProvider {
|
||||
executor: E,
|
||||
) -> Result<Option<crate::database::models::DBUserId>, AuthenticationError>
|
||||
where
|
||||
E: sqlx::Executor<'a, Database = sqlx::Postgres>,
|
||||
E: crate::database::Executor<'a, Database = sqlx::Postgres>,
|
||||
{
|
||||
Ok(match self {
|
||||
AuthProvider::GitHub => {
|
||||
@@ -918,7 +919,7 @@ impl AuthProvider {
|
||||
&self,
|
||||
user_id: crate::database::models::DBUserId,
|
||||
id: Option<&str>,
|
||||
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
|
||||
transaction: &mut PgTransaction<'_>,
|
||||
) -> Result<(), AuthenticationError> {
|
||||
match self {
|
||||
AuthProvider::GitHub => {
|
||||
@@ -931,7 +932,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id.and_then(|x| x.parse::<i64>().ok())
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
AuthProvider::Discord => {
|
||||
@@ -944,7 +945,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id.and_then(|x| x.parse::<i64>().ok())
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
AuthProvider::Microsoft => {
|
||||
@@ -957,7 +958,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id,
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
AuthProvider::GitLab => {
|
||||
@@ -970,7 +971,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id.and_then(|x| x.parse::<i64>().ok())
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
AuthProvider::Google => {
|
||||
@@ -983,7 +984,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id,
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
AuthProvider::Steam => {
|
||||
@@ -996,7 +997,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id.and_then(|x| x.parse::<i64>().ok())
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
AuthProvider::PayPal => {
|
||||
@@ -1009,7 +1010,7 @@ impl AuthProvider {
|
||||
",
|
||||
user_id as crate::database::models::DBUserId,
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
} else {
|
||||
sqlx::query!(
|
||||
@@ -1021,7 +1022,7 @@ impl AuthProvider {
|
||||
user_id as crate::database::models::DBUserId,
|
||||
id,
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
@@ -1217,7 +1218,7 @@ pub async fn auth_callback(
|
||||
oauth_user.id,
|
||||
existing_user_id as DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await
|
||||
.wrap_err("failed to update user PayPal info")?;
|
||||
|
||||
@@ -1649,7 +1650,7 @@ async fn validate_2fa_code(
|
||||
user_id: crate::database::models::DBUserId,
|
||||
redis: &RedisPool,
|
||||
pool: &PgPool,
|
||||
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
|
||||
transaction: &mut PgTransaction<'_>,
|
||||
) -> Result<bool, AuthenticationError> {
|
||||
let totp = totp_rs::TOTP::new(
|
||||
totp_rs::Algorithm::SHA1,
|
||||
@@ -1705,7 +1706,7 @@ async fn validate_2fa_code(
|
||||
user_id as crate::database::models::ids::DBUserId,
|
||||
code as i64,
|
||||
)
|
||||
.execute(&mut **transaction)
|
||||
.execute(&mut *transaction)
|
||||
.await?;
|
||||
|
||||
crate::database::models::DBUser::clear_caches(
|
||||
@@ -1867,7 +1868,7 @@ pub async fn finish_2fa_flow(
|
||||
secret,
|
||||
user_id as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
@@ -1877,7 +1878,7 @@ pub async fn finish_2fa_flow(
|
||||
",
|
||||
user_id as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
let mut codes = Vec::new();
|
||||
@@ -1898,7 +1899,7 @@ pub async fn finish_2fa_flow(
|
||||
user_id as crate::database::models::ids::DBUserId,
|
||||
val as i64,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
codes.push(to_base62(val));
|
||||
@@ -1986,7 +1987,7 @@ pub async fn remove_2fa(
|
||||
",
|
||||
user.id as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
@@ -1996,7 +1997,7 @@ pub async fn remove_2fa(
|
||||
",
|
||||
user.id as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
NotificationBuilder {
|
||||
@@ -2036,7 +2037,7 @@ pub async fn reset_password_begin(
|
||||
let user =
|
||||
match crate::database::models::DBUser::get_by_case_insensitive_email(
|
||||
&reset_password.username_or_email,
|
||||
&mut *txn,
|
||||
&mut txn,
|
||||
)
|
||||
.await?[..]
|
||||
{
|
||||
@@ -2044,7 +2045,7 @@ pub async fn reset_password_begin(
|
||||
// Try finding by username or ID
|
||||
crate::database::models::DBUser::get(
|
||||
&reset_password.username_or_email,
|
||||
&mut *txn,
|
||||
&mut txn,
|
||||
&redis,
|
||||
)
|
||||
.await?
|
||||
@@ -2053,7 +2054,7 @@ pub async fn reset_password_begin(
|
||||
// If there is only one user with the given email, ignoring case,
|
||||
// we can assume it's the user we want to reset the password for
|
||||
crate::database::models::DBUser::get_id(
|
||||
user_id, &mut *txn, &redis,
|
||||
user_id, &mut txn, &redis,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
@@ -2065,12 +2066,12 @@ pub async fn reset_password_begin(
|
||||
if let Some(user_id) =
|
||||
crate::database::models::DBUser::get_by_email(
|
||||
&reset_password.username_or_email,
|
||||
&mut *txn,
|
||||
&mut txn,
|
||||
)
|
||||
.await?
|
||||
{
|
||||
crate::database::models::DBUser::get_id(
|
||||
user_id, &mut *txn, &redis,
|
||||
user_id, &mut txn, &redis,
|
||||
)
|
||||
.await?
|
||||
} else {
|
||||
@@ -2232,7 +2233,7 @@ pub async fn change_password(
|
||||
update_password,
|
||||
user.id as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
if let Some(flow) = &change_password.flow {
|
||||
@@ -2317,7 +2318,7 @@ pub async fn set_email(
|
||||
email_address.email,
|
||||
user.id.0 as i64,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
if let Some(user_email) = user.email.clone() {
|
||||
@@ -2473,7 +2474,7 @@ pub async fn verify_email(
|
||||
",
|
||||
user.id as crate::database::models::ids::DBUserId,
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
DBFlow::remove(&email.flow, &redis).await?;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
use crate::auth::get_user_from_headers;
|
||||
use crate::database::PgPool;
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::models::pats::Scopes;
|
||||
use crate::queue::session::AuthQueue;
|
||||
use crate::routes::ApiError;
|
||||
use actix_web::{HttpRequest, HttpResponse, post, web};
|
||||
use sqlx::PgPool;
|
||||
|
||||
pub fn config(cfg: &mut web::ServiceConfig) {
|
||||
cfg.service(web::scope("gdpr").service(export));
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use crate::database::PgPool;
|
||||
use actix_web::{HttpResponse, post, web};
|
||||
use ariadne::ids::UserId;
|
||||
use chrono::Utc;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
use tracing::warn;
|
||||
|
||||
use crate::database::models::users_redeemals::{
|
||||
@@ -63,7 +63,7 @@ pub async fn redeem(
|
||||
|
||||
let maybe_fields =
|
||||
RedeemalLookupFields::redeemal_status_by_username_and_offer(
|
||||
&mut *txn,
|
||||
&mut txn,
|
||||
&username,
|
||||
Offer::Medal,
|
||||
)
|
||||
@@ -93,7 +93,7 @@ pub async fn redeem(
|
||||
n_attempts: 0,
|
||||
};
|
||||
|
||||
redeemal.insert(&mut *txn).await?;
|
||||
redeemal.insert(&mut txn).await?;
|
||||
|
||||
txn.commit().await?;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use super::ApiError;
|
||||
use crate::auth::get_user_from_headers;
|
||||
use crate::database;
|
||||
use crate::database::PgPool;
|
||||
use crate::database::models::DBModerationLock;
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::models::ids::OrganizationId;
|
||||
@@ -14,7 +15,6 @@ use ariadne::ids::{UserId, random_base62};
|
||||
use chrono::{DateTime, Utc};
|
||||
use ownership::get_projects_ownership;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
use std::collections::HashMap;
|
||||
|
||||
mod ownership;
|
||||
@@ -462,7 +462,7 @@ async fn set_project_meta(
|
||||
.bind(&links[..])
|
||||
.bind(&proofs[..])
|
||||
.bind(&flame_ids[..])
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
sqlx::query(
|
||||
@@ -475,7 +475,7 @@ async fn set_project_meta(
|
||||
)
|
||||
.bind(&file_hashes[..])
|
||||
.bind(&ids[..])
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
|
||||
transaction.commit().await?;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use crate::database::PgPool;
|
||||
use crate::database::models::{DBOrganization, DBTeamId, DBTeamMember, DBUser};
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::models::ids::OrganizationId;
|
||||
@@ -5,7 +6,6 @@ use crate::routes::internal::moderation::Ownership;
|
||||
use crate::util::error::Context;
|
||||
use ariadne::ids::UserId;
|
||||
use eyre::eyre;
|
||||
use sqlx::PgPool;
|
||||
|
||||
/// Fetches ownership information for multiple projects efficiently
|
||||
pub async fn get_projects_ownership(
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
use std::{collections::HashMap, fmt};
|
||||
|
||||
use crate::database::PgPool;
|
||||
use actix_web::{HttpRequest, get, patch, post, put, web};
|
||||
use chrono::{DateTime, Utc};
|
||||
use itertools::Itertools;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sqlx::PgPool;
|
||||
|
||||
use super::ownership::get_projects_ownership;
|
||||
use crate::{
|
||||
@@ -986,7 +986,7 @@ async fn submit_report(
|
||||
"#,
|
||||
project_id as _,
|
||||
)
|
||||
.fetch_all(&mut *txn)
|
||||
.fetch_all(&mut txn)
|
||||
.await
|
||||
.wrap_internal_err("failed to fetch pending issues")?;
|
||||
|
||||
@@ -1016,7 +1016,7 @@ async fn submit_report(
|
||||
",
|
||||
project_id as _,
|
||||
)
|
||||
.execute(&mut *txn)
|
||||
.execute(&mut txn)
|
||||
.await
|
||||
.wrap_internal_err("failed to delete dummy issue")?;
|
||||
|
||||
@@ -1029,7 +1029,7 @@ async fn submit_report(
|
||||
"#,
|
||||
project_id as _,
|
||||
)
|
||||
.fetch_one(&mut *txn)
|
||||
.fetch_one(&mut txn)
|
||||
.await
|
||||
.wrap_internal_err("failed to update reports")?;
|
||||
|
||||
@@ -1087,7 +1087,7 @@ async fn submit_report(
|
||||
ProjectStatus::Rejected.as_str(),
|
||||
project_id as _,
|
||||
)
|
||||
.fetch_one(&mut *txn)
|
||||
.fetch_one(&mut txn)
|
||||
.await
|
||||
.wrap_internal_err("failed to mark project as rejected")?;
|
||||
|
||||
@@ -1182,7 +1182,7 @@ async fn update_issue_detail(
|
||||
status as _,
|
||||
issue_detail_id as _,
|
||||
)
|
||||
.execute(&mut *txn)
|
||||
.execute(&mut txn)
|
||||
.await
|
||||
.wrap_internal_err("failed to update issue detail")?;
|
||||
if results.rows_affected() == 0 {
|
||||
@@ -1240,7 +1240,7 @@ async fn add_report(
|
||||
"#,
|
||||
DBFileId::from(file_id) as _,
|
||||
)
|
||||
.fetch_one(&mut *txn)
|
||||
.fetch_one(&mut txn)
|
||||
.await
|
||||
.wrap_internal_err("failed to fetch file")?;
|
||||
|
||||
|
||||
@@ -13,13 +13,13 @@ use rand::distributions::Alphanumeric;
|
||||
use rand_chacha::ChaCha20Rng;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
|
||||
use crate::database::PgPool;
|
||||
use crate::database::models::notification_item::NotificationBuilder;
|
||||
use crate::models::notifications::NotificationBody;
|
||||
use crate::models::pats::{PersonalAccessToken, Scopes};
|
||||
use crate::queue::session::AuthQueue;
|
||||
use crate::util::validate::validation_errors_to_string;
|
||||
use serde::Deserialize;
|
||||
use sqlx::postgres::PgPool;
|
||||
use validator::Validate;
|
||||
|
||||
pub fn config(cfg: &mut web::ServiceConfig) {
|
||||
@@ -216,7 +216,7 @@ pub async fn edit_pat(
|
||||
scopes.bits() as i64,
|
||||
pat.id.0
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
}
|
||||
if let Some(name) = &info.name {
|
||||
@@ -229,7 +229,7 @@ pub async fn edit_pat(
|
||||
name,
|
||||
pat.id.0
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
}
|
||||
if let Some(expires) = &info.expires {
|
||||
@@ -248,7 +248,7 @@ pub async fn edit_pat(
|
||||
expires,
|
||||
pat.id.0
|
||||
)
|
||||
.execute(&mut *transaction)
|
||||
.execute(&mut transaction)
|
||||
.await?;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ use crate::database::models::DBUserId;
|
||||
use crate::database::models::session_item::DBSession;
|
||||
use crate::database::models::session_item::SessionBuilder;
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::database::{PgPool, PgTransaction};
|
||||
use crate::models::pats::Scopes;
|
||||
use crate::models::sessions::Session;
|
||||
use crate::queue::session::AuthQueue;
|
||||
@@ -15,7 +16,6 @@ use chrono::Utc;
|
||||
use rand::distributions::Alphanumeric;
|
||||
use rand::{Rng, SeedableRng};
|
||||
use rand_chacha::ChaCha20Rng;
|
||||
use sqlx::PgPool;
|
||||
use woothee::parser::Parser;
|
||||
|
||||
pub fn config(cfg: &mut ServiceConfig) {
|
||||
@@ -86,7 +86,7 @@ pub async fn get_session_metadata(
|
||||
pub async fn issue_session(
|
||||
req: HttpRequest,
|
||||
user_id: DBUserId,
|
||||
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
|
||||
transaction: &mut PgTransaction<'_>,
|
||||
redis: &RedisPool,
|
||||
) -> Result<DBSession, AuthenticationError> {
|
||||
let metadata = get_session_metadata(&req).await?;
|
||||
@@ -112,7 +112,7 @@ pub async fn issue_session(
|
||||
.insert(transaction)
|
||||
.await?;
|
||||
|
||||
let session = DBSession::get_id(id, &mut **transaction, redis)
|
||||
let session = DBSession::get_id(id, &mut *transaction, redis)
|
||||
.await?
|
||||
.ok_or_else(|| AuthenticationError::InvalidCredentials)?;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::auth::AuthenticationError;
|
||||
use crate::auth::validate::get_user_record_from_bearer_token;
|
||||
use crate::database::PgPool;
|
||||
use crate::database::models::friend_item::DBFriend;
|
||||
use crate::database::redis::RedisPool;
|
||||
use crate::models::pats::Scopes;
|
||||
@@ -27,7 +28,6 @@ use futures_util::future::select;
|
||||
use futures_util::{StreamExt, TryStreamExt};
|
||||
use redis::AsyncCommands;
|
||||
use serde::Deserialize;
|
||||
use sqlx::PgPool;
|
||||
use std::pin::pin;
|
||||
use std::sync::atomic::Ordering;
|
||||
use tokio::sync::oneshot::error::TryRecvError;
|
||||
|
||||
Reference in New Issue
Block a user