diff --git a/Cargo.lock b/Cargo.lock index 7e33b80..f4a6789 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,44 +95,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "actix-multipart" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5118a26dee7e34e894f7e85aa0ee5080ae4c18bf03c0e30d49a80e418f00a53" -dependencies = [ - "actix-multipart-derive", - "actix-utils", - "actix-web", - "derive_more 0.99.18", - "futures-core", - "futures-util", - "httparse", - "local-waker", - "log", - "memchr", - "mime", - "rand", - "serde", - "serde_json", - "serde_plain", - "tempfile", - "tokio", -] - -[[package]] -name = "actix-multipart-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11eb847f49a700678ea2fa73daeb3208061afa2b9d1a8527c03390f4c4a1c6b" -dependencies = [ - "darling", - "parse-size", - "proc-macro2", - "quote", - "syn 2.0.87", -] - [[package]] name = "actix-router" version = "0.5.3" @@ -3313,16 +3275,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3667,12 +3619,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "parse-size" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487f2ccd1e17ce8c1bfab3a65c89525af41cfad4c8659021a1e9a2aacd73b89b" - [[package]] name = "paste" version = "1.0.15" @@ -3741,7 +3687,6 @@ version = "0.7.0" dependencies = [ "actix-cors", "actix-governor", - "actix-multipart", "actix-web", "async-compression", "async-stream", @@ -4147,7 +4092,6 @@ dependencies = [ "js-sys", "log", "mime", - "mime_guess", "native-tls", "once_cell", "percent-encoding", @@ -4552,15 +4496,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_plain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" -dependencies = [ - "serde", -] - [[package]] name = "serde_repr" version = "0.1.19" @@ -5325,12 +5260,6 @@ dependencies = [ "libc", ] -[[package]] -name = "unicase" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" - [[package]] name = "unicode-bom" version = "2.0.3" diff --git a/Cargo.toml b/Cargo.toml index b021aaa..b8789ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,6 @@ bin = [ "dirs", "pretty_env_logger", "reqwest/json", - "reqwest/multipart", "indicatif", "indicatif-log-bridge", "inquire", diff --git a/registry/Cargo.toml b/registry/Cargo.toml index 0ee5dff..3455de2 100644 --- a/registry/Cargo.toml +++ b/registry/Cargo.toml @@ -7,7 +7,6 @@ publish = false [dependencies] actix-web = "4.9.0" -actix-multipart = "0.7.2" actix-cors = "0.7.0" actix-governor = "0.7.0" dotenvy = "0.15.7" diff --git a/registry/src/auth/mod.rs b/registry/src/auth/mod.rs index ef2ab53..f202985 100644 --- a/registry/src/auth/mod.rs +++ b/registry/src/auth/mod.rs @@ -157,7 +157,7 @@ pub async fn read_mw( next.call(req).await.map(|res| res.map_into_left_body()) } -pub fn get_auth_from_env(config: IndexConfig) -> Auth { +pub fn get_auth_from_env(config: &IndexConfig) -> Auth { if let Ok(token) = benv!("ACCESS_TOKEN") { Auth::Token(token::TokenAuth { token: *Sha256::digest(token.as_bytes()).as_ref(), @@ -167,6 +167,7 @@ pub fn get_auth_from_env(config: IndexConfig) -> Auth { reqwest_client: make_reqwest(), client_id: config .github_oauth_client_id + .clone() .expect("index isn't configured for GitHub"), client_secret, }) diff --git a/registry/src/endpoints/publish_version.rs b/registry/src/endpoints/publish_version.rs index b266e5d..d7cee76 100644 --- a/registry/src/endpoints/publish_version.rs +++ b/registry/src/endpoints/publish_version.rs @@ -6,12 +6,11 @@ use crate::{ storage::StorageImpl, AppState, }; -use actix_multipart::Multipart; -use actix_web::{web, HttpResponse, Responder}; +use actix_web::{web, web::Bytes, HttpResponse, Responder}; use async_compression::Level; use convert_case::{Case, Casing}; use fs_err::tokio as fs; -use futures::{future::join_all, join, StreamExt}; +use futures::{future::join_all, join}; use git2::{Remote, Repository, Signature}; use pesde::{ manifest::Manifest, @@ -69,23 +68,13 @@ struct DocEntryInfo { pub async fn publish_package( app_state: web::Data, - mut body: Multipart, + bytes: Bytes, user_id: web::ReqData, ) -> Result { let source = app_state.source.lock().await; source.refresh(&app_state.project).await.map_err(Box::new)?; let config = source.config(&app_state.project).await?; - let bytes = body - .next() - .await - .ok_or(Error::InvalidArchive)? - .map_err(|_| Error::InvalidArchive)? - .bytes(config.max_archive_size) - .await - .map_err(|_| Error::InvalidArchive)? - .map_err(|_| Error::InvalidArchive)?; - let package_dir = tempfile::tempdir()?; { diff --git a/registry/src/main.rs b/registry/src/main.rs index 1a949e0..6fd1732 100644 --- a/registry/src/main.rs +++ b/registry/src/main.rs @@ -1,9 +1,16 @@ +use crate::{ + auth::{get_auth_from_env, Auth, UserIdExtractor}, + search::make_search, + storage::{get_storage_from_env, Storage}, +}; use actix_cors::Cors; use actix_governor::{Governor, GovernorConfigBuilder}; use actix_web::{ middleware::{from_fn, Compress, Logger, NormalizePath, TrailingSlash}, rt::System, - web, App, HttpServer, + web, + web::PayloadConfig, + App, HttpServer, }; use fs_err::tokio as fs; use log::info; @@ -13,12 +20,6 @@ use pesde::{ }; use std::{env::current_dir, path::PathBuf}; -use crate::{ - auth::{get_auth_from_env, Auth, UserIdExtractor}, - search::make_search, - storage::{get_storage_from_env, Storage}, -}; - mod auth; mod endpoints; mod error; @@ -105,6 +106,10 @@ async fn run() -> std::io::Result<()> { .refresh(&project) .await .expect("failed to refresh source"); + let config = source + .config(&project) + .await + .expect("failed to get index config"); let (search_reader, search_writer, query_parser) = make_search(&project, &source).await; @@ -115,12 +120,7 @@ async fn run() -> std::io::Result<()> { storage }, auth: { - let auth = get_auth_from_env( - source - .config(&project) - .await - .expect("failed to get index config"), - ); + let auth = get_auth_from_env(&config); info!("auth: {auth}"); auth }, @@ -176,12 +176,16 @@ async fn run() -> std::io::Result<()> { .to(endpoints::package_version::get_package_version) .wrap(from_fn(auth::read_mw)), ) - .route( - "/packages", - web::post() - .to(endpoints::publish_version::publish_package) - .wrap(Governor::new(&publish_governor_config)) - .wrap(from_fn(auth::write_mw)), + .service( + web::scope("/packages") + .app_data(PayloadConfig::new(config.max_archive_size)) + .route( + "", + web::post() + .to(endpoints::publish_version::publish_package) + .wrap(Governor::new(&publish_governor_config)) + .wrap(from_fn(auth::write_mw)), + ), ), ) }) diff --git a/src/cli/commands/publish.rs b/src/cli/commands/publish.rs index 4d84d79..4ae26a5 100644 --- a/src/cli/commands/publish.rs +++ b/src/cli/commands/publish.rs @@ -530,10 +530,7 @@ impl PublishCommand { let mut request = reqwest .post(format!("{}/v0/packages", config.api())) - .multipart(reqwest::multipart::Form::new().part( - "tarball", - reqwest::multipart::Part::bytes(archive).file_name("package.tar.gz"), - )); + .body(archive); if let Some(token) = project.auth_config().tokens().get(index_url) { log::debug!("using token for {index_url}");