class S3Relay::UploadPresigner
Attributes
expires[R]
uuid[R]
Public Class Methods
new(options={})
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 6 def initialize(options={}) @expires = (options[:expires] || 1.minute.from_now).utc.xmlschema @uuid = SecureRandom.uuid end
Public Instance Methods
form_data()
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 11 def form_data fields.keys.inject({}) { |h,k| h[k.downcase.underscore] = fields[k]; h } .merge( "endpoint" => endpoint, "policy" => encoded_policy, "signature" => signature, "uuid" => uuid ) end
Private Instance Methods
encoded_policy()
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 52 def encoded_policy Base64.strict_encode64(policy_document.to_json) end
fields()
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 23 def fields { "AWSAccessKeyID" => access_key_id, "x-amz-server-side-encryption" => "AES256", "key" => "#{uuid}/${filename}", "success_action_status" => "201", "acl" => acl } end
hmac()
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 33 def hmac lambda { |data| OpenSSL::HMAC.digest(digest, secret_access_key, data) } end
policy_document()
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 37 def policy_document { "expiration" => expires, "conditions" => [ { "bucket" => bucket }, { "acl" => acl }, { "x-amz-server-side-encryption" => "AES256" }, { "success_action_status" => "201" }, ["starts-with", "$content-type", ""], ["starts-with", "$content-disposition", ""], ["starts-with", "$key", "#{uuid}/"] ] } end
signature()
click to toggle source
# File lib/s3_relay/upload_presigner.rb, line 56 def signature Base64.strict_encode64(hmac[encoded_policy]) end