class S3BrowserUploads::FormDefinition

Attributes

aws_secret_access_key[RW]
conditions[RW]
expires[RW]
fields[RW]
region[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 57
def initialize(options={})
  @fields = {}
  @conditions = {}
  options.each {|key, value| public_send("#{key}=", value)}
  @digest = OpenSSL::Digest.new('sha1')
  @hmac = lambda {|data| OpenSSL::HMAC.digest(@digest, @aws_secret_access_key, data)}
end

Public Instance Methods

add_condition(key, condition) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 41
def add_condition key, condition
  @conditions[key] = case condition
  when String then {key => condition} 
  when Hash then 
    [condition.keys.first, "$#{key}", condition.values.first]
  when Range then
    [key, condition.begin, condition.end]
  else
    raise ArgumentError, "unknown condition type #{condition}"
  end
end
add_field(key, value) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 35
def add_field key, value
  fields[key] = value
  add_condition key, value
  value
end
aws_access_key_id() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 13
def aws_access_key_id
  fields['AWSAccessKeyID'] #access key id is not included in the policy
end
aws_access_key_id=(value) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 9
def aws_access_key_id= value
  fields['AWSAccessKeyID'] = value #access key id is not included in the policy
end
aws_session_token() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 18
def aws_session_token
  fields['x-amz-security-token']
end
aws_session_token=(value) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 22
def aws_session_token= value
  add_field 'x-amz-security-token', value
end
bucket() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 27
def bucket
  fields['bucket']
end
bucket=(value) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 31
def bucket= value
  add_field 'bucket', value
end
encoded_policy() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 73
def encoded_policy
  Base64.strict_encode64(policy_document.to_json)
end
endpoint() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 69
def endpoint
  "https://#{bucket}.s3-#{region}.amazonaws.com"
end
policy_document() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 77
def policy_document
  {
    'expiration' => expires.utc.xmlschema,
    'conditions' => @conditions.values
  }
end
restrict_content_length(range) click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 53
def restrict_content_length range
  add_condition 'content-length-range', range
end
signature() click to toggle source
# File lib/s3_browser_uploads/form_definition.rb, line 65
def signature
  Base64.strict_encode64(@hmac[encoded_policy])
end