class TimSdk::Sign
Public Class Methods
signature(identifier, expire = 24 * 60 * 60)
click to toggle source
# File lib/tim_sdk/sign.rb, line 11 def signature(identifier, expire = 24 * 60 * 60) do_signature(identifier, expire, nil) end
signature_with_user_buf(identifier, expire, user_buf)
click to toggle source
# File lib/tim_sdk/sign.rb, line 15 def signature_with_user_buf(identifier, expire, user_buf) do_signature(identifier, expire, user_buf) end
Private Class Methods
base64_encode(data)
click to toggle source
# File lib/tim_sdk/sign.rb, line 49 def base64_encode(data) Base64.strict_encode64(data).gsub('+', '*').gsub('/', '-').gsub('=', '_') end
do_signature(identifier, expire = 180 * 86400, user_buf = nil)
click to toggle source
# File lib/tim_sdk/sign.rb, line 21 def do_signature(identifier, expire = 180 * 86400, user_buf = nil) timestamp = Time.now.to_i raw_data = {} base64_user_buf = nil unless user_buf.nil? base64_user_buf = Base64.encode64(user_buf) raw_data.merge!('TLS.userbuf' => base64_user_buf) end raw_data.merge!('TLS.sig' => hmac_sha256(identifier, timestamp, expire, base64_user_buf), 'TLS.expire' => expire.to_i, 'TLS.sdkappid' => TimSdk.configuration.app_id, 'TLS.ver' => '2.0', 'TLS.time' => timestamp, 'TLS.identifier' => identifier.to_s) raw_sig = raw_data.to_json.gsub(/,/, ', ').gsub(/:/, ': ') sig_zlib = Zlib::Deflate.deflate(raw_sig) base64_encode(sig_zlib) end
hmac_sha256(identifier, curr_time, expire, base64_user_buf = nil)
click to toggle source
# File lib/tim_sdk/sign.rb, line 40 def hmac_sha256(identifier, curr_time, expire, base64_user_buf = nil) data = ["TLS.identifier:#{identifier}", "TLS.sdkappid:#{TimSdk.configuration.app_id}", "TLS.time:#{curr_time}", "TLS.expire:#{expire}"] data << "TLS.userbuf:#{base64_user_buf}" if base64_user_buf data_string = "#{data.join("\n")}\n" Base64.strict_encode64( OpenSSL::HMAC.digest('sha256', TimSdk.configuration.app_key, data_string) ) end