google-cloud-storage 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32043f65423a16e46517e97ba6bac2a1274c65c8e2de2a65aa2b943441d81450
4
- data.tar.gz: 877e9fae1ca774a7a96b9cd22c65f3510b6ff69e572d76ba00774c82b584cb5e
3
+ metadata.gz: 95278f620e42cb0c09f509e972b2aac94204cd0435a7b824d561903d7dc3f455
4
+ data.tar.gz: 04410bfcf4d0cf2ce2b4b0db9e4f653122a7dded2ce460dac8ba5a97fc288a74
5
5
  SHA512:
6
- metadata.gz: 403cc31cb8f15f14d247683926e64c2199b11ddcf40e8971515522ff0b4b0f231ebbeb666d467af9d92712c7ce456a1b6f546ca79c644ec4e2bbc2784e722875
7
- data.tar.gz: 01e66c191a69e1de2e4badc0719c218a53c2a9ab1c9eddb2c9a1c8ae20bbae92e86fa15c922e48cb83e875cfe36fb7db407431935ae519cc34d840376577b4e6
6
+ metadata.gz: 45c6bcb301c44151f4069cf648420f4b411e2662e843cc965105b8bf7f4e3a5f9072aaada1437ecda3df64fffcc4975a96694703f812278f37a24f5820df5d32
7
+ data.tar.gz: 9204c51ae1a9e967714db5fdee82f3f33c21cc879ccc7530013c861d1f015960ee6783f92dd37d96f5b3c07164314755d93dd7380a7deac75fd8ffe118f96de2
@@ -1,5 +1,12 @@
1
1
  # Release History
2
2
 
3
+ ### 1.20.0 / 2019-08-08
4
+
5
+ * Add HmacKey
6
+ * Add Project#create_hmac_key, Project#hmac_key, and Project#hmac_keys.
7
+ * Update documentation listings of current and legacy storage classes.
8
+ * Fix File#download to use generation from current File object.
9
+
3
10
  ### 1.19.0 / 2019-07-11
4
11
 
5
12
  * Add Bucket#location_type
