1
0
Fork 0

Merge pull request #1469 from jjlin/cors

CORS fixes
Dieser Commit ist enthalten in:
Daniel García 2021-03-15 16:57:00 +01:00 committet von GitHub
Commit a71359f647
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23

Datei anzeigen

@ -48,10 +48,16 @@ impl CORS {
} }
} }
fn valid_url(url: String) -> String { // Check a request's `Origin` header against the list of allowed origins.
match url.as_ref() { // If a match exists, return it. Otherwise, return None.
"file://" => "*".to_string(), fn get_allowed_origin(headers: &HeaderMap) -> Option<String> {
_ => url, let origin = CORS::get_header(headers, "Origin");
let domain_origin = CONFIG.domain_origin();
let safari_extension_origin = "file://";
if origin == domain_origin || origin == safari_extension_origin {
Some(origin)
} else {
None
} }
} }
} }
@ -67,11 +73,11 @@ impl Fairing for CORS {
fn on_response(&self, request: &Request, response: &mut Response) { fn on_response(&self, request: &Request, response: &mut Response) {
let req_headers = request.headers(); let req_headers = request.headers();
// We need to explicitly get the Origin header for Access-Control-Allow-Origin if let Some(origin) = CORS::get_allowed_origin(req_headers) {
let req_allow_origin = CORS::valid_url(CORS::get_header(req_headers, "Origin")); response.set_header(Header::new("Access-Control-Allow-Origin", origin));
}
response.set_header(Header::new("Access-Control-Allow-Origin", req_allow_origin));
// Preflight request
if request.method() == Method::Options { if request.method() == Method::Options {
let req_allow_headers = CORS::get_header(req_headers, "Access-Control-Request-Headers"); let req_allow_headers = CORS::get_header(req_headers, "Access-Control-Request-Headers");
let req_allow_method = CORS::get_header(req_headers, "Access-Control-Request-Method"); let req_allow_method = CORS::get_header(req_headers, "Access-Control-Request-Method");