From 4bec6679a8af2a2b5cb53610a80dece3b6d30bb4 Mon Sep 17 00:00:00 2001 From: alyx Date: Thu, 10 Aug 2023 03:10:54 -0400 Subject: lots of stuff. theming basically done, added some logging, frontend basically done. --- src/main.rs | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 13a9b7f..729482f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,9 +3,18 @@ use dotenv::var; use log::LevelFilter; use std::fs::File; -use lfm_embed::STATE; +use std::sync::Arc; +use lfm_embed::{STATE, ResponseCtx}; +use warp::Filter; -fn main() { +#[derive(serde::Deserialize, Debug)] +struct UserQuery { + #[serde(default)] + theme: Option> +} + +#[tokio::main] +async fn main() { env_logger::Builder::new() .filter_level(LevelFilter::Warn) .parse_filters(&var("LFME_LOG_LEVEL").unwrap_or_default()) @@ -23,5 +32,23 @@ fn main() { std::sync::LazyLock::force(&STATE); - + 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:?}"); + let (ctx, dur) = STATE.get_userinfo(&s).await; + let ResponseCtx(data, status) = ctx.into(); + + let theme = q.theme.unwrap_or_else(|| STATE.default_theme()); + warp::reply::with_header( + warp::reply::with_status( + warp::reply::html( + STATE.handlebars().render(&theme, &data).unwrap() + ), status + ), "Refresh", dur.as_secs() + ) + }); + + warp::serve(user) + .bind(([127,0,0,1], STATE.port())).await; } -- cgit v1.2.3-54-g00ecf