Sha256: 0238598b23ccc7ff65f441f8c1363b0b5b5a2cd363ce0e4d04ca81780694a216

Contents?: true

Size: 1.61 KB

Versions: 1018

Compression:

Stored size: 1.61 KB

Contents

require 'base64'

module Aws
  module S3
    module Encryption
      # @api private
      class EncryptHandler < Seahorse::Client::Handler

        def call(context)
          envelope, cipher = context[:encryption][:cipher_provider].encryption_cipher
          apply_encryption_envelope(context, envelope, cipher)
          apply_encryption_cipher(context, cipher)
          @handler.call(context)
        end

        private

        def apply_encryption_envelope(context, envelope, cipher)
          context[:encryption][:cipher] = cipher
          if context[:encryption][:envelope_location] == :metadata
            context.params[:metadata] ||= {}
            context.params[:metadata].update(envelope)
          else # :instruction_file
            suffix = context[:encryption][:instruction_file_suffix]
            context.client.put_object(
              bucket: context.params[:bucket],
              key: context.params[:key] + suffix,
              body: Json.dump(envelope)
            )
          end
        end

        def apply_encryption_cipher(context, cipher)
          io = context.params[:body] || ''
          io = StringIO.new(io) if String === io
          context.params[:body] = IOEncrypter.new(cipher, io)
          context.params[:metadata] ||= {}
          context.params[:metadata]['x-amz-unencrypted-content-length'] = io.size
          if md5 = context.params.delete(:content_md5)
            context.params[:metadata]['x-amz-unencrypted-content-md5'] = md5
          end
          context.http_response.on_headers do
            context.params[:body].close
          end
        end

      end
    end
  end
end

Version data entries

1,018 entries across 1,018 versions & 3 rubygems

Version Path
aws-sdk-resources-2.11.561 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.560 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.559 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.558 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.557 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.556 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.555 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.554 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.553 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.552 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.551 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.550 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.549 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.548 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.547 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.546 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.545 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.544 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.543 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb
aws-sdk-resources-2.11.542 lib/aws-sdk-resources/services/s3/encryption/encrypt_handler.rb