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