feat: allow configuring redirect url

This commit is contained in:
əlemi 2024-01-03 23:21:22 +01:00
parent 7fe7463b54
commit 6daf50a81e
Signed by: alemi
GPG key ID: A4895B84D311642C
3 changed files with 17 additions and 4 deletions

View file

@ -17,8 +17,19 @@ pub struct Config {
#[serde(default)] #[serde(default)]
pub template: ConfigTemplate, pub template: ConfigTemplate,
#[serde(default)]
pub routing: ConfigRouting,
} }
#[serde_inline_default]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, serde_default::DefaultFromSerde)]
pub struct ConfigRouting {
#[serde_inline_default("/".into())]
pub redirect: String,
}
#[serde_inline_default] #[serde_inline_default]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, serde_default::DefaultFromSerde)] #[derive(Debug, Clone, serde::Serialize, serde::Deserialize, serde_default::DefaultFromSerde)]
pub struct ConfigOverrides { pub struct ConfigOverrides {

View file

@ -115,7 +115,7 @@ async fn main() {
if_using_sqlite_driver_and_file_is_missing_create_it_beforehand(&args.db); if_using_sqlite_driver_and_file_is_missing_create_it_beforehand(&args.db);
let storage = StorageProvider::connect(&args.db, config.overrides).await.unwrap(); let storage = StorageProvider::connect(&args.db, config.overrides).await.unwrap();
let mut state = Context::new(storage, #[cfg(feature = "web")] config.template); let mut state = Context::new(storage, config.routing, #[cfg(feature = "web")] config.template);
for notifier in config.notifiers.providers { for notifier in config.notifiers.providers {
match notifier { match notifier {

View file

@ -3,7 +3,7 @@ use std::sync::Arc;
use axum::{Json, Form, Router, routing::{put, post, get}, extract::{State, Query}, response::{Redirect, Html}}; use axum::{Json, Form, Router, routing::{put, post, get}, extract::{State, Query}, response::{Redirect, Html}};
use axum_extra::response::{Css, JavaScript}; use axum_extra::response::{Css, JavaScript};
use crate::{notifications::NotificationProcessor, model::{Page, PageOptions, PageInsertion, PageView}, storage::StorageProvider, web::IndexTemplate}; use crate::{notifications::NotificationProcessor, model::{Page, PageOptions, PageInsertion, PageView}, storage::StorageProvider, web::IndexTemplate, config::ConfigRouting};
pub fn create_router_with_app_routes(state: Context) -> Router { pub fn create_router_with_app_routes(state: Context) -> Router {
let mut router = Router::new() let mut router = Router::new()
@ -31,6 +31,7 @@ pub fn create_router_with_app_routes(state: Context) -> Router {
pub struct Context { pub struct Context {
providers: Vec<Box<dyn NotificationProcessor<Page>>>, providers: Vec<Box<dyn NotificationProcessor<Page>>>,
storage: StorageProvider, storage: StorageProvider,
routing: ConfigRouting,
#[cfg(feature = "web")] #[cfg(feature = "web")]
template: crate::config::ConfigTemplate, template: crate::config::ConfigTemplate,
@ -39,11 +40,12 @@ pub struct Context {
impl Context { impl Context {
pub fn new( pub fn new(
storage: StorageProvider, storage: StorageProvider,
routing: ConfigRouting,
#[cfg(feature = "web")] template: crate::config::ConfigTemplate, #[cfg(feature = "web")] template: crate::config::ConfigTemplate,
) -> Self { ) -> Self {
Context { Context {
providers: Vec::new(), providers: Vec::new(),
storage, storage, routing,
#[cfg(feature = "web")] template, #[cfg(feature = "web")] template,
} }
} }
@ -61,7 +63,7 @@ async fn send_suggestion(payload: PageInsertion, state: Arc<Context>) -> Result<
for p in state.providers.iter() { for p in state.providers.iter() {
p.process(&page).await; p.process(&page).await;
} }
Ok(Redirect::to("/")) Ok(Redirect::to(&state.routing.redirect))
}, },
} }
} }