Module: Youtu::Sign

Defined in:
lib/youtu/sign.rb,
lib/generators/youtu/templates/config/initializers/youtu_redis_store.rb

Class Method Summary collapse

Class Method Details

.random(length) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/youtu/sign.rb', line 32

def random(length)
  length ||= 9
  seed = "0123456789"
  length.times.inject(''){ |acc, t|
    acc + seed[Random.rand(seed.length)]
  }
end

.refresh_signObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/youtu/sign.rb', line 4

def refresh_sign
  _current_time = Time.now
  _app_id       =  Youtu.config.app_id
  _secret_id    =  Youtu.config.secret_id
  _secret_key   =  Youtu.config.secret_key
  _user_id      =  Youtu.config.user_id
  _time_stamp   =  _current_time.to_i
  _expired_at   =  (_current_time + Youtu.config.expired).to_i
  _r            =  random(Youtu.config.random_length)
  _original = "u=#{_user_id}&a=#{_app_id}&k=#{_secret_id}&e=#{_expired_at}&t=#{_time_stamp}&r=#{_r}&f="
  _hmac = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'),_secret_key,_original)
  _signature  = Base64.strict_encode64(_hmac+_original)
  sign_hash = {
    signature: _signature,
    expired_at: _expired_at,
    got_signature_at: _current_time
  }
  write_signature_to_store(sign_hash)
  read_signature_from_store
end

.signatureObject



25
26
27
28
29
30
# File 'lib/youtu/sign.rb', line 25

def signature
  sign_json = read_signature_from_store
  _expired_at = sign_json["expired_at"].to_i
  sign_json = refresh_sign if Time.now.to_i - _expired_at > 0
  sign_json["signature"]
end