From 9e5ae7600c4dc536af1ef1332b2a2148dd4ea8ad Mon Sep 17 00:00:00 2001 From: Majid Achhoud Date: Tue, 15 Oct 2024 12:23:40 +0200 Subject: [PATCH] Refine error handling for Box, GoogleDrive, and revert log in Dropbox provider --- Sources/CryptomatorCloudAccess/Box/BoxCloudProvider.swift | 2 +- .../CryptomatorCloudAccess/Dropbox/DropboxCloudProvider.swift | 2 +- .../GoogleDrive/GoogleDriveCloudProvider.swift | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/CryptomatorCloudAccess/Box/BoxCloudProvider.swift b/Sources/CryptomatorCloudAccess/Box/BoxCloudProvider.swift index 9fb97a2..afc5398 100644 --- a/Sources/CryptomatorCloudAccess/Box/BoxCloudProvider.swift +++ b/Sources/CryptomatorCloudAccess/Box/BoxCloudProvider.swift @@ -579,7 +579,7 @@ public class BoxCloudProvider: CloudProvider { private func convertStandardError(_ error: Error) -> Error { switch error { - case let error as BoxAPIError where error.responseInfo.statusCode == 401 || error.description.contains("Invalid refresh token"): + case let error as BoxAPIError where (error.responseInfo.statusCode == 400 && error.responseInfo.rawBody?.contains("invalid_grant") == true) || error.responseInfo.statusCode == 401: return CloudProviderError.unauthorized case let error as BoxAPIError where error.responseInfo.statusCode == 404: return CloudProviderError.itemNotFound diff --git a/Sources/CryptomatorCloudAccess/Dropbox/DropboxCloudProvider.swift b/Sources/CryptomatorCloudAccess/Dropbox/DropboxCloudProvider.swift index a393004..11434cd 100644 --- a/Sources/CryptomatorCloudAccess/Dropbox/DropboxCloudProvider.swift +++ b/Sources/CryptomatorCloudAccess/Dropbox/DropboxCloudProvider.swift @@ -191,7 +191,7 @@ public class DropboxCloudProvider: CloudProvider { return } if let networkError = networkError { - CloudAccessDDLogDebug("DropboxCloudProvider: fetchItemMetadata failed with networkError: \(networkError)") + CloudAccessDDLogDebug("DropboxCloudProvider: fetchItemMetadata(at: \(cloudPath.path)) failed with networkError: \(networkError)") reject(self.convertRequestError(networkError)) return } diff --git a/Sources/CryptomatorCloudAccess/GoogleDrive/GoogleDriveCloudProvider.swift b/Sources/CryptomatorCloudAccess/GoogleDrive/GoogleDriveCloudProvider.swift index f4eb629..b5836e6 100644 --- a/Sources/CryptomatorCloudAccess/GoogleDrive/GoogleDriveCloudProvider.swift +++ b/Sources/CryptomatorCloudAccess/GoogleDrive/GoogleDriveCloudProvider.swift @@ -533,7 +533,7 @@ public class GoogleDriveCloudProvider: CloudProvider { CloudAccessDDLogDebug("GoogleDriveCloudProvider: executeQuery(\(query.requestID)) failed with error: \(error)") if error.domain == NSURLErrorDomain, error.code == NSURLErrorNotConnectedToInternet || error.code == NSURLErrorCannotConnectToHost || error.code == NSURLErrorNetworkConnectionLost || error.code == NSURLErrorDNSLookupFailed || error.code == NSURLErrorResourceUnavailable || error.code == NSURLErrorInternationalRoamingOff { reject(CloudProviderError.noInternetConnection) - } else if ((error.domain == kGTLRErrorObjectDomain && (error.code == 401 || error.code == 403)) || (error.domain == OIDOAuthTokenErrorDomain && error.code == -10)) { + } else if ((error.domain == kGTLRErrorObjectDomain && (error.code == 401 || error.code == 403)) || (error.domain == OIDOAuthTokenErrorDomain && error.code == OIDErrorCodeOAuth.invalidGrant.rawValue)) { reject(CloudProviderError.unauthorized) } else if error.domain == kGTLRErrorObjectDomain, error.code == 404 { reject(CloudProviderError.itemNotFound)