finished cors. Untested. Not enabled

This commit is contained in:
clowzed 2023-11-12 18:48:11 +03:00
parent 9be81978cc
commit f16432cb2a

View file

@ -63,50 +63,55 @@ async fn main() {
let cloned_state = state.clone();
let cors_layer = CorsLayer::new()
.allow_methods(AllowMethods::any())
.allow_headers(AllowHeaders::any())
.allow_origin(AllowOrigin::predicate(move |origin, parts| {
let cloned_headers = parts.headers.clone();
let (tx, rx) = mpsc::channel();
let cloned_state = cloned_state.clone();
let cloned_origin = origin
.to_owned()
.to_str()
.map(|s| s.to_string())
.unwrap_or_default();
std::thread::spawn(move || {
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async move {
tracing::info!("Starting cors!");
let subdomain_model_extractor =
SubdomainModel::from_headers(&cloned_headers, &cloned_state)
.await
.map_err(|cause| {
tracing::error!(%cause,
"Failed to extract subdomain model from headers for cors!");
});
if subdomain_model_extractor.is_err() {
tx.send(false).ok();
return;
}
let res = CorsService::check(
subdomain_model_extractor.unwrap().0,
&cloned_origin,
&cloned_state.connection,
)
.await
.unwrap_or(false);
tx.send(res).ok();
});
});
rx.recv().unwrap_or(false)
}));
let mut app = Router::new()
.nest("/api", api_router)
.route("/*path", get(handlers::sites::file))
.route("/", get(handlers::sites::index_redirect))
.layer(
CorsLayer::new()
.allow_methods(AllowMethods::any())
.allow_headers(AllowHeaders::any())
.allow_origin(AllowOrigin::predicate(move |origin, parts| {let cloned_headers = parts.headers.clone();
let (tx, rx) = mpsc::channel();
let cloned_state = cloned_state.clone();
let cloned_origin = origin.to_owned().to_str().map(|s| s.to_string()).unwrap_or_default();
std::thread::spawn(move || {
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async move {
tracing::info!("Starting cors!");
let subdomain_model_extractor =
SubdomainModel::from_headers(&cloned_headers, &cloned_state)
.await
.map_err(|cause| {
tracing::error!(%cause, "Failed to extract subdomain model from headers for cors!");
});
if subdomain_model_extractor.is_err() {
tx.send(false).ok();
return;
}
let res = CorsService::check(
subdomain_model_extractor.unwrap().0,
&cloned_origin,
&cloned_state.connection,
)
.await
.unwrap_or(false);
tx.send(res).ok();
});
});
rx.recv().unwrap_or(false)
}))
)
.route("/", get(handlers::sites::index_redirect))
.with_state(state.clone());
if config.max_body_limit_size.is_some() {