From d576e8ae72b025ca41f96ddf7a885b84f950a4b1 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 31 Jul 2022 20:00:48 -0300 Subject: [PATCH] feat(core): do not follow redirects if `max_redirects` is 0 closes #4795 (#4812) --- .changes/skip-redirects.md | 5 +++++ core/tauri/src/api/http.rs | 12 ++++++++++-- tooling/api/src/http.ts | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .changes/skip-redirects.md diff --git a/.changes/skip-redirects.md b/.changes/skip-redirects.md new file mode 100644 index 000000000..c2056b954 --- /dev/null +++ b/.changes/skip-redirects.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +Do not follow redirects when `api::http::ClientBuilder::max_redirections` is `0`. diff --git a/core/tauri/src/api/http.rs b/core/tauri/src/api/http.rs index 8791f41dc..4ea82ef9c 100644 --- a/core/tauri/src/api/http.rs +++ b/core/tauri/src/api/http.rs @@ -84,7 +84,11 @@ impl ClientBuilder { let mut client_builder = reqwest::Client::builder(); if let Some(max_redirections) = self.max_redirections { - client_builder = client_builder.redirect(reqwest::redirect::Policy::limited(max_redirections)) + client_builder = client_builder.redirect(if max_redirections == 0 { + reqwest::redirect::Policy::none() + } else { + reqwest::redirect::Policy::limited(max_redirections) + }); } if let Some(connect_timeout) = self.connect_timeout { @@ -142,7 +146,11 @@ impl Client { } if let Some(max_redirections) = self.0.max_redirections { - request_builder = request_builder.max_redirections(max_redirections as u32); + if max_redirections == 0 { + request_builder = request_builder.follow_redirects(false); + } else { + request_builder = request_builder.max_redirections(max_redirections as u32); + } } if let Some(timeout) = request.timeout { diff --git a/tooling/api/src/http.ts b/tooling/api/src/http.ts index 20694fe12..68f1a5edd 100644 --- a/tooling/api/src/http.ts +++ b/tooling/api/src/http.ts @@ -52,6 +52,10 @@ interface Duration { interface ClientOptions { maxRedirections?: number + /** + * Defines the maximum number of redirects the client should follow. + * If set to 0, no redirects will be followed. + */ connectTimeout?: number | Duration }