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