Class: S3FormPresenter::Form

Inherits:
Object
  • Object
show all
Defined in:
lib/s3_form_presenter.rb

Constant Summary collapse

HIDDEN_FIELD_NAMES =
:key, :access_key, :secret_key, :acl, :redirect_url, :policy, :signature
ACCESSOR_FIELDS =
HIDDEN_FIELD_NAMES - [:policy, :signature]
RENAMED_FIELDS =
{:redirect_url => "success_action_redirect", :access_key => "AWSAccessKeyId"}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, redirect_url, options = {}, &block) ⇒ Form

Returns a new instance of Form.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/s3_form_presenter.rb', line 12

def initialize(key, redirect_url, options={}, &block)
  @key = key
  @access_key = options[:access_key] || ENV["AWS_ACCESS_KEY_ID"]
  @secret_key = options[:secret_key] || ENV["AWS_SECRET_ACCESS_KEY"]
  @bucket = options[:bucket] || ENV["AWS_S3_BUCKET"]
  @acl = options[:acl] || :private
  @extra_form_attributes = options[:extra_form_attributes]
  @redirect_url = redirect_url
  if block_given?
    @inner_content = block.call
  else
    @inner_content = %Q(<input name="file" type="file"><input type="submit" value="Upload File" class="btn btn-primary">)
  end
  generate_hidden_field_accessors
end

Instance Attribute Details

#bucketObject

Returns the value of attribute bucket.



10
11
12
# File 'lib/s3_form_presenter.rb', line 10

def bucket
  @bucket
end

#extra_form_attributesObject

Returns the value of attribute extra_form_attributes.



10
11
12
# File 'lib/s3_form_presenter.rb', line 10

def extra_form_attributes
  @extra_form_attributes
end

#inner_contentObject

Returns the value of attribute inner_content.



10
11
12
# File 'lib/s3_form_presenter.rb', line 10

def inner_content
  @inner_content
end

Instance Method Details



32
33
34
# File 'lib/s3_form_presenter.rb', line 32

def footer
  %Q(</form>)
end

#headerObject



28
29
30
# File 'lib/s3_form_presenter.rb', line 28

def header
  %Q(<form action="http://#{bucket}.s3.amazonaws.com/" method="post" enctype="multipart/form-data"#{extra_form_attributes}>)
end

#hidden_field(name, value) ⇒ Object



42
43
44
# File 'lib/s3_form_presenter.rb', line 42

def hidden_field(name, value)
  %Q(<input type="hidden" name="#{name}" value="#{value}">)
end

#hidden_fieldsObject



36
37
38
39
40
# File 'lib/s3_form_presenter.rb', line 36

def hidden_fields
  HIDDEN_FIELD_NAMES.map do |field|
    hidden_field(field, send(field))
  end
end

#policyObject



54
55
56
# File 'lib/s3_form_presenter.rb', line 54

def policy
  Base64.encode64(policy_object.to_json).gsub(/\n|\r/, '')
end

#policy_objectObject



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/s3_form_presenter.rb', line 62

def policy_object
  {
    "expiration" => policy_expiration,
    "conditions" => [
                     {"bucket" => bucket},
                     ["starts-with", "$key", "#{key}"],
                     {"acl" => acl},
                     {"success_action_redirect" => redirect_url}
                    ]
  }
end

#signatureObject



58
59
60
# File 'lib/s3_form_presenter.rb', line 58

def signature
  Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), secret_key, policy)).gsub("\n","")
end

#to_htmlObject



46
47
48
49
50
51
52
# File 'lib/s3_form_presenter.rb', line 46

def to_html
  content = ""
  content += header
  content += hidden_fields.join
  content += inner_content
  content += footer
end