fixed invalid post title breaking links
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user