350bd30
pub mod account_deletion;
pub mod assets;
pub mod bootstrap;
pub mod cleanup;
pub mod domains;
pub mod middleware;
pub mod openapi;
use actix_cors::Cors;
use actix_web::http::Method;
use actix_web::{Scope, web};
use export::http::{Guard, Router};
pub const MAX_REQUEST_BODY_BYTES: usize = 2 * 1024 * 1024;
pub fn build_cors(web: &config::web::WebConfig) -> Cors {
let mut cors = Cors::default();
for origin in &web.cors_allow_origins {
cors = cors.allowed_origin(origin);
}
let mut cors = cors
.allowed_methods([
Method::GET,
Method::POST,
Method::PUT,
Method::PATCH,
Method::DELETE,
Method::OPTIONS,
])
.allowed_headers(["content-type", "authorization", "x-request-id"]);
if web.cors_allow_credentials {
cors = cors.supports_credentials();
}
cors
}
pub fn routes(deps: &bootstrap::Deps) -> Scope {
let state = &deps.state;
let accounts = deps.accounts.clone();
let push_config = state.config.push.clone();
let internal = Router::<()>::new()
.merge(domains::git::internal(deps))
.merge(domains::chat::internal(deps))
.with_state(deps.internal_service_key.clone())
.wrap(Guard::ServiceKey);
let public = Router::<()>::new()
.setup(move |scope| {
scope
.app_data(web::Data::new(accounts))
.app_data(web::Data::new(push_config))
})
.merge(domains::account_deletion::router(deps))
.merge(domains::auth::router(deps))
.merge(domains::chat::router(deps))
.merge(domains::issues::router(deps))
.merge(domains::space::router(deps))
.merge(domains::user::router(deps))
.merge(domains::git::router(deps))
.merge(domains::pulls::router(deps))
.merge(cleanup::router(
state.database.clone(),
deps.space.clone(),
deps.issues.clone(),
deps.git.clone(),
));
Router::<()>::new()
.nest("/api/v1/internal", internal)
.nest("/api/v1", public)
.nest("/pages", domains::auth::pages(deps))
.merge(export::health::router(state.clone()))
.into_scope(web::scope(""))
.default_service(web::to(assets::serve))
}