From 01b5dffeee8423fd714682f23a623b48281749bc Mon Sep 17 00:00:00 2001 From: Ginger Date: Fri, 13 Feb 2026 09:58:35 -0500 Subject: [PATCH] feat: Default index page improvements - Add project logo to footer and favicon - Display different messages depending on if first-run mode is active --- src/web/css/index.css | 9 +++++++++ src/web/mod.rs | 27 ++++++++++++++++++++------- src/web/templates/_layout.html.j2 | 4 +++- src/web/templates/index.html.j2 | 20 ++++++++++---------- src/web/templates/logo.svg | 1 + 5 files changed, 43 insertions(+), 18 deletions(-) create mode 120000 src/web/templates/logo.svg diff --git a/src/web/css/index.css b/src/web/css/index.css index dc1ce122..79ac7c2a 100644 --- a/src/web/css/index.css +++ b/src/web/css/index.css @@ -83,3 +83,12 @@ footer { color: transparent; filter: brightness(1.2); } + +b { + color: oklch(from var(--c2) var(--name-lightness) c h); +} + +.logo { + width: 100%; + height: 64px; +} diff --git a/src/web/mod.rs b/src/web/mod.rs index 9c6a5d83..25da1139 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -10,8 +10,9 @@ use conduwuit_build_metadata::{GIT_REMOTE_COMMIT_URL, GIT_REMOTE_WEB_URL, versio use conduwuit_service::state; pub fn build() -> Router { - let router = Router::::new(); - router.route("/", get(index_handler)) + Router::::new() + .route("/", get(index_handler)) + .route("/_continuwuity/logo.svg", get(logo_handler)) } async fn index_handler( @@ -19,22 +20,34 @@ async fn index_handler( ) -> Result { #[derive(Debug, Template)] #[template(path = "index.html.j2")] - struct Tmpl<'a> { + struct Index<'a> { nonce: &'a str, server_name: &'a str, + first_run: bool, } let nonce = rand::random::().to_string(); - let template = Tmpl { + let template = Index { nonce: &nonce, server_name: services.config.server_name.as_str(), + first_run: services.firstrun.is_first_run(), }; Ok(( - [(header::CONTENT_SECURITY_POLICY, format!("default-src 'none' 'nonce-{nonce}';"))], + [( + header::CONTENT_SECURITY_POLICY, + format!("default-src 'nonce-{nonce}'; img-src 'self';"), + )], Html(template.render()?), )) } +async fn logo_handler() -> impl IntoResponse { + ( + [(header::CONTENT_TYPE, "image/svg+xml")], + include_str!("templates/logo.svg").to_owned(), + ) +} + #[derive(Debug, thiserror::Error)] enum WebError { #[error("Failed to render template: {0}")] @@ -45,7 +58,7 @@ impl IntoResponse for WebError { fn into_response(self) -> Response { #[derive(Debug, Template)] #[template(path = "error.html.j2")] - struct Tmpl<'a> { + struct Error<'a> { nonce: &'a str, err: WebError, } @@ -55,7 +68,7 @@ impl IntoResponse for WebError { let status = match &self { | Self::Render(_) => StatusCode::INTERNAL_SERVER_ERROR, }; - let tmpl = Tmpl { nonce: &nonce, err: self }; + let tmpl = Error { nonce: &nonce, err: self }; if let Ok(body) = tmpl.render() { ( status, diff --git a/src/web/templates/_layout.html.j2 b/src/web/templates/_layout.html.j2 index d298b68c..fbae50b5 100644 --- a/src/web/templates/_layout.html.j2 +++ b/src/web/templates/_layout.html.j2 @@ -6,6 +6,7 @@ {% block title %}Continuwuity{% endblock %} +