class Cloudimage::Security

Attributes

config[R]
uri[R]

Public Class Methods

new(uri, **config) click to toggle source
# File lib/cloudimage/security.rb, line 14
def initialize(uri, **config)
  @uri = uri
  @config = config
end

Public Instance Methods

seal_url(path, sealed_params) click to toggle source
# File lib/cloudimage/security.rb, line 24
def seal_url(path, sealed_params)
  query = uri.query_values || {}
  sealed_query = query.slice(*sealed_params)
  query.keep_if { |k, _| !sealed_query.key?(k) }
  eqs = eqs(sealed_query)
  query[:ci_eqs] = eqs unless eqs.empty?
  query[:ci_seal] = seal(path, eqs)
  uri.query_values = query
end
sign_url(request_uri) click to toggle source
# File lib/cloudimage/security.rb, line 19
def sign_url(request_uri)
  query = uri.query_values || {}
  uri.query_values = query.merge(ci_sign: signature(request_uri))
end

Private Instance Methods

eqs(query_params) click to toggle source
# File lib/cloudimage/security.rb, line 41
def eqs(query_params)
  uri = Addressable::URI.new
  uri.query_values = query_params
  Base64.urlsafe_encode64(uri.query, padding: false)
end
seal(path, eqs) click to toggle source
# File lib/cloudimage/security.rb, line 47
def seal(path, eqs)
  digest = Digest::SHA1.hexdigest(path + eqs + config[:salt])
  trim(digest, config[:signature_length])
end
signature(request_uri) click to toggle source
# File lib/cloudimage/security.rb, line 36
def signature(request_uri)
  digest = Digest::SHA1.hexdigest(config[:salt] + request_uri)
  trim(digest, config[:signature_length])
end
trim(signature, length) click to toggle source
# File lib/cloudimage/security.rb, line 52
def trim(signature, length)
  signature[0, length]
end