57 lines
1.6 KiB
Rust
57 lines
1.6 KiB
Rust
use std::env;
|
|
|
|
use actix_web::{middleware, App, HttpServer};
|
|
|
|
mod db;
|
|
mod forge;
|
|
mod settings;
|
|
mod utils;
|
|
|
|
pub use crate::forge::auth::adapter::input::web::{services, ActixCtx, WebCtx};
|
|
pub use crate::forge::auth::adapter::out::{
|
|
db::DBAdapter,
|
|
forge::{forgejo::Forgejo, ForgeRepository},
|
|
};
|
|
|
|
#[actix_web::main]
|
|
async fn main() {
|
|
let settings = settings::Settings::new().unwrap();
|
|
if env::var("RUST_LOG").is_err() {
|
|
env::set_var("RUST_LOG", &settings.log);
|
|
}
|
|
{
|
|
// Settings::new() outputs logs, but since we are only setting up logger _after_ Settings is
|
|
// initialized, this dummy reinitialization will output logs.
|
|
settings::Settings::new().unwrap();
|
|
}
|
|
|
|
pretty_env_logger::init();
|
|
|
|
let forgejo = Forgejo::new(
|
|
settings.forges.forgejo.url.clone(),
|
|
settings.forges.forgejo.client_id.clone(),
|
|
settings.forges.forgejo.client_secret.clone(),
|
|
);
|
|
let forges = ForgeRepository::new(forgejo);
|
|
let db = DBAdapter::init(&settings.database.url).await;
|
|
db.migratable().migrate().await;
|
|
let ctx = WebCtx::new_actix_ctx(forges, db, settings.clone());
|
|
|
|
let socket_addr = settings.server.get_ip();
|
|
HttpServer::new(move || {
|
|
App::new()
|
|
.wrap(tracing_actix_web::TracingLogger::default())
|
|
.wrap(middleware::Compress::default())
|
|
.app_data(ctx.clone())
|
|
.wrap(
|
|
middleware::DefaultHeaders::new().add(("Permissions-Policy", "interest-cohort=()")),
|
|
)
|
|
.configure(services)
|
|
})
|
|
.bind(&socket_addr)
|
|
.unwrap()
|
|
.run()
|
|
.await
|
|
.unwrap();
|
|
}
|