diff --git a/Cargo.lock b/Cargo.lock index aa20f472d..f8719adba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1416,7 +1416,6 @@ dependencies = [ "futures", "futures-timer", "gumdrop", - "hex", "itertools", "lazy_static", "log", diff --git a/Cargo.toml b/Cargo.toml index c8b6be8ee..2a23b85e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,4 +61,3 @@ sqlx = { version = "0.5.11", features = ["runtime-actix-rustls", "postgres", "ti bytes = "1.1.0" dashmap = "5.2.0" -hex = "0.4.3" diff --git a/src/routes/version_file.rs b/src/routes/version_file.rs index 5a1ba107b..af27ccc9c 100644 --- a/src/routes/version_file.rs +++ b/src/routes/version_file.rs @@ -1,5 +1,5 @@ use super::ApiError; -use crate::database::models::version_item::QueryVersion; +use crate::database::models::{version_item::QueryVersion, DatabaseError}; use crate::file_hosting::FileHost; use crate::models::projects::{GameVersion, Loader, Version}; use crate::models::teams::Permissions; @@ -326,7 +326,7 @@ pub async fn get_versions_from_hashes( ) .await?; - let response: Vec<_> = result + let response: Result, ApiError> = result .into_iter() .filter_map(|row| { versions_data @@ -334,14 +334,21 @@ pub async fn get_versions_from_hashes( .into_iter() .find(|x| x.id.0 == row.version_id) .map(|v| { - ( - hex::encode(row.hash), - crate::models::projects::Version::from(v), - ) + if let Ok(parsed_hash) = String::from_utf8(row.hash) { + Ok(( + parsed_hash, + crate::models::projects::Version::from(v), + )) + } else { + Err(ApiError::Database(DatabaseError::Other(format!( + "Could not parse hash for version {}", + row.version_id + )))) + } }) }) .collect(); - Ok(HttpResponse::Ok().json(response)) + Ok(HttpResponse::Ok().json(response?)) } #[post("download")] @@ -372,10 +379,19 @@ pub async fn download_files( let response = result .into_iter() - .map(|row| (hex::encode(row.hash), row.url)) - .collect::>(); + .map(|row| { + if let Ok(parsed_hash) = String::from_utf8(row.hash) { + Ok((parsed_hash, row.url)) + } else { + Err(ApiError::Database(DatabaseError::Other(format!( + "Could not parse hash for version {}", + row.version_id + )))) + } + }) + .collect::, ApiError>>(); - Ok(HttpResponse::Ok().json(response)) + Ok(HttpResponse::Ok().json(response?)) } #[derive(Deserialize)] @@ -451,10 +467,17 @@ pub async fn update_files( if let Some(version) = versions.iter().find(|x| x.id.0 == row.version_id) { - response.insert( - hex::encode(&row.hash), - models::projects::Version::from(version.clone()), - ); + if let Ok(parsed_hash) = String::from_utf8(row.hash.clone()) { + response.insert( + parsed_hash, + models::projects::Version::from(version.clone()), + ); + } else { + return Err(ApiError::Database(DatabaseError::Other(format!( + "Could not parse hash for version {}", + row.version_id + )))); + } } }