Sha256: 47f19e9386084a070dd131a267b2ebf1abe720945ad472ebe4ad869fdadb0dfd

Contents?: true

Size: 753 Bytes

Versions: 4

Compression:

Stored size: 753 Bytes

Contents

module S3Relay
  class PrivateUrl < S3Relay::Base

    attr_reader :expires, :path

    def initialize(uuid, file, options={})
      filename = Addressable::URI.escape(file).gsub("+", "%2B")
      @path    = [uuid, filename].join("/")
      @expires = (options[:expires] || 10.minutes.from_now).to_i
    end

    def generate
      "#{endpoint}/#{path}?#{params}"
    end

    private

    def params
      [
        "AWSAccessKeyId=#{access_key_id}",
        "Expires=#{expires}",
        "Signature=#{signature}"
      ].join("&")
    end

    def signature
      string = "GET\n\n\n#{expires}\n/#{bucket}/#{path}"
      hmac   = OpenSSL::HMAC.digest(digest, secret_access_key, string)
      CGI.escape(Base64.encode64(hmac).strip)
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
s3_relay-0.7.0 lib/s3_relay/private_url.rb
s3_relay-0.6.2 lib/s3_relay/private_url.rb
s3_relay-0.6.1 lib/s3_relay/private_url.rb
s3_relay-0.6.0 lib/s3_relay/private_url.rb