class ZuoraConnect::AppInstanceBase
def refresh_oauth
def refresh_oauth refresh_oauth_count ||= 0 response = HTTParty.post("#{ZuoraConnect.configuration.url}/oauth/token", body: { :grant_type => "refresh_token", :redirect_uri => ZuoraConnect.configuration.oauth_client_redirect_uri, :refresh_token => self.refresh_token }) if response.code == 200 response_body = JSON.parse(response.body) self.refresh_token = response_body["refresh_token"] self.access_token = response_body["access_token"] self.oauth_expires_at = Time.at(response_body["created_at"].to_i) + response_body["expires_in"].seconds self.save(:validate => false) else raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Refreshing Access Token", response.body, response.code) end rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS + ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex if (refresh_oauth_count += 1) < 3 sleep(CONNECT_COMMUNICATION_SLEEP) ZuoraConnect.logger.debug("REFRESH OAUTH - Connection Failure Retrying(#{refresh_oauth_count})", ex, self.default_ougai_items) retry else Rails.logger.fatal("REFRESH OAUTH - Connection Failed", ex, self.default_ougai_items) raise end rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex sleep(CONNECT_COMMUNICATION_SLEEP) self.reload_attributes([:refresh_token, :oauth_expires_at, :access_token]) #Reload only the refresh token for retry #After reload, if nolonger expired return return if !self.oauth_expired? if (refresh_oauth_count += 1) < 3 ZuoraConnect.logger.debug("REFRESH OAUTH - Communication Failure Retrying(#{refresh_oauth_count})", ex, self.default_ougai_items) retry else ZuoraConnect.logger.fatal("REFRESH OAUTH - Communication Failed #{ex.code}", ex, self.default_ougai_items) raise end end