From cbaea15f4f446f1b3babfb23b73dbecb123d92fb Mon Sep 17 00:00:00 2001 From: Aleksandr Date: Thu, 1 Jan 2026 11:06:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B5=D0=B1=D0=B0=D1=82=D1=8C=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=85=D1=83=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/requests/uploads.rs | 20 +++++++++++++++++++- http/src/requests/uploads.rs | 9 +++++++-- http/src/server/context.rs | 7 ++++++- http/src/server/handler.rs | 7 +------ http/src/server/mod.rs | 2 +- http/src/server/routes/uploads.rs | 6 +++++- 6 files changed, 39 insertions(+), 12 deletions(-) diff --git a/core/src/requests/uploads.rs b/core/src/requests/uploads.rs index e31c517..9f38f4d 100644 --- a/core/src/requests/uploads.rs +++ b/core/src/requests/uploads.rs @@ -19,6 +19,24 @@ pub mod start { use super::*; + #[data(copy)] + pub enum ImageType { + #[serde(alias = "image/png")] + Png, + #[serde(alias = "image/jpeg")] + Jpg, + #[serde(alias = "image/webp")] + Webp, + #[serde(alias = "image/bmp")] + Bmp, + } + + #[data] + pub enum FileClass { + Image(ImageType), + GameFile, + } + #[data] pub struct Args { /// Name of the file. Mainly serves as a hint to user to not @@ -30,7 +48,7 @@ pub mod start { pub hash: Option, /// Class of the file. - pub class: file::ClassKind, + pub class: FileClass, /// Size of the file to upload. Must be known /// prior to upload, streaming is not supported. diff --git a/http/src/requests/uploads.rs b/http/src/requests/uploads.rs index 6e0eaf0..7f1ce2f 100644 --- a/http/src/requests/uploads.rs +++ b/http/src/requests/uploads.rs @@ -4,7 +4,12 @@ use eva::data; use crate::requests::status_code; -use viendesu_core::{errors, requests::uploads as reqs, types::{file, upload}, uploads::UploadStream}; +use viendesu_core::{ + errors, + requests::uploads as reqs, + types::{file, upload}, + uploads::UploadStream, +}; #[data] pub struct ListPending {} @@ -17,7 +22,7 @@ status_code::map!(reqs::list_pending::Err => []); pub struct Start { pub file_name: Option, pub hash: Option, - pub class: file::ClassKind, + pub class: reqs::start::FileClass, pub size: NonZeroU64, } diff --git a/http/src/server/context.rs b/http/src/server/context.rs index 1dfb390..ff4be73 100644 --- a/http/src/server/context.rs +++ b/http/src/server/context.rs @@ -16,11 +16,15 @@ use axum::{ use futures::StreamExt; use serde::Deserialize; -use viendesu_core::errors::{Aux, AuxResult}; +use viendesu_core::{ + errors::{Aux, AuxResult}, + types::session, +}; #[non_exhaustive] pub struct Context { pub request: R, + pub token: Option, pub parts: Option, pub response_format: Format, } @@ -82,6 +86,7 @@ where Ok(Context { request, + token: extract::session_token(&parts).map_err(|e| response::err(response_format, e))?, parts: Some(parts), response_format, }) diff --git a/http/src/server/handler.rs b/http/src/server/handler.rs index a80a1df..aa26b26 100644 --- a/http/src/server/handler.rs +++ b/http/src/server/handler.rs @@ -125,12 +125,7 @@ impl> FinishedHandler(service: T::Service) -> axum::Router { routes::make(scope) .into_axum() .layer(fastrace_axum::FastraceLayer) - .layer(cors::CorsLayer::permissive()) + .layer(cors::CorsLayer::very_permissive()) } #[perfect_derive(Clone)] diff --git a/http/src/server/routes/uploads.rs b/http/src/server/routes/uploads.rs index db38d7d..b0bd4f6 100644 --- a/http/src/server/routes/uploads.rs +++ b/http/src/server/routes/uploads.rs @@ -67,9 +67,12 @@ async fn load_upload_context(request: AxumRequest) -> Result, AxumRe } let (mut parts, body) = request.into_parts(); - let id: upload::Id = extract::path(&mut parts).await?; let response_format = extract::response_format(&parts).map_err(|e| response::err(Default::default(), e))?; + let token = extract::session_token(&parts).map_err(|e| response::err(response_format, e))?; + let id: upload::Id = extract::path(&mut parts) + .await + .map_err(|e| response::err(response_format, e))?; // This fucking sucks to the extent I can't express with words, the way its done // is horrible, the reason behind this is even more, I wish authors of axum very pleasant @@ -95,6 +98,7 @@ async fn load_upload_context(request: AxumRequest) -> Result, AxumRe }); Ok(Ctx { + token, request: Finish { id, stream: UploadStream::unknown_size(Box::pin(stream)),