[chore]: Bump github.com/minio/minio-go/v7 from 7.0.80 to 7.0.81 (#3590)
Bumps [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) from 7.0.80 to 7.0.81. - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.80...v7.0.81) --- 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> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
parent
c9d36f7e45
commit
936b269b05
2
go.mod
2
go.mod
|
@ -60,7 +60,7 @@ require (
|
||||||
github.com/k3a/html2text v1.2.1
|
github.com/k3a/html2text v1.2.1
|
||||||
github.com/microcosm-cc/bluemonday v1.0.27
|
github.com/microcosm-cc/bluemonday v1.0.27
|
||||||
github.com/miekg/dns v1.1.62
|
github.com/miekg/dns v1.1.62
|
||||||
github.com/minio/minio-go/v7 v7.0.80
|
github.com/minio/minio-go/v7 v7.0.81
|
||||||
github.com/mitchellh/mapstructure v1.5.0
|
github.com/mitchellh/mapstructure v1.5.0
|
||||||
github.com/ncruces/go-sqlite3 v0.20.3
|
github.com/ncruces/go-sqlite3 v0.20.3
|
||||||
github.com/oklog/ulid v1.3.1
|
github.com/oklog/ulid v1.3.1
|
||||||
|
|
|
@ -413,8 +413,8 @@ github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
|
||||||
github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
|
github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
|
||||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||||
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||||
github.com/minio/minio-go/v7 v7.0.80 h1:2mdUHXEykRdY/BigLt3Iuu1otL0JTogT0Nmltg0wujk=
|
github.com/minio/minio-go/v7 v7.0.81 h1:SzhMN0TQ6T/xSBu6Nvw3M5M8voM+Ht8RH3hE8S7zxaA=
|
||||||
github.com/minio/minio-go/v7 v7.0.80/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0=
|
github.com/minio/minio-go/v7 v7.0.81/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0=
|
||||||
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
|
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
|
||||||
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
|
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
|
||||||
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
|
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
/*
|
||||||
|
* MinIO Go Library for Amazon S3 Compatible Cloud Storage
|
||||||
|
* Copyright 2015-2024 MinIO, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package minio
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/goccy/go-json"
|
||||||
|
"github.com/minio/minio-go/v7/pkg/s3utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PromptObject performs language model inference with the prompt and referenced object as context.
|
||||||
|
// Inference is performed using a Lambda handler that can process the prompt and object.
|
||||||
|
// Currently, this functionality is limited to certain MinIO servers.
|
||||||
|
func (c *Client) PromptObject(ctx context.Context, bucketName, objectName, prompt string, opts PromptObjectOptions) (io.ReadCloser, error) {
|
||||||
|
// Input validation.
|
||||||
|
if err := s3utils.CheckValidBucketName(bucketName); err != nil {
|
||||||
|
return nil, ErrorResponse{
|
||||||
|
StatusCode: http.StatusBadRequest,
|
||||||
|
Code: "InvalidBucketName",
|
||||||
|
Message: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := s3utils.CheckValidObjectName(objectName); err != nil {
|
||||||
|
return nil, ErrorResponse{
|
||||||
|
StatusCode: http.StatusBadRequest,
|
||||||
|
Code: "XMinioInvalidObjectName",
|
||||||
|
Message: err.Error(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
opts.AddLambdaArnToReqParams(opts.LambdaArn)
|
||||||
|
opts.SetHeader("Content-Type", "application/json")
|
||||||
|
opts.AddPromptArg("prompt", prompt)
|
||||||
|
promptReqBytes, err := json.Marshal(opts.PromptArgs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute POST on bucket/object.
|
||||||
|
resp, err := c.executeMethod(ctx, http.MethodPost, requestMetadata{
|
||||||
|
bucketName: bucketName,
|
||||||
|
objectName: objectName,
|
||||||
|
queryValues: opts.toQueryValues(),
|
||||||
|
customHeader: opts.Header(),
|
||||||
|
contentSHA256Hex: sum256Hex(promptReqBytes),
|
||||||
|
contentBody: bytes.NewReader(promptReqBytes),
|
||||||
|
contentLength: int64(len(promptReqBytes)),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
defer closeResponse(resp)
|
||||||
|
return nil, httpRespToErrorResponse(resp, bucketName, objectName)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp.Body, nil
|
||||||
|
}
|
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* MinIO Go Library for Amazon S3 Compatible Cloud Storage
|
||||||
|
* Copyright 2015-2024 MinIO, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package minio
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PromptObjectOptions provides options to PromptObject call.
|
||||||
|
// LambdaArn is the ARN of the Prompt Lambda to be invoked.
|
||||||
|
// PromptArgs is a map of key-value pairs to be passed to the inference action on the Prompt Lambda.
|
||||||
|
// "prompt" is a reserved key and should not be used as a key in PromptArgs.
|
||||||
|
type PromptObjectOptions struct {
|
||||||
|
LambdaArn string
|
||||||
|
PromptArgs map[string]any
|
||||||
|
headers map[string]string
|
||||||
|
reqParams url.Values
|
||||||
|
}
|
||||||
|
|
||||||
|
// Header returns the http.Header representation of the POST options.
|
||||||
|
func (o PromptObjectOptions) Header() http.Header {
|
||||||
|
headers := make(http.Header, len(o.headers))
|
||||||
|
for k, v := range o.headers {
|
||||||
|
headers.Set(k, v)
|
||||||
|
}
|
||||||
|
return headers
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddPromptArg Add a key value pair to the prompt arguments where the key is a string and
|
||||||
|
// the value is a JSON serializable.
|
||||||
|
func (o *PromptObjectOptions) AddPromptArg(key string, value any) {
|
||||||
|
if o.PromptArgs == nil {
|
||||||
|
o.PromptArgs = make(map[string]any)
|
||||||
|
}
|
||||||
|
o.PromptArgs[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddLambdaArnToReqParams adds the lambdaArn to the request query string parameters.
|
||||||
|
func (o *PromptObjectOptions) AddLambdaArnToReqParams(lambdaArn string) {
|
||||||
|
if o.reqParams == nil {
|
||||||
|
o.reqParams = make(url.Values)
|
||||||
|
}
|
||||||
|
o.reqParams.Add("lambdaArn", lambdaArn)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetHeader adds a key value pair to the options. The
|
||||||
|
// key-value pair will be part of the HTTP POST request
|
||||||
|
// headers.
|
||||||
|
func (o *PromptObjectOptions) SetHeader(key, value string) {
|
||||||
|
if o.headers == nil {
|
||||||
|
o.headers = make(map[string]string)
|
||||||
|
}
|
||||||
|
o.headers[http.CanonicalHeaderKey(key)] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
// toQueryValues - Convert the reqParams in Options to query string parameters.
|
||||||
|
func (o *PromptObjectOptions) toQueryValues() url.Values {
|
||||||
|
urlValues := make(url.Values)
|
||||||
|
if o.reqParams != nil {
|
||||||
|
for key, values := range o.reqParams {
|
||||||
|
for _, value := range values {
|
||||||
|
urlValues.Add(key, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return urlValues
|
||||||
|
}
|
|
@ -85,7 +85,10 @@ func (c *Client) PutObjectFanOut(ctx context.Context, bucket string, fanOutData
|
||||||
policy.SetEncryption(fanOutReq.SSE)
|
policy.SetEncryption(fanOutReq.SSE)
|
||||||
|
|
||||||
// Set checksum headers if any.
|
// Set checksum headers if any.
|
||||||
policy.SetChecksum(fanOutReq.Checksum)
|
err := policy.SetChecksum(fanOutReq.Checksum)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
url, formData, err := c.PresignedPostPolicy(ctx, policy)
|
url, formData, err := c.PresignedPostPolicy(ctx, policy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -133,7 +133,7 @@ type Options struct {
|
||||||
// Global constants.
|
// Global constants.
|
||||||
const (
|
const (
|
||||||
libraryName = "minio-go"
|
libraryName = "minio-go"
|
||||||
libraryVersion = "v7.0.80"
|
libraryVersion = "v7.0.81"
|
||||||
)
|
)
|
||||||
|
|
||||||
// User Agent should always following the below style.
|
// User Agent should always following the below style.
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -58,9 +58,10 @@ type WebIdentityResult struct {
|
||||||
|
|
||||||
// WebIdentityToken - web identity token with expiry.
|
// WebIdentityToken - web identity token with expiry.
|
||||||
type WebIdentityToken struct {
|
type WebIdentityToken struct {
|
||||||
Token string
|
Token string
|
||||||
AccessToken string
|
AccessToken string
|
||||||
Expiry int
|
RefreshToken string
|
||||||
|
Expiry int
|
||||||
}
|
}
|
||||||
|
|
||||||
// A STSWebIdentity retrieves credentials from MinIO service, and keeps track if
|
// A STSWebIdentity retrieves credentials from MinIO service, and keeps track if
|
||||||
|
|
|
@ -85,7 +85,7 @@ func (p *PostPolicy) SetExpires(t time.Time) error {
|
||||||
|
|
||||||
// SetKey - Sets an object name for the policy based upload.
|
// SetKey - Sets an object name for the policy based upload.
|
||||||
func (p *PostPolicy) SetKey(key string) error {
|
func (p *PostPolicy) SetKey(key string) error {
|
||||||
if strings.TrimSpace(key) == "" || key == "" {
|
if strings.TrimSpace(key) == "" {
|
||||||
return errInvalidArgument("Object name is empty.")
|
return errInvalidArgument("Object name is empty.")
|
||||||
}
|
}
|
||||||
policyCond := policyCondition{
|
policyCond := policyCondition{
|
||||||
|
@ -118,7 +118,7 @@ func (p *PostPolicy) SetKeyStartsWith(keyStartsWith string) error {
|
||||||
|
|
||||||
// SetBucket - Sets bucket at which objects will be uploaded to.
|
// SetBucket - Sets bucket at which objects will be uploaded to.
|
||||||
func (p *PostPolicy) SetBucket(bucketName string) error {
|
func (p *PostPolicy) SetBucket(bucketName string) error {
|
||||||
if strings.TrimSpace(bucketName) == "" || bucketName == "" {
|
if strings.TrimSpace(bucketName) == "" {
|
||||||
return errInvalidArgument("Bucket name is empty.")
|
return errInvalidArgument("Bucket name is empty.")
|
||||||
}
|
}
|
||||||
policyCond := policyCondition{
|
policyCond := policyCondition{
|
||||||
|
@ -135,7 +135,7 @@ func (p *PostPolicy) SetBucket(bucketName string) error {
|
||||||
|
|
||||||
// SetCondition - Sets condition for credentials, date and algorithm
|
// SetCondition - Sets condition for credentials, date and algorithm
|
||||||
func (p *PostPolicy) SetCondition(matchType, condition, value string) error {
|
func (p *PostPolicy) SetCondition(matchType, condition, value string) error {
|
||||||
if strings.TrimSpace(value) == "" || value == "" {
|
if strings.TrimSpace(value) == "" {
|
||||||
return errInvalidArgument("No value specified for condition")
|
return errInvalidArgument("No value specified for condition")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,7 @@ func (p *PostPolicy) SetCondition(matchType, condition, value string) error {
|
||||||
|
|
||||||
// SetTagging - Sets tagging for the object for this policy based upload.
|
// SetTagging - Sets tagging for the object for this policy based upload.
|
||||||
func (p *PostPolicy) SetTagging(tagging string) error {
|
func (p *PostPolicy) SetTagging(tagging string) error {
|
||||||
if strings.TrimSpace(tagging) == "" || tagging == "" {
|
if strings.TrimSpace(tagging) == "" {
|
||||||
return errInvalidArgument("No tagging specified.")
|
return errInvalidArgument("No tagging specified.")
|
||||||
}
|
}
|
||||||
_, err := tags.ParseObjectXML(strings.NewReader(tagging))
|
_, err := tags.ParseObjectXML(strings.NewReader(tagging))
|
||||||
|
@ -178,7 +178,7 @@ func (p *PostPolicy) SetTagging(tagging string) error {
|
||||||
// SetContentType - Sets content-type of the object for this policy
|
// SetContentType - Sets content-type of the object for this policy
|
||||||
// based upload.
|
// based upload.
|
||||||
func (p *PostPolicy) SetContentType(contentType string) error {
|
func (p *PostPolicy) SetContentType(contentType string) error {
|
||||||
if strings.TrimSpace(contentType) == "" || contentType == "" {
|
if strings.TrimSpace(contentType) == "" {
|
||||||
return errInvalidArgument("No content type specified.")
|
return errInvalidArgument("No content type specified.")
|
||||||
}
|
}
|
||||||
policyCond := policyCondition{
|
policyCond := policyCondition{
|
||||||
|
@ -211,7 +211,7 @@ func (p *PostPolicy) SetContentTypeStartsWith(contentTypeStartsWith string) erro
|
||||||
|
|
||||||
// SetContentDisposition - Sets content-disposition of the object for this policy
|
// SetContentDisposition - Sets content-disposition of the object for this policy
|
||||||
func (p *PostPolicy) SetContentDisposition(contentDisposition string) error {
|
func (p *PostPolicy) SetContentDisposition(contentDisposition string) error {
|
||||||
if strings.TrimSpace(contentDisposition) == "" || contentDisposition == "" {
|
if strings.TrimSpace(contentDisposition) == "" {
|
||||||
return errInvalidArgument("No content disposition specified.")
|
return errInvalidArgument("No content disposition specified.")
|
||||||
}
|
}
|
||||||
policyCond := policyCondition{
|
policyCond := policyCondition{
|
||||||
|
@ -226,27 +226,44 @@ func (p *PostPolicy) SetContentDisposition(contentDisposition string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetContentEncoding - Sets content-encoding of the object for this policy
|
||||||
|
func (p *PostPolicy) SetContentEncoding(contentEncoding string) error {
|
||||||
|
if strings.TrimSpace(contentEncoding) == "" {
|
||||||
|
return errInvalidArgument("No content encoding specified.")
|
||||||
|
}
|
||||||
|
policyCond := policyCondition{
|
||||||
|
matchType: "eq",
|
||||||
|
condition: "$Content-Encoding",
|
||||||
|
value: contentEncoding,
|
||||||
|
}
|
||||||
|
if err := p.addNewPolicy(policyCond); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.formData["Content-Encoding"] = contentEncoding
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetContentLengthRange - Set new min and max content length
|
// SetContentLengthRange - Set new min and max content length
|
||||||
// condition for all incoming uploads.
|
// condition for all incoming uploads.
|
||||||
func (p *PostPolicy) SetContentLengthRange(min, max int64) error {
|
func (p *PostPolicy) SetContentLengthRange(minLen, maxLen int64) error {
|
||||||
if min > max {
|
if minLen > maxLen {
|
||||||
return errInvalidArgument("Minimum limit is larger than maximum limit.")
|
return errInvalidArgument("Minimum limit is larger than maximum limit.")
|
||||||
}
|
}
|
||||||
if min < 0 {
|
if minLen < 0 {
|
||||||
return errInvalidArgument("Minimum limit cannot be negative.")
|
return errInvalidArgument("Minimum limit cannot be negative.")
|
||||||
}
|
}
|
||||||
if max <= 0 {
|
if maxLen <= 0 {
|
||||||
return errInvalidArgument("Maximum limit cannot be non-positive.")
|
return errInvalidArgument("Maximum limit cannot be non-positive.")
|
||||||
}
|
}
|
||||||
p.contentLengthRange.min = min
|
p.contentLengthRange.min = minLen
|
||||||
p.contentLengthRange.max = max
|
p.contentLengthRange.max = maxLen
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetSuccessActionRedirect - Sets the redirect success url of the object for this policy
|
// SetSuccessActionRedirect - Sets the redirect success url of the object for this policy
|
||||||
// based upload.
|
// based upload.
|
||||||
func (p *PostPolicy) SetSuccessActionRedirect(redirect string) error {
|
func (p *PostPolicy) SetSuccessActionRedirect(redirect string) error {
|
||||||
if strings.TrimSpace(redirect) == "" || redirect == "" {
|
if strings.TrimSpace(redirect) == "" {
|
||||||
return errInvalidArgument("Redirect is empty")
|
return errInvalidArgument("Redirect is empty")
|
||||||
}
|
}
|
||||||
policyCond := policyCondition{
|
policyCond := policyCondition{
|
||||||
|
@ -264,7 +281,7 @@ func (p *PostPolicy) SetSuccessActionRedirect(redirect string) error {
|
||||||
// SetSuccessStatusAction - Sets the status success code of the object for this policy
|
// SetSuccessStatusAction - Sets the status success code of the object for this policy
|
||||||
// based upload.
|
// based upload.
|
||||||
func (p *PostPolicy) SetSuccessStatusAction(status string) error {
|
func (p *PostPolicy) SetSuccessStatusAction(status string) error {
|
||||||
if strings.TrimSpace(status) == "" || status == "" {
|
if strings.TrimSpace(status) == "" {
|
||||||
return errInvalidArgument("Status is empty")
|
return errInvalidArgument("Status is empty")
|
||||||
}
|
}
|
||||||
policyCond := policyCondition{
|
policyCond := policyCondition{
|
||||||
|
@ -282,10 +299,10 @@ func (p *PostPolicy) SetSuccessStatusAction(status string) error {
|
||||||
// SetUserMetadata - Set user metadata as a key/value couple.
|
// SetUserMetadata - Set user metadata as a key/value couple.
|
||||||
// Can be retrieved through a HEAD request or an event.
|
// Can be retrieved through a HEAD request or an event.
|
||||||
func (p *PostPolicy) SetUserMetadata(key, value string) error {
|
func (p *PostPolicy) SetUserMetadata(key, value string) error {
|
||||||
if strings.TrimSpace(key) == "" || key == "" {
|
if strings.TrimSpace(key) == "" {
|
||||||
return errInvalidArgument("Key is empty")
|
return errInvalidArgument("Key is empty")
|
||||||
}
|
}
|
||||||
if strings.TrimSpace(value) == "" || value == "" {
|
if strings.TrimSpace(value) == "" {
|
||||||
return errInvalidArgument("Value is empty")
|
return errInvalidArgument("Value is empty")
|
||||||
}
|
}
|
||||||
headerName := fmt.Sprintf("x-amz-meta-%s", key)
|
headerName := fmt.Sprintf("x-amz-meta-%s", key)
|
||||||
|
@ -304,7 +321,7 @@ func (p *PostPolicy) SetUserMetadata(key, value string) error {
|
||||||
// SetUserMetadataStartsWith - Set how an user metadata should starts with.
|
// SetUserMetadataStartsWith - Set how an user metadata should starts with.
|
||||||
// Can be retrieved through a HEAD request or an event.
|
// Can be retrieved through a HEAD request or an event.
|
||||||
func (p *PostPolicy) SetUserMetadataStartsWith(key, value string) error {
|
func (p *PostPolicy) SetUserMetadataStartsWith(key, value string) error {
|
||||||
if strings.TrimSpace(key) == "" || key == "" {
|
if strings.TrimSpace(key) == "" {
|
||||||
return errInvalidArgument("Key is empty")
|
return errInvalidArgument("Key is empty")
|
||||||
}
|
}
|
||||||
headerName := fmt.Sprintf("x-amz-meta-%s", key)
|
headerName := fmt.Sprintf("x-amz-meta-%s", key)
|
||||||
|
@ -321,11 +338,29 @@ func (p *PostPolicy) SetUserMetadataStartsWith(key, value string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetChecksum sets the checksum of the request.
|
// SetChecksum sets the checksum of the request.
|
||||||
func (p *PostPolicy) SetChecksum(c Checksum) {
|
func (p *PostPolicy) SetChecksum(c Checksum) error {
|
||||||
if c.IsSet() {
|
if c.IsSet() {
|
||||||
p.formData[amzChecksumAlgo] = c.Type.String()
|
p.formData[amzChecksumAlgo] = c.Type.String()
|
||||||
p.formData[c.Type.Key()] = c.Encoded()
|
p.formData[c.Type.Key()] = c.Encoded()
|
||||||
|
|
||||||
|
policyCond := policyCondition{
|
||||||
|
matchType: "eq",
|
||||||
|
condition: fmt.Sprintf("$%s", amzChecksumAlgo),
|
||||||
|
value: c.Type.String(),
|
||||||
|
}
|
||||||
|
if err := p.addNewPolicy(policyCond); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
policyCond = policyCondition{
|
||||||
|
matchType: "eq",
|
||||||
|
condition: fmt.Sprintf("$%s", c.Type.Key()),
|
||||||
|
value: c.Encoded(),
|
||||||
|
}
|
||||||
|
if err := p.addNewPolicy(policyCond); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetEncryption - sets encryption headers for POST API
|
// SetEncryption - sets encryption headers for POST API
|
||||||
|
|
|
@ -20,7 +20,7 @@ package minio
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
// newRetryTimerContinous creates a timer with exponentially increasing delays forever.
|
// newRetryTimerContinous creates a timer with exponentially increasing delays forever.
|
||||||
func (c *Client) newRetryTimerContinous(unit, cap time.Duration, jitter float64, doneCh chan struct{}) <-chan int {
|
func (c *Client) newRetryTimerContinous(baseSleep, maxSleep time.Duration, jitter float64, doneCh chan struct{}) <-chan int {
|
||||||
attemptCh := make(chan int)
|
attemptCh := make(chan int)
|
||||||
|
|
||||||
// normalize jitter to the range [0, 1.0]
|
// normalize jitter to the range [0, 1.0]
|
||||||
|
@ -39,10 +39,10 @@ func (c *Client) newRetryTimerContinous(unit, cap time.Duration, jitter float64,
|
||||||
if attempt > maxAttempt {
|
if attempt > maxAttempt {
|
||||||
attempt = maxAttempt
|
attempt = maxAttempt
|
||||||
}
|
}
|
||||||
// sleep = random_between(0, min(cap, base * 2 ** attempt))
|
// sleep = random_between(0, min(maxSleep, base * 2 ** attempt))
|
||||||
sleep := unit * time.Duration(1<<uint(attempt))
|
sleep := baseSleep * time.Duration(1<<uint(attempt))
|
||||||
if sleep > cap {
|
if sleep > maxSleep {
|
||||||
sleep = cap
|
sleep = maxSleep
|
||||||
}
|
}
|
||||||
if jitter != NoJitter {
|
if jitter != NoJitter {
|
||||||
sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter)
|
sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter)
|
||||||
|
|
|
@ -45,7 +45,7 @@ var DefaultRetryCap = time.Second
|
||||||
|
|
||||||
// newRetryTimer creates a timer with exponentially increasing
|
// newRetryTimer creates a timer with exponentially increasing
|
||||||
// delays until the maximum retry attempts are reached.
|
// delays until the maximum retry attempts are reached.
|
||||||
func (c *Client) newRetryTimer(ctx context.Context, maxRetry int, unit, cap time.Duration, jitter float64) <-chan int {
|
func (c *Client) newRetryTimer(ctx context.Context, maxRetry int, baseSleep, maxSleep time.Duration, jitter float64) <-chan int {
|
||||||
attemptCh := make(chan int)
|
attemptCh := make(chan int)
|
||||||
|
|
||||||
// computes the exponential backoff duration according to
|
// computes the exponential backoff duration according to
|
||||||
|
@ -59,10 +59,10 @@ func (c *Client) newRetryTimer(ctx context.Context, maxRetry int, unit, cap time
|
||||||
jitter = MaxJitter
|
jitter = MaxJitter
|
||||||
}
|
}
|
||||||
|
|
||||||
// sleep = random_between(0, min(cap, base * 2 ** attempt))
|
// sleep = random_between(0, min(maxSleep, base * 2 ** attempt))
|
||||||
sleep := unit * time.Duration(1<<uint(attempt))
|
sleep := baseSleep * time.Duration(1<<uint(attempt))
|
||||||
if sleep > cap {
|
if sleep > maxSleep {
|
||||||
sleep = cap
|
sleep = maxSleep
|
||||||
}
|
}
|
||||||
if jitter != NoJitter {
|
if jitter != NoJitter {
|
||||||
sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter)
|
sleep -= time.Duration(c.random.Float64() * float64(sleep) * jitter)
|
||||||
|
|
|
@ -488,7 +488,7 @@ github.com/miekg/dns
|
||||||
# github.com/minio/md5-simd v1.1.2
|
# github.com/minio/md5-simd v1.1.2
|
||||||
## explicit; go 1.14
|
## explicit; go 1.14
|
||||||
github.com/minio/md5-simd
|
github.com/minio/md5-simd
|
||||||
# github.com/minio/minio-go/v7 v7.0.80
|
# github.com/minio/minio-go/v7 v7.0.81
|
||||||
## explicit; go 1.22
|
## explicit; go 1.22
|
||||||
github.com/minio/minio-go/v7
|
github.com/minio/minio-go/v7
|
||||||
github.com/minio/minio-go/v7/pkg/cors
|
github.com/minio/minio-go/v7/pkg/cors
|
||||||
|
|
Loading…
Reference in New Issue