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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a69b7d03384d604c8b96548b952b6894af09ee7cef01845fe92b998ea77bcc8
4
- data.tar.gz: 9fd54043ddab11b2284c73b17e780877b795a59593943deef43b9d14fbb4da1e
3
+ metadata.gz: fe9e2b825a237558161e2fa35c196f56342b43ea1119c15b527fdd1b26445711
4
+ data.tar.gz: 2c76342e276c10250c9ddcbf14edfc143474ccf4b29e1d869bc3a8a639d4f608
5
5
  SHA512:
6
- metadata.gz: 36d6b3d59ab2655020f97e7d15a33a35b48a541632e03a6a8aa01f20289c821b9582cf21fdea2799cad8111c8208bd866154246a8ec69fb33102fd78853bc49f
7
- data.tar.gz: 8d59996b1108a4c44e074e9762e48ad4a1f93c8dfd07efa11b77472a3b2285be52ce1486afa76b5301de683cf918c23d41d1d0dd877cd4bbaf0ab3d1cc91e405
6
+ metadata.gz: a9ff8d6eb43731e588b0b32df5bb093dc042443543cc63d3e1f060bffd09d011180085254c849ef0393b27447550bb01690b129255e0c02a3e657e8e73e1bd4e
7
+ data.tar.gz: 991a423b8db899c16adeeb93d095ec9f3176a32cae5d78ab459c9b2bc7f07a52398f7387a7a89336dd2d86e9aeb1beb067853a2b474042b2740333bc6ff3daf7
@@ -102,8 +102,14 @@ To configure your system for this, simply:
102
102
  2. Authenticate using OAuth 2.0 `$ gcloud auth login`
103
103
  3. Write code as if already authenticated.
104
104
 
