Sha256: 5baa8eee375751eacafb6fc2ebedac7f8111b9ae8b57e6c0c431420221c79a9c

Contents?: true

Size: 1.65 KB

Versions: 84

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

module Aws
  module DynamoDB
    module Plugins
      class CRC32Validation < Seahorse::Client::Plugin

        option(:compute_checksums,
          default: true,
          doc_type: 'Boolean',
          docstring: <<-DOCS)
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.
          DOCS

        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 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
end

Version data entries

84 entries across 84 versions & 1 rubygems

Version Path
aws-sdk-dynamodb-1.135.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.134.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.133.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.132.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.131.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.130.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.129.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.128.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.127.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.126.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.125.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.124.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.123.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.122.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.121.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.120.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.119.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.118.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.117.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb
aws-sdk-dynamodb-1.116.0 lib/aws-sdk-dynamodb/plugins/crc32_validation.rb