You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
5.4 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. //
  2. // RestApiManager.swift
  3. // GMERemittance
  4. //
  5. // Created by Sujal on 12/5/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. import Alamofire
  10. import SwiftyJSON
  11. import ObjectMapper
  12. import Localize_Swift
  13. enum Server {
  14. case uat2
  15. case uat
  16. case staging
  17. case live
  18. case kftcTest
  19. case ngrok
  20. }
  21. class RestApiMananger {
  22. let manager: SessionManager
  23. static let sharedInstance = RestApiMananger()
  24. init() {
  25. self.manager = Alamofire.SessionManager.default
  26. manager.session.configuration.timeoutIntervalForRequest = 150
  27. }
  28. func getUUID() -> String {
  29. let uuid = GMEDB.shared.app.string(.uuid)
  30. if uuid != nil {
  31. return uuid!
  32. } else {
  33. let uuid = UUID().uuidString
  34. GMEDB.shared.app.set(uuid, .uuid)
  35. return uuid
  36. }
  37. }
  38. func getContentHeaderBeforeLogin() -> [String: String] {
  39. let currentLanguage = Localize.currentLanguage()
  40. let lang = Utility.getLanguageHeader(for: currentLanguage)
  41. return ["Authorization": "Basic " + ("172017F9EC11222E8107142733:QRK2UM0Q" +
  42. ":" + getUUID()).toBase64(),
  43. "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
  44. "Content-Type": "application/json",
  45. "lang" : lang
  46. ]
  47. }
  48. func getContentHeaderAfterLogin() -> [String: String] {
  49. let accessCode = GMEDB.shared.user.string(.accessCode) ?? ""
  50. let currentLanguage = Localize.currentLanguage()
  51. let lang = Utility.getLanguageHeader(for: currentLanguage)
  52. return [
  53. "Authorization": "Bearer " + accessCode,
  54. "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
  55. "Content-Type": "application/json",
  56. "clientId": Utility.getMyKftcClientId(),
  57. "lang" : lang
  58. ]
  59. }
  60. func request<T: Mappable>(
  61. method: HTTPMethod,
  62. url: String,
  63. params: [String: Any]?,
  64. encoding: ParameterEncoding = JSONEncoding.default,
  65. needsAuthorization: Bool = true,
  66. success: @escaping (T) -> Void,
  67. failure: @escaping (Error) -> Void
  68. ) {
  69. if NetworkReachabilityManager()?.isReachable ?? false {
  70. let header = needsAuthorization ? getContentHeaderAfterLogin() : getContentHeaderBeforeLogin()
  71. manager.request(
  72. url,
  73. method: method,
  74. parameters: params,
  75. encoding: encoding,
  76. headers: header
  77. ).handle(success: success, failure: failure)
  78. } else {
  79. let error = NSError(
  80. domain: "NETWORK_REACHABILITY_DOMAIN",
  81. code: -99,
  82. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  83. )
  84. failure(error)
  85. }
  86. }
  87. func kftcRequest<T: Mappable>(
  88. method: HTTPMethod,
  89. header: [String: String],
  90. url: String,
  91. params: [String: Any]?,
  92. encoding: ParameterEncoding = JSONEncoding.default,
  93. needsAuthorization: Bool = true,
  94. success: @escaping (T) -> Void,
  95. failure: @escaping (Error) -> Void
  96. ) {
  97. if NetworkReachabilityManager()?.isReachable ?? false {
  98. manager.request(
  99. url,
  100. method: method,
  101. parameters: params,
  102. encoding: encoding,
  103. headers: header
  104. ).handle(success: success, failure: failure)
  105. } else {
  106. let error = NSError(
  107. domain: "NETWORK_REACHABILITY_DOMAIN",
  108. code: 0,
  109. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  110. )
  111. failure(error)
  112. }
  113. }
  114. func requestMultipart<T: Mappable>(
  115. method: HTTPMethod,
  116. _ URLString: URLConvertible,
  117. parameters: [String: String]? = nil,
  118. images: [String: Data],
  119. encoding: Alamofire.ParameterEncoding = URLEncoding.default,
  120. needsAuthorization: Bool = true,
  121. success: @escaping (T) -> Void,
  122. failure: @escaping (Error) -> Void
  123. ) {
  124. if NetworkReachabilityManager()?.isReachable == true {
  125. let headers = needsAuthorization ? getContentHeaderAfterLogin() : getContentHeaderBeforeLogin()
  126. self.manager.upload(
  127. multipartFormData: { multipartFormData in
  128. if !images.isEmpty {
  129. images.forEach({ (data) in
  130. multipartFormData.append(
  131. data.value,
  132. withName: data.key,
  133. fileName: data.key + ".jpeg", mimeType: "image/jpeg"
  134. )
  135. })
  136. }
  137. parameters?.forEach({ (params) in
  138. multipartFormData.append(
  139. params.value.data(
  140. using: String.Encoding.utf8, allowLossyConversion: false
  141. )!,
  142. withName: params.key
  143. )
  144. })
  145. },
  146. to: URLString,
  147. method: method,
  148. headers: headers,
  149. encodingCompletion: { encodingResult in
  150. switch encodingResult {
  151. case .success(let upload, _, _):
  152. upload.handle(success: success, failure: failure)
  153. case .failure:
  154. let error = NSError(
  155. domain: "NETWORK_REACHABILITY_DOMAIN",
  156. code: 0,
  157. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  158. )
  159. failure(error)
  160. }
  161. }
  162. )
  163. } else {
  164. let error = NSError(
  165. domain: "NETWORK_REACHABILITY_DOMAIN",
  166. code: 0,
  167. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  168. )
  169. failure(error)
  170. }
  171. }
  172. }