mobile-ios/CovidSafe/API/CovidRequestRetrier.swift
2020-05-08 17:49:14 +10:00

30 lines
1.1 KiB
Swift

//
// CovidRequestInterceptor.swift
// CovidSafe
//
// Copyright © 2020 Australian Government. All rights reserved.
//
import Foundation
import Alamofire
final class CovidRequestRetrier: Alamofire.RequestInterceptor {
private let numRetries: Int
private var retriesExecuted: Int = 0
init(retries: Int) {
self.numRetries = retries
}
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
guard let response = request.task?.response as? HTTPURLResponse, response.statusCode == 403 else {
/// The request did not fail due to a 403 Forbidden response.
let isServerTrustEvaluationError = error.asAFError?.isServerTrustEvaluationError ?? false
if ( retriesExecuted >= numRetries || isServerTrustEvaluationError) {
return completion(.doNotRetryWithError(error))
}
retriesExecuted += 1
return completion(.retryWithDelay(1.0))
}
return completion(.doNotRetryWithError(error))
}
}