cc-os/plugins/os-vault/eval/fixture/project/lib/reportgen/client.rb

36 lines
936 B
Ruby

# frozen_string_literal: true
module Reportgen
# Thin OAuth client for the Finch API. Caches the access token in memory
# and schedules its own refresh based on the token response.
class Client
FINCH_TOKEN_URL = "https://api.finch.example.com/oauth/token"
def initialize(client_id:)
@client_id = client_id
@token = nil
@refresh_at = nil
end
def access_token
refresh_token! if @token.nil? || Time.now >= @refresh_at
@token
end
private
# Schedules the next refresh from the token response's `expires_in`.
def refresh_token!
response = request_token
@token = response.fetch("access_token")
expires_in = response.fetch("expires_in")
@refresh_at = Time.now + expires_in
end
def request_token
# Placeholder for the real HTTP call.
{ "access_token" => "fake-token-for-#{@client_id}", "expires_in" => 3600 }
end
end
end