From 0d251a905afd897cccdcdb8e2dc6dcdbb92ddf2b Mon Sep 17 00:00:00 2001 From: xushaodong Date: Sun, 28 Mar 2021 12:31:54 +0800 Subject: [PATCH 1/2] upgrade CI / Minimum version to 1.46.0 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80806e2f7..fec8dcfa2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -205,7 +205,7 @@ jobs: strategy: matrix: - rust: [1.45.2] + rust: [1.46.0] steps: - name: Checkout From da0f2c1c6fa3e13b89321306acb2c07fdda85d1f Mon Sep 17 00:00:00 2001 From: xushaodong Date: Sun, 28 Mar 2021 13:06:55 +0800 Subject: [PATCH 2/2] supports wasm fetch credentials --- Cargo.toml | 1 + src/wasm/client.rs | 2 ++ src/wasm/request.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 3ea71e73e..a89705236 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -162,6 +162,7 @@ features = [ "Blob", "BlobPropertyBag", "ServiceWorkerGlobalScope", + "RequestCredentials" ] [target.'cfg(target_arch = "wasm32")'.dev-dependencies] diff --git a/src/wasm/client.rs b/src/wasm/client.rs index 1741d576a..86ea04012 100644 --- a/src/wasm/client.rs +++ b/src/wasm/client.rs @@ -207,6 +207,8 @@ async fn fetch(req: Request) -> crate::Result { init.mode(web_sys::RequestMode::NoCors); } + init.credentials(req.credentials); + if let Some(body) = req.body() { if !body.is_empty() { init.body(Some(&body.to_js_value()?.as_ref().as_ref())); diff --git a/src/wasm/request.rs b/src/wasm/request.rs index 8cbb5629d..de3691f08 100644 --- a/src/wasm/request.rs +++ b/src/wasm/request.rs @@ -7,6 +7,7 @@ use serde::Serialize; use serde_json; use serde_urlencoded; use url::Url; +use web_sys::RequestCredentials; use super::{Body, Client, Response}; use crate::header::{HeaderMap, HeaderName, HeaderValue, CONTENT_TYPE}; @@ -18,6 +19,7 @@ pub struct Request { headers: HeaderMap, body: Option, pub(super) cors: bool, + pub(super) credentials: RequestCredentials, } /// A builder to construct the properties of a `Request`. @@ -36,6 +38,7 @@ impl Request { headers: HeaderMap::new(), body: None, cors: true, + credentials: RequestCredentials::SameOrigin, } } @@ -254,6 +257,54 @@ impl RequestBuilder { self } + /// Set fetch credentials to 'same-origin' + /// + /// # WASM + /// + /// This option is only effective with WebAssembly target. + /// + /// The [request credentials][mdn] will be set to 'same-origin'. + /// + /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials + pub fn fetch_credentials_same_origin(mut self) -> RequestBuilder { + if let Ok(ref mut req) = self.request { + req.credentials = RequestCredentials::SameOrigin; + } + self + } + + /// Set fetch credentials to 'include' + /// + /// # WASM + /// + /// This option is only effective with WebAssembly target. + /// + /// The [request credentials][mdn] will be set to 'include'. + /// + /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials + pub fn fetch_credentials_include(mut self) -> RequestBuilder { + if let Ok(ref mut req) = self.request { + req.credentials = RequestCredentials::Include; + } + self + } + + /// Set fetch credentials to 'omit' + /// + /// # WASM + /// + /// This option is only effective with WebAssembly target. + /// + /// The [request credentials][mdn] will be set to 'omit'. + /// + /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials + pub fn fetch_credentials_omit(mut self) -> RequestBuilder { + if let Ok(ref mut req) = self.request { + req.credentials = RequestCredentials::Omit; + } + self + } + /// Build a `Request`, which can be inspected, modified and executed with /// `Client::execute()`. pub fn build(self) -> crate::Result { @@ -332,6 +383,7 @@ where headers, body: Some(body.into()), cors: true, + credentials: RequestCredentials::SameOrigin, }) } }