Sha256: 14dd6e1ed78511723c07afe1ff524bfcf5b22f7da3157bd8560b2533c26e493e

Contents?: true

Size: 1.91 KB

Versions: 100

Compression:

Stored size: 1.91 KB

Contents

require 'uri'
require 'openssl'

module Aws
  module S3
    module Plugins
      class SseCpk < Seahorse::Client::Plugin

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

        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
end

Version data entries

100 entries across 100 versions & 1 rubygems

Version Path
aws-sdk-s3-1.4.0 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.3.0 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.2.0 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.1.0 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc15 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc14 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc13 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc12 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc11 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc10 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc9 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc8 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc7 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc6 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc5 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc4 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc3 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc2 lib/aws-sdk-s3/plugins/sse_cpk.rb
aws-sdk-s3-1.0.0.rc1 lib/aws-sdk-s3/plugins/sse_cpk.rb