jmserver/src/main.rs

74 lines
1.6 KiB
Rust
Raw Normal View History

2021-12-29 18:33:31 +01:00
use axum::{
body::Body,
http::{header, HeaderValue, Request},
Router,
};
2021-12-17 23:50:03 +01:00
use config::Config;
2022-01-04 20:06:57 +01:00
use error::JMError;
2022-01-16 22:43:45 +01:00
use reqwest::{Client, Url};
2023-07-06 17:35:23 +02:00
use sqlx::PgPool;
2022-01-16 22:43:45 +01:00
use std::{path::PathBuf, sync::Arc};
2021-12-17 23:50:03 +01:00
use structopt::StructOpt;
use tower_http::{add_extension::AddExtensionLayer, set_header::SetResponseHeaderLayer};
2021-07-19 22:29:03 +02:00
2021-12-18 20:04:34 +01:00
mod cdn;
2021-12-17 23:50:03 +01:00
mod config;
2022-01-05 23:46:19 +01:00
mod error;
2021-12-18 20:04:34 +01:00
mod ipfs;
2022-01-08 19:01:19 +01:00
mod lib;
2022-01-17 21:58:33 +01:00
mod matrix;
2022-01-16 17:46:09 +01:00
mod models;
mod sql;
2021-12-29 18:33:31 +01:00
mod v1;
2022-07-19 21:11:13 +02:00
mod v2;
2021-12-17 23:50:03 +01:00
#[derive(StructOpt)]
struct Opt {
#[structopt(
2021-12-29 18:33:31 +01:00
short,
long,
help = "config file to use",
default_value = "./config.toml"
2021-12-17 23:50:03 +01:00
)]
config: PathBuf,
}
2021-07-19 22:29:03 +02:00
2022-01-16 22:43:45 +01:00
pub struct JMServiceInner {
client: Client,
2023-07-06 17:35:23 +02:00
db_pool: PgPool,
2022-01-16 22:43:45 +01:00
ipfs_url: Url,
int_cdn: String,
ext_cdn: String,
2022-01-17 21:58:33 +01:00
matrix_url: Url,
matrix_token: String,
matrix_domain: String,
2022-01-16 22:43:45 +01:00
}
pub type JMService = Arc<JMServiceInner>;
2021-08-26 17:45:38 +02:00
#[tokio::main]
2022-01-04 20:06:57 +01:00
async fn main() -> Result<(), JMError> {
2021-12-17 23:50:03 +01:00
let opt = Opt::from_args();
2022-01-04 20:06:57 +01:00
let config = std::fs::read(&opt.config)?;
let config = toml::from_slice::<Config>(&config)?;
2021-12-17 23:50:03 +01:00
2023-07-06 17:35:23 +02:00
let db_pool = PgPool::new(&config.database).await?;
2022-07-19 21:11:13 +02:00
let service = config.service(db_pool)?;
2021-07-19 22:29:03 +02:00
2021-08-26 17:45:38 +02:00
let app = Router::new()
2021-12-18 20:04:34 +01:00
.nest("/api/v1", v1::routes())
2022-07-19 21:11:13 +02:00
.nest("/api/v2", v2::routes())
2021-12-18 20:04:34 +01:00
.nest("/cdn", cdn::routes())
2022-01-16 22:43:45 +01:00
.layer(AddExtensionLayer::new(service))
2021-12-29 18:33:31 +01:00
.layer(SetResponseHeaderLayer::<_, Request<Body>>::if_not_present(
header::ACCESS_CONTROL_ALLOW_ORIGIN,
HeaderValue::from_static("*"),
));
2021-07-19 22:29:03 +02:00
2021-12-17 23:50:03 +01:00
axum::Server::bind(&config.addr)
2021-08-26 17:45:38 +02:00
.serve(app.into_make_service())
2022-01-04 20:06:57 +01:00
.await?;
Ok(())
2021-07-19 22:29:03 +02:00
}