mod data; mod redirecter; mod status; mod template; use data::Data; use redirecter::Redirecter; use rocket::{ fs::{FileServer, Options}, get, response::content::RawHtml, routes, State, }; use std::process::exit; use template::Template; #[get("/")] async fn index(data: &State) -> RawHtml { index_gen(data, false).await } #[get("/dbg")] async fn index_dbg(data: &State) -> RawHtml { index_gen(data, true).await } async fn index_gen(data: &State, dbg: bool) -> RawHtml { let status = data.status_async(dbg).await; return RawHtml(data.index.gen(&status, dbg, data.globals.clone())); } #[get("/int")] async fn int(data: &State) -> RawHtml<&str> { RawHtml(&data.int_html) } #[rocket::launch] fn rocket() -> _ { let int_file = match std::fs::read_to_string("int.html") { Ok(v) => v, Err(e) => { eprintln!("Could not read int.html: {e}"); exit(1); } }; let index_file = match std::fs::read_to_string("index.html") { Ok(v) => v, Err(e) => { eprintln!("Could not read index.html: {e}"); exit(1); } }; let (int_html, variables, globals) = match Template::parse(&int_file, None) { Ok(int_template) => int_template.gen_int(), Err(e) => { eprintln!("Could not parse int.html: {e}"); exit(1); } }; let index = match Template::parse(&index_file, Some(variables)) { Ok(index_template) => index_template, Err(e) => { eprintln!("Could not parse index.html: {e}"); exit(1); } }; let data = Data::new_sync(int_html, index, globals); rocket::build() .manage(data) .mount("/", routes![index, index_dbg, int]) .mount( "/info", FileServer::new( "/srv/tomatenmhark-slashinfo/", Options::Index | Options::NormalizeDirs | Options::Missing, ), ) .mount("/", Redirecter) }