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.

231 lines
6.5 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
  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: String {
  14. case live
  15. case testLive
  16. }
  17. extension Server: CaseIterable {
  18. static var allCases: [Self] {
  19. return [Self](AnySequence { () -> AnyIterator<Self> in
  20. var raw = 0
  21. var first: Self?
  22. return AnyIterator {
  23. let current = withUnsafeBytes(of: &raw) { $0.load(as: Self.self) }
  24. if raw == 0 {
  25. first = current
  26. } else if current == first {
  27. return nil
  28. }
  29. raw += 1
  30. return current
  31. }
  32. })
  33. }
  34. }
  35. class RestApiMananger {
  36. let manager: SessionManager
  37. static let sharedInstance = RestApiMananger()
  38. init() {
  39. self.manager = Alamofire.SessionManager.default
  40. manager.session.configuration.timeoutIntervalForRequest = 150
  41. }
  42. func getUUID() -> String {
  43. let uuid = GMEDB.shared.app.string(.uuid)
  44. if uuid != nil {
  45. return uuid!
  46. } else {
  47. let uuid = UUID().uuidString
  48. GMEDB.shared.app.set(uuid, .uuid)
  49. return uuid
  50. }
  51. }
  52. func getContentHeaderBeforeLogin() -> [String: String] {
  53. let currentLanguage = Localize.currentLanguage()
  54. let lang = Utility.getLanguageHeader(for: currentLanguage)
  55. //live value
  56. return ["Authorization": "Basic " + ("5220221D2E737FD60C28243:fUjXn2r5" +
  57. ":" + getUUID()).toBase64(),
  58. "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
  59. "Content-Type": "application/json",
  60. "lang" : lang
  61. ]
  62. //uat value
  63. // return ["Authorization": "Basic " + ("162021E171B825A55C52024823:cQeThWmZ:11i:" +
  64. // getUUID()).toBase64(),
  65. // "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
  66. // "Content-Type": "application/json",
  67. // "lang" : lang
  68. // ]
  69. }
  70. func getContentHeaderAfterLogin() -> [String: String] {
  71. let accessCode = GMEDB.shared.user.string(.accessCode) ?? ""
  72. let currentLanguage = Localize.currentLanguage()
  73. let lang = Utility.getLanguageHeader(for: currentLanguage)
  74. //live value
  75. return [
  76. "Authorization": "Bearer " + accessCode,
  77. "GME-TOKEN" : "@NcRfTjWnZr4u7x!A%D*G-KaPdSgVkXp",
  78. "Content-Type": "application/json",
  79. "clientId": Utility.getMyKftcClientId(),
  80. "lang" : lang
  81. ]
  82. //uat value
  83. // return [
  84. // "Authorization": "Bearer " + accessCode,
  85. // "GME-TOKEN" : "39587YT398@FBQOW8RY3#948R7GB@CNEQW987GF87$TD18$1981..919@@##joghndvberteiru",
  86. // "Content-Type": "application/json",
  87. // "clientId": Utility.getMyKftcClientId(),
  88. // "lang" : lang
  89. // ]
  90. }
  91. func request<T: Mappable>(
  92. method: HTTPMethod,
  93. url: String,
  94. params: [String: Any]?,
  95. encoding: ParameterEncoding = JSONEncoding.default,
  96. needsAuthorization: Bool = true,
  97. success: @escaping (T) -> Void,
  98. failure: @escaping (Error) -> Void
  99. ) {
  100. if NetworkReachabilityManager()?.isReachable ?? false {
  101. let header = needsAuthorization ? getContentHeaderAfterLogin() : getContentHeaderBeforeLogin()
  102. manager.request(
  103. url,
  104. method: method,
  105. parameters: params,
  106. encoding: encoding,
  107. headers: header
  108. ).handle(success: success, failure: failure)
  109. } else {
  110. let error = NSError(
  111. domain: "NETWORK_REACHABILITY_DOMAIN",
  112. code: -99,
  113. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  114. )
  115. failure(error)
  116. }
  117. }
  118. func kftcRequest<T: Mappable>(
  119. method: HTTPMethod,
  120. header: [String: String],
  121. url: String,
  122. params: [String: Any]?,
  123. encoding: ParameterEncoding = JSONEncoding.default,
  124. needsAuthorization: Bool = true,
  125. success: @escaping (T) -> Void,
  126. failure: @escaping (Error) -> Void
  127. ) {
  128. if NetworkReachabilityManager()?.isReachable ?? false {
  129. manager.request(
  130. url,
  131. method: method,
  132. parameters: params,
  133. encoding: encoding,
  134. headers: header
  135. ).handle(success: success, failure: failure)
  136. } else {
  137. let error = NSError(
  138. domain: "NETWORK_REACHABILITY_DOMAIN",
  139. code: 0,
  140. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  141. )
  142. failure(error)
  143. }
  144. }
  145. func requestMultipart<T: Mappable>(
  146. method: HTTPMethod,
  147. _ URLString: URLConvertible,
  148. parameters: [String: String]? = nil,
  149. images: [String: Data],
  150. encoding: Alamofire.ParameterEncoding = URLEncoding.default,
  151. needsAuthorization: Bool = true,
  152. success: @escaping (T) -> Void,
  153. failure: @escaping (Error) -> Void
  154. ) {
  155. if NetworkReachabilityManager()?.isReachable == true {
  156. let headers = needsAuthorization ? getContentHeaderAfterLogin() : getContentHeaderBeforeLogin()
  157. self.manager.upload(
  158. multipartFormData: { multipartFormData in
  159. if !images.isEmpty {
  160. images.forEach({ (data) in
  161. multipartFormData.append(
  162. data.value,
  163. withName: data.key,
  164. fileName: data.key + ".jpeg", mimeType: "image/jpeg"
  165. )
  166. })
  167. }
  168. parameters?.forEach({ (params) in
  169. multipartFormData.append(
  170. params.value.data(
  171. using: String.Encoding.utf8, allowLossyConversion: false
  172. )!,
  173. withName: params.key
  174. )
  175. })
  176. },
  177. to: URLString,
  178. method: method,
  179. headers: headers,
  180. encodingCompletion: { encodingResult in
  181. switch encodingResult {
  182. case .success(let upload, _, _):
  183. upload.handle(success: success, failure: failure)
  184. case .failure:
  185. let error = NSError(
  186. domain: "NETWORK_REACHABILITY_DOMAIN",
  187. code: 0,
  188. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  189. )
  190. failure(error)
  191. }
  192. }
  193. )
  194. } else {
  195. let error = NSError(
  196. domain: "NETWORK_REACHABILITY_DOMAIN",
  197. code: 0,
  198. userInfo: [NSLocalizedDescriptionKey : "No Internet connection found. Check your connection."]
  199. )
  200. failure(error)
  201. }
  202. }
  203. }