65 lines
1.9 KiB
Swift
65 lines
1.9 KiB
Swift
// Copyright © 2025 VOID Software SA. All rights reserved.
|
|
|
|
import Foundation
|
|
import Alamofire
|
|
|
|
/// Request interceptor for handling authentication and token refresh
|
|
class AuthorizationInterceptor: RequestInterceptor {
|
|
|
|
private var accessToken: String?
|
|
private let lock = NSLock()
|
|
|
|
func setAccessToken(_ token: String?) {
|
|
lock.lock()
|
|
defer { lock.unlock() }
|
|
accessToken = token
|
|
}
|
|
|
|
func getAccessToken() -> String? {
|
|
lock.lock()
|
|
defer { lock.unlock() }
|
|
return accessToken
|
|
}
|
|
|
|
// MARK: - RequestAdapter
|
|
|
|
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
|
|
var urlRequest = urlRequest
|
|
/*
|
|
if let token = KeychainManager.shared.getDeviceToken() {
|
|
urlRequest.setValue(token, forHTTPHeaderField: "Authorization")
|
|
}
|
|
*/
|
|
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
|
urlRequest.setValue("application/json", forHTTPHeaderField: "Accept")
|
|
|
|
completion(.success(urlRequest))
|
|
}
|
|
|
|
// MARK: - RequestRetrier
|
|
|
|
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
|
|
|
|
completion(.doNotRetry)
|
|
/*
|
|
|
|
guard let response = request.task?.response as? HTTPURLResponse else {
|
|
completion(.doNotRetry)
|
|
return
|
|
}
|
|
|
|
// Retry on 401 (implement token refresh logic here)
|
|
if response.statusCode == 401 {
|
|
// TODO: Implement token refresh logic
|
|
// For now, just don't retry
|
|
completion(.doNotRetry)
|
|
} else if response.statusCode >= 500 {
|
|
// Retry server errors with delay
|
|
completion(.retryWithDelay(2.0))
|
|
} else {
|
|
completion(.doNotRetry)
|
|
}
|
|
*/
|
|
}
|
|
}
|