mirror of
https://github.com/clowzed/sero
synced 2024-06-16 05:15:04 +02:00
Added another variant of origin check in cors layer. pt 2
This commit is contained in:
parent
9265cb5085
commit
9be81978cc
68
src/main.rs
68
src/main.rs
|
@ -6,7 +6,6 @@ use axum::{
|
||||||
routing::{get, post},
|
routing::{get, post},
|
||||||
Router,
|
Router,
|
||||||
};
|
};
|
||||||
use futures::executor::block_on;
|
|
||||||
|
|
||||||
use extractors::SubdomainModel;
|
use extractors::SubdomainModel;
|
||||||
use services::cors::CorsService;
|
use services::cors::CorsService;
|
||||||
|
@ -72,43 +71,40 @@ async fn main() {
|
||||||
CorsLayer::new()
|
CorsLayer::new()
|
||||||
.allow_methods(AllowMethods::any())
|
.allow_methods(AllowMethods::any())
|
||||||
.allow_headers(AllowHeaders::any())
|
.allow_headers(AllowHeaders::any())
|
||||||
.allow_origin(AllowOrigin::predicate(move |origin, parts| {
|
.allow_origin(AllowOrigin::predicate(move |origin, parts| {let cloned_headers = parts.headers.clone();
|
||||||
let cloned_state = cloned_state.clone();
|
let (tx, rx) = mpsc::channel();
|
||||||
let cloned_origin = origin
|
|
||||||
.clone()
|
let cloned_state = cloned_state.clone();
|
||||||
.to_str()
|
let cloned_origin = origin.to_owned().to_str().map(|s| s.to_string()).unwrap_or_default();
|
||||||
.map(|s| s.to_string())
|
|
||||||
.unwrap_or_default();
|
std::thread::spawn(move || {
|
||||||
let cloned_headers = parts.headers.clone();
|
let rt = tokio::runtime::Runtime::new().unwrap();
|
||||||
let (tx, rx) = mpsc::channel();
|
rt.block_on(async move {
|
||||||
|
tracing::info!("Starting cors!");
|
||||||
std::thread::spawn(
|
let subdomain_model_extractor =
|
||||||
move || block_on(async move {
|
|
||||||
tracing::info!("Starting cors!");
|
|
||||||
let subdomain_model_extractor =
|
|
||||||
SubdomainModel::from_headers(&cloned_headers, &cloned_state)
|
SubdomainModel::from_headers(&cloned_headers, &cloned_state)
|
||||||
.await
|
.await
|
||||||
.map_err(|cause| {
|
.map_err(|cause| {
|
||||||
tracing::error!(%cause, "Failed to extract subdomain model from headers for cors!");
|
tracing::error!(%cause, "Failed to extract subdomain model from headers for cors!");
|
||||||
});
|
});
|
||||||
if subdomain_model_extractor.is_err() {
|
if subdomain_model_extractor.is_err() {
|
||||||
tx.send(false).ok();
|
tx.send(false).ok();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
let res = CorsService::check(
|
|
||||||
subdomain_model_extractor.unwrap().0,
|
|
||||||
&cloned_origin,
|
|
||||||
&cloned_state.connection,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
.unwrap_or(false);
|
|
||||||
|
|
||||||
tx.send(res).ok();
|
|
||||||
}
|
}
|
||||||
));
|
|
||||||
|
let res = CorsService::check(
|
||||||
rx.recv().unwrap_or(false)
|
subdomain_model_extractor.unwrap().0,
|
||||||
|
&cloned_origin,
|
||||||
|
&cloned_state.connection,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap_or(false);
|
||||||
|
|
||||||
|
tx.send(res).ok();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
rx.recv().unwrap_or(false)
|
||||||
}))
|
}))
|
||||||
)
|
)
|
||||||
.with_state(state.clone());
|
.with_state(state.clone());
|
||||||
|
|
Loading…
Reference in a new issue