otwarchive-symphonyarchive/lib/zoho_auth_client.rb
2026-03-11 22:22:11 +00:00

50 lines
1.5 KiB
Ruby

# frozen_string_literal: true
class ZohoAuthClient
ACCESS_TOKEN_REQUEST_ENDPOINT = "https://accounts.zoho.com/oauth/v2/token"
ACCESS_TOKEN_CACHE_KEY = "/v3/zoho_access_token"
SCOPE = [
# - Find and create contacts before submitting tickets
# - Create tickets
# - Find tickets to justify admin actions
"Desk.contacts.CREATE",
"Desk.contacts.READ",
"Desk.search.READ",
"Desk.tickets.CREATE",
"Desk.tickets.READ",
"Desk.tickets.UPDATE"
].join(",").freeze
def access_token
if (cached_token = Rails.cache.read(ACCESS_TOKEN_CACHE_KEY)).present?
return cached_token
end
response = HTTParty.post(ACCESS_TOKEN_REQUEST_ENDPOINT, query: access_token_params).parsed_response
access_token = response["access_token"]
if (expires_in = response["expires_in_sec"]).present?
# We don't want the token to expire while we're in the middle of a sequence
# of requests, so we take the stated expiration time and subtract a little.
Rails.cache.write(ACCESS_TOKEN_CACHE_KEY, access_token,
expires_in: expires_in - 1.minute)
end
# Return the access token:
access_token
end
private
def access_token_params
{
client_id: ArchiveConfig.ZOHO_CLIENT_ID,
client_secret: ArchiveConfig.ZOHO_CLIENT_SECRET,
redirect_uri: ArchiveConfig.ZOHO_REDIRECT_URI,
scope: SCOPE,
grant_type: "refresh_token",
refresh_token: ArchiveConfig.ZOHO_REFRESH_TOKEN
}
end
end