From 8c6ea8948f183acdbb2809c8be7a5c8b41a72c35 Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Sun, 31 Mar 2024 14:43:51 -0400 Subject: [PATCH] Add Redis session store layer --- src/main.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main.rs b/src/main.rs index 641e4c3..e85a3aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,6 +19,8 @@ async fn main() { use leptos_axum::{generate_route_list, LeptosRoutes}; use libretunes::app::*; use libretunes::fileserv::{file_and_error_handler, get_static_file}; + use tower_sessions::SessionManagerLayer; + use tower_sessions_redis_store::{fred::prelude::*, RedisStore}; use dotenv::dotenv; dotenv().ok(); @@ -27,6 +29,13 @@ async fn main() { libretunes::database::migrate(); let redis_url = std::env::var("REDIS_URL").expect("REDIS_URL must be set"); + let redis_config = RedisConfig::from_url(&redis_url).expect(&format!("Unable to parse Redis URL: {}", redis_url)); + let redis_pool = RedisPool::new(redis_config, None, None, None, 1).expect("Unable to create Redis pool"); + redis_pool.connect(); + redis_pool.wait_for_connect().await.expect("Unable to connect to Redis"); + + let session_store = RedisStore::new(redis_pool); + let session_layer = SessionManagerLayer::new(session_store); let conf = get_configuration(None).await.unwrap(); let leptos_options = conf.leptos_options; @@ -38,6 +47,7 @@ async fn main() { .route("/api/*fn_name", post(leptos_axum::handle_server_fns)) .leptos_routes(&leptos_options, routes, App) .route("/assets/*uri", get(|uri| get_static_file(uri, ""))) + .layer(session_layer) .fallback(file_and_error_handler) .with_state(leptos_options);