From 019d82f88321cbcd7f4b08c1038e10dcdaf7d1be Mon Sep 17 00:00:00 2001 From: Tom Bamford Date: Fri, 1 Mar 2024 03:10:43 +0000 Subject: [PATCH] bugfix: add `x-ms-file-request-intent` header for the Files API when authenticating using OAuth --- storage/2023-11-03/file/directories/client.go | 17 +++++++++++++++++ storage/2023-11-03/file/files/client.go | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/storage/2023-11-03/file/directories/client.go b/storage/2023-11-03/file/directories/client.go index 7b327f0..9f6af5a 100644 --- a/storage/2023-11-03/file/directories/client.go +++ b/storage/2023-11-03/file/directories/client.go @@ -1,8 +1,11 @@ package directories import ( + "context" "fmt" + "net/http" + "github.com/hashicorp/go-azure-sdk/sdk/auth" "github.com/hashicorp/go-azure-sdk/sdk/client/dataplane/storage" ) @@ -16,6 +19,20 @@ func NewWithBaseUri(baseUri string) (*Client, error) { if err != nil { return nil, fmt.Errorf("building base client: %+v", err) } + + baseClient.Client.AuthorizeRequest = func(ctx context.Context, req *http.Request, authorizer auth.Authorizer) error { + if err := auth.SetAuthHeader(ctx, req, authorizer); err != nil { + return fmt.Errorf("authorizing request: %+v", err) + } + + // Only set this header if OAuth is being used (i.e. not shared key authentication) + if _, ok := authorizer.(*auth.SharedKeyAuthorizer); !ok { + req.Header.Set("x-ms-file-request-intent", "backup") + } + + return nil + } + return &Client{ Client: baseClient, }, nil diff --git a/storage/2023-11-03/file/files/client.go b/storage/2023-11-03/file/files/client.go index cee19a3..39b02e7 100644 --- a/storage/2023-11-03/file/files/client.go +++ b/storage/2023-11-03/file/files/client.go @@ -1,8 +1,11 @@ package files import ( + "context" "fmt" + "net/http" + "github.com/hashicorp/go-azure-sdk/sdk/auth" "github.com/hashicorp/go-azure-sdk/sdk/client/dataplane/storage" ) @@ -16,6 +19,20 @@ func NewWithBaseUri(baseUri string) (*Client, error) { if err != nil { return nil, fmt.Errorf("building base client: %+v", err) } + + baseClient.Client.AuthorizeRequest = func(ctx context.Context, req *http.Request, authorizer auth.Authorizer) error { + if err := auth.SetAuthHeader(ctx, req, authorizer); err != nil { + return fmt.Errorf("authorizing request: %+v", err) + } + + // Only set this header if OAuth is being used (i.e. not shared key authentication) + if _, ok := authorizer.(*auth.SharedKeyAuthorizer); !ok { + req.Header.Set("x-ms-file-request-intent", "backup") + } + + return nil + } + return &Client{ Client: baseClient, }, nil