Sha256: 854ae1f9b902b476e0276661faebfa91bd3da734980e01860bbf8e7de531ad37

Contents?: true

Size: 1.23 KB

Versions: 9

Compression:

Stored size: 1.23 KB

Contents

module AdminIt
  # Sign urls for s3
  class SignedUrlController < AdminIt.config.controller
    before_filter :authenticate_user!

    def index
      render json: {
        policy: s3_upload_policy_document,
        signature: s3_upload_signature,
        key: "uploads/#{SecureRandom.uuid}/#{params[:doc][:title]}",
        success_action_redirect: '/'
      }
    end

    private

    # generate the policy document that amazon is expecting.
    def s3_upload_policy_document
      Base64.encode64(
        {
          expiration: 12.hours.from_now.utc.strftime('%Y-%m-%dT%H:%M:%S.000Z'),
          conditions: [
            { bucket: AdminIt.config.s3[:bucket] },
            { acl: 'public-read' },
            ['starts-with', '$key', 'uploads/'],
            ['starts-with', '$Content-Type', ''],
            { success_action_status: '201' }
          ]
        }.to_json
      ).gsub(/\n|\r/, '')
    end

    # sign our request by Base64 encoding the policy document.
    def s3_upload_signature
      puts AdminIt.config.s3
      Base64.encode64(
        OpenSSL::HMAC.digest(
          OpenSSL::Digest.new('sha1'),
          AdminIt.config.s3[:secret_access_key],
          s3_upload_policy_document
        )
      ).gsub(/\n/, '')
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
admin_it-1.3.8 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.7 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.6 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.5 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.4 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.3 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.2 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.1 app/controllers/admin_it/signed_url_controller.rb
admin_it-1.3.0 app/controllers/admin_it/signed_url_controller.rb