Files
stl/server/src/main.rs
2021-05-31 01:26:51 +02:00

99 lines
3.1 KiB
Rust

mod auth;
mod database;
mod handlebars_util;
mod routes;
mod status_json;
mod util;
use crate::auth::MasterPassword;
use crate::database::migrations::migrate;
use crate::database::unversioned::global::schema_version;
use crate::database::SCHEMA_VERSION;
use crate::util::EventNotifier;
use bincode::{deserialize, serialize};
use dotenv::dotenv;
use rocket_contrib::serve::StaticFiles;
use rocket_contrib::templates::Template;
use std::{env, io};
#[rocket::main]
async fn main() -> io::Result<()> {
dotenv().ok();
let db_path = env::var("DB_PATH").expect("DB_PATH not set");
let master_pass: MasterPassword = env::var("STL_PASSWORD")
.unwrap_or_else(|_| {
eprintln!(r#"STL_PASSWORD not set, defaulting to "password""#);
"password".into()
})
.into();
let mut sled = sled::open(db_path)?;
match sled.insert(
serialize(schema_version::K).unwrap(),
serialize(&SCHEMA_VERSION).unwrap(),
)? {
Some(prev_schema_version) => {
let prev_schema_version: schema_version::V = deserialize(&prev_schema_version).unwrap();
println!(
"Schema version: {}, previously: {}",
SCHEMA_VERSION, prev_schema_version
);
migrate(&mut sled, prev_schema_version, SCHEMA_VERSION).expect("Migration failed")
}
None => {
println!("Schema version: {}, previously: None", SCHEMA_VERSION);
}
}
// TODO: Add compression fairing once rocket_contrib 0.5 re-implements it
let rocket = rocket::build()
.attach(Template::custom(|engines| {
handlebars_util::register_helpers(engines)
}))
.manage(sled)
.manage(master_pass)
.manage(EventNotifier::new())
.mount("/static", StaticFiles::from("static"))
.mount(
"/",
rocket::routes![
routes::pages::index,
routes::pages::history,
routes::pages::session_edit,
routes::pages::start_session,
routes::pages::end_session,
routes::pages::bump_session,
routes::pages::stats::single_stats,
routes::pages::stats::all_stats,
routes::pages::weeks::weeks,
],
)
.mount(
"/api",
rocket::routes![
routes::api::category::get,
routes::api::category::get_all,
routes::api::category::create,
routes::api::category::archive,
routes::api::category::unarchive,
routes::api::category::remove_parent,
routes::api::category::set_parent,
routes::api::start_session,
routes::api::end_session,
routes::api::edit_session,
routes::api::delete_session,
routes::api::wait_for_event,
auth::login,
],
)
.register("/", rocket::catchers![auth::login_page,]);
rocket.launch().await.expect("rocket failed to launch");
Ok(())
}