From 7b320119ba532fd409ec7dade7ad02011c309599 Mon Sep 17 00:00:00 2001 From: Niall Sheridan Date: Wed, 18 Oct 2017 13:15:14 +0100 Subject: Update dependencies --- vendor/cloud.google.com/go/storage/storage.go | 143 +++++++++++++------------- 1 file changed, 70 insertions(+), 73 deletions(-) (limited to 'vendor/cloud.google.com/go/storage/storage.go') diff --git a/vendor/cloud.google.com/go/storage/storage.go b/vendor/cloud.google.com/go/storage/storage.go index 6b82fa3..8ffa845 100644 --- a/vendor/cloud.google.com/go/storage/storage.go +++ b/vendor/cloud.google.com/go/storage/storage.go @@ -36,7 +36,7 @@ import ( "unicode/utf8" "google.golang.org/api/option" - "google.golang.org/api/transport" + htransport "google.golang.org/api/transport/http" "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/version" @@ -89,7 +89,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error option.WithUserAgent(userAgent), } opts = append(o, opts...) - hc, ep, err := transport.NewHTTPClient(ctx, opts...) + hc, ep, err := htransport.NewClient(ctx, opts...) if err != nil { return nil, fmt.Errorf("dialing: %v", err) } @@ -110,43 +110,13 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error // // Close need not be called at program exit. func (c *Client) Close() error { + // Set fields to nil so that subsequent uses + // will panic. c.hc = nil + c.raw = nil return nil } -// BucketHandle provides operations on a Google Cloud Storage bucket. -// Use Client.Bucket to get a handle. -type BucketHandle struct { - acl ACLHandle - defaultObjectACL ACLHandle - - c *Client - name string -} - -// Bucket returns a BucketHandle, which provides operations on the named bucket. -// This call does not perform any network operations. -// -// The supplied name must contain only lowercase letters, numbers, dashes, -// underscores, and dots. The full specification for valid bucket names can be -// found at: -// https://cloud.google.com/storage/docs/bucket-naming -func (c *Client) Bucket(name string) *BucketHandle { - return &BucketHandle{ - c: c, - name: name, - acl: ACLHandle{ - c: c, - bucket: name, - }, - defaultObjectACL: ACLHandle{ - c: c, - bucket: name, - isDefault: true, - }, - } -} - // SignedURLOptions allows you to restrict the access to the signed URL. type SignedURLOptions struct { // GoogleAccessID represents the authorizer of the signed URL generation. @@ -200,7 +170,7 @@ type SignedURLOptions struct { // Optional. ContentType string - // Headers is a list of extention headers the client must provide + // Headers is a list of extension headers the client must provide // in order to use the generated signed URL. // Optional. Headers []string @@ -295,6 +265,7 @@ type ObjectHandle struct { gen int64 // a negative value indicates latest conds *Conditions encryptionKey []byte // AES-256 key + userProject string // for requester-pays buckets } // ACL provides access to the object's access control list. @@ -347,6 +318,9 @@ func (o *ObjectHandle) Attrs(ctx context.Context) (*ObjectAttrs, error) { if err := applyConds("Attrs", o.gen, o.conds, call); err != nil { return nil, err } + if o.userProject != "" { + call.UserProject(o.userProject) + } if err := setEncryptionHeaders(call.Header(), o.encryptionKey, false); err != nil { return nil, err } @@ -375,11 +349,17 @@ func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) ( var forceSendFields, nullFields []string if uattrs.ContentType != nil { attrs.ContentType = optional.ToString(uattrs.ContentType) - forceSendFields = append(forceSendFields, "ContentType") + // For ContentType, sending the empty string is a no-op. + // Instead we send a null. + if attrs.ContentType == "" { + nullFields = append(nullFields, "ContentType") + } else { + forceSendFields = append(forceSendFields, "ContentType") + } } if uattrs.ContentLanguage != nil { attrs.ContentLanguage = optional.ToString(uattrs.ContentLanguage) - // For ContentLanguage It's an error to send the empty string. + // For ContentLanguage it's an error to send the empty string. // Instead we send a null. if attrs.ContentLanguage == "" { nullFields = append(nullFields, "ContentLanguage") @@ -389,7 +369,7 @@ func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) ( } if uattrs.ContentEncoding != nil { attrs.ContentEncoding = optional.ToString(uattrs.ContentEncoding) - forceSendFields = append(forceSendFields, "ContentType") + forceSendFields = append(forceSendFields, "ContentEncoding") } if uattrs.ContentDisposition != nil { attrs.ContentDisposition = optional.ToString(uattrs.ContentDisposition) @@ -421,6 +401,9 @@ func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) ( if err := applyConds("Update", o.gen, o.conds, call); err != nil { return nil, err } + if o.userProject != "" { + call.UserProject(o.userProject) + } if err := setEncryptionHeaders(call.Header(), o.encryptionKey, false); err != nil { return nil, err } @@ -467,6 +450,10 @@ func (o *ObjectHandle) Delete(ctx context.Context) error { if err := applyConds("Delete", o.gen, o.conds, call); err != nil { return err } + if o.userProject != "" { + call.UserProject(o.userProject) + } + // Encryption doesn't apply to Delete. setClientHeader(call.Header()) err := runWithRetry(ctx, func() error { return call.Do() }) switch e := err.(type) { @@ -518,11 +505,15 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64) if err != nil { return nil, err } + req = withContext(req, ctx) if length < 0 && offset > 0 { req.Header.Set("Range", fmt.Sprintf("bytes=%d-", offset)) } else if length > 0 { req.Header.Set("Range", fmt.Sprintf("bytes=%d-%d", offset, offset+length-1)) } + if o.userProject != "" { + req.Header.Set("X-Goog-User-Project", o.userProject) + } if err := setEncryptionHeaders(req.Header, o.encryptionKey, false); err != nil { return nil, err } @@ -585,12 +576,13 @@ func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64) crc, checkCRC = parseCRC32c(res) } return &Reader{ - body: body, - size: size, - remain: remain, - contentType: res.Header.Get("Content-Type"), - wantCRC: crc, - checkCRC: checkCRC, + body: body, + size: size, + remain: remain, + contentType: res.Header.Get("Content-Type"), + cacheControl: res.Header.Get("Cache-Control"), + wantCRC: crc, + checkCRC: checkCRC, }, nil } @@ -646,11 +638,10 @@ func (o *ObjectHandle) validate() error { return nil } -// parseKey converts the binary contents of a private key file -// to an *rsa.PrivateKey. It detects whether the private key is in a -// PEM container or not. If so, it extracts the the private key -// from PEM container before conversion. It only supports PEM -// containers with no passphrase. +// parseKey converts the binary contents of a private key file to an +// *rsa.PrivateKey. It detects whether the private key is in a PEM container or +// not. If so, it extracts the private key from PEM container before +// conversion. It only supports PEM containers with no passphrase. func parseKey(key []byte) (*rsa.PrivateKey, error) { if block, _ := pem.Decode(key); block != nil { key = block.Bytes @@ -738,11 +729,16 @@ type ObjectAttrs struct { // sent in the response headers. ContentDisposition string - // MD5 is the MD5 hash of the object's content. This field is read-only. + // MD5 is the MD5 hash of the object's content. This field is read-only, + // except when used from a Writer. If set on a Writer, the uploaded + // data is rejected if its MD5 hash does not match this field. MD5 []byte // CRC32C is the CRC32 checksum of the object's content using - // the Castagnoli93 polynomial. This field is read-only. + // the Castagnoli93 polynomial. This field is read-only, except when + // used from a Writer. If set on a Writer and Writer.SendCRC32C + // is true, the uploaded data is rejected if its CRC32c hash does not + // match this field. CRC32C uint32 // MediaLink is an URL to the object's content. This field is read-only. @@ -830,26 +826,27 @@ func newObject(o *raw.Object) *ObjectAttrs { sha256 = o.CustomerEncryption.KeySha256 } return &ObjectAttrs{ - Bucket: o.Bucket, - Name: o.Name, - ContentType: o.ContentType, - ContentLanguage: o.ContentLanguage, - CacheControl: o.CacheControl, - ACL: acl, - Owner: owner, - ContentEncoding: o.ContentEncoding, - Size: int64(o.Size), - MD5: md5, - CRC32C: crc32c, - MediaLink: o.MediaLink, - Metadata: o.Metadata, - Generation: o.Generation, - Metageneration: o.Metageneration, - StorageClass: o.StorageClass, - CustomerKeySHA256: sha256, - Created: convertTime(o.TimeCreated), - Deleted: convertTime(o.TimeDeleted), - Updated: convertTime(o.Updated), + Bucket: o.Bucket, + Name: o.Name, + ContentType: o.ContentType, + ContentLanguage: o.ContentLanguage, + CacheControl: o.CacheControl, + ACL: acl, + Owner: owner, + ContentEncoding: o.ContentEncoding, + ContentDisposition: o.ContentDisposition, + Size: int64(o.Size), + MD5: md5, + CRC32C: crc32c, + MediaLink: o.MediaLink, + Metadata: o.Metadata, + Generation: o.Generation, + Metageneration: o.Metageneration, + StorageClass: o.StorageClass, + CustomerKeySHA256: sha256, + Created: convertTime(o.TimeCreated), + Deleted: convertTime(o.TimeDeleted), + Updated: convertTime(o.Updated), } } @@ -904,7 +901,7 @@ func (c *contentTyper) ContentType() string { } // Conditions constrain methods to act on specific generations of -// resources. +// objects. // // The zero value is an empty set of constraints. Not all conditions or // combinations of conditions are applicable to all methods. -- cgit v1.2.3