From 2272eaa90c79b6cff23d263ad429eb3d70e8fb65 Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Thu, 7 Dec 2023 16:54:47 +0530 Subject: [PATCH] feat: use medium.com's URL patterns closes: https://github.com/realaravinth/libmedium/issues/28 --- src/proxy.rs | 20 ++++++++++++++++++++ src/settings.rs | 1 - 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/proxy.rs b/src/proxy.rs index d177a86..c7480e8 100644 --- a/src/proxy.rs +++ b/src/proxy.rs @@ -34,6 +34,7 @@ pub mod routes { pub by_post_id: &'static str, pub page: &'static str, pub asset: &'static str, + pub top_level_post: &'static str, } impl Proxy { @@ -43,6 +44,7 @@ pub mod routes { by_post_id: "/utils/post/{post}", page: "/{username}/{post}", asset: "/asset/medium/{name}", + top_level_post: "/{post}", } } pub fn get_page(&self, username: &str, post: &str) -> String { @@ -167,6 +169,23 @@ async fn by_post_id(path: web::Path, data: AppData) -> impl Responder { .finish() } +#[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.proxy.top_level_post")] +async fn by_top_level_post(path: web::Path, data: AppData) -> impl Responder { + if let Some(post_id) = path.split('-').last() { + let post_data = data.get_post_light(post_id).await; + HttpResponse::Found() + .append_header(( + header::LOCATION, + crate::V1_API_ROUTES + .proxy + .get_page(&post_data.username, &post_data.slug), + )) + .finish() + } else { + HttpResponse::NotFound().body("Post not found, please file bug report") + } +} + #[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.proxy.page")] async fn page(path: web::Path<(String, String)>, data: AppData) -> impl Responder { let post_id = path.1.split('-').last(); @@ -238,6 +257,7 @@ pub fn services(cfg: &mut web::ServiceConfig) { cfg.service(by_post_id); cfg.service(assets); cfg.service(page); + cfg.service(by_top_level_post); cfg.service(index); } diff --git a/src/settings.rs b/src/settings.rs index 0a5acda..3ffe7bb 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -69,7 +69,6 @@ impl Settings { s = s.add_source(Environment::with_prefix("PAGES").separator("__")); - match env::var("PORT") { Ok(val) => { s = s.set_override("server.port", val).unwrap();