2023-01-04 14:42:55 +01:00
|
|
|
#![warn(clippy::style, clippy::pedantic)]
|
|
|
|
|
2023-01-15 17:35:43 +01:00
|
|
|
mod appwrite;
|
2023-01-03 16:11:43 +01:00
|
|
|
mod db;
|
2023-01-04 19:31:52 +01:00
|
|
|
mod graphql;
|
2023-01-03 16:11:43 +01:00
|
|
|
|
2023-01-18 11:31:34 +01:00
|
|
|
use std::{collections::HashSet, env, error::Error};
|
2023-01-04 14:42:55 +01:00
|
|
|
|
|
|
|
use dotenvy::dotenv;
|
|
|
|
use tracing::{debug, info, Level};
|
|
|
|
use tracing_subscriber::FmtSubscriber;
|
|
|
|
|
|
|
|
fn setup_logging() {
|
|
|
|
let subscriber = FmtSubscriber::builder()
|
|
|
|
.with_max_level(Level::DEBUG)
|
|
|
|
.finish();
|
|
|
|
tracing::subscriber::set_global_default(subscriber)
|
|
|
|
.expect("Setting default subscriber failed");
|
|
|
|
}
|
|
|
|
|
|
|
|
fn make_cors() -> Result<rocket_cors::Cors, rocket_cors::Error> {
|
2023-01-18 11:31:34 +01:00
|
|
|
use rocket::http::Method as HMethod;
|
|
|
|
use rocket_cors::{AllowedHeaders, AllowedOrigins, Method};
|
2023-01-04 14:42:55 +01:00
|
|
|
rocket_cors::CorsOptions {
|
2023-01-18 11:31:34 +01:00
|
|
|
allowed_methods: HashSet::from([
|
|
|
|
Method::from(HMethod::Get),
|
|
|
|
Method::from(HMethod::Post),
|
|
|
|
]),
|
2023-01-04 14:42:55 +01:00
|
|
|
allowed_headers: AllowedHeaders::some(&["Authorization", "Accept"]),
|
|
|
|
allowed_origins: match env::var("ORDABOK_HOSTS") {
|
|
|
|
Ok(val) => {
|
|
|
|
if val.is_empty() {
|
|
|
|
AllowedOrigins::all()
|
|
|
|
} else {
|
|
|
|
AllowedOrigins::some_exact(
|
|
|
|
val.split(',').collect::<Vec<_>>().as_ref(),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Err(_) => AllowedOrigins::all(),
|
|
|
|
},
|
|
|
|
..Default::default()
|
|
|
|
}
|
|
|
|
.to_cors()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[rocket::main]
|
|
|
|
async fn main() -> Result<(), Box<dyn Error>> {
|
2023-01-04 19:31:52 +01:00
|
|
|
use graphql::{
|
|
|
|
create_schema, get_graphql_handler, graphiql, post_graphql_handler,
|
|
|
|
};
|
|
|
|
|
2023-01-15 17:35:43 +01:00
|
|
|
color_eyre::install()?;
|
2023-01-04 14:42:55 +01:00
|
|
|
setup_logging();
|
|
|
|
|
|
|
|
info!("Reading environment variables");
|
|
|
|
dotenv().ok();
|
|
|
|
|
|
|
|
let cors = make_cors()?;
|
|
|
|
debug!("CORS: {:?}", cors);
|
|
|
|
|
2023-01-04 19:31:52 +01:00
|
|
|
#[allow(clippy::let_underscore_drop, clippy::no_effect_underscore_binding)]
|
|
|
|
let _ = rocket::build()
|
|
|
|
.attach(cors)
|
2023-01-15 17:35:43 +01:00
|
|
|
.manage(graphql::Context::default())
|
2023-01-04 19:31:52 +01:00
|
|
|
.manage(create_schema())
|
|
|
|
.mount(
|
|
|
|
"/",
|
|
|
|
rocket::routes![
|
|
|
|
graphiql,
|
|
|
|
get_graphql_handler,
|
|
|
|
post_graphql_handler
|
|
|
|
],
|
|
|
|
)
|
|
|
|
.launch()
|
|
|
|
.await?;
|
2023-01-04 14:42:55 +01:00
|
|
|
Ok(())
|
2023-01-03 15:16:10 +01:00
|
|
|
}
|