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