fixed invalid post title breaking links

This commit is contained in:
2026-05-09 05:59:56 +02:00
parent bd18b96846
commit 801df057e0
6 changed files with 23 additions and 16 deletions
+14 -8
View File
@@ -115,16 +115,22 @@ pub async fn create_post(
return Err(AppError::Unauthorized);
}
validate_slug(&payload.slug)?;
let slug = slug::slugify(&payload.slug);
if slug.is_empty() {
return Err(AppError::BadRequest(
"Slug is empty after normalization (try ASCII letters/numbers)".to_string(),
));
}
validate_slug(&slug)?;
if let Some(ref old) = payload.old_slug {
validate_slug(old)?;
}
let posts_dir = state.data_dir.join("posts");
let file_path = posts_dir.join(format!("{}.md", payload.slug));
let file_path = posts_dir.join(format!("{}.md", slug));
if let Some(ref old_slug) = payload.old_slug {
if old_slug != &payload.slug {
if old_slug != &slug {
let old_path = posts_dir.join(format!("{}.md", old_slug));
if old_path.exists() {
if file_path.exists() {
@@ -134,11 +140,11 @@ pub async fn create_post(
}
let _guard = state.post_lock.lock().await;
fs::rename(&old_path, &file_path).map_err(|e| {
error!("Rename error from {} to {}: {}", old_slug, payload.slug, e);
error!("Rename error from {} to {}: {}", old_slug, slug, e);
AppError::Internal("Rename error".to_string(), Some(e.to_string()))
})?;
drop(_guard);
info!("Renamed post from {} to {}", old_slug, payload.slug);
info!("Renamed post from {} to {}", old_slug, slug);
}
}
}
@@ -150,11 +156,11 @@ pub async fn create_post(
draft: payload.draft,
};
let contents = serialize_post(&meta, &payload.content)?;
write_post_atomic(&state, &payload.slug, &contents).await?;
write_post_atomic(&state, &slug, &contents).await?;
info!("Post saved: {}", payload.slug);
info!("Post saved: {}", slug);
Ok(Json(PostDetail {
slug: payload.slug,
slug,
date: meta.date,
summary: meta.summary,
tags: meta.tags,