From 4b8750c8fdc2a14041f2222d26819ae8229a9b7e Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sun, 25 Apr 2021 21:17:00 +0200
Subject: [PATCH] Add DataManagerDelegate

---
 AppleLibs/Network/Requests/DataManager.swift | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/AppleLibs/Network/Requests/DataManager.swift b/AppleLibs/Network/Requests/DataManager.swift
index 8608170..afaa9dc 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))
                 }
-- 
GitLab