google-cloud-storage 1.26.2 → 1.29.2
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 +4 -4
- data/AUTHENTICATION.md +8 -2
- data/CHANGELOG.md +59 -0
- data/CONTRIBUTING.md +1 -1
- data/lib/google-cloud-storage.rb +1 -0
- data/lib/google/cloud/storage.rb +2 -1
- data/lib/google/cloud/storage/bucket.rb +251 -60
- 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 +114 -34
- data/lib/google/cloud/storage/file/signer_v2.rb +21 -12
- data/lib/google/cloud/storage/file/signer_v4.rb +39 -21
- 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
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: ad286a8539024ffcee1d0239c7db682e3ddb4b6663e5e172354123fa607b96fc
         | 
| 4 | 
            +
              data.tar.gz: 29e8c237d1f891d46bddea92ff3151a08c11c32e936376f040d50159668a8f69
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b7121fbfee2ad413e88d6edfbe83c535a9b17173d2431919e72fed6e8f4eba4c94f84b64d588ade51f50d8f20556a8bef37c6ad8cdaeaca8d6fb58a280168825
         | 
| 7 | 
            +
              data.tar.gz: 0cb221a85541a6af70d8be63dd137915110eda09295e9711c566ec669bd574376a1f0125c4ebc559efa0a19268569dc74cd2548891400501d9af6bdfe62da8ce
         | 
    
        data/AUTHENTICATION.md
    CHANGED
    
    | @@ -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:**  | 
| 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
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,64 @@ | |
| 1 1 | 
             
            # Release History
         | 
| 2 2 |  | 
| 3 | 
            +
            ### 1.29.2 / 2020-12-14
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            #### Bug Fixes
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Fix support for #generate_signed_post_policy_v4 conditions
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ### 1.29.1 / 2020-10-05
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            #### Bug Fixes
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            * Fix encoding of space characters in file names in signed_url v4
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            #### Documentation
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            * Update Bucket#default_kms_key= docs
         | 
| 18 | 
            +
              * Demonstrate deleting the Cloud KMS encryption key
         | 
