diff --git a/src/config/server.rs b/src/config/server.rs index 8f59f94aedf..0262c4ce6bf 100644 --- a/src/config/server.rs +++ b/src/config/server.rs @@ -41,7 +41,7 @@ pub struct Server { pub session_key: cookie::Key, pub gh_client_id: ClientId, pub gh_client_secret: ClientSecret, - pub max_upload_size: u64, + pub max_upload_size: u32, pub max_unpack_size: u64, pub max_dependencies: usize, pub max_features: usize, diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index f44a78ea6c6..1a72bf650d6 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -37,7 +37,6 @@ use crate::rate_limiter::LimitedAction; use crate::schema::*; use crate::sql::canon_crate_name; use crate::util::errors::{bad_request, custom, internal, AppResult, BoxedAppError}; -use crate::util::Maximums; use crate::views::{ EncodableCrate, EncodableCrateDependency, GoodCrate, PublishMetadata, PublishWarnings, }; @@ -146,18 +145,17 @@ pub async fn publish(app: AppState, req: Parts, body: Body) -> AppResult, pub documentation: Option, pub repository: Option, - pub max_upload_size: Option, + max_upload_size: Option, pub max_features: Option, } @@ -156,6 +156,11 @@ impl<'a> NewCrate<'a> { } impl Crate { + pub fn max_upload_size(&self) -> Option { + self.max_upload_size + .and_then(|size| u32::try_from(size).ok()) + } + /// SQL filter based on whether the crate's name loosely matches the given /// string. /// diff --git a/src/tests/krate/publish/max_size.rs b/src/tests/krate/publish/max_size.rs index 0ae2df8ea82..7ed194a78cc 100644 --- a/src/tests/krate/publish/max_size.rs +++ b/src/tests/krate/publish/max_size.rs @@ -12,7 +12,7 @@ async fn tarball_between_default_axum_limit_and_max_upload_size() { let (app, _, _, token) = TestApp::full() .with_config(|config| { config.max_upload_size = max_upload_size; - config.max_unpack_size = max_upload_size; + config.max_unpack_size = max_upload_size as u64; }) .with_token() .await; @@ -65,7 +65,7 @@ async fn tarball_bigger_than_max_upload_size() { let (app, _, _, token) = TestApp::full() .with_config(|config| { config.max_upload_size = max_upload_size; - config.max_unpack_size = max_upload_size; + config.max_unpack_size = max_upload_size as u64; }) .with_token() .await; diff --git a/src/util.rs b/src/util.rs index 65b9ae36ff0..39f25b3014d 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,5 +1,3 @@ -use std::cmp; - pub use self::bytes_request::BytesRequest; pub use self::io_util::{read_fill, read_le_u32}; pub use self::request_helpers::*; @@ -12,24 +10,3 @@ mod request_helpers; pub mod rfc3339; pub mod token; pub mod tracing; - -#[derive(Debug, Copy, Clone)] -pub struct Maximums { - pub max_upload_size: u64, - pub max_unpack_size: u64, -} - -impl Maximums { - pub fn new( - krate_max_upload: Option, - app_max_upload: u64, - app_max_unpack: u64, - ) -> Maximums { - let max_upload_size = krate_max_upload.map(|m| m as u64).unwrap_or(app_max_upload); - let max_unpack_size = cmp::max(app_max_unpack, max_upload_size); - Maximums { - max_upload_size, - max_unpack_size, - } - } -}