From c94bd9231101dc41c691fdb738deb357cdf8f14f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 22 Mar 2024 13:49:51 +1100 Subject: [PATCH] Simplify DFC request retry logic Big thanks to David Cook for a much better pattern. --- .../dfc_provider/app/services/dfc_request.rb | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/engines/dfc_provider/app/services/dfc_request.rb b/engines/dfc_provider/app/services/dfc_request.rb index 8de0108d99..76ff6e2064 100644 --- a/engines/dfc_provider/app/services/dfc_request.rb +++ b/engines/dfc_provider/app/services/dfc_request.rb @@ -16,30 +16,34 @@ class DfcRequest def get(url) response = request(url) - return response.body if response.status == 200 + if response.status != 200 && token_stale? + refresh_access_token! + response = request(url) + end - return "" if @user.oidc_account.updated_at > 15.minutes.ago - - refresh_access_token! - - response = request(url) response.body end private def request(url) - connection = Faraday.new( + only_public_connections do + connection.get(url) + end + end + + def token_stale? + @user.oidc_account.updated_at < 15.minutes.ago + end + + def connection + Faraday.new( request: { timeout: 30 }, headers: { 'Content-Type' => 'application/json', 'Authorization' => "Bearer #{@user.oidc_account.token}", } ) - - only_public_connections do - connection.get(url) - end end def only_public_connections(&)