medmap-ios/medmap/Network/AuthorizationInterceptor.swift
2026-08-27 23:26:14 +01:00

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)
}
*/
}
}