36 lines
936 B
Ruby
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
|