Sha256: c3c0fe56cabbcf169de72867084b54587f158f94fd04f21a558aa0948879a277

Contents?: true

Size: 1.55 KB

Versions: 1031

Compression:

Stored size: 1.55 KB

Contents

module Aws
  module Plugins

    # @seahorse.client.option [Boolean] :compute_checksums (true)
    #   When `true`, a CRC32 checksum is computed of every HTTP
    #   response body and compared against the `X-Amz-Crc32` header.
    #   If the checksums do not match, the request is re-sent.
    #   Failures can be retried up to `:retry_limit` times.
    class DynamoDBCRC32Validation < Seahorse::Client::Plugin

      option(:compute_checksums, true)

      def add_handlers(handlers, config)
        if config.compute_checksums
          handlers.add(Handler, step: :sign)
        end
      end

      class Handler < Seahorse::Client::Handler

        def call(context)
          # disable response gzipping - Net::HTTP unzips these responses
          # before we can see the body, making it impossible to verify
          # the CRC32 checksum against the compressed body stream
          context.http_request.headers['accept-encoding'] = ''

          @handler.call(context).on_success do |response|
            response.error = validate(context)
          end
        end

        private

        def validate(context)
          unless crc32_is_valid?(context.http_response)
            msg = "Response failed CRC32 check."
            return Aws::DynamoDB::Errors::CRC32CheckFailed.new(context, msg)
          end
        end

        def crc32_is_valid?(response)
          if crc_checksum = response.headers['x-amz-crc32']
            crc_checksum.to_i == Zlib.crc32(response.body_contents)
          else
            true
          end
        end

      end
    end
  end
end

Version data entries

1,031 entries across 1,031 versions & 2 rubygems

Version Path
aws-sdk-core-2.11.632 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.631 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.630 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.629 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.628 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.627 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.626 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.625 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.624 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.623 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.622 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.621 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.620 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.619 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.618 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.617 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.616 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.615 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.614 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb
aws-sdk-core-2.11.613 lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb