From 9edafd94b00a73662d51824dbcba0a018e2140cf Mon Sep 17 00:00:00 2001 From: alyx Date: Thu, 10 Aug 2023 20:45:01 -0400 Subject: Create plain theme, do some escaping, fix some busted envvars, document themes. --- src/main.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 729482f..b787049 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use dotenv::var; use log::LevelFilter; +use std::collections::BTreeMap; use std::fs::File; use std::sync::Arc; use lfm_embed::{STATE, ResponseCtx}; @@ -10,7 +11,9 @@ use warp::Filter; #[derive(serde::Deserialize, Debug)] struct UserQuery { #[serde(default)] - theme: Option> + theme: Option>, + #[serde(flatten)] + rest: BTreeMap } #[tokio::main] @@ -35,17 +38,20 @@ async fn main() { let user = warp::path!("user" / String) .and(warp::query::()) .then(|s, q: UserQuery| async move { - log::info!(target: "lfm::server::user", "Handling request for user `{s}` with {q:?}"); + log::debug!(target: "lfm::server::user", "Handling request for user `{s}` with {q:?}"); let (ctx, dur) = STATE.get_userinfo(&s).await; - let ResponseCtx(data, status) = ctx.into(); - - let theme = q.theme.unwrap_or_else(|| STATE.default_theme()); + let ResponseCtx(mut data, status) = (ctx, q.rest).into(); + + let theme = q.theme.filter(|a| STATE.handlebars().has_template(&a)).unwrap_or_else(|| STATE.default_theme()); + log::debug!(target: "lfm::server::user", "Using theme {theme}"); warp::reply::with_header( - warp::reply::with_status( - warp::reply::html( - STATE.handlebars().render(&theme, &data).unwrap() - ), status - ), "Refresh", dur.as_secs() + warp::reply::with_header( + warp::reply::with_status( + warp::reply::html( + STATE.handlebars().render(&theme, &data).unwrap() + ), status + ), "Refresh", dur.as_secs() + ), "X-Selected-Theme", theme.as_ref() ) }); -- cgit v1.2.3-54-g00ecf