105
- **NOTE:** This is _not_ recommended for running in production. The Cloud SDK
106
- *should* only be used during development.
105
+ **NOTE:** The use of Cloud SDK credentials is _not_ recommended for running in
106
+ production. The Cloud SDK *should* only be used during development.
107
+
108
+ **NOTE:** The use of Cloud SDK credentials may not support certain methods such as
109
+ those that produce
110
+ [signed URLs](https://cloud.google.com/storage/docs/access-control/signed-urls) and
111
+ post objects. For these methods, authentication using a service account JSON key file
112
+ is required.
107
113
 
108
114
  [gce-how-to]: https://cloud.google.com/compute/docs/authentication#using
109
115
  [dev-console]: https://console.cloud.google.com/project
@@ -1,5 +1,59 @@
1
1
  # Release History
2
2
 
3
+ ### 1.29.0 / 2020-09-22
4
+
5
+ #### Features
6
+
7
+ * quota_project can be set via library configuration ([#7656](https://www.github.com/googleapis/google-cloud-ruby/issues/7656))
8
+
9
+ #### Bug Fixes
10
+
11
+ * Fix encoding of space characters in #signed_url version: :v4
12
+ * Fix encoding of space characters to use percent encoding (%20) instead of plus sign (+).
13
+
14
+ #### Documentation
15
+
16
+ * Add custom time to file metadata sample
17
+
18
+ ### 1.28.0 / 2020-08-26
19
+
20
+ * Add Object Lifecycle Management fields
21
+ * Add custom_time_before to Lifecycle::Rule
22
+ * Add days_since_custom_time to Lifecycle::Rule
23
+ * Add days_since_noncurrent_time to Lifecycle::Rule
24
+ * Add noncurrent_time_before to Lifecycle::Rule
25
+ * Add File#custom_time and #custom_time=
26
+
27
+ ### 1.27.0 / 2020-07-29
28
+
29
+ #### Features
30
+
31
+ * Add support for signing URLs with IAMCredentials SignBlob API
32
+ * Add signer parameter accepting Procs to the following methods:
33
+ * Project#signed_url
34
+ * Bucket#generate_signed_post_policy_v4
35
+ * Bucket#post_object
36
+ * Bucket#signed_url
37
+ * File#signed_url
38
+ * Update signer aliases signing_key and private_key to similarly support Procs
39
+
40
+ #### Documentation
41
+
42
+ * Update documentation of SignedUrlUnavailable
43
+
44
+ ### 1.26.2 / 2020-05-28
45
+
46
+ #### Documentation
47
+
48
+ * Fix a few broken links
49
+
50
+ ### 1.26.1 / 2020-05-06
51
+
52
+ #### Bug Fixes
53
+
54
+ * Add missing bucket condition in SignerV4#post_object
55
+ * Ensure bucket is not returned in PostObject fields
56
+
3
57
  ### 1.26.0 / 2020-04-06
4
58
 
5
59
  #### Features
@@ -24,14 +24,8 @@ improved, *please* create a new issue on GitHub so we can talk about it.
24
24
 
25
25
  - [New issue][gh-ruby]
26
26
 
27
- Or, you can ask questions on the [Google Cloud Platform Slack][slack-ruby]. You
28
- can use the "ruby" channel for general Ruby questions, or use the
29
- "google-cloud-ruby" channel if you have questions about this gem in particular.
30
-
31
27
  [so-ruby]: http://stackoverflow.com/questions/tagged/google-cloud-platform+ruby+storage
32
28
 
33
- [gh-search-ruby]: https://github.com/googlecloudplatform/google-cloud-ruby/issues?q=label%3A%22api%3A+storage%22
34
-
35
- [gh-ruby]: https://github.com/googlecloudplatform/google-cloud-ruby/issues/new
29
+ [gh-search-ruby]: https://github.com/googleapis/google-cloud-ruby/issues?q=label%3A%22api%3A+storage%22
36
30
 
37
- [slack-ruby]: https://gcp-slack.appspot.com/
31
+ [gh-ruby]: https://github.com/googleapis/google-cloud-ruby/issues/new
@@ -136,6 +136,7 @@ Google::Cloud.configure.add_config! :storage do |config|
136
136
  allow_nil: true
137
137
  config.add_alias! :keyfile, :credentials
138
138
  config.add_field! :scope, nil, match: [String, Array]
139
+ config.add_field! :quota_project, nil, match: String
139
140
  config.add_field! :retries, nil, match: Integer
140
141
  config.add_field! :timeout, nil, match: Integer
141
142
  # TODO: Remove once discovery document is updated.
@@ -93,7 +93,8 @@ module Google
93
93
  Storage::Project.new(
94
94
  Storage::Service.new(
95
95
  project_id, credentials,
96
- retries: retries, timeout: timeout, host: endpoint
96
+ retries: retries, timeout: timeout, host: endpoint,
97
+ quota_project: configure.quota_project
97
98
  )
98
99
  )
99
100
  end
@@ -1128,6 +1128,11 @@ module Google
1128
1128
  # @param [String] content_type The
1129
1129
  # [Content-Type](https://tools.ietf.org/html/rfc2616#section-14.17)
1130
1130
  # response header to be returned when the file is downloaded.
1131
+ # @param [DateTime] custom_time A custom time specified by the user for
1132
+ # the file. Once set, custom_time can't be unset, and it can only be
1133
+ # changed to a time in the future. If custom_time must be unset, you
1134
+ # must either perform a rewrite operation, or upload the data again
1135
+ # and create a new file.
1131
1136
  # @param [String] crc32c The CRC32c checksum of the file data, as
1132
1137
  # described in [RFC 4960, Appendix
1133
1138
  # B](http://tools.ietf.org/html/rfc4960#appendix-B).
@@ -1249,7 +1254,7 @@ module Google
1249
1254
  #
1250
1255
  def create_file file, path = nil, acl: nil, cache_control: nil,
1251
1256
  content_disposition: nil, content_encoding: nil,
1252
- content_language: nil, content_type: nil,
1257
+ content_language: nil, content_type: nil, custom_time: nil,
1253
1258
  crc32c: nil, md5: nil, metadata: nil,
1254
1259
  storage_class: nil, encryption_key: nil, kms_key: nil,
1255
1260
  temporary_hold: nil, event_based_hold: nil
@@ -1264,6 +1269,7 @@ module Google
1264
1269
  md5: md5,
1265
1270
  cache_control: cache_control,
1266
1271
  content_type: content_type,
1272
+ custom_time: custom_time,
1267
1273
  content_disposition: content_disposition,
1268
1274
  crc32c: crc32c,
1269
1275
  content_encoding: content_encoding,
@@ -1406,7 +1412,7 @@ module Google
1406
1412
  # A {SignedUrlUnavailable} is raised if the service account credentials
1407
1413
  # are missing. Service account credentials are acquired by following the
1408
1414
  # steps in [Service Account Authentication](
1409
- # https://cloud.google.com/storage/docs/authentication#service_accounts).
1415
+ # https://cloud.google.com/iam/docs/service-accounts).
1410
1416
  #
1411
1417
  # @see https://cloud.google.com/storage/docs/access-control/signed-urls
1412
1418
  # Signed URLs guide
@@ -1433,10 +1439,22 @@ module Google
1433
1439
  # use the signed URL.
1434
1440
  # @param [String] issuer Service Account's Client Email.
1435
1441
  # @param [String] client_email Service Account's Client Email.
1436
- # @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
1437
- # Private Key.
1438
- # @param [OpenSSL::PKey::RSA, String] private_key Service Account's
1439
- # Private Key.
1442
+ # @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
1443
+ # Private Key or a Proc that accepts a single String parameter and returns a
1444
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1445
+ # @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
1446
+ # Private Key or a Proc that accepts a single String parameter and returns a
1447
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1448
+ # @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
1449
+ # Private Key or a Proc that accepts a single String parameter and returns a
1450
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1451
+ #
1452
+ # When using this method in environments such as GAE Flexible Environment,
1453
+ # GKE, or Cloud Functions where the private key is unavailable, it may be
1454
+ # necessary to provide a Proc (or lambda) via the signer parameter. This
1455
+ # Proc should return a signature created using a RPC call to the
1456
+ # [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
1457
+ # method as shown in the example below.
1440
1458
  # @param [Hash] query Query string parameters to include in the signed
1441
1459
  # URL. The given parameters are not verified by the signature.
1442
1460
  #
@@ -1462,7 +1480,12 @@ module Google
1462
1480
  # to create. Must be one of `:v2` or `:v4`. The default value is
1463
1481
  # `:v2`.
1464
1482
  #
1465
- # @return [String]
1483
+ # @return [String] The signed URL.
1484
+ #
1485
+ # @raise [SignedUrlUnavailable] If the service account credentials
1486
+ # are missing. Service account credentials are acquired by following the
1487
+ # steps in [Service Account Authentication](
1488
+ # https://cloud.google.com/iam/docs/service-accounts).
1466
1489
  #
1467
1490
  # @example
1468
1491
  # require "google/cloud/storage"
@@ -1493,6 +1516,40 @@ module Google
1493
1516
  # issuer: "service-account@gcloud.com",
1494
1517
  # signing_key: key
1495
1518
  #
1519
+ # @example Using Cloud IAMCredentials signBlob to create the signature:
1520
+ # require "google/cloud/storage"
1521
+ # require "google/apis/iamcredentials_v1"
1522
+ # require "googleauth"
1523
+ #
1524
+ # # Issuer is the service account email that the Signed URL will be signed with
1525
+ # # and any permission granted in the Signed URL must be granted to the
1526
+ # # Google Service Account.
1527
+ # issuer = "service-account@project-id.iam.gserviceaccount.com"
1528
+ #
1529
+ # # Create a lambda that accepts the string_to_sign
1530
+ # signer = lambda do |string_to_sign|
1531
+ # IAMCredentials = Google::Apis::IamcredentialsV1
1532
+ # iam_client = IAMCredentials::IAMCredentialsService.new
1533
+ #
1534
+ # # Get the environment configured authorization
1535
+ # scopes = ["https://www.googleapis.com/auth/iam"]
1536
+ # iam_client.authorization = Google::Auth.get_application_default scopes
1537
+ #
1538
+ # request = {
1539
+ # "payload": string_to_sign,
1540
+ # }
1541
+ # resource = "projects/-/serviceAccounts/#{issuer}"
1542
+ # response = iam_client.sign_service_account_blob resource, request, {}
1543
+ # response.signed_blob
1544
+ # end
1545
+ #
1546
+ # storage = Google::Cloud::Storage.new
1547
+ #
1548
+ # bucket_name = "my-todo-app"
1549
+ # file_path = "avatars/heidi/400x400.png"
1550
+ # url = storage.signed_url bucket_name, file_path,
1551
+ # method: "GET", issuer: issuer,
1552
+ # signer: signer
1496
1553
  # @example Using the `headers` option:
1497
1554
  # require "google/cloud/storage"
1498
1555
  #
@@ -1538,6 +1595,7 @@ module Google
1538
1595
  client_email: nil,
1539
1596
  signing_key: nil,
1540
1597
  private_key: nil,
1598
+ signer: nil,
1541
1599
  query: nil,
1542
1600
  scheme: "HTTPS",
1543
1601
  virtual_hosted_style: nil,
@@ -1547,30 +1605,32 @@ module Google
1547
1605
  version ||= :v2
1548
1606
  case version.to_sym
1549
1607
  when :v2
1550
- signer = File::SignerV2.from_bucket self, path
1551
- signer.signed_url method: method,
1552
- expires: expires,
1553
- headers: headers,
1554
- content_type: content_type,
1555
- content_md5: content_md5,
1556
- issuer: issuer,
1557
- client_email: client_email,
1558
- signing_key: signing_key,
1559
- private_key: private_key,
1560
- query: query
1608
+ sign = File::SignerV2.from_bucket self, path
1609
+ sign.signed_url method: method,
1610
+ expires: expires,
1611
+ headers: headers,
1612
+ content_type: content_type,
1613
+ content_md5: content_md5,
1614
+ issuer: issuer,
1615
+ client_email: client_email,
1616
+ signing_key: signing_key,
1617
+ private_key: private_key,
1618
+ signer: signer,
1619
+ query: query
1561
1620
  when :v4
1562
- signer = File::SignerV4.from_bucket self, path
1563
- signer.signed_url method: method,
1564
- expires: expires,
1565
- headers: headers,
1566
- issuer: issuer,
1567
- client_email: client_email,
1568
- signing_key: signing_key,
1569
- private_key: private_key,
1570
- query: query,
1571
- scheme: scheme,
1572
- virtual_hosted_style: virtual_hosted_style,
1573
- bucket_bound_hostname: bucket_bound_hostname
1621
+ sign = File::SignerV4.from_bucket self, path
1622
+ sign.signed_url method: method,
1623
+ expires: expires,
1624
+ headers: headers,
1625
+ issuer: issuer,
1626
+ client_email: client_email,
1627
+ signing_key: signing_key,
1628
+ private_key: private_key,
1629
+ signer: signer,
1630
+ query: query,
1631
+ scheme: scheme,
1632
+ virtual_hosted_style: virtual_hosted_style,
1633
+ bucket_bound_hostname: bucket_bound_hostname
1574
1634
  else
1575
1635
  raise ArgumentError, "version '#{version}' not supported"
1576
1636
  end
@@ -1591,7 +1651,7 @@ module Google
1591
1651
  # A {SignedUrlUnavailable} is raised if the service account credentials
1592
1652
  # are missing. Service account credentials are acquired by following the
1593
1653
  # steps in [Service Account Authentication](
1594
- # https://cloud.google.com/storage/docs/authentication#service_accounts).
1654
+ # https://cloud.google.com/iam/docs/service-accounts).
1595
1655
  #
1596
1656
  # @see https://cloud.google.com/storage/docs/xml-api/post-object
1597
1657
  #
@@ -1608,12 +1668,28 @@ module Google
1608
1668
  # for more information.
1609
1669
  # @param [String] issuer Service Account's Client Email.
1610
1670
  # @param [String] client_email Service Account's Client Email.
1611
- # @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
1612
- # Private Key.
1613
- # @param [OpenSSL::PKey::RSA, String] private_key Service Account's
1614
- # Private Key.
1671
+ # @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
1672
+ # Private Key or a Proc that accepts a single String parameter and returns a
1673
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1674
+ # @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
1675
+ # Private Key or a Proc that accepts a single String parameter and returns a
1676
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1677
+ # @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
1678
+ # Private Key or a Proc that accepts a single String parameter and returns a
1679
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1680
+ #
1681
+ # When using this method in environments such as GAE Flexible Environment,
1682
+ # GKE, or Cloud Functions where the private key is unavailable, it may be
1683
+ # necessary to provide a Proc (or lambda) via the signer parameter. This
1684
+ # Proc should return a signature created using a RPC call to the
1685
+ # [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
1686
+ # method as shown in the example below.
1687
+ # @return [PostObject] An object containing the URL, fields, and values needed to upload files via html forms.
1615
1688
  #
1616
- # @return [PostObject]
1689
+ # @raise [SignedUrlUnavailable] If the service account credentials
1690
+ # are missing. Service account credentials are acquired by following the
1691
+ # steps in [Service Account Authentication](
1692
+ # https://cloud.google.com/iam/docs/service-accounts).
1617
1693
  #
1618
1694
  # @example
1619
1695
  # require "google/cloud/storage"
@@ -1673,19 +1749,61 @@ module Google
1673
1749
  # post.fields[:signature] #=> "ABC...XYZ="
1674
1750
  # post.fields[:policy] #=> "ABC...XYZ="
1675
1751
  #
1752
+ # @example Using Cloud IAMCredentials signBlob to create the signature:
1753
+ # require "google/cloud/storage"
1754
+ # require "google/apis/iamcredentials_v1"
1755
+ # require "googleauth"
1756
+ #
1757
+ # # Issuer is the service account email that the Signed URL will be signed with
1758
+ # # and any permission granted in the Signed URL must be granted to the
1759
+ # # Google Service Account.
1760
+ # issuer = "service-account@project-id.iam.gserviceaccount.com"
1761
+ #
1762
+ # # Create a lambda that accepts the string_to_sign
1763
+ # signer = lambda do |string_to_sign|
1764
+ # IAMCredentials = Google::Apis::IamcredentialsV1
1765
+ # iam_client = IAMCredentials::IAMCredentialsService.new
1766
+ #
1767
+ # # Get the environment configured authorization
1768
+ # scopes = ["https://www.googleapis.com/auth/iam"]
1769
+ # iam_client.authorization = Google::Auth.get_application_default scopes
1770
+ #
1771
+ # request = {
1772
+ # "payload": string_to_sign,
1773
+ # }
1774
+ # resource = "projects/-/serviceAccounts/#{issuer}"
1775
+ # response = iam_client.sign_service_account_blob resource, request, {}
1776
+ # response.signed_blob
1777
+ # end
1778
+ #
1779
+ # storage = Google::Cloud::Storage.new
1780
+ #
1781
+ # bucket = storage.bucket "my-todo-app"
1782
+ # post = bucket.post_object "avatars/heidi/400x400.png",
1783
+ # issuer: issuer,
1784
+ # signer: signer
1785
+ #
1786
+ # post.url #=> "https://storage.googleapis.com"
1787
+ # post.fields[:key] #=> "my-todo-app/avatars/heidi/400x400.png"
1788
+ # post.fields[:GoogleAccessId] #=> "0123456789@gserviceaccount.com"
1789
+ # post.fields[:signature] #=> "ABC...XYZ="
1790
+ # post.fields[:policy] #=> "ABC...XYZ="
1791
+ #
1676
1792
  def post_object path,
1677
1793
  policy: nil,
1678
1794
  issuer: nil,
1679
1795
  client_email: nil,
1680
1796
  signing_key: nil,
1681
- private_key: nil
1797
+ private_key: nil,
1798
+ signer: nil
1682
1799
  ensure_service!
1683
- signer = File::SignerV2.from_bucket self, path
1684
- signer.post_object issuer: issuer,
1685
- client_email: client_email,
1686
- signing_key: signing_key,
1687
- private_key: private_key,
1688
- policy: policy
1800
+ sign = File::SignerV2.from_bucket self, path
1801
+ sign.post_object issuer: issuer,
1802
+ client_email: client_email,
1803
+ signing_key: signing_key,
1804
+ private_key: private_key,
1805
+ signer: signer,
1806
+ policy: policy
1689
1807
  end
1690
1808
 
1691
1809
  ##
@@ -1703,17 +1821,29 @@ module Google
1703
1821
  # A {SignedUrlUnavailable} is raised if the service account credentials
1704
1822
  # are missing. Service account credentials are acquired by following the
1705
1823
  # steps in [Service Account Authentication](
1706
- # https://cloud.google.com/storage/docs/authentication#service_accounts).
1824
+ # https://cloud.google.com/iam/docs/service-accounts).
1707
1825
  #
1708
1826
  # @see https://cloud.google.com/storage/docs/xml-api/post-object
1709
1827
  #
1710
1828
  # @param [String] path Path to the file in Google Cloud Storage.
1711
1829
  # @param [String] issuer Service Account's Client Email.
1712
1830
  # @param [String] client_email Service Account's Client Email.
1713
- # @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
1714
- # Private Key.
1715
- # @param [OpenSSL::PKey::RSA, String] private_key Service Account's
1716
- # Private Key.
1831
+ # @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
1832
+ # Private Key or a Proc that accepts a single String parameter and returns a
1833
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1834
+ # @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
1835
+ # Private Key or a Proc that accepts a single String parameter and returns a
1836
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1837
+ # @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
1838
+ # Private Key or a Proc that accepts a single String parameter and returns a
1839
+ # RSA SHA256 signature using a valid Google Service Account Private Key.
1840
+ #
1841
+ # When using this method in environments such as GAE Flexible Environment,
1842
+ # GKE, or Cloud Functions where the private key is unavailable, it may be
1843
+ # necessary to provide a Proc (or lambda) via the signer parameter. This
1844
+ # Proc should return a signature created using a RPC call to the
1845
+ # [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
1846
+ # method as shown in the example below.
1717
1847
  # @param [Integer] expires The number of seconds until the URL expires.
1718
1848
  # The default is 604800 (7 days).
1719
1849
  # @param [Hash] fields User-supplied form fields such as `acl`,
@@ -1733,6 +1863,11 @@ module Google
1733
1863
  #
1734
1864
  # @return [PostObject] An object containing the URL, fields, and values needed to upload files via html forms.
1735
1865
  #
1866
+ # @raise [SignedUrlUnavailable] If the service account credentials
1867
+ # are missing. Service account credentials are acquired by following the
1868
+ # steps in [Service Account Authentication](
1869
+ # https://cloud.google.com/iam/docs/service-accounts).
1870
+ #
1736
1871
  # @example
1737
1872
  # require "google/cloud/storage"
1738
1873
  #
@@ -1752,11 +1887,56 @@ module Google
1752
1887
  # post.fields["x-goog-date"] #=> "20200128T000000Z"
1753
1888
  # post.fields["x-goog-signature"] #=> "4893a0e...cd82"
1754
1889
  #
1890
+ # @example Using Cloud IAMCredentials signBlob to create the signature:
1891
+ # require "google/cloud/storage"
1892
+ # require "google/apis/iamcredentials_v1"
1893
+ # require "googleauth"
1894
+ #
1895
+ # # Issuer is the service account email that the Signed URL will be signed with
1896
+ # # and any permission granted in the Signed URL must be granted to the
1897
+ # # Google Service Account.
1898
+ # issuer = "service-account@project-id.iam.gserviceaccount.com"
1899
+ #
1900
+ # # Create a lambda that accepts the string_to_sign
1901
+ # signer = lambda do |string_to_sign|
1902
+ # IAMCredentials = Google::Apis::IamcredentialsV1
1903
+ # iam_client = IAMCredentials::IAMCredentialsService.new
1904
+ #
1905
+ # # Get the environment configured authorization
1906
+ # scopes = ["https://www.googleapis.com/auth/iam"]
1907
+ # iam_client.authorization = Google::Auth.get_application_default scopes
1908
+ #
1909
+ # request = {
1910
+ # "payload": string_to_sign,
1911
+ # }
1912
+ # resource = "projects/-/serviceAccounts/#{issuer}"
1913
+ # response = iam_client.sign_service_account_blob resource, request, {}
1914
+ # response.signed_blob
1915
+ # end
1916
+ #
1917
+ # storage = Google::Cloud::Storage.new
1918
+ #
1919
+ # bucket = storage.bucket "my-todo-app"
1920
+ # conditions = [["starts-with", "$acl","public"]]
1921
+ # post = bucket.generate_signed_post_policy_v4(
1922
+ # "avatars/heidi/400x400.png", expires: 10,
1923
+ # conditions: conditions, issuer: issuer, signer: signer
1924
+ # )
1925
+ #
1926
+ # post.url #=> "https://storage.googleapis.com/my-todo-app/"
1927
+ # post.fields["key"] #=> "my-todo-app/avatars/heidi/400x400.png"
1928
+ # post.fields["policy"] #=> "ABC...XYZ"
1929
+ # post.fields["x-goog-algorithm"] #=> "GOOG4-RSA-SHA256"
1930
+ # post.fields["x-goog-credential"] #=> "cred@pid.iam.gserviceaccount.com/20200123/auto/storage/goog4_request"
1931
+ # post.fields["x-goog-date"] #=> "20200128T000000Z"
1932
+ # post.fields["x-goog-signature"] #=> "4893a0e...cd82"
1933
+ #
1755
1934
  def generate_signed_post_policy_v4 path,
1756
1935
  issuer: nil,
1757
1936
  client_email: nil,
1758
1937
  signing_key: nil,
1759
1938
  private_key: nil,
1939
+ signer: nil,
1760
1940
  expires: nil,
1761
1941
  fields: nil,
1762
1942
  conditions: nil,
@@ -1764,17 +1944,18 @@ module Google
1764
1944
  virtual_hosted_style: nil,
1765
1945
  bucket_bound_hostname: nil
1766
1946
  ensure_service!
1767
- signer = File::SignerV4.from_bucket self, path
1768
- signer.post_object issuer: issuer,
1769
- client_email: client_email,
1770
- signing_key: signing_key,
1771
- private_key: private_key,
1772
- expires: expires,
1773
- fields: fields,
1774
- conditions: conditions,
1775
- scheme: scheme,
1776
- virtual_hosted_style: virtual_hosted_style,
1777
- bucket_bound_hostname: bucket_bound_hostname
1947
+ sign = File::SignerV4.from_bucket self, path
1948
+ sign.post_object issuer: issuer,
1949
+ client_email: client_email,
1950
+ signing_key: signing_key,
1951
+ private_key: private_key,
1952
+ signer: signer,
1953
+ expires: expires,
1954
+ fields: fields,
1955
+ conditions: conditions,
1956
+ scheme: scheme,
1957
+ virtual_hosted_style: virtual_hosted_style,
1958
+ bucket_bound_hostname: bucket_bound_hostname
1778
1959
  end
1779
1960
 
1780
1961
  ##