Skip to content

Commit

Permalink
refactor(SyncedAuthenticator): Extract refresh failure
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilippeWeidmann committed Jul 26, 2023
1 parent c051485 commit 5e1a3fd
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 deletions MailCore/API/MailApiFetcher.swift
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,22 @@ public class MailApiFetcher: ApiFetcher {
}

class SyncedAuthenticator: OAuthAuthenticator {
func handleFailedRefreshingToken(oldToken: ApiToken, error: Error?) -> Result<OAuthAuthenticator.Credential, Error> {
guard let error = error as NSError?,
error.domain == "invalid_grant" else {
// Couldn't refresh the token, keep the old token and fetch it later. Maybe because of bad network ?
SentrySDK
.addBreadcrumb(oldToken.generateBreadcrumb(level: .error,
message: "Refreshing token failed - Other \(error.debugDescription)"))
return .success(oldToken)
}

// Couldn't refresh the token, API says it's invalid
SentrySDK.addBreadcrumb(oldToken.generateBreadcrumb(level: .error, message: "Refreshing token failed - Invalid grant"))
refreshTokenDelegate?.didFailRefreshToken(oldToken)
return .failure(error)
}

override func refresh(
_ credential: OAuthAuthenticator.Credential,
for session: Session,
Expand All @@ -397,9 +413,7 @@ class SyncedAuthenticator: OAuthAuthenticator {
// Maybe someone else refreshed our token
if let token = tokenStore.tokenFor(userId: credential.userId, fetchLocation: .keychain),
token.expirationDate > credential.expirationDate {
SentrySDK
.addBreadcrumb(token.generateBreadcrumb(level: .info, message: "Refreshing token - Success with local"))

SentrySDK.addBreadcrumb(token.generateBreadcrumb(level: .info, message: "Refreshing token - Success with local"))
completion(.success(token))
return
}
Expand All @@ -415,21 +429,7 @@ class SyncedAuthenticator: OAuthAuthenticator {
self.refreshTokenDelegate?.didUpdateToken(newToken: token, oldToken: credential)
completion(.success(token))
} else {
// Couldn't refresh the token, API says it's invalid
if let error = error as NSError?, error.domain == "invalid_grant" {
SentrySDK
.addBreadcrumb((credential as ApiToken)
.generateBreadcrumb(level: .error, message: "Refreshing token failed - Invalid grant"))
self.refreshTokenDelegate?.didFailRefreshToken(credential)
completion(.failure(error))
} else {
// Couldn't refresh the token, keep the old token and fetch it later. Maybe because of bad network ?
SentrySDK
.addBreadcrumb((credential as ApiToken)
.generateBreadcrumb(level: .error,
message: "Refreshing token failed - Other \(error.debugDescription)"))
completion(.success(credential))
}
completion(self.handleFailedRefreshingToken(oldToken: credential, error: error))
}
endBackgroundTask()
}
Expand Down

0 comments on commit 5e1a3fd

Please sign in to comment.