lib/aws/s3/presigned_post.rb in aws-sdk-1.1.4 vs lib/aws/s3/presigned_post.rb in aws-sdk-1.2.0

- old
+ new

@@ -77,10 +77,11 @@ :content_type, :content_disposition, :content_encoding, :expires_header, :acl, + :server_side_encryption, :success_action_redirect, :success_action_status] # @private attr_reader :conditions @@ -151,10 +152,19 @@ # * +:public_read_write+ # * +:authenticated_read+ # * +:bucket_owner_read+ # * +:bucket_owner_full_control+ # + # @option options [Symbol] :server_side_encryption (nil) If this + # option is set, the object will be stored using server side + # encryption. The only valid value is +:aes256+, which + # specifies that the object should be stored using the AES + # encryption algorithm with 256 bit keys. By default, this + # option uses the value of the +:s3_server_side_encryption+ + # option in the current configuration; for more information, + # see {AWS.config}. + # # @option opts [String] :success_action_redirect The URL to # which the client is redirected upon successful upload. # # @option opts [Integer] :success_action_status The status # code returned to the client upon successful upload if @@ -195,10 +205,16 @@ @conditions = opts[:conditions] || {} @ignored_fields = [opts[:ignore]].flatten.compact @expires = opts[:expires] super + + @fields[:server_side_encryption] = + config.s3_server_side_encryption unless + @fields.key?(:server_side_encryption) + @fields.delete(:server_side_encryption) if + @fields[:server_side_encryption].nil? end # @return [Boolean] True if {#url} generates an HTTPS url. def secure? @secure @@ -413,17 +429,14 @@ private def optional_fields fields = (SPECIAL_FIELDS & @fields.keys).inject({}) do |fields, option_name| fields[field_name(option_name)] = - @fields[option_name].to_s + field_value(option_name) fields end - fields["acl"] = fields["acl"].tr("_", "-") if - fields["acl"] - @metadata.each do |key, value| fields["x-amz-meta-#{key}"] = value.to_s end fields @@ -433,17 +446,37 @@ private def field_name(option_name) case option_name when :expires_header "Expires" + when :server_side_encryption + "x-amz-server-side-encryption" when :acl, :success_action_redirect, :success_action_status option_name.to_s else # e.g. Cache-Control from cache_control field_name = option_name.to_s.tr("_", "-"). gsub(/-(.)/) { |m| m.upcase } field_name[0,1] = field_name[0,1].upcase field_name + end + end + + # @private + private + def field_value(option_name) + case option_name + when :acl + @fields[:acl].to_s.tr("_", "-") + when :server_side_encryption + value = @fields[:server_side_encryption] + if value.kind_of?(Symbol) + value.to_s.upcase + else + value.to_s + end + else + @fields[option_name].to_s end end # @private private