use rocket::config::{Config, Environment, LoggingLevel, Value}; use std::collections::HashMap; use crate::remote::database::establish_connection; use crate::settings::Settings; use super::database::AtuinDbConn; // a bunch of these imports are generated by macros, it's easier to wildcard #[allow(clippy::clippy::wildcard_imports)] use super::views::*; #[allow(clippy::clippy::wildcard_imports)] use super::auth::*; embed_migrations!("migrations"); pub fn launch(settings: &Settings, host: String, port: u16) { let mut database_config = HashMap::new(); let mut databases = HashMap::new(); database_config.insert("url", Value::from(settings.remote.db_uri.clone())); databases.insert("atuin", Value::from(database_config)); let connection = establish_connection(settings); embedded_migrations::run(&connection).expect("failed to run migrations"); let config = Config::build(Environment::Production) .address(host) .log_level(LoggingLevel::Normal) .port(port) .extra("databases", databases) .finalize() .unwrap(); let app = rocket::custom(config); app.mount("/", routes![index, register, add_history, login]) .attach(AtuinDbConn::fairing()) .register(catchers![internal_error, bad_request]) .launch(); }