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.

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