I am working on a code which has done by someone else. I am bit new to swift as well. The below code is my network layer which have been used by other controller files. My requirement is to retry the last network request once the token is expired. How can I integrate that inside of network layer itself ? When logging to the application I am calling the get token service for the firs time and saving it in the headers.
import UIKit
import Alamofire
import Timberjack
class NetworkManager: NSObject {
var token: String!
var APISecret = ""
var basicAuth = "Basic ZXh0X3dlYjpuMWlmP2NlP3F1ZW45SA=="
var manager: SessionManager?
static let sharedManager = NetworkManager()
var staging = "END_POINT_STAGING"
var production = "END_POINT_PRODUCTION"
var domain = AppDelegate().staging
var putDomain = "\(AppDelegate().domainType)/END_POINT."
private override init() {
super.init()
self.initSetup()
}
func initSetup() {
self.manager = Alamofire.SessionManager.default
}
func httpHeaders() -> HTTPHeaders? {
var headers = HTTPHeaders()
guard let token = AppManager.sharedManager.token() else {
return headers
}
headers.updateValue("Bearer \(token)", forKey: "Authorization")
return headers
}
func httpBasicAuthHeaders() -> HTTPHeaders? {
let headers: [String: String] = [
"Content-type": "application/json",
"Authorization": basicAuth
]
return headers
}
func alamofireRequest(domain: String, method: HTTPMethod, parameters: Parameters?, success: @escaping (_ json: [String: AnyObject]) -> (), failure: @escaping (_ error: Error) -> ()) {
manager?.request(domain, method: method, parameters: parameters, encoding: URLEncoding.default, headers: httpHeaders())
.responseJSON(completionHandler: { (response) in
guard let error = response.result.error else {
let allData = response.result.value as! [String: AnyObject]
success(allData)
return
}
failure(error)
})
}
func alamofireRequestForPatchRequests(domain: String, method: HTTPMethod, parameters: Parameters?, success: @escaping (_ json: [String : AnyObject]) -> (), failure: @escaping (_ error: Error) -> ()) {
manager?.request(domain, method: method, parameters: parameters, encoding: JSONEncoding.default, headers: httpHeaders()).responseJSON(completionHandler: { (response) in
guard let error = response.result.error else {
let allData = response.result.value as! [String : AnyObject]
success(allData)
return
}
failure(error)
})
}
func alamofireJSONRequest(domain: String, method: HTTPMethod, headers: [String: AnyObject?], parameters: Parameters?, success: @escaping (_ json: [String: AnyObject]) -> (), failure: @escaping (_ error: Error) -> ()) {
manager?.request(domain, method: method, parameters: parameters, encoding: URLEncoding.default, headers: httpBasicAuthHeaders()).responseJSON(completionHandler: { (response) in
guard let error = response.result.error else {
let allData = response.result.value as! [String : AnyObject]
success(allData)
return
}
failure(error)
})
}
func receivePostDataFor(_ command:String, parameters:AnyObject?, success:@escaping (_ json: AnyObject) -> Void, failure:@escaping (_ json: AnyObject?) -> ()) {
let headers: [String: AnyObject?] = [:]
return alamofireJSONRequest(domain: domain + command, method: .post, headers: headers, parameters: parameters as! Parameters?, success: {(json) in
return success(json as AnyObject)
}, failure: {(error) in
failure(error as NSError)
})
}
func receivePatchDataFor(_ command:String, parameters:AnyObject?, success:@escaping (_ json: AnyObject) -> Void, failure:@escaping (_ json: AnyObject?) -> ()) {
return alamofireRequestForPatchRequests(domain: domain + command, method: .patch, parameters: parameters as! Parameters?, success: {(json) in
return success(json as AnyObject)
}, failure: {(error) in
failure(error as NSError)
})
}
func receiveGetDataFor(_ command:String, parameters:AnyObject?, success:@escaping (_ json: AnyObject) -> Void, failure:@escaping (_ json: AnyObject?) -> ()) {
return alamofireRequest(domain: domain + command, method: .get, parameters: parameters as! Parameters?, success: {(json) in
return success(json as AnyObject)
}, failure: {(error) in
failure(error as NSError)
})
}
func receiveDeleteDataFor(_ command:String, parameters:AnyObject?, success:@escaping (_ json: AnyObject) -> Void, failure:@escaping (_ json: AnyObject?) -> Void) {
alamofireRequest(domain: domain + command, method: .delete, parameters: parameters as! Parameters?, success: {(json) in
success(json as AnyObject)
}, failure: {(error) in
failure(error as NSError)
})
}
func receivePutDataFor(_ command:String, parameters:AnyObject?, success:@escaping (_ json: AnyObject) -> Void, failure:@escaping (_ json: AnyObject?) -> ()) {
return alamofireRequest(domain: putDomain + command, method: .put, parameters: parameters as! Parameters?,
success: {(json) in
return success(json as AnyObject)
}, failure: {(error) in
failure(error as NSError)
})
}
}