gateway-s3: vendor-update minio-go (#4220)
parent
4aa65910e5
commit
e5b2e25caf
Binary file not shown.
@ -0,0 +1,105 @@ |
||||
/* |
||||
* Minio Go Library for Amazon S3 Compatible Cloud Storage (C) 2016 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 ( |
||||
"fmt" |
||||
"net/http" |
||||
"time" |
||||
) |
||||
|
||||
// RequestHeaders - implement methods for setting special
|
||||
// request headers for GET, HEAD object operations.
|
||||
// http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html
|
||||
type RequestHeaders struct { |
||||
http.Header |
||||
} |
||||
|
||||
// NewGetReqHeaders - initializes a new request headers for GET request.
|
||||
func NewGetReqHeaders() RequestHeaders { |
||||
return RequestHeaders{ |
||||
Header: make(http.Header), |
||||
} |
||||
} |
||||
|
||||
// NewHeadReqHeaders - initializes a new request headers for HEAD request.
|
||||
func NewHeadReqHeaders() RequestHeaders { |
||||
return RequestHeaders{ |
||||
Header: make(http.Header), |
||||
} |
||||
} |
||||
|
||||
// SetMatchETag - set match etag.
|
||||
func (c RequestHeaders) SetMatchETag(etag string) error { |
||||
if etag == "" { |
||||
return ErrInvalidArgument("ETag cannot be empty.") |
||||
} |
||||
c.Set("If-Match", etag) |
||||
return nil |
||||
} |
||||
|
||||
// SetMatchETagExcept - set match etag except.
|
||||
func (c RequestHeaders) SetMatchETagExcept(etag string) error { |
||||
if etag == "" { |
||||
return ErrInvalidArgument("ETag cannot be empty.") |
||||
} |
||||
c.Set("If-None-Match", etag) |
||||
return nil |
||||
} |
||||
|
||||
// SetUnmodified - set unmodified time since.
|
||||
func (c RequestHeaders) SetUnmodified(modTime time.Time) error { |
||||
if modTime.IsZero() { |
||||
return ErrInvalidArgument("Modified since cannot be empty.") |
||||
} |
||||
c.Set("If-Unmodified-Since", modTime.Format(http.TimeFormat)) |
||||
return nil |
||||
} |
||||
|
||||
// SetModified - set modified time since.
|
||||
func (c RequestHeaders) SetModified(modTime time.Time) error { |
||||
if modTime.IsZero() { |
||||
return ErrInvalidArgument("Modified since cannot be empty.") |
||||
} |
||||
c.Set("If-Modified-Since", modTime.Format(http.TimeFormat)) |
||||
return nil |
||||
} |
||||
|
||||
// SetRange - set the start and end offset of the object to be read.
|
||||
// See https://tools.ietf.org/html/rfc7233#section-3.1 for reference.
|
||||
func (c RequestHeaders) SetRange(start, end int64) error { |
||||
switch { |
||||
case start <= 0 && end < 0: |
||||
// Read everything until the 'end'. `bytes=-N`
|
||||
c.Set("Range", fmt.Sprintf("bytes=%d", end)) |
||||
case start > 0 && end == 0: |
||||
// Read everything starting from offset 'start'. `bytes=N-`
|
||||
c.Set("Range", fmt.Sprintf("bytes=%d-", start)) |
||||
case start > 0 && end > 0 && end >= start: |
||||
// Read everything starting at 'start' till the 'end'. `bytes=N-M`
|
||||
c.Set("Range", fmt.Sprintf("bytes=%d-%d", start, end)) |
||||
case start == 0 && end == 0: |
||||
// Client attempting to read the whole file.
|
||||
return nil |
||||
} |
||||
// All other cases such as
|
||||
// bytes=-N-
|
||||
// bytes=N-M where M < N
|
||||
// These return error and are not supported.
|
||||
return ErrInvalidArgument(fmt.Sprintf("Invalid range start and end specified bytes=%d-%d", |
||||
start, end)) |
||||
} |
Loading…
Reference in new issue