// // RestApiManager.swift // GMERemittance // // Created by Sujal on 12/5/17. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation import Alamofire import SwiftyJSON import ObjectMapper import Localize_Swift enum Server: String { case live case testLive } extension Server: CaseIterable { static var allCases: [Self] { return [Self](AnySequence { () -> AnyIterator in var raw = 0 var first: Self? return AnyIterator { let current = withUnsafeBytes(of: &raw) { $0.load(as: Self.self) } if raw == 0 { first = current } else if current == first { return nil } raw += 1 return current } }) } } class RestApiMananger { let manager: SessionManager static let sharedInstance = RestApiMananger() init() { self.manager = Alamofire.SessionManager.default manager.session.configuration.timeoutIntervalForRequest = 150 } func getUUID() -> String { let uuid = GMEDB.shared.app.string(.uuid) if uuid != nil { return uuid! } else { let uuid = UUID().uuidString GMEDB.shared.app.set(uuid, .uuid) return uuid } } func getContentHeaderBeforeLogin() -> [String: String] { let currentLanguage = Localize.currentLanguage() let lang = Utility.getLanguageHeader(for: currentLanguage) //live value return ["Authorization": "Basic " + ("5220221D2E737FD60C28243:fUjXn2r5" + ":" + getUUID()).toBase64(), "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp", "Content-Type": "application/json", "lang" : lang ] //uat value // return ["Authorization": "Basic " + ("162021E171B825A55C52024823:cQeThWmZ:11i:" + // getUUID()).toBase64(), // "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru", // "Content-Type": "application/json", // "lang" : lang // ] } func getContentHeaderAfterLogin() -> [String: String] { let accessCode = GMEDB.shared.user.string(.accessCode) ?? "" let currentLanguage = Localize.currentLanguage() let lang = Utility.getLanguageHeader(for: currentLanguage) //live value return [ "Authorization": "Bearer " + accessCode, "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp", "Content-Type": "application/json", "clientId": Utility.getMyKftcClientId(), "lang" : lang ] //uat value // return [ // "Authorization": "Bearer " + accessCode, // "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru", // "Content-Type": "application/json", // "clientId": Utility.getMyKftcClientId(), // "lang" : lang // ] } func request( method: HTTPMethod, url: String, params: [String: Any]?, encoding: ParameterEncoding = JSONEncoding.default, needsAuthorization: Bool = true, success: @escaping (T) -> Void, failure: @escaping (Error) -> Void ) { if NetworkReachabilityManager()?.isReachable ?? false { let header = needsAuthorization ? getContentHeaderAfterLogin() : getContentHeaderBeforeLogin() manager.request( url, method: method, parameters: params, encoding: encoding, headers: header ).handle(success: success, failure: failure) } else { let error = NSError( domain: "NETWORK_REACHABILITY_DOMAIN", code: -99, userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."] ) failure(error) } } func kftcRequest( method: HTTPMethod, header: [String: String], url: String, params: [String: Any]?, encoding: ParameterEncoding = JSONEncoding.default, needsAuthorization: Bool = true, success: @escaping (T) -> Void, failure: @escaping (Error) -> Void ) { if NetworkReachabilityManager()?.isReachable ?? false { manager.request( url, method: method, parameters: params, encoding: encoding, headers: header ).handle(success: success, failure: failure) } else { let error = NSError( domain: "NETWORK_REACHABILITY_DOMAIN", code: 0, userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."] ) failure(error) } } func requestMultipart( method: HTTPMethod, _ URLString: URLConvertible, parameters: [String: String]? = nil, images: [String: Data], encoding: Alamofire.ParameterEncoding = URLEncoding.default, needsAuthorization: Bool = true, success: @escaping (T) -> Void, failure: @escaping (Error) -> Void ) { if NetworkReachabilityManager()?.isReachable == true { let headers = needsAuthorization ? getContentHeaderAfterLogin() : getContentHeaderBeforeLogin() self.manager.upload( multipartFormData: { multipartFormData in if !images.isEmpty { images.forEach({ (data) in multipartFormData.append( data.value, withName: data.key, fileName: data.key + ".jpeg", mimeType: "image/jpeg" ) }) } parameters?.forEach({ (params) in multipartFormData.append( params.value.data( using: String.Encoding.utf8, allowLossyConversion: false )!, withName: params.key ) }) }, to: URLString, method: method, headers: headers, encodingCompletion: { encodingResult in switch encodingResult { case .success(let upload, _, _): upload.handle(success: success, failure: failure) case .failure: let error = NSError( domain: "NETWORK_REACHABILITY_DOMAIN", code: 0, userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."] ) failure(error) } } ) } else { let error = NSError( domain: "NETWORK_REACHABILITY_DOMAIN", code: 0, userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."] ) failure(error) } } }