class SinglePlatform::UrlSigning

Public Class Methods

make_signature(uri_path, params, client_id, secret) click to toggle source

from SinglePlatform sample ruby library

# File lib/single_platform/url_signing.rb, line 7
def self.make_signature(uri_path, params, client_id, secret)
  padding_factor = (4 - secret.length % 4) % 4
  secret += "=" * padding_factor
  secret = secret.gsub(/[-_]/, {"-" => "+", "_" => "/"})
  binary_key = Base64.decode64(secret)

  params.update({"client" => client_id})
  path = uri_path + "?" + params.collect{|k,v| "#{k}=#{v}"}.inject{|initial,cur| initial + "&" + cur}

  #digest = HMAC::SHA1.new(binary_key).update(path).digest
  digest = OpenSSL::HMAC.digest('sha1',binary_key, path)
  digest = Base64.encode64(digest).gsub(/[+\/]/, {"+" => "-", "/" => "_"}).delete("=")
  #return "#{path}&sig=#{digest}"
  digest.delete("\n")
end