From c51df7daf293669e9b5f97d7551d13091ebd1ab9 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Thu, 8 Sep 2022 00:59:47 +0530 Subject: [PATCH] feat: serve previews --- src/main.rs | 1 + src/serve.rs | 67 ++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/main.rs b/src/main.rs index f2d3a1a..a6ba681 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,6 +29,7 @@ mod errors; mod git; mod meta; mod page; +mod preview; mod routes; mod serve; mod settings; diff --git a/src/serve.rs b/src/serve.rs index 2f08a3a..5fe42d0 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -56,28 +56,59 @@ async fn index(req: HttpRequest, ctx: AppCtx) -> ServiceResult { } if host == ctx.settings.server.domain || host == "localhost" { - Ok(HttpResponse::Ok() + return Ok(HttpResponse::Ok() .content_type(ContentType::html()) - .body("Welcome to Librepages!")) - } else { - match find_page(host, &ctx) { - Some(page) => { - log::debug!("Page found"); - let content = crate::git::read_file(&page.path, req.uri().path())?; - let mime = if let Some(mime) = content.mime.first_raw() { - mime - } else { - "text/html; charset=utf-8" - }; + .body("Welcome to Librepages!")); + } - Ok(HttpResponse::Ok() - //.content_type(ContentType::html()) - .content_type(mime) - .body(content.content.bytes())) - } - None => Err(ServiceError::WebsiteNotFound), + if host.contains(&ctx.settings.server.domain) { + let extractor = crate::preview::Preview::new(&ctx); + if let Some(preview_branch) = extractor.extract(host) { + unimplemented!( + "map a local subdomain on settings.server.domain and use it to fetch page" + ); + let res = match find_page(host, &ctx) { + Some(page) => { + log::debug!("Page found"); + let content = crate::git::read_preview_file( + &page.path, + preview_branch, + req.uri().path(), + )?; + let mime = if let Some(mime) = content.mime.first_raw() { + mime + } else { + "text/html; charset=utf-8" + }; + + Ok(HttpResponse::Ok() + //.content_type(ContentType::html()) + .content_type(mime) + .body(content.content.bytes())) + } + None => Err(ServiceError::WebsiteNotFound), + }; + return res; } } + + match find_page(host, &ctx) { + Some(page) => { + log::debug!("Page found"); + let content = crate::git::read_file(&page.path, req.uri().path())?; + let mime = if let Some(mime) = content.mime.first_raw() { + mime + } else { + "text/html; charset=utf-8" + }; + + Ok(HttpResponse::Ok() + //.content_type(ContentType::html()) + .content_type(mime) + .body(content.content.bytes())) + } + None => Err(ServiceError::WebsiteNotFound), + } } pub fn services(cfg: &mut web::ServiceConfig) {