diff --git a/crates/lib/page/src/servable/page.rs b/crates/lib/page/src/servable/page.rs index b35b079..8d5ca7c 100644 --- a/crates/lib/page/src/servable/page.rs +++ b/crates/lib/page/src/servable/page.rs @@ -87,6 +87,8 @@ pub struct Page { &'a RequestContext, ) -> Pin + 'a + Send + Sync>>, >, + + pub response_code: StatusCode, } impl Default for Page { @@ -96,6 +98,7 @@ impl Default for Page { html_ttl: Some(TimeDelta::days(1)), generate_html: Box::new(|_, _| Box::pin(async { html!() })), immutable: true, + response_code: StatusCode::OK, } } } @@ -115,7 +118,7 @@ impl Servable for Page { let html = self.generate_html(ctx).await; return Rendered { - code: StatusCode::OK, + code: self.response_code, body: RenderedBody::Markup(html), ttl: self.html_ttl, immutable: self.immutable, diff --git a/crates/service/service-webpage/src/pages/handouts.rs b/crates/service/service-webpage/src/pages/handouts.rs index 0eb03c2..06f9f16 100644 --- a/crates/service/service-webpage/src/pages/handouts.rs +++ b/crates/service/service-webpage/src/pages/handouts.rs @@ -8,6 +8,7 @@ use chrono::{DateTime, TimeDelta, Utc}; use maud::{Markup, PreEscaped, html}; use page::{DeviceType, RequestContext, page::Page}; use parking_lot::Mutex; +use reqwest::StatusCode; use serde::Deserialize; use tracing::{debug, warn}; @@ -201,6 +202,7 @@ pub fn handouts() -> Page { meta, html_ttl: Some(TimeDelta::seconds(300)), immutable: false, + response_code: StatusCode::OK, generate_html: Box::new(move |page, ctx| { let html = html.clone(); // TODO: find a way to not clone here diff --git a/crates/service/service-webpage/src/pages/mod.rs b/crates/service/service-webpage/src/pages/mod.rs index fc7106d..ae27c17 100644 --- a/crates/service/service-webpage/src/pages/mod.rs +++ b/crates/service/service-webpage/src/pages/mod.rs @@ -1,6 +1,7 @@ use chrono::TimeDelta; use maud::{DOCTYPE, Markup, PreEscaped, html}; use page::page::{Page, PageMetadata}; +use reqwest::StatusCode; use std::pin::Pin; use crate::components::{ @@ -69,6 +70,7 @@ fn page_from_markdown(md: impl Into, default_image: Option) -> P Page { meta, immutable: true, + response_code: StatusCode::OK, html_ttl: Some(TimeDelta::days(1)), generate_html: Box::new(move |page, ctx| { diff --git a/crates/service/service-webpage/src/pages/notfound.rs b/crates/service/service-webpage/src/pages/notfound.rs index 6e848f8..ab3a6be 100644 --- a/crates/service/service-webpage/src/pages/notfound.rs +++ b/crates/service/service-webpage/src/pages/notfound.rs @@ -1,5 +1,6 @@ use maud::html; use page::page::{Page, PageMetadata}; +use reqwest::StatusCode; use crate::pages::page_wrapper; @@ -13,6 +14,7 @@ pub fn notfound() -> Page { backlinks: Some(false), }, + response_code: StatusCode::NOT_FOUND, generate_html: Box::new(move |page, _ctx| { Box::pin(async { let inner = html! {