From 00b18e34e21bba4a607711aaa450647f5d4a356d Mon Sep 17 00:00:00 2001 From: Xuanwo Date: Wed, 31 May 2023 11:35:13 +0800 Subject: [PATCH] fix(azure): API Version should be specified by clients Signed-off-by: Xuanwo --- src/azure/constants.rs | 4 ---- src/azure/storage/signer.rs | 41 +++++-------------------------------- 2 files changed, 5 insertions(+), 40 deletions(-) diff --git a/src/azure/constants.rs b/src/azure/constants.rs index e0392a5c..3815b372 100644 --- a/src/azure/constants.rs +++ b/src/azure/constants.rs @@ -1,7 +1,3 @@ // Headers used in azure services. pub const X_MS_DATE: &str = "x-ms-date"; -pub const X_MS_VERSION: &str = "x-ms-version"; pub const CONTENT_MD5: &str = "content-md5"; - -// Env values used in azure services. -pub const AZURE_VERSION: &str = "2019-12-12"; diff --git a/src/azure/storage/signer.rs b/src/azure/storage/signer.rs index 99d5e7ec..f081a1d8 100644 --- a/src/azure/storage/signer.rs +++ b/src/azure/storage/signer.rs @@ -25,8 +25,6 @@ use crate::time::DateTime; /// - [Authorize with Shared Key](https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) #[derive(Debug, Default)] pub struct Signer { - /// whether to omit service version or not - omit_service_version: bool, time: Option, } @@ -36,12 +34,6 @@ impl Signer { Self::default() } - /// set the signer to omitting service version - pub fn omit_service_version(mut self) -> Self { - self.omit_service_version = true; - self - } - /// Specify the signing time. /// /// # Note @@ -73,11 +65,7 @@ impl Signer { } SigningMethod::Header => { ctx.headers - .insert(X_MS_VERSION, AZURE_VERSION.to_string().parse()?); - if self.omit_service_version { - ctx.headers - .insert(X_MS_DATE, format_http_date(time::now()).parse()?); - } + .insert(X_MS_DATE, format_http_date(time::now()).parse()?); ctx.headers.insert(AUTHORIZATION, { let mut value: HeaderValue = format!("Bearer {}", token).parse()?; value.set_sensitive(true); @@ -100,8 +88,7 @@ impl Signer { } SigningMethod::Header => { let now = self.time.unwrap_or_else(time::now); - let string_to_sign = - string_to_sign(&mut ctx, ak, now, self.omit_service_version)?; + let string_to_sign = string_to_sign(&mut ctx, ak, now)?; let signature = base64_hmac_sha256(&base64_decode(sk), string_to_sign.as_bytes()); @@ -192,12 +179,7 @@ impl Signer { /// ## Reference /// /// - [Blob, Queue, and File Services (Shared Key authorization)](https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) -fn string_to_sign( - ctx: &mut SigningContext, - ak: &str, - now: DateTime, - omit_service_version: bool, -) -> Result { +fn string_to_sign(ctx: &mut SigningContext, ak: &str, now: DateTime) -> Result { let mut s = String::with_capacity(128); writeln!(&mut s, "{}", ctx.method.as_str())?; @@ -225,11 +207,7 @@ fn string_to_sign( ctx.header_get_or_default(&IF_UNMODIFIED_SINCE)? )?; writeln!(&mut s, "{}", ctx.header_get_or_default(&RANGE)?)?; - writeln!( - &mut s, - "{}", - canonicalize_header(ctx, now, omit_service_version)? - )?; + writeln!(&mut s, "{}", canonicalize_header(ctx, now)?)?; write!(&mut s, "{}", canonicalize_resource(ctx, ak))?; debug!("string to sign: {}", &s); @@ -240,18 +218,9 @@ fn string_to_sign( /// ## Reference /// /// - [Constructing the canonicalized headers string](https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key#constructing-the-canonicalized-headers-string) -fn canonicalize_header( - ctx: &mut SigningContext, - now: DateTime, - omit_service_version: bool, -) -> Result { +fn canonicalize_header(ctx: &mut SigningContext, now: DateTime) -> Result { ctx.headers .insert(X_MS_DATE, format_http_date(now).parse()?); - if !omit_service_version { - // Insert x_ms_version header. - ctx.headers - .insert(X_MS_VERSION, AZURE_VERSION.to_string().parse()?); - } Ok(SigningContext::header_to_string( ctx.header_to_vec_with_prefix("x-ms-"),