Attempt to fix multipart errors (#436)

This commit is contained in:
Geometrically 2022-08-27 15:18:25 -07:00 committed by GitHub
parent 9c7b34d5e6
commit bf8ac214a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 11 deletions

View File

@ -10,6 +10,7 @@ use crate::search::indexing::IndexingError;
use crate::util::auth::{get_user_from_headers, AuthenticationError};
use crate::util::routes::read_from_field;
use crate::util::validate::validation_errors_to_string;
use actix::fut::ready;
use actix_multipart::{Field, Multipart};
use actix_web::http::StatusCode;
use actix_web::web::Data;
@ -250,7 +251,7 @@ pub async fn undo_uploads(
#[post("project")]
pub async fn project_create(
req: HttpRequest,
payload: Multipart,
mut payload: Multipart,
client: Data<PgPool>,
file_host: Data<Arc<dyn FileHost + Send + Sync>>,
) -> Result<HttpResponse, CreateError> {
@ -259,7 +260,7 @@ pub async fn project_create(
let result = project_create_inner(
req,
payload,
&mut payload,
&mut transaction,
&***file_host,
&mut uploaded_files,
@ -270,6 +271,9 @@ pub async fn project_create(
let undo_result = undo_uploads(&***file_host, &uploaded_files).await;
let rollback_result = transaction.rollback().await;
// fix multipart error bug:
payload.for_each(|_| ready(())).await;
if let Err(e) = undo_result {
return Err(e);
}
@ -314,7 +318,7 @@ Get logged in user
pub async fn project_create_inner(
req: HttpRequest,
mut payload: Multipart,
payload: &mut Multipart,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
file_host: &dyn FileHost,
uploaded_files: &mut Vec<UploadedFile>,

View File

@ -116,7 +116,7 @@ pub async fn mods_get(
#[post("mod")]
pub async fn mod_create(
req: HttpRequest,
payload: Multipart,
mut payload: Multipart,
client: Data<PgPool>,
file_host: Data<Arc<dyn FileHost + Send + Sync>>,
) -> Result<HttpResponse, CreateError> {
@ -125,7 +125,7 @@ pub async fn mod_create(
let result = project_create_inner(
req,
payload,
&mut payload,
&mut transaction,
&***file_host,
&mut uploaded_files,

View File

@ -15,6 +15,7 @@ use crate::util::auth::get_user_from_headers;
use crate::util::routes::read_from_field;
use crate::util::validate::validation_errors_to_string;
use crate::validate::{validate_file, ValidationResult};
use actix::fut::ready;
use actix_multipart::{Field, Multipart};
use actix_web::web::Data;
use actix_web::{post, HttpRequest, HttpResponse};
@ -65,7 +66,7 @@ struct InitialFileData {
#[post("version")]
pub async fn version_create(
req: HttpRequest,
payload: Multipart,
mut payload: Multipart,
client: Data<PgPool>,
file_host: Data<std::sync::Arc<dyn FileHost + Send + Sync>>,
) -> Result<HttpResponse, CreateError> {
@ -74,7 +75,7 @@ pub async fn version_create(
let result = version_create_inner(
req,
payload,
&mut payload,
&mut transaction,
&***file_host,
&mut uploaded_files,
@ -89,6 +90,8 @@ pub async fn version_create(
.await;
let rollback_result = transaction.rollback().await;
payload.for_each(|_| ready(())).await;
if let Err(e) = undo_result {
return Err(e);
}
@ -104,7 +107,7 @@ pub async fn version_create(
async fn version_create_inner(
req: HttpRequest,
mut payload: Multipart,
payload: &mut Multipart,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
file_host: &dyn FileHost,
uploaded_files: &mut Vec<UploadedFile>,
@ -428,7 +431,7 @@ async fn version_create_inner(
pub async fn upload_file_to_version(
req: HttpRequest,
url_data: actix_web::web::Path<(VersionId,)>,
payload: Multipart,
mut payload: Multipart,
client: Data<PgPool>,
file_host: Data<std::sync::Arc<dyn FileHost + Send + Sync>>,
) -> Result<HttpResponse, CreateError> {
@ -439,7 +442,7 @@ pub async fn upload_file_to_version(
let result = upload_file_to_version_inner(
req,
payload,
&mut payload,
client,
&mut transaction,
&***file_host,
@ -456,6 +459,8 @@ pub async fn upload_file_to_version(
.await;
let rollback_result = transaction.rollback().await;
payload.for_each(|_| ready(())).await;
if let Err(e) = undo_result {
return Err(e);
}
@ -471,7 +476,7 @@ pub async fn upload_file_to_version(
async fn upload_file_to_version_inner(
req: HttpRequest,
mut payload: Multipart,
payload: &mut Multipart,
client: Data<PgPool>,
transaction: &mut sqlx::Transaction<'_, sqlx::Postgres>,
file_host: &dyn FileHost,