use based::{auth::User, get_pg}; use rocket::{http::Method, routes}; use std::path::Path; mod library; mod meta; mod pages; mod yt_meta; #[rocket::launch] async fn launch() -> _ { std::env::set_var("RUST_LOG", "info"); std::env::set_var("RUST_BACKTRACE", "1"); env_logger::init(); let args: Vec = std::env::args().collect(); if args.len() != 2 { eprintln!("Usage: {} ", args[0]); std::process::exit(1); } let dir_path = args[1].clone(); let pg = get_pg!(); sqlx::migrate!("./migrations").run(pg).await.unwrap(); let lib = library::Library::new().await; User::create("admin", "admin", based::auth::UserRole::Admin).await; let library = lib.clone(); let handle = tokio::spawn(async move { library .scan_dir(&Path::new(&dir_path.clone()).to_path_buf()) .await; }); let cors = rocket_cors::CorsOptions { allowed_origins: rocket_cors::AllowedOrigins::all(), allowed_methods: vec![Method::Get, Method::Post, Method::Options] .into_iter() .map(From::from) .collect(), allowed_headers: rocket_cors::AllowedHeaders::all(), allow_credentials: true, ..Default::default() } .to_cors() .expect("error creating CORS options"); rocket::build() .mount( "/", routes![ based::htmx::htmx_script_route, pages::assets::video_file, pages::assets::video_thumbnail, pages::assets::fav_icon, pages::index::search, pages::index::channel_page, pages::yt::yt_tags, pages::yt::yt_tag_page, pages::yt::yt_channel_page, pages::index::index_page, pages::watch::watch_page, pages::user::login, pages::user::login_post, pages::user::history_page ], ) .attach(cors) .manage(lib) }