summaryrefslogtreecommitdiff
path: root/vendor/github.com/minio/minio-go/v7/api.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2022-11-07 11:20:43 +0100
committerLibravatar GitHub <noreply@github.com>2022-11-07 11:20:43 +0100
commit459a5c8d967366b6b9f1d9815bf252c1107ae35e (patch)
tree348997f4d2eceb367a86a7853f1465a7ab7c538b /vendor/github.com/minio/minio-go/v7/api.go
parent[chore] Bump github.com/spf13/cobra from 1.5.0 to 1.6.1 (#982) (diff)
downloadgotosocial-459a5c8d967366b6b9f1d9815bf252c1107ae35e.tar.xz
[chore] Bump github.com/minio/minio-go/v7 from 7.0.37 to 7.0.43 (#983)
Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.37 to 7.0.43. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.37...v7.0.43) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/minio/minio-go/v7/api.go')
-rw-r--r--vendor/github.com/minio/minio-go/v7/api.go54
1 files changed, 44 insertions, 10 deletions
diff --git a/vendor/github.com/minio/minio-go/v7/api.go b/vendor/github.com/minio/minio-go/v7/api.go
index 6598e9d92..29d7c3a63 100644
--- a/vendor/github.com/minio/minio-go/v7/api.go
+++ b/vendor/github.com/minio/minio-go/v7/api.go
@@ -20,8 +20,10 @@ package minio
import (
"bytes"
"context"
+ "encoding/base64"
"errors"
"fmt"
+ "hash/crc32"
"io"
"io/ioutil"
"math/rand"
@@ -93,6 +95,8 @@ type Client struct {
sha256Hasher func() md5simd.Hasher
healthStatus int32
+
+ trailingHeaderSupport bool
}
// Options for New method
@@ -103,6 +107,10 @@ type Options struct {
Region string
BucketLookup BucketLookupType
+ // TrailingHeaders indicates server support of trailing headers.
+ // Only supported for v4 signatures.
+ TrailingHeaders bool
+
// Custom hash routines. Leave nil to use standard.
CustomMD5 func() md5simd.Hasher
CustomSHA256 func() md5simd.Hasher
@@ -111,13 +119,13 @@ type Options struct {
// Global constants.
const (
libraryName = "minio-go"
- libraryVersion = "v7.0.37"
+ libraryVersion = "v7.0.43"
)
// User Agent should always following the below style.
// Please open an issue to discuss any new changes here.
//
-// MinIO (OS; ARCH) LIB/VER APP/VER
+// MinIO (OS; ARCH) LIB/VER APP/VER
const (
libraryUserAgentPrefix = "MinIO (" + runtime.GOOS + "; " + runtime.GOARCH + ") "
libraryUserAgent = libraryUserAgentPrefix + libraryName + "/" + libraryVersion
@@ -246,6 +254,9 @@ func privateNew(endpoint string, opts *Options) (*Client, error) {
if clnt.sha256Hasher == nil {
clnt.sha256Hasher = newSHA256Hasher
}
+
+ clnt.trailingHeaderSupport = opts.TrailingHeaders && clnt.overrideSignerType.IsV4()
+
// Sets bucket lookup style, whether server accepts DNS or Path lookup. Default is Auto - determined
// by the SDK. When Auto is specified, DNS lookup is used for Amazon/Google cloud endpoints and Path for all other endpoints.
clnt.lookup = opts.BucketLookup
@@ -312,9 +323,9 @@ func (c *Client) SetS3TransferAccelerate(accelerateEndpoint string) {
// Hash materials provides relevant initialized hash algo writers
// based on the expected signature type.
//
-// - For signature v4 request if the connection is insecure compute only sha256.
-// - For signature v4 request if the connection is secure compute only md5.
-// - For anonymous request compute md5.
+// - For signature v4 request if the connection is insecure compute only sha256.
+// - For signature v4 request if the connection is secure compute only md5.
+// - For anonymous request compute md5.
func (c *Client) hashMaterials(isMd5Requested, isSha256Requested bool) (hashAlgos map[string]md5simd.Hasher, hashSums map[string][]byte) {
hashSums = make(map[string][]byte)
hashAlgos = make(map[string]md5simd.Hasher)
@@ -419,6 +430,8 @@ type requestMetadata struct {
contentMD5Base64 string // carries base64 encoded md5sum
contentSHA256Hex string // carries hex encoded sha256sum
streamSha256 bool
+ addCrc bool
+ trailer http.Header // (http.Request).Trailer. Requires v4 signature.
}
// dumpHTTP - dump HTTP request and response.
@@ -581,6 +594,17 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ
}
}
+ if metadata.addCrc {
+ if metadata.trailer == nil {
+ metadata.trailer = make(http.Header, 1)
+ }
+ crc := crc32.New(crc32.MakeTable(crc32.Castagnoli))
+ metadata.contentBody = newHashReaderWrapper(metadata.contentBody, crc, func(hash []byte) {
+ // Update trailer when done.
+ metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(hash))
+ })
+ metadata.trailer.Set("x-amz-checksum-crc32c", base64.StdEncoding.EncodeToString(crc.Sum(nil)))
+ }
// Instantiate a new request.
var req *http.Request
req, err = c.newRequest(ctx, method, metadata)
@@ -592,6 +616,7 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ
return nil, err
}
+
// Initiate the request.
res, err = c.do(req)
if err != nil {
@@ -632,7 +657,7 @@ func (c *Client) executeMethod(ctx context.Context, method string, metadata requ
// code dictates invalid region, we can retry the request
// with the new region.
//
- // Additionally we should only retry if bucketLocation and custom
+ // Additionally, we should only retry if bucketLocation and custom
// region is empty.
if c.region == "" {
switch errResponse.Code {
@@ -814,9 +839,12 @@ func (c *Client) newRequest(ctx context.Context, method string, metadata request
// Add signature version '2' authorization header.
req = signer.SignV2(*req, accessKeyID, secretAccessKey, isVirtualHost)
case metadata.streamSha256 && !c.secure:
- // Streaming signature is used by default for a PUT object request. Additionally we also
- // look if the initialized client is secure, if yes then we don't need to perform
- // streaming signature.
+ if len(metadata.trailer) > 0 {
+ req.Trailer = metadata.trailer
+ }
+ // Streaming signature is used by default for a PUT object request.
+ // Additionally, we also look if the initialized client is secure,
+ // if yes then we don't need to perform streaming signature.
req = signer.StreamingSignV4(req, accessKeyID,
secretAccessKey, sessionToken, location, metadata.contentLength, time.Now().UTC())
default:
@@ -824,11 +852,17 @@ func (c *Client) newRequest(ctx context.Context, method string, metadata request
shaHeader := unsignedPayload
if metadata.contentSHA256Hex != "" {
shaHeader = metadata.contentSHA256Hex
+ if len(metadata.trailer) > 0 {
+ // Sanity check, we should not end up here if upstream is sane.
+ return nil, errors.New("internal error: contentSHA256Hex with trailer not supported")
+ }
+ } else if len(metadata.trailer) > 0 {
+ shaHeader = unsignedPayloadTrailer
}
req.Header.Set("X-Amz-Content-Sha256", shaHeader)
// Add signature version '4' authorization header.
- req = signer.SignV4(*req, accessKeyID, secretAccessKey, sessionToken, location)
+ req = signer.SignV4Trailer(*req, accessKeyID, secretAccessKey, sessionToken, location, metadata.trailer)
}
// Return request.