diff --git a/posts/a-new-post.md b/posts/a-new-post.md
index eb52f41..3b3ff84 100644
--- a/posts/a-new-post.md
+++ b/posts/a-new-post.md
@@ -8,4 +8,6 @@ This is a sub-heading.
## Image
-
+
+
+
diff --git a/src/main.rs b/src/main.rs
index 37239b0..a8a7122 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,6 @@
+mod git_tracker;
mod post_manager;
mod template_engine;
-mod git_tracker;
use axum::{
extract::{Path, State},
@@ -28,11 +28,14 @@ async fn main() {
post_manager: post_manager.clone(),
};
+ let p_router = Router::new()
+ .route("/:post_name", get(post_handler))
+ .fallback_service(ServeDir::new("posts"));
+
let app = Router::new()
.route("/", get(index_handler))
- .nest_service("/posts", ServeDir::new("posts"))
.route("/:page", get(all_handler))
- .route("/p/:post_name", get(post_handler))
+ .nest("/p", p_router)
.with_state(app_state);
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
@@ -67,11 +70,11 @@ async fn post_handler(
State(state): State,
Path(post_name): Path,
) -> impl IntoResponse {
- let manager = state.post_manager.read().await;
-
- if post_name.contains("..") || post_name.contains("/") {
+ if post_name.contains("..") {
return (StatusCode::NOT_FOUND, "Invalid path").into_response();
}
+
+ let manager = state.post_manager.read().await;
match manager.get_post(&post_name) {
Some(_post) => {
drop(manager);
@@ -84,10 +87,8 @@ async fn post_handler(
}
}
-async fn render_template(
- template_name: &str,
- state: &AppState,
-) -> Result {
+
+async fn render_template(template_name: &str, state: &AppState) -> Result {
let template_path = format!("templates/{}", template_name);
let template_content = std::fs::read_to_string(&template_path)
.map_err(|e| format!("Failed to read template: {}", e))?;