From 9ea755bc4f82a45657936e27127cc7baaa436d1a Mon Sep 17 00:00:00 2001 From: Atrox Date: Wed, 16 Aug 2023 16:50:04 +0200 Subject: [PATCH] extend tauri builder with updater_header method --- .changes/tauri-builder-updater-header.md | 5 ++++ core/tauri/src/app.rs | 31 ++++++++++++++++++++++++ core/tauri/src/updater/mod.rs | 14 +++++++++++ 3 files changed, 50 insertions(+) create mode 100644 .changes/tauri-builder-updater-header.md diff --git a/.changes/tauri-builder-updater-header.md b/.changes/tauri-builder-updater-header.md new file mode 100644 index 000000000000..5183a5574917 --- /dev/null +++ b/.changes/tauri-builder-updater-header.md @@ -0,0 +1,5 @@ +--- +"tauri": minor:feat +--- + +Added `tauri::Builder::updater_header` to add headers to the tauri updater. diff --git a/core/tauri/src/app.rs b/core/tauri/src/app.rs index 7bc7bd497b36..64ac2594957c 100644 --- a/core/tauri/src/app.rs +++ b/core/tauri/src/app.rs @@ -239,6 +239,7 @@ impl GlobalWindowEvent { #[derive(Debug, Clone, Default)] pub(crate) struct UpdaterSettings { pub(crate) target: Option, + pub(crate) headers: Option>, } /// The path resolver is a helper for the application-specific [`crate::api::path`] APIs. @@ -1528,6 +1529,36 @@ impl Builder { self } + /// Adds a header to the updater request. + /// + /// See [`UpdateBuilder::header`](crate::updater::UpdateBuilder#method.header) for more information. + /// + /// # Examples + /// + /// ``` + /// let mut builder = tauri::Builder::default(); + /// builder = builder.updater_header("X-My-Header", "my-value").unwrap(); + /// builder = builder.updater_header("X-My-Other-Header", "my-other-value").unwrap(); + /// ``` + #[cfg(updater)] + pub fn updater_header(mut self, key: K, value: V) -> Result + where + http::HeaderName: TryFrom, + >::Error: Into, + http::HeaderValue: TryFrom, + >::Error: Into, + { + let key = key.try_into().map_err(Into::into)?; + let value = value.try_into().map_err(Into::into)?; + + self + .updater_settings + .headers + .get_or_insert(Default::default()) + .insert(key, value); + Ok(self) + } + /// Change the device event filter mode. /// /// Since the DeviceEvent capture can lead to high CPU usage for unfocused windows, [`tao`] diff --git a/core/tauri/src/updater/mod.rs b/core/tauri/src/updater/mod.rs index e5a631f34264..062dd47e20c0 100644 --- a/core/tauri/src/updater/mod.rs +++ b/core/tauri/src/updater/mod.rs @@ -446,6 +446,13 @@ pub(crate) async fn check_update_with_dialog(handle: AppHandle) { if let Some(target) = &handle.updater_settings.target { builder = builder.target(target); } + if let Some(headers) = &handle.updater_settings.headers { + for (key, value) in headers { + builder = builder + .header(key, value) + .expect("unwrapping because key/value are valid headers"); + } + } // check updates match builder.build().await { @@ -543,6 +550,13 @@ pub fn builder(handle: AppHandle) -> UpdateBuilder { if let Some(target) = &handle.updater_settings.target { builder = builder.target(target); } + if let Some(headers) = &handle.updater_settings.headers { + for (key, value) in headers { + builder = builder + .header(key, value) + .expect("unwrapping because key/value are valid headers"); + } + } UpdateBuilder { inner: builder, events: true,