class Quovo::Token

Constants

SPLITTER
STORAGE_KEY

Attributes

password[R]
prefix[R]
storage[R]
ttl[R]
username[R]

Public Class Methods

new(storage: Quovo.config.token_storage, ttl: Quovo.config.token_ttl, prefix: Quovo.config.token_prefix, username: Quovo.config.username, password: Quovo.config.password) click to toggle source
# File lib/quovo/token.rb, line 6
def initialize(storage: Quovo.config.token_storage, ttl: Quovo.config.token_ttl, prefix: Quovo.config.token_prefix, username: Quovo.config.username, password: Quovo.config.password)
  @storage  = storage
  @ttl      = ttl
  @prefix   = prefix
  @username = username
  @password = password
  @token    = nil
  @expires  = nil
end

Public Instance Methods

generate() click to toggle source
# File lib/quovo/token.rb, line 25
def generate
  params = {
    name: [prefix, expires_from_now, salt].join('---'),
    expires: expires_from_now
  }
  payload = request(:post, '/tokens', params, :json) do |req|
    req.basic_auth(username, password)
  end.fetch('access_token')
  [payload.fetch('token'), payload.fetch('expires').to_time.utc]
end
get() click to toggle source
# File lib/quovo/token.rb, line 16
def get
  token, expires = read_cache
  if token.nil? || expires < now
    token, expires = generate
    write_cache(token, expires)
  end
  token
end

Private Instance Methods

expires_from_now() click to toggle source
# File lib/quovo/token.rb, line 51
def expires_from_now
  (now + ttl).iso8601
end
now() click to toggle source
# File lib/quovo/token.rb, line 47
def now
  Time.now.utc
end
read_cache() click to toggle source
# File lib/quovo/token.rb, line 55
def read_cache
  return @token, @expires if @token && @expires
  token, expires = (storage.read(STORAGE_KEY) || '').split(SPLITTER)
  return nil unless expires
  @token = token
  @expires = expires.to_time.utc
  [@token, @expires]
end
salt() click to toggle source
# File lib/quovo/token.rb, line 43
def salt
  ('a'..'z').to_a.sample(10).join
end
write_cache(token, expires) click to toggle source
# File lib/quovo/token.rb, line 64
def write_cache(token, expires)
  storage.write(STORAGE_KEY, [token, expires.utc.iso8601].join(SPLITTER))
  @token = token
  @expires = expires
end