class Sigmund::Base

Public Class Methods

append_signature(uri, signature, param) click to toggle source
# File lib/sigmund/base.rb, line 49
def self.append_signature(uri, signature, param)
  u = uri.dup
  u.query ||= ''
  u.query += (u.query.size > 0 ? '&' : '')
  u.query += param + '=' + signature
  u
end
compute_signature(uri, proc) click to toggle source
# File lib/sigmund/base.rb, line 44
def self.compute_signature(uri, proc)
  data = proc.call(uri.to_s)
  encode_base64(data)
end
decode_base64(data) click to toggle source
# File lib/sigmund/base.rb, line 68
def self.decode_base64(data)
  padded = data + ('=' * (-data.size % 4))
  Base64.urlsafe_decode64(padded)
end
encode_base64(data) click to toggle source
# File lib/sigmund/base.rb, line 64
def self.encode_base64(data)
  Base64.urlsafe_encode64(data).gsub('=','')
end
extract_signature(uri, param) click to toggle source
# File lib/sigmund/base.rb, line 57
def self.extract_signature(uri, param)
  return unless uri.query
  components = uri.query.split('&').select{ |c| c.start_with?(param + '=') }
  return unless components.size == 1
  components.first[4..-1]
end
hmac_procedure(key, digester) click to toggle source
# File lib/sigmund/base.rb, line 8
def self.hmac_procedure(key, digester)
  Proc.new do |data|
    hmac = Digest::HMAC.new(key, digester)
    hmac.update(data)
    hmac.digest
  end
end
normalize_uri(uri, exclude, param) click to toggle source
# File lib/sigmund/base.rb, line 28
def self.normalize_uri(uri, exclude, param)
  u = uri.dup
  if u.query
    components = u.query.split('&')
    components.reject! { |c| c.start_with?(param + '=') }
    u.query = components.join('&')
  end
  u.scheme = nil if u.scheme == '' || exclude.include?(:scheme)
  u.host = nil if u.host == '' || exclude.include?(:host)
  u.path = '' if u.path == nil || exclude.include?(:path)
  u.query = nil if u.query == '' || exclude.include?(:query)
  u.fragment = nil if u.fragment == '' || exclude.include?(:fragment)
  u.normalize!
  u
end
sign_uri(uri, proc, exclude, param) click to toggle source
# File lib/sigmund/base.rb, line 16
def self.sign_uri(uri, proc, exclude, param)
  normalized = normalize_uri(uri, exclude, param)
  sig = compute_signature(normalized, proc)
  append_signature(uri, sig, param)
end
verify_uri(uri, proc, exclude, param) click to toggle source
# File lib/sigmund/base.rb, line 22
def self.verify_uri(uri, proc, exclude, param)
  normalized = normalize_uri(uri, exclude, param)
  sig = compute_signature(normalized, proc)
  (extract_signature(uri, param) == sig)
end