google-cloud-storage 1.26.0 → 1.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/AUTHENTICATION.md +8 -2
- data/CHANGELOG.md +54 -0
- data/TROUBLESHOOTING.md +2 -8
- data/lib/google-cloud-storage.rb +1 -0
- data/lib/google/cloud/storage.rb +2 -1
- data/lib/google/cloud/storage/bucket.rb +240 -59
- data/lib/google/cloud/storage/bucket/lifecycle.rb +160 -26
- data/lib/google/cloud/storage/errors.rb +7 -2
- data/lib/google/cloud/storage/file.rb +110 -31
- data/lib/google/cloud/storage/file/signer_v2.rb +21 -12
- data/lib/google/cloud/storage/file/signer_v4.rb +39 -20
- data/lib/google/cloud/storage/project.rb +84 -30
- data/lib/google/cloud/storage/service.rb +4 -3
- data/lib/google/cloud/storage/version.rb +1 -1
- metadata +3 -3
@@ -105,6 +105,21 @@ module Google
|
|
105
105
|
# only the date part (for instance, "2013-01-15"). This condition is
|
106
106
|
# satisfied when a file is created before midnight of the specified
|
107
107
|
# date in UTC.
|
108
|
+
# @param [String,Date] custom_time_before A date in RFC 3339 format with
|
109
|
+
# only the date part (for instance, "2013-01-15"). This condition is
|
110
|
+
# satisfied when the custom time on an object is before this date in UTC.
|
111
|
+
# @param [Integer] days_since_custom_time Represents the number of
|
112
|
+
# days elapsed since the user-specified timestamp set on an object.
|
113
|
+
# The condition is satisfied if the days elapsed is at least this
|
114
|
+
# number. If no custom timestamp is specified on an object, the
|
115
|
+
# condition does not apply.
|
116
|
+
# @param [Integer] days_since_noncurrent_time Represents the number of
|
117
|
+
# days elapsed since the noncurrent timestamp of an object. The
|
118
|
+
# condition is satisfied if the days elapsed is at least this number.
|
119
|
+
# The value of the field must be a nonnegative integer. If it's zero,
|
120
|
+
# the object version will become eligible for Lifecycle action as
|
121
|
+
# soon as it becomes noncurrent. Relevant only for versioning-enabled
|
122
|
+
# buckets. (See {Bucket#versioning?})
|
108
123
|
# @param [Boolean] is_live Relevant only for versioned files. If the
|
109
124
|
# value is `true`, this condition matches live files; if the value
|
110
125
|
# is `false`, it matches archived files.
|
@@ -115,6 +130,10 @@ module Google
|
|
115
130
|
# `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
|
116
131
|
# classes. Arguments will be converted from symbols and lower-case
|
117
132
|
# to upper-case strings.
|
133
|
+
# @param [String,Date] noncurrent_time_before A date in RFC 3339 format
|
134
|
+
# with only the date part (for instance, "2013-01-15"). This condition
|
135
|
+
# is satisfied when the noncurrent time on an object is before this
|
136
|
+
# date in UTC. This condition is relevant only for versioned objects.
|
118
137
|
# @param [Integer] num_newer_versions Relevant only for versioned
|
119
138
|
# files. If the value is N, this condition is satisfied when there
|
120
139
|
# are at least N versions (including the live version) newer than
|
@@ -129,16 +148,29 @@ module Google
|
|
129
148
|
# b.lifecycle.add_set_storage_class_rule "COLDLINE", age: 10
|
130
149
|
# end
|
131
150
|
#
|
132
|
-
def add_set_storage_class_rule storage_class,
|
133
|
-
|
151
|
+
def add_set_storage_class_rule storage_class,
|
152
|
+
age: nil,
|
153
|
+
created_before: nil,
|
154
|
+
custom_time_before: nil,
|
155
|
+
days_since_custom_time: nil,
|
156
|
+
days_since_noncurrent_time: nil,
|
157
|
+
is_live: nil,
|
134
158
|
matches_storage_class: nil,
|
159
|
+
noncurrent_time_before: nil,
|
135
160
|
num_newer_versions: nil
|
136
|
-
push Rule.new
|
161
|
+
push Rule.new(
|
137
162
|
"SetStorageClass",
|
138
163
|
storage_class: storage_class_for(storage_class),
|
139
|
-
age: age,
|
164
|
+
age: age,
|
165
|
+
created_before: created_before,
|
166
|
+
custom_time_before: custom_time_before,
|
167
|
+
days_since_custom_time: days_since_custom_time,
|
168
|
+
days_since_noncurrent_time: days_since_noncurrent_time,
|
169
|
+
is_live: is_live,
|
140
170
|
matches_storage_class: storage_class_for(matches_storage_class),
|
171
|
+
noncurrent_time_before: noncurrent_time_before,
|
141
172
|
num_newer_versions: num_newer_versions
|
173
|
+
)
|
142
174
|
end
|
143
175
|
|
144
176
|
##
|
@@ -156,6 +188,21 @@ module Google
|
|
156
188
|
# only the date part (for instance, "2013-01-15"). This condition is
|
157
189
|
# satisfied when a file is created before midnight of the specified
|
158
190
|
# date in UTC.
|
191
|
+
# @param [String,Date] custom_time_before A date in RFC 3339 format with
|
192
|
+
# only the date part (for instance, "2013-01-15"). This condition is
|
193
|
+
# satisfied when the custom time on an object is before this date in UTC.
|
194
|
+
# @param [Integer] days_since_custom_time Represents the number of
|
195
|
+
# days elapsed since the user-specified timestamp set on an object.
|
196
|
+
# The condition is satisfied if the days elapsed is at least this
|
197
|
+
# number. If no custom timestamp is specified on an object, the
|
198
|
+
# condition does not apply.
|
199
|
+
# @param [Integer] days_since_noncurrent_time Represents the number of
|
200
|
+
# days elapsed since the noncurrent timestamp of an object. The
|
201
|
+
# condition is satisfied if the days elapsed is at least this number.
|
202
|
+
# The value of the field must be a nonnegative integer. If it's zero,
|
203
|
+
# the object version will become eligible for Lifecycle action as
|
204
|
+
# soon as it becomes noncurrent. Relevant only for versioning-enabled
|
205
|
+
# buckets. (See {Bucket#versioning?})
|
159
206
|
# @param [Boolean] is_live Relevant only for versioned files. If the
|
160
207
|
# value is `true`, this condition matches live files; if the value
|
161
208
|
# is `false`, it matches archived files.
|
@@ -166,6 +213,10 @@ module Google
|
|
166
213
|
# `DURABLE_REDUCED_AVAILABILITY` are supported as legacy storage
|
167
214
|
# classes. Arguments will be converted from symbols and lower-case
|
168
215
|
# to upper-case strings.
|
216
|
+
# @param [String,Date] noncurrent_time_before A date in RFC 3339 format
|
217
|
+
# with only the date part (for instance, "2013-01-15"). This condition
|
218
|
+
# is satisfied when the noncurrent time on an object is before this
|
219
|
+
# date in UTC. This condition is relevant only for versioned objects.
|
169
220
|
# @param [Integer] num_newer_versions Relevant only for versioned
|
170
221
|
# files. If the value is N, this condition is satisfied when there
|
171
222
|
# are at least N versions (including the live version) newer than
|
@@ -180,14 +231,27 @@ module Google
|
|
180
231
|
# b.lifecycle.add_delete_rule age: 30, is_live: false
|
181
232
|
# end
|
182
233
|
#
|
183
|
-
def add_delete_rule age: nil,
|
234
|
+
def add_delete_rule age: nil,
|
235
|
+
created_before: nil,
|
236
|
+
custom_time_before: nil,
|
237
|
+
days_since_custom_time: nil,
|
238
|
+
days_since_noncurrent_time: nil,
|
239
|
+
is_live: nil,
|
184
240
|
matches_storage_class: nil,
|
241
|
+
noncurrent_time_before: nil,
|
185
242
|
num_newer_versions: nil
|
186
|
-
push Rule.new
|
243
|
+
push Rule.new(
|
187
244
|
"Delete",
|
188
|
-
age: age,
|
245
|
+
age: age,
|
246
|
+
created_before: created_before,
|
247
|
+
custom_time_before: custom_time_before,
|
248
|
+
days_since_custom_time: days_since_custom_time,
|
249
|
+
days_since_noncurrent_time: days_since_noncurrent_time,
|
250
|
+
is_live: is_live,
|
189
251
|
matches_storage_class: storage_class_for(matches_storage_class),
|
252
|
+
noncurrent_time_before: noncurrent_time_before,
|
190
253
|
num_newer_versions: num_newer_versions
|
254
|
+
)
|
191
255
|
end
|
192
256
|
|
193
257
|
# @private
|
@@ -231,10 +295,26 @@ module Google
|
|
231
295
|
# action. Required only if the action is `SetStorageClass`.
|
232
296
|
# @attr [Integer] age The age of a file (in days). This condition is
|
233
297
|
# satisfied when a file reaches the specified age.
|
234
|
-
# @attr [String,Date] created_before A date in RFC 3339 format with
|
298
|
+
# @attr [String,Date,nil] created_before A date in RFC 3339 format with
|
235
299
|
# only the date part (for instance, "2013-01-15"). This condition is
|
236
300
|
# satisfied when a file is created before midnight of the specified
|
237
|
-
# date in UTC.
|
301
|
+
# date in UTC. When returned by the service, a non-empty value will
|
302
|
+
# always be a Date object.
|
303
|
+
# @attr [String,Date,nil] custom_time_before A date in RFC 3339 format with
|
304
|
+
# only the date part (for instance, "2013-01-15"). This condition is
|
305
|
+
# satisfied when the custom time on an object is before this date in UTC.
|
306
|
+
# @attr [Integer,nil] days_since_custom_time Represents the number of
|
307
|
+
# days elapsed since the user-specified timestamp set on an object.
|
308
|
+
# The condition is satisfied if the days elapsed is at least this
|
309
|
+
# number. If no custom timestamp is specified on an object, the
|
310
|
+
# condition does not apply.
|
311
|
+
# @attr [Integer] days_since_noncurrent_time Represents the number of
|
312
|
+
# days elapsed since the noncurrent timestamp of an object. The
|
313
|
+
# condition is satisfied if the days elapsed is at least this number.
|
314
|
+
# The value of the field must be a nonnegative integer. If it's zero,
|
315
|
+
# the object version will become eligible for Lifecycle action as
|
316
|
+
# soon as it becomes noncurrent. Relevant only for versioning-enabled
|
317
|
+
# buckets. (See {Bucket#versioning?})
|
238
318
|
# @attr [Boolean] is_live Relevant only for versioned files. If the
|
239
319
|
# value is `true`, this condition matches live files; if the value
|
240
320
|
# is `false`, it matches archived files.
|
@@ -243,6 +323,12 @@ module Google
|
|
243
323
|
# Values include `STANDARD`, `NEARLINE`, `COLDLINE`, and `ARCHIVE`.
|
244
324
|
# `REGIONAL`, `MULTI_REGIONAL`, and `DURABLE_REDUCED_AVAILABILITY`
|
245
325
|
# are supported as legacy storage classes.
|
326
|
+
# @attr [String,Date,nil] noncurrent_time_before A date in RFC 3339 format
|
327
|
+
# with only the date part (for instance, "2013-01-15"). This condition
|
328
|
+
# is satisfied when the noncurrent time on an object is before this
|
329
|
+
# date in UTC. This condition is relevant only for versioned objects.
|
330
|
+
# When returned by the service, a non-empty value will always be a
|
331
|
+
# Date object.
|
246
332
|
# @attr [Integer] num_newer_versions Relevant only for versioned
|
247
333
|
# files. If the value is N, this condition is satisfied when there
|
248
334
|
# are at least N versions (including the live version) newer than
|
@@ -285,28 +371,57 @@ module Google
|
|
285
371
|
# end
|
286
372
|
#
|
287
373
|
class Rule
|
288
|
-
attr_accessor :action,
|
289
|
-
:
|
374
|
+
attr_accessor :action,
|
375
|
+
:storage_class,
|
376
|
+
:age,
|
377
|
+
:created_before,
|
378
|
+
:custom_time_before,
|
379
|
+
:days_since_custom_time,
|
380
|
+
:days_since_noncurrent_time,
|
381
|
+
:is_live,
|
382
|
+
:matches_storage_class,
|
383
|
+
:noncurrent_time_before,
|
384
|
+
:num_newer_versions
|
290
385
|
|
291
386
|
# @private
|
292
|
-
def initialize action,
|
293
|
-
|
294
|
-
|
387
|
+
def initialize action,
|
388
|
+
storage_class: nil,
|
389
|
+
age: nil,
|
390
|
+
created_before: nil,
|
391
|
+
custom_time_before: nil,
|
392
|
+
days_since_custom_time: nil,
|
393
|
+
days_since_noncurrent_time: nil,
|
394
|
+
is_live: nil,
|
395
|
+
matches_storage_class: nil,
|
396
|
+
noncurrent_time_before: nil,
|
397
|
+
num_newer_versions: nil
|
295
398
|
@action = action
|
296
399
|
@storage_class = storage_class
|
297
400
|
@age = age
|
298
401
|
@created_before = created_before
|
402
|
+
@custom_time_before = custom_time_before
|
403
|
+
@days_since_custom_time = days_since_custom_time
|
404
|
+
@days_since_noncurrent_time = days_since_noncurrent_time
|
299
405
|
@is_live = is_live
|
300
406
|
@matches_storage_class = Array(matches_storage_class)
|
407
|
+
@noncurrent_time_before = noncurrent_time_before
|
301
408
|
@num_newer_versions = num_newer_versions
|
302
409
|
end
|
303
410
|
|
304
411
|
# @private
|
305
412
|
# @return [Google::Apis::StorageV1::Bucket::Lifecycle]
|
306
413
|
def to_gapi
|
307
|
-
condition = condition_gapi(
|
308
|
-
|
309
|
-
|
414
|
+
condition = condition_gapi(
|
415
|
+
age,
|
416
|
+
created_before,
|
417
|
+
custom_time_before,
|
418
|
+
days_since_custom_time,
|
419
|
+
days_since_noncurrent_time,
|
420
|
+
is_live,
|
421
|
+
matches_storage_class,
|
422
|
+
noncurrent_time_before,
|
423
|
+
num_newer_versions
|
424
|
+
)
|
310
425
|
Google::Apis::StorageV1::Bucket::Lifecycle::Rule.new(
|
311
426
|
action: action_gapi(action, storage_class),
|
312
427
|
condition: condition
|
@@ -316,18 +431,30 @@ module Google
|
|
316
431
|
# @private
|
317
432
|
def action_gapi action, storage_class
|
318
433
|
Google::Apis::StorageV1::Bucket::Lifecycle::Rule::Action.new(
|
319
|
-
type: action,
|
434
|
+
type: action,
|
435
|
+
storage_class: storage_class
|
320
436
|
)
|
321
437
|
end
|
322
438
|
|
323
439
|
# @private
|
324
|
-
def condition_gapi age,
|
325
|
-
|
440
|
+
def condition_gapi age,
|
441
|
+
created_before,
|
442
|
+
custom_time_before,
|
443
|
+
days_since_custom_time,
|
444
|
+
days_since_noncurrent_time,
|
445
|
+
is_live,
|
446
|
+
matches_storage_class,
|
447
|
+
noncurrent_time_before,
|
448
|
+
num_newer_versions
|
326
449
|
Google::Apis::StorageV1::Bucket::Lifecycle::Rule::Condition.new(
|
327
450
|
age: age,
|
328
451
|
created_before: created_before,
|
452
|
+
custom_time_before: custom_time_before,
|
453
|
+
days_since_custom_time: days_since_custom_time,
|
454
|
+
days_since_noncurrent_time: days_since_noncurrent_time,
|
329
455
|
is_live: is_live,
|
330
456
|
matches_storage_class: Array(matches_storage_class),
|
457
|
+
noncurrent_time_before: noncurrent_time_before,
|
331
458
|
num_newer_versions: num_newer_versions
|
332
459
|
)
|
333
460
|
end
|
@@ -337,12 +464,19 @@ module Google
|
|
337
464
|
def self.from_gapi gapi
|
338
465
|
action = gapi.action
|
339
466
|
c = gapi.condition
|
340
|
-
new
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
467
|
+
new(
|
468
|
+
action.type,
|
469
|
+
storage_class: action.storage_class,
|
470
|
+
age: c.age,
|
471
|
+
created_before: c.created_before,
|
472
|
+
custom_time_before: c.custom_time_before,
|
473
|
+
days_since_custom_time: c.days_since_custom_time,
|
474
|
+
days_since_noncurrent_time: c.days_since_noncurrent_time,
|
475
|
+
is_live: c.is_live,
|
476
|
+
matches_storage_class: c.matches_storage_class,
|
477
|
+
noncurrent_time_before: c.noncurrent_time_before,
|
478
|
+
num_newer_versions: c.num_newer_versions
|
479
|
+
)
|
346
480
|
end
|
347
481
|
|
348
482
|
# @private
|
@@ -58,8 +58,13 @@ module Google
|
|
58
58
|
##
|
59
59
|
# # SignedUrlUnavailable Error
|
60
60
|
#
|
61
|
-
#
|
62
|
-
# missing credentials
|
61
|
+
# Raised by signed URL methods if the service account credentials
|
62
|
+
# are missing. Service account credentials are acquired by following the
|
63
|
+
# steps in [Service Account Authentication](
|
64
|
+
# https://cloud.google.com/iam/docs/service-accounts).
|
65
|
+
#
|
66
|
+
# @see https://cloud.google.com/storage/docs/access-control/signed-urls Signed URLs
|
67
|
+
#
|
63
68
|
class SignedUrlUnavailable < Google::Cloud::Error
|
64
69
|
end
|
65
70
|
end
|
@@ -355,6 +355,29 @@ module Google
|
|
355
355
|
update_gapi! :content_type
|
356
356
|
end
|
357
357
|
|
358
|
+
##
|
359
|
+
# A custom time specified by the user for the file, or `nil`.
|
360
|
+
#
|
361
|
+
# @return [DateTime, nil]
|
362
|
+
#
|
363
|
+
def custom_time
|
364
|
+
@gapi.custom_time
|
365
|
+
end
|
366
|
+
|
367
|
+
##
|
368
|
+
# Updates the custom time specified by the user for the file. Once set,
|
369
|
+
# custom_time can't be unset, and it can only be changed to a time in the
|
370
|
+
# future. If custom_time must be unset, you must either perform a rewrite
|
371
|
+
# operation, or upload the data again and create a new file.
|
372
|
+
#
|
373
|
+
# @param [DateTime] custom_time A custom time specified by the user
|
374
|
+
# for the file.
|
375
|
+
#
|
376
|
+
def custom_time= custom_time
|
377
|
+
@gapi.custom_time = custom_time
|
378
|
+
update_gapi! :custom_time
|
379
|
+
end
|
380
|
+
|
358
381
|
##
|
359
382
|
# A hash of custom, user-provided web-safe keys and arbitrary string
|
360
383
|
# values that will returned with requests for the file as "x-goog-meta-"
|
@@ -746,8 +769,9 @@ module Google
|
|
746
769
|
# Updates the file with changes made in the given block in a single
|
747
770
|
# PATCH request. The following attributes may be set: {#cache_control=},
|
748
771
|
# {#content_disposition=}, {#content_encoding=}, {#content_language=},
|
749
|
-
# {#content_type=}, and {#metadata=}. The {#metadata} hash
|
750
|
-
# the block is completely mutable and will be included in the
|
772
|
+
# {#content_type=}, {#custom_time=} and {#metadata=}. The {#metadata} hash
|
773
|
+
# accessible in the block is completely mutable and will be included in the
|
774
|
+
# request.
|
751
775
|
#
|
752
776
|
# @yield [file] a block yielding a delegate object for updating the file
|
753
777
|
#
|
@@ -766,6 +790,7 @@ module Google
|
|
766
790
|
# f.content_encoding = "deflate"
|
767
791
|
# f.content_language = "de"
|
768
792
|
# f.content_type = "application/json"
|
793
|
+
# f.custom_time = DateTime.new 2025, 12, 31
|
769
794
|
# f.metadata["player"] = "Bob"
|
770
795
|
# f.metadata["score"] = "10"
|
771
796
|
# end
|
@@ -1442,7 +1467,7 @@ module Google
|
|
1442
1467
|
# A {SignedUrlUnavailable} is raised if the service account credentials
|
1443
1468
|
# are missing. Service account credentials are acquired by following the
|
1444
1469
|
# steps in [Service Account Authentication](
|
1445
|
-
# https://cloud.google.com/
|
1470
|
+
# https://cloud.google.com/iam/docs/service-accounts).
|
1446
1471
|
#
|
1447
1472
|
# @see https://cloud.google.com/storage/docs/access-control/signed-urls
|
1448
1473
|
# Signed URLs guide
|
@@ -1467,10 +1492,22 @@ module Google
|
|
1467
1492
|
# use the signed URL.
|
1468
1493
|
# @param [String] issuer Service Account's Client Email.
|
1469
1494
|
# @param [String] client_email Service Account's Client Email.
|
1470
|
-
# @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
|
1471
|
-
# Private Key
|
1472
|
-
#
|
1473
|
-
#
|
1495
|
+
# @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
|
1496
|
+
# Private Key or a Proc that accepts a single String parameter and returns a
|
1497
|
+
# RSA SHA256 signature using a valid Google Service Account Private Key.
|
1498
|
+
# @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
|
1499
|
+
# Private Key or a Proc that accepts a single String parameter and returns a
|
1500
|
+
# RSA SHA256 signature using a valid Google Service Account Private Key.
|
1501
|
+
# @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
|
1502
|
+
# Private Key or a Proc that accepts a single String parameter and returns a
|
1503
|
+
# RSA SHA256 signature using a valid Google Service Account Private Key.
|
1504
|
+
#
|
1505
|
+
# When using this method in environments such as GAE Flexible Environment,
|
1506
|
+
# GKE, or Cloud Functions where the private key is unavailable, it may be
|
1507
|
+
# necessary to provide a Proc (or lambda) via the signer parameter. This
|
1508
|
+
# Proc should return a signature created using a RPC call to the
|
1509
|
+
# [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
|
1510
|
+
# method as shown in the example below.
|
1474
1511
|
# @param [Hash] query Query string parameters to include in the signed
|
1475
1512
|
# URL. The given parameters are not verified by the signature.
|
1476
1513
|
#
|
@@ -1496,7 +1533,12 @@ module Google
|
|
1496
1533
|
# to create. Must be one of `:v2` or `:v4`. The default value is
|
1497
1534
|
# `:v2`.
|
1498
1535
|
#
|
1499
|
-
# @return [String]
|
1536
|
+
# @return [String] The signed URL.
|
1537
|
+
#
|
1538
|
+
# @raise [SignedUrlUnavailable] If the service account credentials
|
1539
|
+
# are missing. Service account credentials are acquired by following the
|
1540
|
+
# steps in [Service Account Authentication](
|
1541
|
+
# https://cloud.google.com/iam/docs/service-accounts).
|
1500
1542
|
#
|
1501
1543
|
# @example
|
1502
1544
|
# require "google/cloud/storage"
|
@@ -1556,6 +1598,40 @@ module Google
|
|
1556
1598
|
# # Send the `x-goog-resumable:start` header and the content type
|
1557
1599
|
# # with the resumable upload POST request.
|
1558
1600
|
#
|
1601
|
+
# @example Using Cloud IAMCredentials signBlob to create the signature:
|
1602
|
+
# require "google/cloud/storage"
|
1603
|
+
# require "google/apis/iamcredentials_v1"
|
1604
|
+
# require "googleauth"
|
1605
|
+
#
|
1606
|
+
# # Issuer is the service account email that the Signed URL will be signed with
|
1607
|
+
# # and any permission granted in the Signed URL must be granted to the
|
1608
|
+
# # Google Service Account.
|
1609
|
+
# issuer = "service-account@project-id.iam.gserviceaccount.com"
|
1610
|
+
#
|
1611
|
+
# # Create a lambda that accepts the string_to_sign
|
1612
|
+
# signer = lambda do |string_to_sign|
|
1613
|
+
# IAMCredentials = Google::Apis::IamcredentialsV1
|
1614
|
+
# iam_client = IAMCredentials::IAMCredentialsService.new
|
1615
|
+
#
|
1616
|
+
# # Get the environment configured authorization
|
1617
|
+
# scopes = ["https://www.googleapis.com/auth/iam"]
|
1618
|
+
# iam_client.authorization = Google::Auth.get_application_default scopes
|
1619
|
+
#
|
1620
|
+
# request = {
|
1621
|
+
# "payload": string_to_sign,
|
1622
|
+
# }
|
1623
|
+
# resource = "projects/-/serviceAccounts/#{issuer}"
|
1624
|
+
# response = iam_client.sign_service_account_blob resource, request, {}
|
1625
|
+
# response.signed_blob
|
1626
|
+
# end
|
1627
|
+
#
|
1628
|
+
# storage = Google::Cloud::Storage.new
|
1629
|
+
#
|
1630
|
+
# bucket = storage.bucket "my-todo-app"
|
1631
|
+
# file = bucket.file "avatars/heidi/400x400.png", skip_lookup: true
|
1632
|
+
# url = file.signed_url method: "GET", issuer: issuer,
|
1633
|
+
# signer: signer
|
1634
|
+
#
|
1559
1635
|
def signed_url method: "GET",
|
1560
1636
|
expires: nil,
|
1561
1637
|
content_type: nil,
|
@@ -1565,6 +1641,7 @@ module Google
|
|
1565
1641
|
client_email: nil,
|
1566
1642
|
signing_key: nil,
|
1567
1643
|
private_key: nil,
|
1644
|
+
signer: nil,
|
1568
1645
|
query: nil,
|
1569
1646
|
scheme: "HTTPS",
|
1570
1647
|
virtual_hosted_style: nil,
|
@@ -1574,30 +1651,32 @@ module Google
|
|
1574
1651
|
version ||= :v2
|
1575
1652
|
case version.to_sym
|
1576
1653
|
when :v2
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1654
|
+
sign = File::SignerV2.from_file self
|
1655
|
+
sign.signed_url method: method,
|
1656
|
+
expires: expires,
|
1657
|
+
headers: headers,
|
1658
|
+
content_type: content_type,
|
1659
|
+
content_md5: content_md5,
|
1660
|
+
issuer: issuer,
|
1661
|
+
client_email: client_email,
|
1662
|
+
signing_key: signing_key,
|
1663
|
+
private_key: private_key,
|
1664
|
+
signer: signer,
|
1665
|
+
query: query
|
1588
1666
|
when :v4
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1593
|
-
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1667
|
+
sign = File::SignerV4.from_file self
|
1668
|
+
sign.signed_url method: method,
|
1669
|
+
expires: expires,
|
1670
|
+
headers: headers,
|
1671
|
+
issuer: issuer,
|
1672
|
+
client_email: client_email,
|
1673
|
+
signing_key: signing_key,
|
1674
|
+
private_key: private_key,
|
1675
|
+
signer: signer,
|
1676
|
+
query: query,
|
1677
|
+
scheme: scheme,
|
1678
|
+
virtual_hosted_style: virtual_hosted_style,
|
1679
|
+
bucket_bound_hostname: bucket_bound_hostname
|
1601
1680
|
else
|
1602
1681
|
raise ArgumentError, "version '#{version}' not supported"
|
1603
1682
|
end
|