class ImageFlux::Origin

Attributes

domain[R]
scheme[R]
signing_secret[R]
signing_version[R]

Public Class Methods

new(domain:, scheme: 'https', signing_version: '1', signing_secret: nil, **_options) click to toggle source
# File lib/image_flux/origin.rb, line 11
def initialize(domain:, scheme: 'https', signing_version: '1', signing_secret: nil, **_options)
  @domain = domain.to_s
  @scheme = scheme.to_s
  @signing_version = signing_version
  @signing_secret = signing_secret
end

Public Instance Methods

base_url() click to toggle source
# File lib/image_flux/origin.rb, line 18
def base_url
  @base_url ||= URI("#{@scheme}://#{@domain}/")
end
image_url(path, options = {}) click to toggle source
# File lib/image_flux/origin.rb, line 22
def image_url(path, options = {})
  path = "/#{path}" unless path.start_with?('/')

  opt = options.is_a?(ImageFlux::Option) ? options : ImageFlux::Option.new(options)

  path = "#{opt.prefix_path}#{path}" if opt.prefix_path
  query = opt.to_query

  url = base_url.dup
  url.path = query.length.zero? ? path : "/c/#{opt.to_query}#{path}"

  if @signing_secret
    signed_opt = ImageFlux::Option.new(options.merge(sig: sign(url.path)))
    url.path = "/c/#{signed_opt.to_query}#{path}"
  end

  url
end
sign(path) click to toggle source
# File lib/image_flux/origin.rb, line 41
def sign(path)
  digest = OpenSSL::HMAC.digest('sha256', @signing_secret, path)

  "#{@signing_version}.#{Base64.urlsafe_encode64(digest)}"
end