108 lines
3.4 KiB
Rust
108 lines
3.4 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::routes::pages::weeks::BirthDate;
|
|
use crate::util::EventNotifier;
|
|
use bincode::{deserialize, serialize};
|
|
use chrono::NaiveDate;
|
|
use dotenv::dotenv;
|
|
use rocket::fs::FileServer;
|
|
use rocket_dyn_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 birth_date: BirthDate = env::var("BIRTH_DATE")
|
|
.map(|s| BirthDate(s.parse().expect("failed to parse BIRTH_DATE")))
|
|
.unwrap_or_else(|_| {
|
|
BirthDate(NaiveDate::from_ymd_opt(2000, 1, 1).expect("Date is correct"))
|
|
});
|
|
|
|
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(birth_date)
|
|
.manage(EventNotifier::new())
|
|
.mount("/static", FileServer::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::session::start_session,
|
|
routes::api::session::end_session,
|
|
routes::api::session::edit_session,
|
|
routes::api::session::delete_session,
|
|
routes::api::wait_for_event,
|
|
auth::login,
|
|
],
|
|
)
|
|
.register("/", rocket::catchers![auth::login_page,]);
|
|
|
|
rocket.launch().await.expect("rocket failed to launch");
|
|
|
|
Ok(())
|
|
}
|