data/LOGGING.md CHANGED
@@ -6,7 +6,7 @@ Client](https://github.com/google/google-api-ruby-client/blob/master/README.md#l
6
6
  library. The logger that you set may be a Ruby stdlib
7
7
  [`Logger`](https://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html) as
8
8
  shown below, or a
9
- [`Google::Cloud::Logging::Logger`](https://googleapis.github.io/google-cloud-ruby/docs/google-cloud-logging/latest/Google/Cloud/Logging/Logger)
9
+ [`Google::Cloud::Logging::Logger`](https://googleapis.dev/ruby/google-cloud-logging/latest)
10
10
  that will write logs to [Stackdriver
11
11
  Logging](https://cloud.google.com/logging/).
12
12
 
@@ -357,8 +357,9 @@ module Google
357
357
  ##
358
358
  # The bucket's storage class. This defines how objects in the bucket are
359
359
  # stored and determines the SLA and the cost of storage. Values include
360
- # `MULTI_REGIONAL`, `REGIONAL`, `NEARLINE`, `COLDLINE`, and
361
- # `DURABLE_REDUCED_AVAILABILITY`.
360
+ # `STANDARD`, `NEARLINE`, and `COLDLINE`. `REGIONAL`,`MULTI_REGIONAL`,
361
+ # and `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
362
+ # classes.
362
363
  #
363
364
  # @return [String]
364
365
  #
@@ -370,8 +371,10 @@ module Google
370
371
  # Updates the bucket's storage class. This defines how objects in the
371
372
  # bucket are stored and determines the SLA and the cost of storage.
372
373
  # Accepted values include `:standard`, `:nearline`, and `:coldline`, as
373
- # well as the equivalent strings returned by {Bucket#storage_class}. For
374
- # more information, see [Storage
374
+ # well as the equivalent strings returned by {Bucket#storage_class}.
375
+ # `:multi_regional`, `:regional`, and `durable_reduced_availability`
376
+ # are accepted as legacy storage classes. For more information, see
377
+ # [Storage
375
378
  # Classes](https://cloud.google.com/storage/docs/storage-classes).
376
379
  #
377
380
  # @param [Symbol, String] new_storage_class Storage class of the bucket.
@@ -1137,7 +1140,9 @@ module Google
1137
1140
  # Determines how the file is stored and determines the SLA and the
1138
1141
  # cost of storage. Accepted values include `:standard`, `:nearline`,
1139
1142
  # and `:coldline`, as well as the equivalent strings returned by
1140
- # {#storage_class}. For more information, see [Storage
1143
+ # {#storage_class}. `:multi_regional`, `:regional`, and
1144
+ # `durable_reduced_availability` are accepted legacy storage classes.
1145
+ # For more information, see [Storage
1141
1146
  # Classes](https://cloud.google.com/storage/docs/storage-classes)
1142
1147
  # and [Per-Object Storage
1143
1148
  # Class](https://cloud.google.com/storage/docs/per-object-storage-class).
@@ -937,8 +937,8 @@ module Google
937
937
  end
938
938
  file, resp =
939
939
  service.download_file bucket, name, path,
940
- key: encryption_key, range: range,
941
- user_project: user_project
940
+ generation: generation, key: encryption_key,
941
+ range: range, user_project: user_project
942
942
  # FIX: downloading with encryption key will return nil
943
943
  file ||= ::File.new path
944
944
  verify = :none if range
@@ -122,9 +122,10 @@ module Google
122
122
  def canonical_and_signed_headers headers
123
123
  # Headers needs to be in alpha order.
124
124
  canonical_headers = headers || {}
125
- canonical_headers = Hash[canonical_headers.map do |k, v|
126
- [k.downcase, v.strip.gsub(/\s+/, " ")]
127
- end]
125
+ headers_arr = canonical_headers.map do |k, v|
126
+ [k.downcase, v.strip.gsub(/[^\S\t]+/, " ").gsub(/\t+/, "\t")]
127
+ end
128
+ canonical_headers = Hash[headers_arr]
128
129
  canonical_headers["host"] = "storage.googleapis.com"
129
130
 
130
131
  canonical_headers = canonical_headers.sort_by do |k, _|
@@ -0,0 +1,316 @@
1
+ # Copyright 2019 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ require "google/cloud/storage/hmac_key/list"
17
+
18
+ module Google
19
+ module Cloud
20
+ module Storage
21
+ ##
22
+ # # HmacKey
23
+ #
24
+ # Represents the metadata for an HMAC key, and also includes the key's
25
+ # secret if returned by the {Project#create_hmac_key} creation method.
26
+ #
27
+ # @see https://cloud.google.com/storage/docs/migrating#migration-simple
28
+ # Migrating from Amazon S3 to Cloud Storage - Simple migration
29
+ #
30
+ # @attr_reader [String, nil] secret HMAC secret key material, or `nil` if
31
+ # the key was not returned by the {Project#create_hmac_key} creation
32
+ # method.
33
+ #
34
+ # @example
35
+ # require "google/cloud/storage"
36
+ #
37
+ # storage = Google::Cloud::Storage.new
38
+ #
39
+ # service_account_email = "my_account@developer.gserviceaccount.com"
40
+ # hmac_key = storage.create_hmac_key service_account_email
41
+ # hmac_key.secret # ...
42
+ #
43
+ # hmac_key = storage.hmac_key hmac_key.access_id
44
+ # hmac_key.secret # nil
45
+ #
46
+ # hmac_key.inactive!
47
+ # hmac_key.delete
48
+ #
49
+ class HmacKey
50
+ ##
51
+ # @private The Connection object.
52
+ attr_accessor :service
53
+
54
+ ##
55
+ # @private The Google API Client object.
56
+ attr_accessor :gapi
57
+
58
+ ##
59
+ # @private A boolean value or a project ID string to indicate the
60
+ # project to be billed for operations.
61
+ attr_accessor :user_project
62
+
63
+ attr_reader :secret
64
+
65
+ ##
66
+ # @private Creates an HmacKey object.
67
+ def initialize
68
+ @bucket = nil
69
+ @service = nil
70
+ @gapi = nil
71
+ @user_project = nil
72
+ end
73
+
74
+ ##
75
+ # The ID of the HMAC Key.
76
+ #
77
+ # @return [String]
78
+ #
79
+ def access_id
80
+ @gapi.access_id
81
+ end
82
+
83
+ ##
84
+ # A URL that can be used to access the HMAC key using the REST API.
85
+ #
86
+ # @return [String]
87
+ #
88
+ def api_url
89
+ @gapi.self_link
90
+ end
91
+
92
+ ##
93
+ # Creation time of the HMAC key.
94
+ #
95
+ # @return [String]
96
+ #
97
+ def created_at
98
+ @gapi.time_created
99
+ end
100
+
101
+ ##
102
+ # HTTP 1.1 Entity tag for the HMAC key.
103
+ #
104
+ # @return [String]
105
+ #
106
+ def etag
107
+ @gapi.etag
108
+ end
109
+
110
+ ##
111
+ # The ID of the HMAC key, including the Project ID and the Access ID.
112
+ #
113
+ # @return [String]
114
+ #
115
+ def id
116
+ @gapi.id
117
+ end
118
+
119
+ ##
120
+ # Project ID owning the service account to which the key authenticates.
121
+ #
122
+ # @return [String]
123
+ #
124
+ def project_id
125
+ @gapi.project_id
126
+ end
127
+
128
+ ##
129
+ # The email address of the key's associated service account.
130
+ #
131
+ # @return [String]
132
+ #
133
+ def service_account_email
134
+ @gapi.service_account_email
135
+ end
136
+
137
+ ##
138
+ # The state of the key. Can be one of `ACTIVE`, `INACTIVE`, or
139
+ # `DELETED`.
140
+ #
141
+ # @return [String]
142
+ #
143
+ def state
144
+ @gapi.state
145
+ end
146
+
147
+ ##
148
+ # Last modification time of the HMAC key metadata.
149
+ #
150
+ # @return [String]
151
+ #
152
+ def updated_at
153
+ @gapi.updated
154
+ end
155
+
156
+ ##
157
+ # Whether the state of the HMAC key is `ACTIVE`.
158
+ #
159
+ # @return [Boolean]
160
+ #
161
+ def active?
162
+ state == "ACTIVE"
163
+ end
164
+
165
+ ##
166
+ # Updates the state of the HMAC key to `ACTIVE`.
167
+ #
168
+ # @return [Google::Cloud::Storage::HmacKey] Returns the HMAC key for
169
+ # method chaining.
170
+ #
171
+ # @example
172
+ # require "google/cloud/storage"
173
+ #
174
+ # storage = Google::Cloud::Storage.new
175
+ #
176
+ # hmac_key = storage.hmac_keys.first
177
+ #
178
+ # hmac_key.active!
179
+ # hmac_key.state # "ACTIVE"
180
+ #
181
+ def active!
182
+ put_gapi! "ACTIVE"
183
+ self
184
+ end
185
+
186
+ ##
187
+ # Whether the state of the HMAC key is `INACTIVE`.
188
+ #
189
+ # @return [Boolean]
190
+ #
191
+ def inactive?
192
+ state == "INACTIVE"
193
+ end
194
+
195
+ ##
196
+ # Updates the state of the HMAC key to `INACTIVE`.
197
+ #
198
+ # @return [Google::Cloud::Storage::HmacKey] Returns the HMAC key for
199
+ # method chaining.
200
+ #
201
+ # @example
202
+ # require "google/cloud/storage"
203
+ #
204
+ # storage = Google::Cloud::Storage.new
205
+ #
206
+ # hmac_key = storage.hmac_keys.first
207
+ #
208
+ # hmac_key.inactive!
209
+ # hmac_key.state # "INACTIVE"
210
+ #
211
+ def inactive!
212
+ put_gapi! "INACTIVE"
213
+ self
214
+ end
215
+
216
+ ##
217
+ # Whether the state of the HMAC key is `DELETED`.
218
+ #
219
+ # @return [Boolean]
220
+ #
221
+ def deleted?
222
+ state == "DELETED"
223
+ end
224
+
225
+ ##
226
+ # Deletes the HMAC key, and loads the new state of the HMAC key,
227
+ # which will be `DELETED`.
228
+ #
229
+ # The API call to delete the HMAC key may be retried under certain
230
+ # conditions. See {Google::Cloud#storage} to control this behavior.
231
+ #
232
+ # @return [Google::Cloud::Storage::HmacKey] Returns the HMAC key for
233
+ # method chaining.
234
+ #
235
+ # @example
236
+ # require "google/cloud/storage"
237
+ #
238
+ # storage = Google::Cloud::Storage.new
239
+ #
240
+ # hmac_key = storage.hmac_keys.first
241
+ #
242
+ # hmac_key.inactive!.delete!
243
+ #
244
+ def delete!
245
+ ensure_service!
246
+ @service.delete_hmac_key access_id,
247
+ project_id: project_id,
248
+ user_project: @user_project
249
+ @gapi = @service.get_hmac_key access_id, project_id: project_id,
250
+ user_project: @user_project
251
+ self
252
+ end
253
+ alias delete delete!
254
+
255
+ ##
256
+ # Reloads the HMAC key with current data from the Storage service.
257
+ #
258
+ def reload!
259
+ ensure_service!
260
+ @gapi = service.get_hmac_key access_id, project_id: project_id,
261
+ user_project: user_project
262
+ self
263
+ end
264
+ alias refresh! reload!
265
+
266
+ ##
267
+ # @private New HmacKey from a Google::Apis::StorageV1::HmacKey object.
268
+ #
269
+ # @param [Google::Apis::StorageV1::HmacKey] gapi
270
+ #
271
+ #
272
+ def self.from_gapi gapi, service, user_project: nil
273
+ hmac_key = from_gapi_metadata gapi.metadata,
274
+ service,
275
+ user_project: user_project
276
+ hmac_key.tap do |f|
277
+ f.instance_variable_set :@secret, gapi.secret
278
+ end
279
+ end
280
+
281
+ ##
282
+ # @private New HmacKey from a Google::Apis::StorageV1::HmacKeyMetadata
283
+ # object.
284
+ #
285
+ # @param [Google::Apis::StorageV1::HmacKeyMetadata] gapi
286
+ #
287
+ #
288
+ def self.from_gapi_metadata gapi, service, user_project: nil
289
+ new.tap do |f|
290
+ f.gapi = gapi
291
+ f.service = service
292
+ f.user_project = user_project
293
+ end
294
+ end
295
+
296
+ protected
297
+
298
+ ##
299
+ # Raise an error unless an active service is available.
300
+ def ensure_service!
301
+ raise "Must have active connection" unless service
302
+ end
303
+
304
+ def put_gapi! new_state
305
+ ensure_service!
306
+ put_gapi = @gapi.dup
307
+ put_gapi.state = new_state
308
+ @gapi = service.update_hmac_key access_id, put_gapi,
309
+ project_id: project_id,
310
+ user_project: @user_project
311
+ self
312
+ end
313
+ end
314
+ end
315
+ end
316
+ end
@@ -0,0 +1,182 @@
1
+ # Copyright 2019 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ require "delegate"
17
+
18
+ module Google
19
+ module Cloud
20
+ module Storage
21
+ class HmacKey
22
+ ##
23
+ # HmacKey::List is a special case Array with additional values.
24
+ class List < DelegateClass(::Array)
25
+ ##
26
+ # If not empty, indicates that there are more HMAC keys
27
+ # that match the request and this value should be passed to
28
+ # the next {Google::Cloud::Storage::Project#hmac_keys} to continue.
29
+ attr_accessor :token
30
+
31
+ ##
32
+ # @private Create a new HmacKey::List with an array of values.
33
+ def initialize arr = []
34
+ super arr
35
+ end
36
+
37
+ ##
38
+ # Whether there is a next page of HMAC keys.
39
+ #
40
+ # @return [Boolean]
41
+ #
42
+ # @example
43
+ # require "google/cloud/storage"
44
+ #
45
+ # storage = Google::Cloud::Storage.new
46
+ #
47
+ # hmac_keys = storage.hmac_keys
48
+ # if hmac_keys.next?
49
+ # next_hmac_keys = hmac_keys.next
50
+ # end
51
+ #
52
+ def next?
53
+ !token.nil?
54
+ end
55
+
56
+ ##
57
+ # Retrieve the next page of HMAC keys.
58
+ #
59
+ # @return [HmacKey::List]
60
+ #
61
+ # @example
62
+ # require "google/cloud/storage"
63
+ #
64
+ # storage = Google::Cloud::Storage.new
65
+ #
66
+ # hmac_keys = storage.hmac_keys
67
+ # if hmac_keys.next?
68
+ # next_hmac_keys = hmac_keys.next
69
+ # end
70
+ #
71
+ def next
72
+ return nil unless next?
73
+ ensure_service!
74
+ gapi = @service.list_hmac_keys \
75
+ service_account_email: @service_account_email,
76
+ show_deleted_keys: @show_deleted_keys, token: @token, max: @max,
77
+ user_project: @user_project
78
+
79
+ HmacKey::List.from_gapi \
80
+ gapi, @service,
81
+ service_account_email: @service_account_email,
82
+ show_deleted_keys: @show_deleted_keys, max: @max,
83
+ user_project: @user_project
84
+ end
85
+
86
+ ##
87
+ # Retrieves remaining results by repeatedly invoking {#next} until
88
+ # {#next?} returns `false`. Calls the given block once for each
89
+ # result, which is passed as the argument to the block.
90
+ #
91
+ # An Enumerator is returned if no block is given.
92
+ #
93
+ # This method will make repeated API calls until all remaining results
94
+ # are retrieved. (Unlike `#each`, for example, which merely iterates
95
+ # over the results returned by a single API call.) Use with caution.
96
+ #
97
+ # @param [Integer] request_limit The upper limit of API requests to
98
+ # make to load all HMAC keys. Default is no limit.
99
+ # @yield [key] The block for accessing each HMAC key.
100
+ # @yieldparam [HmacKey] key The HMAC key object.
101
+ #
102
+ # @return [Enumerator]
103
+ #
104
+ # @example Iterating each HMAC key by passing a block:
105
+ # require "google/cloud/storage"
106
+ #
107
+ # storage = Google::Cloud::Storage.new
108
+ #
109
+ # hmac_keys = storage.hmac_keys
110
+ # hmac_keys.all do |key|
111
+ # puts key.access_id
112
+ # end
113
+ #
114
+ # @example Using the enumerator by not passing a block:
115
+ # require "google/cloud/storage"
116
+ #
117
+ # storage = Google::Cloud::Storage.new
118
+ #
119
+ # hmac_keys = storage.hmac_keys
120
+ # all_names = hmac_keys.all.map do |key|
121
+ # key.access_id
122
+ # end
123
+ #
124
+ # @example Limit the number of API calls made:
125
+ # require "google/cloud/storage"
126
+ #
127
+ # storage = Google::Cloud::Storage.new
128
+ #
129
+ # hmac_keys = storage.hmac_keys
130
+ # hmac_keys.all(request_limit: 10) do |key|
131
+ # puts key.access_id
132
+ # end
133
+ #
134
+ def all request_limit: nil
135
+ request_limit = request_limit.to_i if request_limit
136
+ unless block_given?
137
+ return enum_for :all, request_limit: request_limit
138
+ end
139
+ results = self
140
+ loop do
141
+ results.each { |r| yield r }
142
+ if request_limit
143
+ request_limit -= 1
144
+ break if request_limit < 0
145
+ end
146
+ break unless results.next?
147
+ results = results.next
148
+ end
149
+ end
150
+
151
+ ##
152
+ # @private New HmacKey::List from a Google API Client
153
+ # Google::Apis::StorageV1::HmacKeysMetadata object.
154
+ def self.from_gapi gapi_list, service, service_account_email: nil,
155
+ show_deleted_keys: nil, max: nil, user_project: nil
156
+ hmac_keys = new(Array(gapi_list.items).map do |gapi_object|
157
+ HmacKey.from_gapi_metadata gapi_object, service,
158
+ user_project: user_project
159
+ end)
160
+ hmac_keys.instance_variable_set :@token, gapi_list.next_page_token
161
+ hmac_keys.instance_variable_set :@service, service
162
+ hmac_keys.instance_variable_set :@service_account_email,
163
+ service_account_email
164
+ hmac_keys.instance_variable_set :@show_deleted_keys,
165
+ show_deleted_keys
166
+ hmac_keys.instance_variable_set :@max, max
167
+ hmac_keys.instance_variable_set :@user_project, user_project
168
+ hmac_keys
169
+ end
170
+
171
+ protected
172
+
173
+ ##
174
+ # Raise an error unless an active connection is available.
175
+ def ensure_service!
176
+ raise "Must have active connection" unless @service
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
@@ -21,6 +21,7 @@ require "google/cloud/storage/bucket"
21
21
  require "google/cloud/storage/bucket/cors"
22
22
  require "google/cloud/storage/bucket/lifecycle"
23
23
  require "google/cloud/storage/file"
24
+ require "google/cloud/storage/hmac_key"
24
25
 
25
26
  module Google
26
27
  module Cloud
@@ -384,6 +385,91 @@ module Google
384
385
  Bucket.from_gapi gapi, service, user_project: user_project
385
386
  end
386
387
 
388
+ ##
389
+ # Creates a new HMAC key.
390
+ #
391
+ # @param [String] service_account_email The email address of the service
392
+ # account. Used to create the HMAC key.
393
+ # @param [String] project_id The project ID associated with
394
+ # `service_account_email`, if `service_account_email` belongs to a
395
+ # project other than the currently authenticated project. Optional. If
396
+ # not provided, the project ID for the current project will be used.
397
+ # @param [String] user_project If this parameter is set to a project ID
398
+ # other than the current project, and that project is authorized for
399
+ # the currently authenticated service account, transit costs will be
400
+ # billed to the given project. The default is `nil`.
401
+ #
402
+ # @return [Google::Cloud::Storage::HmacKey]
403
+ #
404
+ def create_hmac_key service_account_email, project_id: nil,
405
+ user_project: nil
406
+ gapi = service.create_hmac_key service_account_email,
407
+ project_id: project_id,
408
+ user_project: user_project
409
+ HmacKey.from_gapi gapi, service, user_project: user_project
410
+ end
411
+
412
+ ##
413
+ # Retrieves an HMAC key's metadata; the key's secret is not included in
414
+ # the representation.
415
+ #
416
+ # @param [String] project_id The project ID associated with the
417
+ # `service_account_email` used to create the HMAC key, if the
418
+ # service account email belongs to a project other than the
419
+ # currently authenticated project. Optional. If not provided, the
420
+ # project ID for current project will be used.
421
+ # @param [String] user_project If this parameter is set to a project ID
422
+ # other than the current project, and that project is authorized for
423
+ # the currently authenticated service account, transit costs will be
424
+ # billed to the given project. The default is `nil`.
425
+ #
426
+ # @return [Google::Cloud::Storage::HmacKey]
427
+ #
428
+ def hmac_key access_id, project_id: nil, user_project: nil
429
+ gapi = service.get_hmac_key \
430
+ access_id, project_id: project_id, user_project: user_project
431
+ HmacKey.from_gapi_metadata gapi, service, user_project: user_project
432
+ end
433
+
434
+ ##
435
+ # Retrieves a list of HMAC key metadata matching the criteria; the keys'
436
+ # secrets are not included.
437
+ #
438
+ # @param [String] service_account_email
439
+ # If present, only keys for the given service account are returned.
440
+ # @param [String] project_id The project ID associated with the
441
+ # `service_account_email` used to create the HMAC keys, if the
442
+ # service account email belongs to a project other than the
443
+ # currently authenticated project. Optional. If not provided, the
444
+ # project ID for current project will be used.
445
+ # @param [Boolean] show_deleted_keys
446
+ # Whether to include keys in the `DELETED` state. The default value is
447
+ # false.
448
+ # @param [String] token A previously-returned page token representing
449
+ # part of the larger set of results to view.
450
+ # @param [Integer] max Maximum number of keys to return.
451
+ # @param [String] user_project If this parameter is set to a project ID
452
+ # other than the current project, and that project is authorized for
453
+ # the currently authenticated service account, transit costs will be
454
+ # billed to the given project. The default is `nil`.
455
+ #
456
+ # @return [Google::Cloud::Storage::HmacKey]
457
+ #
458
+ def hmac_keys service_account_email: nil, project_id: nil,
459
+ show_deleted_keys: nil, token: nil, max: nil,
460
+ user_project: nil
461
+ gapi = service.list_hmac_keys \
462
+ max: max, token: token,
463
+ service_account_email: service_account_email,
464
+ project_id: project_id, show_deleted_keys: show_deleted_keys,
465
+ user_project: user_project
466
+
467
+ HmacKey::List.from_gapi \
468
+ gapi, service,
469
+ service_account_email: nil, show_deleted_keys: nil,
470
+ max: max, user_project: user_project
471
+ end
472
+
387
473
  ##
388
474
  # Generates a signed URL. See [Signed
389
475
  # URLs](https://cloud.google.com/storage/docs/access-control/signed-urls)
@@ -16,7 +16,7 @@
16
16
  require "google/cloud/storage/version"
17
17
  require "google/apis/storage_v1"
18
18
  require "digest"
19
- require "mime/types"
19
+ require "mini_mime"
20
20
  require "pathname"
21
21
 
22
22
  module Google
@@ -451,11 +451,75 @@ module Google
451
451
  end
452
452
  end
453
453
 
454
+ ##
455
+ # Creates a new HMAC key for the specified service account.
456
+ # Returns Google::Apis::StorageV1::HmacKey.
457
+ def create_hmac_key service_account_email, project_id: nil,
458
+ user_project: nil
459
+ execute do
460
+ service.create_project_hmac_key \
461
+ (project_id || @project), service_account_email,
462
+ user_project: user_project(user_project)
463
+ end
464
+ end
465
+
466
+ ##
467
+ # Deletes an HMAC key. Key must be in the INACTIVE state.
468
+ def delete_hmac_key access_id, project_id: nil, user_project: nil
469
+ execute do
470
+ service.delete_project_hmac_key \
471
+ (project_id || @project), access_id,
472
+ user_project: user_project(user_project)
473
+ end
474
+ end
475
+
476
+ ##
477
+ # Retrieves an HMAC key's metadata.
478
+ # Returns Google::Apis::StorageV1::HmacKeyMetadata.
479
+ def get_hmac_key access_id, project_id: nil, user_project: nil
480
+ execute do
481
+ service.get_project_hmac_key \
482
+ (project_id || @project), access_id,
483
+ user_project: user_project(user_project)
484
+ end
485
+ end
486
+
487
+ ##
488
+ # Retrieves a list of HMAC key metadata matching the criteria.
489
+ # Returns Google::Apis::StorageV1::HmacKeysMetadata.
490
+ def list_hmac_keys max: nil, token: nil, service_account_email: nil,
491
+ project_id: nil, show_deleted_keys: nil,
492
+ user_project: nil
493
+ execute do
494
+ service.list_project_hmac_keys \
495
+ (project_id || @project),
496
+ max_results: max, page_token: token,
497
+ service_account_email: service_account_email,
498
+ show_deleted_keys: show_deleted_keys,
499
+ user_project: user_project(user_project)
500
+ end
501
+ end
502
+
503
+ ##
504
+ # Updates the state of an HMAC key. See the HMAC Key resource descriptor
505
+ # for valid states.
506
+ # Returns Google::Apis::StorageV1::HmacKeyMetadata.
507
+ def update_hmac_key access_id, hmac_key_metadata_object,
508
+ project_id: nil, user_project: nil
509
+ execute do
510
+ service.update_project_hmac_key \
511
+ (project_id || @project), access_id, hmac_key_metadata_object,
512
+ user_project: user_project(user_project)
513
+ end
514
+ end
515
+
454
516
  ##
455
517
  # Retrieves the mime-type for a file path.
456
518
  # An empty string is returned if no mime-type can be found.
457
519
  def mime_type_for path
458
- MIME::Types.of(path).first.to_s
520
+ mime_type = MiniMime.lookup_by_filename path
521
+ return "" if mime_type.nil?
522
+ mime_type.content_type
459
523
  end
460
524
 
461
525
  # @private
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Storage
19
- VERSION = "1.19.0".freeze
19
+ VERSION = "1.20.0".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-11 00:00:00.000000000 Z
12
+ date: 2019-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -88,19 +88,19 @@ dependencies:
88
88
  - !ruby/object:Gem::Version
89
89
  version: '2.5'
90
90
  - !ruby/object:Gem::Dependency
91
- name: mime-types
91
+ name: mini_mime
92
92
  requirement: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.0'
96
+ version: '1.0'
97
97
  type: :runtime
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.0'
103
+ version: '1.0'
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: minitest
106
106
  requirement: !ruby/object:Gem::Requirement
@@ -274,6 +274,8 @@ files:
274
274
  - lib/google/cloud/storage/file/signer_v2.rb
275
275
  - lib/google/cloud/storage/file/signer_v4.rb
276
276
  - lib/google/cloud/storage/file/verifier.rb
277
+ - lib/google/cloud/storage/hmac_key.rb
278
+ - lib/google/cloud/storage/hmac_key/list.rb
277
279
  - lib/google/cloud/storage/notification.rb
278
280
  - lib/google/cloud/storage/policy.rb
279
281
  - lib/google/cloud/storage/post_object.rb
@@ -299,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
299
301
  - !ruby/object:Gem::Version
300
302
  version: '0'
301
303
  requirements: []
302
- rubygems_version: 3.0.3
304
+ rubygems_version: 3.0.4
303
305
  signing_key:
304
306
  specification_version: 4
305
307
  summary: API Client library for Google Cloud Storage