mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-07-07 20:06:36 +02:00
93 lines
3.2 KiB
Rust
93 lines
3.2 KiB
Rust
#![deny(clippy::all)]
|
|
|
|
use actix_web::{middleware::Logger, App, HttpServer};
|
|
use clap::Arg;
|
|
use taskchampion_sync_server::storage::SqliteStorage;
|
|
use taskchampion_sync_server::{Server, ServerConfig};
|
|
|
|
#[actix_web::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
env_logger::init();
|
|
let defaults = ServerConfig::default();
|
|
let default_snapshot_versions = defaults.snapshot_versions.to_string();
|
|
let default_snapshot_days = defaults.snapshot_days.to_string();
|
|
let matches = clap::App::new("taskchampion-sync-server")
|
|
.version(env!("CARGO_PKG_VERSION"))
|
|
.about("Server for TaskChampion")
|
|
.arg(
|
|
Arg::with_name("port")
|
|
.short("p")
|
|
.long("port")
|
|
.value_name("PORT")
|
|
.help("Port on which to serve")
|
|
.default_value("8080")
|
|
.takes_value(true)
|
|
.required(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("data-dir")
|
|
.short("d")
|
|
.long("data-dir")
|
|
.value_name("DIR")
|
|
.help("Directory in which to store data")
|
|
.default_value("/var/lib/taskchampion-sync-server")
|
|
.takes_value(true)
|
|
.required(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("snapshot-versions")
|
|
.long("snapshot-versions")
|
|
.value_name("NUM")
|
|
.help("Target number of versions between snapshots")
|
|
.default_value(&default_snapshot_versions)
|
|
.takes_value(true)
|
|
.required(false),
|
|
)
|
|
.arg(
|
|
Arg::with_name("snapshot-days")
|
|
.long("snapshot-days")
|
|
.value_name("NUM")
|
|
.help("Target number of days between snapshots")
|
|
.default_value(&default_snapshot_days)
|
|
.takes_value(true)
|
|
.required(false),
|
|
)
|
|
.get_matches();
|
|
|
|
let data_dir = matches.value_of("data-dir").unwrap();
|
|
let port = matches.value_of("port").unwrap();
|
|
let snapshot_versions = matches.value_of("snapshot-versions").unwrap();
|
|
let snapshot_days = matches.value_of("snapshot-versions").unwrap();
|
|
|
|
let config = ServerConfig::from_args(snapshot_days, snapshot_versions)?;
|
|
let server = Server::new(config, Box::new(SqliteStorage::new(data_dir)?));
|
|
|
|
log::warn!("Serving on port {}", port);
|
|
HttpServer::new(move || {
|
|
App::new()
|
|
.wrap(Logger::default())
|
|
.configure(|cfg| server.config(cfg))
|
|
})
|
|
.bind(format!("0.0.0.0:{}", port))?
|
|
.run()
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::*;
|
|
use actix_web::{test, App};
|
|
use taskchampion_sync_server::storage::InMemoryStorage;
|
|
|
|
#[actix_rt::test]
|
|
async fn test_index_get() {
|
|
let server = Server::new(Default::default(), Box::new(InMemoryStorage::new()));
|
|
let app = App::new().configure(|sc| server.config(sc));
|
|
let mut app = test::init_service(app).await;
|
|
|
|
let req = test::TestRequest::get().uri("/").to_request();
|
|
let resp = test::call_service(&mut app, req).await;
|
|
assert!(resp.status().is_success());
|
|
}
|
|
}
|