mirror of
https://github.com/modrinth/code.git
synced 2026-09-05 06:19:11 +00:00
fix: properly disallow duplicate filenames in upload (#7387)
This commit is contained in:
@@ -923,7 +923,7 @@ pub async fn upload_file(
|
||||
) -> Result<(), CreateError> {
|
||||
let (file_name, file_extension) = get_name_ext(content_disposition)?;
|
||||
|
||||
if other_file_names.contains(&format!("{file_name}.{file_extension}")) {
|
||||
if other_file_names.iter().any(|name| name == file_name) {
|
||||
return Err(CreateError::InvalidInput(
|
||||
"Duplicate files are not allowed to be uploaded to Modrinth!"
|
||||
.to_string(),
|
||||
|
||||
@@ -91,6 +91,48 @@ async fn test_get_version() {
|
||||
.await;
|
||||
}
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn rejects_duplicate_filename_when_uploading_file_to_version() {
|
||||
with_test_environment(
|
||||
None,
|
||||
|test_env: common::environment::TestEnvironment<ApiV3>| async move {
|
||||
let api = &test_env.api;
|
||||
let version_id = &test_env.dummy.project_alpha.version_id;
|
||||
let version_before = api
|
||||
.get_version_deserialized_common(version_id, USER_USER_PAT)
|
||||
.await;
|
||||
assert_eq!(version_before.files.len(), 1);
|
||||
let primary_before = version_before.files[0].clone();
|
||||
|
||||
let conflicting_file = TestFile::BasicModRandom {
|
||||
filename: primary_before.filename.clone(),
|
||||
bytes: TestFile::build_random_jar().bytes(),
|
||||
};
|
||||
let response = api
|
||||
.upload_file_to_version(
|
||||
version_id,
|
||||
&conflicting_file,
|
||||
USER_USER_PAT,
|
||||
)
|
||||
.await;
|
||||
assert_status!(&response, StatusCode::BAD_REQUEST);
|
||||
|
||||
let version_after = api
|
||||
.get_version_deserialized_common(version_id, USER_USER_PAT)
|
||||
.await;
|
||||
assert_eq!(version_after.files.len(), 1);
|
||||
let primary_after = &version_after.files[0];
|
||||
assert_eq!(primary_after.id, primary_before.id);
|
||||
assert_eq!(primary_after.hashes, primary_before.hashes);
|
||||
assert_eq!(primary_after.url, primary_before.url);
|
||||
assert_eq!(primary_after.filename, primary_before.filename);
|
||||
assert_eq!(primary_after.primary, primary_before.primary);
|
||||
assert_eq!(primary_after.size, primary_before.size);
|
||||
},
|
||||
)
|
||||
.await;
|
||||
}
|
||||
|
||||
#[actix_rt::test]
|
||||
async fn version_updates() {
|
||||
// Test setup and dummy data
|
||||
|
||||
Reference in New Issue
Block a user