Module: OpenQq::Signature
- Included in:
- Gateway
- Defined in:
- lib/open_qq/signature.rb
Instance Method Summary collapse
- #each_pair_escape(options) ⇒ Object
- #make_callback_source(http_method, url, options) ⇒ Object
- #make_source(http_method, url, options) ⇒ Object
- #parsed_params(params) ⇒ Object
- #signature(key, source) ⇒ Object
- #url_escape(url) ⇒ Object
- #verify_sig(sig, key, http_method, url, options) ⇒ Object
Instance Method Details
#each_pair_escape(options) ⇒ Object
22 23 24 |
# File 'lib/open_qq/signature.rb', line 22 def each_pair_escape() .inject({}){|h,(k,v)| h[url_escape(k.to_s)] = url_escape(v.to_s);h} end |
#make_callback_source(http_method, url, options) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/open_qq/signature.rb', line 35 def make_callback_source(http_method, url, ) escape_opt = .sort_by{|k,v| k.to_s}.map do |kv| value = URI.escape(kv.last, /[^0-9a-zA-Z!*()]/) "#{kv.first}=#{value}" end.join('&') "#{http_method}&#{url_escape(url)}&#{url_escape(escape_opt)}" end |
#make_source(http_method, url, options) ⇒ Object
30 31 32 33 |
# File 'lib/open_qq/signature.rb', line 30 def make_source(http_method, url, ) escape_opt = url_escape( .sort_by{|k,v| k.to_s}.map{|kv| "#{kv.first}=#{kv.last}" }.join('&') ) "#{http_method}&#{url_escape(url)}&#{escape_opt}" end |
#parsed_params(params) ⇒ Object
26 27 28 |
# File 'lib/open_qq/signature.rb', line 26 def parsed_params(params) each_pair_escape(params).map{|k,v| "#{k}=#{v}"}.join('&') end |
#signature(key, source) ⇒ Object
14 15 16 |
# File 'lib/open_qq/signature.rb', line 14 def signature(key, source) Base64.encode64( OpenSSL::HMAC.digest('sha1', key, source) ).rstrip end |
#url_escape(url) ⇒ Object
18 19 20 |
# File 'lib/open_qq/signature.rb', line 18 def url_escape(url) URI.escape(url, /[^\.\-_\da-zA-Z]/) end |
#verify_sig(sig, key, http_method, url, options) ⇒ Object
43 44 45 |
# File 'lib/open_qq/signature.rb', line 43 def verify_sig(sig, key, http_method, url, ) sig == url_escape( signature(key, make_callback_source(http_method, url, )) ) end |