diff --git a/AppleLibs/Network/Requests/DataManager.swift b/AppleLibs/Network/Requests/DataManager.swift index 8608170cd0c06f1e137226d0114ccf6cf6cad53b..afaa9dc40f1bd1dac7e7a28e24ae3033c4c7e427 100644 --- a/AppleLibs/Network/Requests/DataManager.swift +++ b/AppleLibs/Network/Requests/DataManager.swift @@ -20,6 +20,11 @@ public protocol HttpSuccessFilter func handleResponse(data: Data?, response: HTTPURLResponse, responseHandler: ResponseHandler?, sender: Any?, promise: Promise<Data?, ResponseError>) } +public protocol DataManagerDelegate +{ + func manipulateRequest(request: Request) -> Request +} + public class DataManager: NSObject, URLSessionDelegate { public enum DataManagerError: Error @@ -52,6 +57,8 @@ public class DataManager: NSObject, URLSessionDelegate private var responseOkFilter: HttpSuccessFilter private var responseFilters: [Int: HttpResponseFilter] = [:] + public var delegate: DataManagerDelegate? + public init(host: Host, responseOkFilter: HttpSuccessFilter, responseFilters: [Int: HttpResponseFilter] = [:], timeout: TimeInterval = 10.0) { self.host = host self.responseOkFilter = responseOkFilter @@ -85,8 +92,10 @@ public class DataManager: NSObject, URLSessionDelegate print("Request: \(r)") } - if var req: URLRequest = createUrlRequest(request: r) { - if let authentication = r.authentication { + let request = delegate?.manipulateRequest(request: r) ?? r + + if var req: URLRequest = createUrlRequest(request: request) { + if let authentication = request.authentication { if let headerKey = authentication.headerKey, let headerValue = authentication.headerValue { req.setValue(headerValue, forHTTPHeaderField: headerKey) } @@ -106,7 +115,7 @@ public class DataManager: NSObject, URLSessionDelegate if response.is2xx { self.responseOkFilter.handleResponse(data: data, response: response, responseHandler: responseHandler, sender: sender, promise: promise) } else if let filter = self.responseFilters[response.statusCode] { - filter.handleResponse(request: r, data: data, responseHandler: responseHandler, sender: sender, promise: promise) + filter.handleResponse(request: request, data: data, responseHandler: responseHandler, sender: sender, promise: promise) } else { promise.fail(error: ResponseError.getErrorForStatusCode(code: response.statusCode)) }