Skip to content

Commit 97823e2

Browse files
sypharGuillaumeGomez
authored andcommitted
Don't redirect do /crate/{name}/latest when crate not found
1 parent f553284 commit 97823e2

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

src/web/crate_details.rs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -480,13 +480,6 @@ pub(crate) async fn crate_details_handler(
480480
Extension(storage): Extension<Arc<AsyncStorage>>,
481481
mut conn: DbConnection,
482482
) -> AxumResult<AxumResponse> {
483-
if params.original_path() != params.crate_details_url().path() {
484-
return Err(AxumNope::Redirect(
485-
params.crate_details_url(),
486-
CachePolicy::ForeverInCdn,
487-
));
488-
}
489-
490483
let matched_release = match_version(&mut conn, params.name(), params.req_version())
491484
.await?
492485
.assume_exact_name()?
@@ -498,6 +491,13 @@ pub(crate) async fn crate_details_handler(
498491
})?;
499492
let params = params.apply_matched_release(&matched_release);
500493

494+
if params.original_path() != params.crate_details_url().path() {
495+
return Err(AxumNope::Redirect(
496+
params.crate_details_url(),
497+
CachePolicy::ForeverInCdn,
498+
));
499+
}
500+
501501
let mut details = CrateDetails::from_matched_release(&mut conn, matched_release).await?;
502502

503503
match details.fetch_readme(&storage).await {
@@ -717,6 +717,7 @@ mod tests {
717717
};
718718
use crate::{db::update_build_status, registry_api::CrateOwner};
719719
use anyhow::Error;
720+
use http::StatusCode;
720721
use kuchikiki::traits::TendrilSink;
721722
use pretty_assertions::assert_eq;
722723
use std::collections::HashMap;
@@ -2219,10 +2220,19 @@ path = "src/lib.rs"
22192220
.create()
22202221
.await?;
22212222

2222-
env.web_app()
2223-
.await
2224-
.assert_redirect_unchecked("/crate/dummy%3E", "/crate/dummy%3E/latest")
2225-
.await?;
2223+
let resp = env.web_app().await.get("/crate/dummy%3E").await?;
2224+
assert_eq!(resp.status(), StatusCode::NOT_FOUND);
2225+
2226+
Ok(())
2227+
})
2228+
}
2229+
2230+
#[test_case("/crate/dummy"; "without")]
2231+
#[test_case("/crate/dummy/"; "slash")]
2232+
fn test_unknown_crate_not_found_doesnt_redirect(path: &str) {
2233+
async_wrapper(|env| async move {
2234+
let resp = env.web_app().await.get(path).await?;
2235+
assert_eq!(resp.status(), StatusCode::NOT_FOUND);
22262236

22272237
Ok(())
22282238
})

0 commit comments

Comments
 (0)