| 19 | 
            +
            * Update customer-supplied encryption key docs and examples ([#7851](https://www.github.com/googleapis/google-cloud-ruby/issues/7851))
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            ### 1.29.0 / 2020-09-22
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            #### Features
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            * quota_project can be set via library configuration ([#7656](https://www.github.com/googleapis/google-cloud-ruby/issues/7656))
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            #### Bug Fixes
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            * Fix encoding of space characters in #signed_url version: :v4
         | 
| 30 | 
            +
              * Fix encoding of space characters to use percent encoding (%20) instead of plus sign (+).
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            #### Documentation
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            * Add custom time to file metadata sample
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            ### 1.28.0 / 2020-08-26
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            * Add Object Lifecycle Management fields
         | 
| 39 | 
            +
              * Add custom_time_before to Lifecycle::Rule
         | 
| 40 | 
            +
              * Add days_since_custom_time to Lifecycle::Rule
         | 
| 41 | 
            +
              * Add days_since_noncurrent_time to Lifecycle::Rule
         | 
| 42 | 
            +
              * Add noncurrent_time_before to Lifecycle::Rule
         | 
| 43 | 
            +
              * Add File#custom_time and #custom_time=
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ### 1.27.0 / 2020-07-29
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            #### Features
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            * Add support for signing URLs with IAMCredentials SignBlob API
         | 
| 50 | 
            +
              * Add signer parameter accepting Procs to the following methods:
         | 
| 51 | 
            +
                * Project#signed_url
         | 
| 52 | 
            +
                * Bucket#generate_signed_post_policy_v4
         | 
| 53 | 
            +
                * Bucket#post_object
         | 
| 54 | 
            +
                * Bucket#signed_url
         | 
| 55 | 
            +
                * File#signed_url
         | 
| 56 | 
            +
              * Update signer aliases signing_key and private_key to similarly support Procs
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            #### Documentation
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            * Update documentation of SignedUrlUnavailable
         | 
| 61 | 
            +
             | 
| 3 62 | 
             
            ### 1.26.2 / 2020-05-28
         | 
| 4 63 |  | 
| 5 64 | 
             
            #### Documentation
         | 
    
        data/CONTRIBUTING.md
    CHANGED
    
    
    
        data/lib/google-cloud-storage.rb
    CHANGED
    
    | @@ -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.
         | 
    
        data/lib/google/cloud/storage.rb
    CHANGED
    
    | @@ -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
         | 
| @@ -557,7 +557,8 @@ module Google | |
| 557 557 | 
             
                    # Set the Cloud KMS encryption key that will be used to protect files.
         | 
| 558 558 | 
             
                    # For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
         | 
| 559 559 | 
             
                    #
         | 
| 560 | 
            -
                    # @param [String] new_default_kms_key New Cloud KMS key name | 
| 560 | 
            +
                    # @param [String, nil] new_default_kms_key New Cloud KMS key name, or
         | 
| 561 | 
            +
                    #   `nil` to delete the Cloud KMS encryption key.
         | 
| 561 562 | 
             
                    #
         | 
| 562 563 | 
             
                    # @example
         | 
| 563 564 | 
             
                    #   require "google/cloud/storage"
         | 
| @@ -571,6 +572,15 @@ module Google | |
| 571 572 | 
             
                    #
         | 
| 572 573 | 
             
                    #   bucket.default_kms_key = kms_key_name
         | 
| 573 574 | 
             
                    #
         | 
| 575 | 
            +
                    # @example Delete the default Cloud KMS encryption key:
         | 
| 576 | 
            +
                    #   require "google/cloud/storage"
         | 
| 577 | 
            +
                    #
         | 
| 578 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 579 | 
            +
                    #
         | 
| 580 | 
            +
                    #   bucket = storage.bucket "my-bucket"
         | 
| 581 | 
            +
                    #
         | 
| 582 | 
            +
                    #   bucket.default_kms_key = nil
         | 
| 583 | 
            +
                    #
         | 
| 574 584 | 
             
                    def default_kms_key= new_default_kms_key
         | 
| 575 585 | 
             
                      @gapi.encryption = API::Bucket::Encryption.new \
         | 
| 576 586 | 
             
                        default_kms_key_name: new_default_kms_key
         | 
| @@ -1128,6 +1138,11 @@ module Google | |
| 1128 1138 | 
             
                    # @param [String] content_type The
         | 
| 1129 1139 | 
             
                    #   [Content-Type](https://tools.ietf.org/html/rfc2616#section-14.17)
         | 
| 1130 1140 | 
             
                    #   response header to be returned when the file is downloaded.
         | 
| 1141 | 
            +
                    # @param [DateTime] custom_time A custom time specified by the user for
         | 
| 1142 | 
            +
                    #   the file. Once set, custom_time can't be unset, and it can only be
         | 
| 1143 | 
            +
                    #   changed to a time in the future. If custom_time must be unset, you
         | 
| 1144 | 
            +
                    #   must either perform a rewrite operation, or upload the data again
         | 
| 1145 | 
            +
                    #   and create a new file.
         | 
| 1131 1146 | 
             
                    # @param [String] crc32c The CRC32c checksum of the file data, as
         | 
| 1132 1147 | 
             
                    #   described in [RFC 4960, Appendix
         | 
| 1133 1148 | 
             
                    #   B](http://tools.ietf.org/html/rfc4960#appendix-B).
         | 
| @@ -1249,7 +1264,7 @@ module Google | |
| 1249 1264 | 
             
                    #
         | 
| 1250 1265 | 
             
                    def create_file file, path = nil, acl: nil, cache_control: nil,
         | 
| 1251 1266 | 
             
                                    content_disposition: nil, content_encoding: nil,
         | 
| 1252 | 
            -
                                    content_language: nil, content_type: nil,
         | 
| 1267 | 
            +
                                    content_language: nil, content_type: nil, custom_time: nil,
         | 
| 1253 1268 | 
             
                                    crc32c: nil, md5: nil, metadata: nil,
         | 
| 1254 1269 | 
             
                                    storage_class: nil, encryption_key: nil, kms_key: nil,
         | 
| 1255 1270 | 
             
                                    temporary_hold: nil, event_based_hold: nil
         | 
| @@ -1264,6 +1279,7 @@ module Google | |
| 1264 1279 | 
             
                                                                   md5: md5,
         | 
| 1265 1280 | 
             
                                                                   cache_control: cache_control,
         | 
| 1266 1281 | 
             
                                                                   content_type: content_type,
         | 
| 1282 | 
            +
                                                                   custom_time: custom_time,
         | 
| 1267 1283 | 
             
                                                                   content_disposition: content_disposition,
         | 
| 1268 1284 | 
             
                                                                   crc32c: crc32c,
         | 
| 1269 1285 | 
             
                                                                   content_encoding: content_encoding,
         | 
| @@ -1406,7 +1422,7 @@ module Google | |
| 1406 1422 | 
             
                    # A {SignedUrlUnavailable} is raised if the service account credentials
         | 
| 1407 1423 | 
             
                    # are missing. Service account credentials are acquired by following the
         | 
| 1408 1424 | 
             
                    # steps in [Service Account Authentication](
         | 
| 1409 | 
            -
                    # https://cloud.google.com/ | 
| 1425 | 
            +
                    # https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1410 1426 | 
             
                    #
         | 
| 1411 1427 | 
             
                    # @see https://cloud.google.com/storage/docs/access-control/signed-urls
         | 
| 1412 1428 | 
             
                    #   Signed URLs guide
         | 
| @@ -1433,10 +1449,22 @@ module Google | |
| 1433 1449 | 
             
                    #   use the signed URL.
         | 
| 1434 1450 | 
             
                    # @param [String] issuer Service Account's Client Email.
         | 
| 1435 1451 | 
             
                    # @param [String] client_email Service Account's Client Email.
         | 
| 1436 | 
            -
                    # @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
         | 
| 1437 | 
            -
                    #   Private Key | 
| 1438 | 
            -
                    #  | 
| 1439 | 
            -
                    # | 
| 1452 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
         | 
| 1453 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1454 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1455 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
         | 
| 1456 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1457 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1458 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
         | 
| 1459 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1460 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1461 | 
            +
                    #
         | 
| 1462 | 
            +
                    #   When using this method in environments such as GAE Flexible Environment,
         | 
| 1463 | 
            +
                    #   GKE, or Cloud Functions where the private key is unavailable, it may be
         | 
| 1464 | 
            +
                    #   necessary to provide a Proc (or lambda) via the signer parameter. This
         | 
| 1465 | 
            +
                    #   Proc should return a signature created using a RPC call to the
         | 
| 1466 | 
            +
                    #   [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
         | 
| 1467 | 
            +
                    #   method as shown in the example below.
         | 
| 1440 1468 | 
             
                    # @param [Hash] query Query string parameters to include in the signed
         | 
| 1441 1469 | 
             
                    #   URL. The given parameters are not verified by the signature.
         | 
| 1442 1470 | 
             
                    #
         | 
| @@ -1462,7 +1490,12 @@ module Google | |
| 1462 1490 | 
             
                    #   to create. Must be one of `:v2` or `:v4`. The default value is
         | 
| 1463 1491 | 
             
                    #   `:v2`.
         | 
| 1464 1492 | 
             
                    #
         | 
| 1465 | 
            -
                    # @return [String]
         | 
| 1493 | 
            +
                    # @return [String] The signed URL.
         | 
| 1494 | 
            +
                    #
         | 
| 1495 | 
            +
                    # @raise [SignedUrlUnavailable] If the service account credentials
         | 
| 1496 | 
            +
                    #   are missing. Service account credentials are acquired by following the
         | 
| 1497 | 
            +
                    #   steps in [Service Account Authentication](
         | 
| 1498 | 
            +
                    #   https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1466 1499 | 
             
                    #
         | 
| 1467 1500 | 
             
                    # @example
         | 
| 1468 1501 | 
             
                    #   require "google/cloud/storage"
         | 
| @@ -1493,6 +1526,40 @@ module Google | |
| 1493 1526 | 
             
                    #                                  issuer: "service-account@gcloud.com",
         | 
| 1494 1527 | 
             
                    #                                  signing_key: key
         | 
| 1495 1528 | 
             
                    #
         | 
| 1529 | 
            +
                    # @example Using Cloud IAMCredentials signBlob to create the signature:
         | 
| 1530 | 
            +
                    #   require "google/cloud/storage"
         | 
| 1531 | 
            +
                    #   require "google/apis/iamcredentials_v1"
         | 
| 1532 | 
            +
                    #   require "googleauth"
         | 
| 1533 | 
            +
                    #
         | 
| 1534 | 
            +
                    #   # Issuer is the service account email that the Signed URL will be signed with
         | 
| 1535 | 
            +
                    #   # and any permission granted in the Signed URL must be granted to the
         | 
| 1536 | 
            +
                    #   # Google Service Account.
         | 
| 1537 | 
            +
                    #   issuer = "service-account@project-id.iam.gserviceaccount.com"
         | 
| 1538 | 
            +
                    #
         | 
| 1539 | 
            +
                    #   # Create a lambda that accepts the string_to_sign
         | 
| 1540 | 
            +
                    #   signer = lambda do |string_to_sign|
         | 
| 1541 | 
            +
                    #     IAMCredentials = Google::Apis::IamcredentialsV1
         | 
| 1542 | 
            +
                    #     iam_client = IAMCredentials::IAMCredentialsService.new
         | 
| 1543 | 
            +
                    #
         | 
| 1544 | 
            +
                    #     # Get the environment configured authorization
         | 
| 1545 | 
            +
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         | 
| 1546 | 
            +
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         | 
| 1547 | 
            +
                    #
         | 
| 1548 | 
            +
                    #     request = {
         | 
| 1549 | 
            +
                    #       "payload": string_to_sign,
         | 
| 1550 | 
            +
                    #     }
         | 
| 1551 | 
            +
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         | 
| 1552 | 
            +
                    #     response = iam_client.sign_service_account_blob resource, request, {}
         | 
| 1553 | 
            +
                    #     response.signed_blob
         | 
| 1554 | 
            +
                    #   end
         | 
| 1555 | 
            +
                    #
         | 
| 1556 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 1557 | 
            +
                    #
         | 
| 1558 | 
            +
                    #   bucket_name = "my-todo-app"
         | 
| 1559 | 
            +
                    #   file_path = "avatars/heidi/400x400.png"
         | 
| 1560 | 
            +
                    #   url = storage.signed_url bucket_name, file_path,
         | 
| 1561 | 
            +
                    #                            method: "GET", issuer: issuer,
         | 
| 1562 | 
            +
                    #                            signer: signer
         | 
| 1496 1563 | 
             
                    # @example Using the `headers` option:
         | 
| 1497 1564 | 
             
                    #   require "google/cloud/storage"
         | 
| 1498 1565 | 
             
                    #
         | 
| @@ -1538,6 +1605,7 @@ module Google | |
| 1538 1605 | 
             
                                   client_email: nil,
         | 
| 1539 1606 | 
             
                                   signing_key: nil,
         | 
| 1540 1607 | 
             
                                   private_key: nil,
         | 
| 1608 | 
            +
                                   signer: nil,
         | 
| 1541 1609 | 
             
                                   query: nil,
         | 
| 1542 1610 | 
             
                                   scheme: "HTTPS",
         | 
| 1543 1611 | 
             
                                   virtual_hosted_style: nil,
         | 
| @@ -1547,30 +1615,32 @@ module Google | |
| 1547 1615 | 
             
                      version ||= :v2
         | 
| 1548 1616 | 
             
                      case version.to_sym
         | 
| 1549 1617 | 
             
                      when :v2
         | 
| 1550 | 
            -
                         | 
| 1551 | 
            -
                         | 
| 1552 | 
            -
             | 
| 1553 | 
            -
             | 
| 1554 | 
            -
             | 
| 1555 | 
            -
             | 
| 1556 | 
            -
             | 
| 1557 | 
            -
             | 
| 1558 | 
            -
             | 
| 1559 | 
            -
             | 
| 1560 | 
            -
             | 
| 1618 | 
            +
                        sign = File::SignerV2.from_bucket self, path
         | 
| 1619 | 
            +
                        sign.signed_url method: method,
         | 
| 1620 | 
            +
                                        expires: expires,
         | 
| 1621 | 
            +
                                        headers: headers,
         | 
| 1622 | 
            +
                                        content_type: content_type,
         | 
| 1623 | 
            +
                                        content_md5: content_md5,
         | 
| 1624 | 
            +
                                        issuer: issuer,
         | 
| 1625 | 
            +
                                        client_email: client_email,
         | 
| 1626 | 
            +
                                        signing_key: signing_key,
         | 
| 1627 | 
            +
                                        private_key: private_key,
         | 
| 1628 | 
            +
                                        signer: signer,
         | 
| 1629 | 
            +
                                        query: query
         | 
| 1561 1630 | 
             
                      when :v4
         | 
| 1562 | 
            -
                         | 
| 1563 | 
            -
                         | 
| 1564 | 
            -
             | 
| 1565 | 
            -
             | 
| 1566 | 
            -
             | 
| 1567 | 
            -
             | 
| 1568 | 
            -
             | 
| 1569 | 
            -
             | 
| 1570 | 
            -
             | 
| 1571 | 
            -
             | 
| 1572 | 
            -
             | 
| 1573 | 
            -
             | 
| 1631 | 
            +
                        sign = File::SignerV4.from_bucket self, path
         | 
| 1632 | 
            +
                        sign.signed_url method: method,
         | 
| 1633 | 
            +
                                        expires: expires,
         | 
| 1634 | 
            +
                                        headers: headers,
         | 
| 1635 | 
            +
                                        issuer: issuer,
         | 
| 1636 | 
            +
                                        client_email: client_email,
         | 
| 1637 | 
            +
                                        signing_key: signing_key,
         | 
| 1638 | 
            +
                                        private_key: private_key,
         | 
| 1639 | 
            +
                                        signer: signer,
         | 
| 1640 | 
            +
                                        query: query,
         | 
| 1641 | 
            +
                                        scheme: scheme,
         | 
| 1642 | 
            +
                                        virtual_hosted_style: virtual_hosted_style,
         | 
| 1643 | 
            +
                                        bucket_bound_hostname: bucket_bound_hostname
         | 
| 1574 1644 | 
             
                      else
         | 
| 1575 1645 | 
             
                        raise ArgumentError, "version '#{version}' not supported"
         | 
| 1576 1646 | 
             
                      end
         | 
| @@ -1591,7 +1661,7 @@ module Google | |
| 1591 1661 | 
             
                    # A {SignedUrlUnavailable} is raised if the service account credentials
         | 
| 1592 1662 | 
             
                    # are missing. Service account credentials are acquired by following the
         | 
| 1593 1663 | 
             
                    # steps in [Service Account Authentication](
         | 
| 1594 | 
            -
                    # https://cloud.google.com/ | 
| 1664 | 
            +
                    # https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1595 1665 | 
             
                    #
         | 
| 1596 1666 | 
             
                    # @see https://cloud.google.com/storage/docs/xml-api/post-object
         | 
| 1597 1667 | 
             
                    #
         | 
| @@ -1608,12 +1678,28 @@ module Google | |
| 1608 1678 | 
             
                    #   for more information.
         | 
| 1609 1679 | 
             
                    # @param [String] issuer Service Account's Client Email.
         | 
| 1610 1680 | 
             
                    # @param [String] client_email Service Account's Client Email.
         | 
| 1611 | 
            -
                    # @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
         | 
| 1612 | 
            -
                    #   Private Key | 
| 1613 | 
            -
                    #  | 
| 1614 | 
            -
                    # | 
| 1681 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
         | 
| 1682 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1683 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1684 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
         | 
| 1685 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1686 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1687 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
         | 
| 1688 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1689 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1690 | 
            +
                    #
         | 
| 1691 | 
            +
                    #   When using this method in environments such as GAE Flexible Environment,
         | 
| 1692 | 
            +
                    #   GKE, or Cloud Functions where the private key is unavailable, it may be
         | 
| 1693 | 
            +
                    #   necessary to provide a Proc (or lambda) via the signer parameter. This
         | 
| 1694 | 
            +
                    #   Proc should return a signature created using a RPC call to the
         | 
| 1695 | 
            +
                    #   [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
         | 
| 1696 | 
            +
                    #   method as shown in the example below.
         | 
| 1697 | 
            +
                    # @return [PostObject] An object containing the URL, fields, and values needed to upload files via html forms.
         | 
| 1615 1698 | 
             
                    #
         | 
| 1616 | 
            -
                    # @ | 
| 1699 | 
            +
                    # @raise [SignedUrlUnavailable] If the service account credentials
         | 
| 1700 | 
            +
                    #   are missing. Service account credentials are acquired by following the
         | 
| 1701 | 
            +
                    #   steps in [Service Account Authentication](
         | 
| 1702 | 
            +
                    #   https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1617 1703 | 
             
                    #
         | 
| 1618 1704 | 
             
                    # @example
         | 
| 1619 1705 | 
             
                    #   require "google/cloud/storage"
         | 
| @@ -1673,19 +1759,61 @@ module Google | |
| 1673 1759 | 
             
                    #   post.fields[:signature] #=> "ABC...XYZ="
         | 
| 1674 1760 | 
             
                    #   post.fields[:policy] #=> "ABC...XYZ="
         | 
| 1675 1761 | 
             
                    #
         | 
| 1762 | 
            +
                    # @example Using Cloud IAMCredentials signBlob to create the signature:
         | 
| 1763 | 
            +
                    #   require "google/cloud/storage"
         | 
| 1764 | 
            +
                    #   require "google/apis/iamcredentials_v1"
         | 
| 1765 | 
            +
                    #   require "googleauth"
         | 
| 1766 | 
            +
                    #
         | 
| 1767 | 
            +
                    #   # Issuer is the service account email that the Signed URL will be signed with
         | 
| 1768 | 
            +
                    #   # and any permission granted in the Signed URL must be granted to the
         | 
| 1769 | 
            +
                    #   # Google Service Account.
         | 
| 1770 | 
            +
                    #   issuer = "service-account@project-id.iam.gserviceaccount.com"
         | 
| 1771 | 
            +
                    #
         | 
| 1772 | 
            +
                    #   # Create a lambda that accepts the string_to_sign
         | 
| 1773 | 
            +
                    #   signer = lambda do |string_to_sign|
         | 
| 1774 | 
            +
                    #     IAMCredentials = Google::Apis::IamcredentialsV1
         | 
| 1775 | 
            +
                    #     iam_client = IAMCredentials::IAMCredentialsService.new
         | 
| 1776 | 
            +
                    #
         | 
| 1777 | 
            +
                    #     # Get the environment configured authorization
         | 
| 1778 | 
            +
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         | 
| 1779 | 
            +
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         | 
| 1780 | 
            +
                    #
         | 
| 1781 | 
            +
                    #     request = {
         | 
| 1782 | 
            +
                    #       "payload": string_to_sign,
         | 
| 1783 | 
            +
                    #     }
         | 
| 1784 | 
            +
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         | 
| 1785 | 
            +
                    #     response = iam_client.sign_service_account_blob resource, request, {}
         | 
| 1786 | 
            +
                    #     response.signed_blob
         | 
| 1787 | 
            +
                    #   end
         | 
| 1788 | 
            +
                    #
         | 
| 1789 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 1790 | 
            +
                    #
         | 
| 1791 | 
            +
                    #   bucket = storage.bucket "my-todo-app"
         | 
| 1792 | 
            +
                    #   post = bucket.post_object "avatars/heidi/400x400.png",
         | 
| 1793 | 
            +
                    #                             issuer: issuer,
         | 
| 1794 | 
            +
                    #                             signer: signer
         | 
| 1795 | 
            +
                    #
         | 
| 1796 | 
            +
                    #   post.url #=> "https://storage.googleapis.com"
         | 
| 1797 | 
            +
                    #   post.fields[:key] #=> "my-todo-app/avatars/heidi/400x400.png"
         | 
| 1798 | 
            +
                    #   post.fields[:GoogleAccessId] #=> "0123456789@gserviceaccount.com"
         | 
| 1799 | 
            +
                    #   post.fields[:signature] #=> "ABC...XYZ="
         | 
| 1800 | 
            +
                    #   post.fields[:policy] #=> "ABC...XYZ="
         | 
| 1801 | 
            +
                    #
         | 
| 1676 1802 | 
             
                    def post_object path,
         | 
| 1677 1803 | 
             
                                    policy: nil,
         | 
| 1678 1804 | 
             
                                    issuer: nil,
         | 
| 1679 1805 | 
             
                                    client_email: nil,
         | 
| 1680 1806 | 
             
                                    signing_key: nil,
         | 
| 1681 | 
            -
                                    private_key: nil
         | 
| 1807 | 
            +
                                    private_key: nil,
         | 
| 1808 | 
            +
                                    signer: nil
         | 
| 1682 1809 | 
             
                      ensure_service!
         | 
| 1683 | 
            -
                       | 
| 1684 | 
            -
                       | 
| 1685 | 
            -
             | 
| 1686 | 
            -
             | 
| 1687 | 
            -
             | 
| 1688 | 
            -
             | 
| 1810 | 
            +
                      sign = File::SignerV2.from_bucket self, path
         | 
| 1811 | 
            +
                      sign.post_object issuer: issuer,
         | 
| 1812 | 
            +
                                       client_email: client_email,
         | 
| 1813 | 
            +
                                       signing_key: signing_key,
         | 
| 1814 | 
            +
                                       private_key: private_key,
         | 
| 1815 | 
            +
                                       signer: signer,
         | 
| 1816 | 
            +
                                       policy: policy
         | 
| 1689 1817 | 
             
                    end
         | 
| 1690 1818 |  | 
| 1691 1819 | 
             
                    ##
         | 
| @@ -1703,17 +1831,29 @@ module Google | |
| 1703 1831 | 
             
                    # A {SignedUrlUnavailable} is raised if the service account credentials
         | 
| 1704 1832 | 
             
                    # are missing. Service account credentials are acquired by following the
         | 
| 1705 1833 | 
             
                    # steps in [Service Account Authentication](
         | 
| 1706 | 
            -
                    # https://cloud.google.com/ | 
| 1834 | 
            +
                    # https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1707 1835 | 
             
                    #
         | 
| 1708 1836 | 
             
                    # @see https://cloud.google.com/storage/docs/xml-api/post-object
         | 
| 1709 1837 | 
             
                    #
         | 
| 1710 1838 | 
             
                    # @param [String] path Path to the file in Google Cloud Storage.
         | 
| 1711 1839 | 
             
                    # @param [String] issuer Service Account's Client Email.
         | 
| 1712 1840 | 
             
                    # @param [String] client_email Service Account's Client Email.
         | 
| 1713 | 
            -
                    # @param [OpenSSL::PKey::RSA, String] signing_key Service Account's
         | 
| 1714 | 
            -
                    #   Private Key | 
| 1715 | 
            -
                    #  | 
| 1716 | 
            -
                    # | 
| 1841 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] signing_key Service Account's
         | 
| 1842 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1843 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1844 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] private_key Service Account's
         | 
| 1845 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1846 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1847 | 
            +
                    # @param [OpenSSL::PKey::RSA, String, Proc] signer Service Account's
         | 
| 1848 | 
            +
                    #   Private Key or a Proc that accepts a single String parameter and returns a
         | 
| 1849 | 
            +
                    #   RSA SHA256 signature using a valid Google Service Account Private Key.
         | 
| 1850 | 
            +
                    #
         | 
| 1851 | 
            +
                    #   When using this method in environments such as GAE Flexible Environment,
         | 
| 1852 | 
            +
                    #   GKE, or Cloud Functions where the private key is unavailable, it may be
         | 
| 1853 | 
            +
                    #   necessary to provide a Proc (or lambda) via the signer parameter. This
         | 
| 1854 | 
            +
                    #   Proc should return a signature created using a RPC call to the
         | 
| 1855 | 
            +
                    #   [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
         | 
| 1856 | 
            +
                    #   method as shown in the example below.
         | 
| 1717 1857 | 
             
                    # @param [Integer] expires The number of seconds until the URL expires.
         | 
| 1718 1858 | 
             
                    #   The default is 604800 (7 days).
         | 
| 1719 1859 | 
             
                    # @param [Hash] fields User-supplied form fields such as `acl`,
         | 
| @@ -1733,6 +1873,11 @@ module Google | |
| 1733 1873 | 
             
                    #
         | 
| 1734 1874 | 
             
                    # @return [PostObject] An object containing the URL, fields, and values needed to upload files via html forms.
         | 
| 1735 1875 | 
             
                    #
         | 
| 1876 | 
            +
                    # @raise [SignedUrlUnavailable] If the service account credentials
         | 
| 1877 | 
            +
                    #   are missing. Service account credentials are acquired by following the
         | 
| 1878 | 
            +
                    #   steps in [Service Account Authentication](
         | 
| 1879 | 
            +
                    #   https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1880 | 
            +
                    #
         | 
| 1736 1881 | 
             
                    # @example
         | 
| 1737 1882 | 
             
                    #   require "google/cloud/storage"
         | 
| 1738 1883 | 
             
                    #
         | 
| @@ -1752,11 +1897,56 @@ module Google | |
| 1752 1897 | 
             
                    #   post.fields["x-goog-date"] #=> "20200128T000000Z"
         | 
| 1753 1898 | 
             
                    #   post.fields["x-goog-signature"] #=> "4893a0e...cd82"
         | 
| 1754 1899 | 
             
                    #
         | 
| 1900 | 
            +
                    # @example Using Cloud IAMCredentials signBlob to create the signature:
         | 
| 1901 | 
            +
                    #   require "google/cloud/storage"
         | 
| 1902 | 
            +
                    #   require "google/apis/iamcredentials_v1"
         | 
| 1903 | 
            +
                    #   require "googleauth"
         | 
| 1904 | 
            +
                    #
         | 
| 1905 | 
            +
                    #   # Issuer is the service account email that the Signed URL will be signed with
         | 
| 1906 | 
            +
                    #   # and any permission granted in the Signed URL must be granted to the
         | 
| 1907 | 
            +
                    #   # Google Service Account.
         | 
| 1908 | 
            +
                    #   issuer = "service-account@project-id.iam.gserviceaccount.com"
         | 
| 1909 | 
            +
                    #
         | 
| 1910 | 
            +
                    #   # Create a lambda that accepts the string_to_sign
         | 
| 1911 | 
            +
                    #   signer = lambda do |string_to_sign|
         | 
| 1912 | 
            +
                    #     IAMCredentials = Google::Apis::IamcredentialsV1
         | 
| 1913 | 
            +
                    #     iam_client = IAMCredentials::IAMCredentialsService.new
         | 
| 1914 | 
            +
                    #
         | 
| 1915 | 
            +
                    #     # Get the environment configured authorization
         | 
| 1916 | 
            +
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         | 
| 1917 | 
            +
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         | 
| 1918 | 
            +
                    #
         | 
| 1919 | 
            +
                    #     request = {
         | 
| 1920 | 
            +
                    #       "payload": string_to_sign,
         | 
| 1921 | 
            +
                    #     }
         | 
| 1922 | 
            +
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         | 
| 1923 | 
            +
                    #     response = iam_client.sign_service_account_blob resource, request, {}
         | 
| 1924 | 
            +
                    #     response.signed_blob
         | 
| 1925 | 
            +
                    #   end
         | 
| 1926 | 
            +
                    #
         | 
| 1927 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 1928 | 
            +
                    #
         | 
| 1929 | 
            +
                    #   bucket = storage.bucket "my-todo-app"
         | 
| 1930 | 
            +
                    #   conditions = [["starts-with", "$acl","public"]]
         | 
| 1931 | 
            +
                    #   post = bucket.generate_signed_post_policy_v4(
         | 
| 1932 | 
            +
                    #     "avatars/heidi/400x400.png", expires: 10,
         | 
| 1933 | 
            +
                    #     conditions: conditions, issuer: issuer, signer: signer
         | 
| 1934 | 
            +
                    #   )
         | 
| 1935 | 
            +
                    #
         | 
| 1936 | 
            +
                    #   post.url #=> "https://storage.googleapis.com/my-todo-app/"
         | 
| 1937 | 
            +
                    #   post.fields["key"] #=> "my-todo-app/avatars/heidi/400x400.png"
         | 
| 1938 | 
            +
                    #   post.fields["policy"] #=> "ABC...XYZ"
         | 
| 1939 | 
            +
                    #   post.fields["x-goog-algorithm"] #=> "GOOG4-RSA-SHA256"
         | 
| 1940 | 
            +
                    #   post.fields["x-goog-credential"] #=> "cred@pid.iam.gserviceaccount.com/20200123/auto/storage/goog4_request"
         | 
| 1941 | 
            +
                    #   post.fields["x-goog-date"] #=> "20200128T000000Z"
         | 
| 1942 | 
            +
                    #   post.fields["x-goog-signature"] #=> "4893a0e...cd82"
         | 
| 1943 | 
            +
                    #
         | 
| 1755 1944 | 
             
                    def generate_signed_post_policy_v4 path,
         | 
| 1756 1945 | 
             
                                                       issuer: nil,
         | 
| 1757 1946 | 
             
                                                       client_email: nil,
         | 
| 1758 1947 | 
             
                                                       signing_key: nil,
         | 
| 1759 1948 | 
             
                                                       private_key: nil,
         | 
| 1949 | 
            +
                                                       signer: nil,
         | 
| 1760 1950 | 
             
                                                       expires: nil,
         | 
| 1761 1951 | 
             
                                                       fields: nil,
         | 
| 1762 1952 | 
             
                                                       conditions: nil,
         | 
| @@ -1764,17 +1954,18 @@ module Google | |
| 1764 1954 | 
             
                                                       virtual_hosted_style: nil,
         | 
| 1765 1955 | 
             
                                                       bucket_bound_hostname: nil
         | 
| 1766 1956 | 
             
                      ensure_service!
         | 
| 1767 | 
            -
                       | 
| 1768 | 
            -
                       | 
| 1769 | 
            -
             | 
| 1770 | 
            -
             | 
| 1771 | 
            -
             | 
| 1772 | 
            -
             | 
| 1773 | 
            -
             | 
| 1774 | 
            -
             | 
| 1775 | 
            -
             | 
| 1776 | 
            -
             | 
| 1777 | 
            -
             | 
| 1957 | 
            +
                      sign = File::SignerV4.from_bucket self, path
         | 
| 1958 | 
            +
                      sign.post_object issuer: issuer,
         | 
| 1959 | 
            +
                                       client_email: client_email,
         | 
| 1960 | 
            +
                                       signing_key: signing_key,
         | 
| 1961 | 
            +
                                       private_key: private_key,
         | 
| 1962 | 
            +
                                       signer: signer,
         | 
| 1963 | 
            +
                                       expires: expires,
         | 
| 1964 | 
            +
                                       fields: fields,
         | 
| 1965 | 
            +
                                       conditions: conditions,
         | 
| 1966 | 
            +
                                       scheme: scheme,
         | 
| 1967 | 
            +
                                       virtual_hosted_style: virtual_hosted_style,
         | 
| 1968 | 
            +
                                       bucket_bound_hostname: bucket_bound_hostname
         | 
| 1778 1969 | 
             
                    end
         | 
| 1779 1970 |  | 
| 1780 1971 | 
             
                    ##
         |