Sha256: 84475c0b91fd5041af57558d22823f2001a827a50369ea69f1cfb9ee8e129c6c

Contents?: true

Size: 1.8 KB

Versions: 140

Compression:

Stored size: 1.8 KB

Contents

require 'uri'

module Aws
  module Plugins

    # @seahorse.client.option [Boolean] :require_https_for_sse_cpk (true)
    #   When `true`, the endpoint **must** be HTTPS for all operations
    #   where server-side-encryption is used with customer-provided keys.
    #   This should only be disabled for local testing.
    class S3SseCpk < Seahorse::Client::Plugin

      option(:require_https_for_sse_cpk, true)

      class Handler < Seahorse::Client::Handler

        def call(context)
          compute_key_md5(context)
          @handler.call(context)
        end

        private

        def compute_key_md5(context)
          params = context.params
          if key = params[:sse_customer_key]
            require_https(context)
            params[:sse_customer_key] = base64(key)
            params[:sse_customer_key_md5] = base64(md5(key))
          end
          if key = params[:copy_source_sse_customer_key]
            require_https(context)
            params[:copy_source_sse_customer_key] = base64(key)
            params[:copy_source_sse_customer_key_md5] = base64(md5(key))
          end
        end

        def require_https(context)
          unless URI::HTTPS === context.config.endpoint
            msg = <<-MSG.strip.gsub("\n", ' ')
              Attempting to send customer-provided-keys for S3
              server-side-encryption over HTTP; Please configure a HTTPS
              endpoint. If you are attempting to use a test endpoint,
              you can disable this check via `:require_https_for_sse_cpk`
            MSG
            raise ArgumentError, msg
          end
        end

        def md5(str)
          OpenSSL::Digest::MD5.digest(str)
        end

        def base64(str)
          Base64.encode64(str).strip
        end

      end

      handler(Handler, step: :initialize)

    end
  end
end

Version data entries

140 entries across 140 versions & 1 rubygems

Version Path
aws-sdk-core-2.3.14 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.13 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.12 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.11 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.10 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.9 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.8 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.7 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.6 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.5 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.4 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.3 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.2 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.1 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.3.0 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.2.37 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.2.36 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.2.35 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.2.34 lib/aws-sdk-core/plugins/s3_sse_cpk.rb
aws-sdk-core-2.2.33 lib/aws-sdk-core/plugins/s3_sse_cpk.rb