Sha256: 8231a79a85da8f91961fec632eded6743ef271c7147b1abf5b86bea6ea278c01

Contents?: true

Size: 1.25 KB

Versions: 13

Compression:

Stored size: 1.25 KB

Contents

module Tessa
  class RackUploadProxy

    def call(env)
      request = Rack::Request.new(env)
      ::ActiveStorage::Current.host ||= request.base_url

      # Call in to ActiveStorage to create a DirectUpload blob
      params = env['rack.request.form_hash']

      blob = ::ActiveStorage::Blob.create_before_direct_upload!({
        filename: params["name"],
        byte_size: params["size"],
        content_type: params["mime_type"],
        checksum: params["checksum"]
      })

      env['rack.session'][:tessa_upload_asset_ids] ||= []
      env['rack.session'][:tessa_upload_asset_ids] << blob.signed_id

      response = {
        asset_id: blob.signed_id,
        upload_url: blob.service_url_for_direct_upload,
        upload_method: 'PUT', # ActiveStorage is always PUT
        upload_headers: blob.service_headers_for_direct_upload
      }

      [200, {"Content-Type" => "application/json"}, [response.to_json]]
    rescue Tessa::RequestFailed
      [500, {"Content-Type" => "application/json"}, [{ "error" => "Failed to retreive upload URL" }.to_json]]
    rescue ActiveRecord::NotNullViolation => e
      [400, {"Content-Type" => "application/json"}, [{ "error" => e.message }.to_json]]
    end

    def self.call(*args)
      new.call(*args)
    end

  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
tessa-1.2.3 lib/tessa/rack_upload_proxy.rb
tessa-1.2.2 lib/tessa/rack_upload_proxy.rb
tessa-2.0 lib/tessa/rack_upload_proxy.rb
tessa-1.2.1 lib/tessa/rack_upload_proxy.rb
tessa-1.2.0 lib/tessa/rack_upload_proxy.rb
tessa-1.1.1 lib/tessa/rack_upload_proxy.rb
tessa-1.1.0 lib/tessa/rack_upload_proxy.rb
tessa-1.0.2 lib/tessa/rack_upload_proxy.rb
tessa-1.0.1 lib/tessa/rack_upload_proxy.rb
tessa-1.0.0 lib/tessa/rack_upload_proxy.rb
tessa-1.0.0.pre.rc3 lib/tessa/rack_upload_proxy.rb
tessa-1.0.0.pre.rc2 lib/tessa/rack_upload_proxy.rb
tessa-1.0.0.pre.rc1 lib/tessa/rack_upload_proxy.rb