mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-14 02:22:21 +00:00
outsource app creation as a preparation for testing
This commit is contained in:
36
src/app.rs
Normal file
36
src/app.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use actix_web::body::MessageBody;
|
||||||
|
use actix_web::dev::{ServiceFactory, ServiceRequest, ServiceResponse};
|
||||||
|
use actix_web::middleware::{Logger, NormalizePath};
|
||||||
|
use actix_web::{web, App};
|
||||||
|
use rustical_api::configure_api;
|
||||||
|
use rustical_auth::CheckAuthentication;
|
||||||
|
use rustical_caldav::{configure_dav, configure_well_known};
|
||||||
|
use rustical_store::calendar::CalendarStore;
|
||||||
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
|
pub fn make_app<CS: CalendarStore + ?Sized, A: CheckAuthentication>(
|
||||||
|
cal_store: Arc<RwLock<CS>>,
|
||||||
|
auth: Arc<A>,
|
||||||
|
) -> App<
|
||||||
|
impl ServiceFactory<
|
||||||
|
ServiceRequest,
|
||||||
|
Response = ServiceResponse<impl MessageBody>,
|
||||||
|
Config = (),
|
||||||
|
InitError = (),
|
||||||
|
Error = actix_web::Error,
|
||||||
|
>,
|
||||||
|
> {
|
||||||
|
App::new()
|
||||||
|
.wrap(Logger::new("[%s] %r"))
|
||||||
|
.wrap(NormalizePath::trim())
|
||||||
|
.service(web::scope("/caldav").configure(|cfg| {
|
||||||
|
configure_dav(cfg, "/caldav".to_string(), auth.clone(), cal_store.clone())
|
||||||
|
}))
|
||||||
|
.service(
|
||||||
|
web::scope("/.well-known")
|
||||||
|
.configure(|cfg| configure_well_known(cfg, "/caldav".to_string())),
|
||||||
|
)
|
||||||
|
.service(web::scope("/api").configure(|cfg| configure_api(cfg, cal_store.clone().into())))
|
||||||
|
}
|
||||||
31
src/main.rs
31
src/main.rs
@@ -1,12 +1,10 @@
|
|||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use actix_web::middleware::{Logger, NormalizePath};
|
use actix_web::HttpServer;
|
||||||
use actix_web::{web, App, HttpServer};
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use app::make_app;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use config::{CalendarStoreConfig, SqliteCalendarStoreConfig, TomlCalendarStoreConfig};
|
use config::{CalendarStoreConfig, SqliteCalendarStoreConfig, TomlCalendarStoreConfig};
|
||||||
use rustical_api::configure_api;
|
|
||||||
use rustical_auth::AuthProvider;
|
use rustical_auth::AuthProvider;
|
||||||
use rustical_caldav::{configure_dav, configure_well_known};
|
|
||||||
use rustical_store::calendar::CalendarStore;
|
use rustical_store::calendar::CalendarStore;
|
||||||
use rustical_store::sqlite_store::SqliteCalendarStore;
|
use rustical_store::sqlite_store::SqliteCalendarStore;
|
||||||
use rustical_store::toml_store::TomlCalendarStore;
|
use rustical_store::toml_store::TomlCalendarStore;
|
||||||
@@ -16,6 +14,7 @@ use std::fs;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
|
mod app;
|
||||||
mod config;
|
mod config;
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
@@ -66,24 +65,10 @@ async fn main() -> Result<()> {
|
|||||||
|
|
||||||
let auth: Arc<AuthProvider> = Arc::new(config.auth.into());
|
let auth: Arc<AuthProvider> = Arc::new(config.auth.into());
|
||||||
|
|
||||||
HttpServer::new(move || {
|
HttpServer::new(move || make_app(cal_store.clone(), auth.clone()))
|
||||||
let cal_store = cal_store.clone();
|
.bind((config.http.host, config.http.port))?
|
||||||
App::new()
|
.run()
|
||||||
.wrap(Logger::new("[%s] %r"))
|
.await?;
|
||||||
.wrap(NormalizePath::trim())
|
|
||||||
.service(web::scope("/caldav").configure(|cfg| {
|
|
||||||
configure_dav(cfg, "/caldav".to_string(), auth.clone(), cal_store.clone())
|
|
||||||
}))
|
|
||||||
.service(
|
|
||||||
web::scope("/.well-known")
|
|
||||||
.configure(|cfg| configure_well_known(cfg, "/caldav".to_string())),
|
|
||||||
)
|
|
||||||
.service(
|
|
||||||
web::scope("/api").configure(|cfg| configure_api(cfg, cal_store.clone().into())),
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.bind((config.http.host, config.http.port))?
|
|
||||||
.run()
|
|
||||||
.await?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user