From d3b578fe8fe266f0d849e71bc2f4f3254c7c80a4 Mon Sep 17 00:00:00 2001 From: 4JX <79868816+4JX@users.noreply.github.com> Date: Fri, 27 May 2022 01:32:32 +0000 Subject: [PATCH] Fix wrongfully parsed hashes for the version_files route(s) (#353) * Fix wrongfully parsed hashes for the version_files route(s) * Remove the hex dependency * Remove unwraps . . Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com> --- Cargo.lock | 1 - Cargo.toml | 1 - src/routes/version_file.rs | 51 +++++++++++++++++++++++++++----------- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa20f472..f8719adb 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 c8b6be8e..2a23b85e 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 5a1ba107..af27ccc9 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 + )))); + } } }