Fix version name can be empty string (#537)

This commit is contained in:
Magnus Jensen
2023-03-04 00:20:04 +01:00
committed by GitHub
parent a2eb0bf9fe
commit 3c1e3cd38e
5 changed files with 45 additions and 6 deletions

View File

@@ -140,7 +140,10 @@ fn default_requested_status() -> ProjectStatus {
#[derive(Serialize, Deserialize, Validate, Clone)] #[derive(Serialize, Deserialize, Validate, Clone)]
struct ProjectCreateData { struct ProjectCreateData {
#[validate(length(min = 3, max = 64))] #[validate(
length(min = 3, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
#[serde(alias = "mod_name")] #[serde(alias = "mod_name")]
/// The title or name of the project. /// The title or name of the project.
pub title: String, pub title: String,

View File

@@ -289,7 +289,10 @@ pub async fn dependency_list(
/// A project returned from the API /// A project returned from the API
#[derive(Serialize, Deserialize, Validate)] #[derive(Serialize, Deserialize, Validate)]
pub struct EditProject { pub struct EditProject {
#[validate(length(min = 3, max = 64))] #[validate(
length(min = 3, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
pub title: Option<String>, pub title: Option<String>,
#[validate(length(min = 3, max = 256))] #[validate(length(min = 3, max = 256))]
pub description: Option<String>, pub description: Option<String>,
@@ -441,7 +444,7 @@ pub async fn project_edit(
SET title = $1 SET title = $1
WHERE (id = $2) WHERE (id = $2)
", ",
title, title.trim(),
id as database::models::ids::ProjectId, id as database::models::ids::ProjectId,
) )
.execute(&mut *transaction) .execute(&mut *transaction)

View File

@@ -41,7 +41,10 @@ pub struct InitialVersionData {
regex = "crate::util::validate::RE_URL_SAFE" regex = "crate::util::validate::RE_URL_SAFE"
)] )]
pub version_number: String, pub version_number: String,
#[validate(length(min = 1, max = 64))] #[validate(
length(min = 1, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
#[serde(alias = "name")] #[serde(alias = "name")]
pub version_title: String, pub version_title: String,
#[validate(length(max = 65536))] #[validate(length(max = 65536))]

View File

@@ -216,7 +216,10 @@ pub async fn version_get(
#[derive(Serialize, Deserialize, Validate)] #[derive(Serialize, Deserialize, Validate)]
pub struct EditVersion { pub struct EditVersion {
#[validate(length(min = 1, max = 64))] #[validate(
length(min = 1, max = 64),
custom(function = "crate::util::validate::validate_name")
)]
pub name: Option<String>, pub name: Option<String>,
#[validate( #[validate(
length(min = 1, max = 32), length(min = 1, max = 32),
@@ -309,7 +312,7 @@ pub async fn version_edit(
SET name = $1 SET name = $1
WHERE (id = $2) WHERE (id = $2)
", ",
name, name.trim(),
id as database::models::ids::VersionId, id as database::models::ids::VersionId,
) )
.execute(&mut *transaction) .execute(&mut *transaction)

View File

@@ -97,3 +97,30 @@ pub fn validate_url(value: &str) -> Result<(), validator::ValidationError> {
Ok(()) Ok(())
} }
pub fn validate_name(value: &str) -> Result<(), validator::ValidationError> {
if value.trim().is_empty() {
return Err(validator::ValidationError::new(
"Name cannot contain only whitespace.",
));
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn validate_name_with_valid_input() {
let result = validate_name("My Test mod");
assert!(result.is_ok());
}
#[test]
fn validate_name_with_invalid_input_returns_error() {
let result = validate_name(" ");
assert!(result.is_err());
}
}