kanidm/src/server/main.rs

102 lines
2.5 KiB
Rust
Raw Normal View History

2018-09-29 09:54:16 +02:00
extern crate actix;
extern crate env_logger;
2018-09-29 09:54:16 +02:00
extern crate rsidm;
extern crate structopt;
#[macro_use]
extern crate log;
2018-11-26 07:13:22 +01:00
use rsidm::config::Configuration;
use rsidm::core::{backup_server_core, create_server_core, restore_server_core};
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
struct ServerOpt {
#[structopt(short = "d", long = "debug")]
debug: bool,
#[structopt(parse(from_os_str), short = "D", long = "db_path")]
db_path: PathBuf,
}
#[derive(Debug, StructOpt)]
struct BackupOpt {
#[structopt(parse(from_os_str))]
path: PathBuf,
#[structopt(flatten)]
serveropts: ServerOpt,
}
#[derive(Debug, StructOpt)]
struct RestoreOpt {
#[structopt(parse(from_os_str))]
path: PathBuf,
#[structopt(flatten)]
serveropts: ServerOpt,
}
#[derive(Debug, StructOpt)]
enum Opt {
#[structopt(name = "server")]
Server(ServerOpt),
#[structopt(name = "backup")]
Backup(BackupOpt),
#[structopt(name = "restore")]
Restore(RestoreOpt),
}
2018-11-11 22:59:09 +01:00
2018-09-29 09:54:16 +02:00
fn main() {
// Read cli args, determine if we should backup/restore
let opt = Opt::from_args();
// Read our config (if any)
let mut config = Configuration::new();
// Apply any cli overrides?
// Configure the server logger. This could be adjusted based on what config
// says.
::std::env::set_var("RUST_LOG", "actix_web=info,rsidm=info");
env_logger::init();
match opt {
Opt::Server(sopt) => {
info!("Running in server mode ...");
config.update_db_path(&sopt.db_path);
let sys = actix::System::new("rsidm-server");
create_server_core(config);
let _ = sys.run();
}
Opt::Backup(bopt) => {
info!("Running in backup mode ...");
config.update_db_path(&bopt.serveropts.db_path);
let p = match bopt.path.to_str() {
Some(p) => p,
None => {
error!("Invalid backup path");
std::process::exit(1);
}
};
backup_server_core(config, p);
}
Opt::Restore(ropt) => {
info!("Running in restore mode ...");
config.update_db_path(&ropt.serveropts.db_path);
2018-09-29 09:54:16 +02:00
let p = match ropt.path.to_str() {
Some(p) => p,
None => {
error!("Invalid restore path");
std::process::exit(1);
}
};
restore_server_core(config, p);
}
}
2018-09-29 09:54:16 +02:00
}