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.
543 lines
21 KiB
543 lines
21 KiB
////
|
|
//// Auth.swift
|
|
//// GMERemittance
|
|
////
|
|
//// Created by shishir sapkota on 6/2/17.
|
|
//// Copyright © 2017 Ekbana. All rights reserved.
|
|
////
|
|
//
|
|
//import Foundation
|
|
//import Alamofire
|
|
//import SwiftyJSON
|
|
//import ObjectMapper
|
|
//import Localize_Swift
|
|
//
|
|
//enum Provider: String {
|
|
// case facebook = "facebookauth"
|
|
// case google = "googleauth"
|
|
// case pasword = "password"
|
|
// case refreshToken = "refresh_token"
|
|
//
|
|
// var appToken: String {
|
|
// switch self {
|
|
// case .facebook:
|
|
// return ""
|
|
// default:
|
|
// return ""
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//struct DeploymentMode: OptionSet {
|
|
// typealias RawValue = Int
|
|
//
|
|
// static func ==(lhs: DeploymentMode, rhs: DeploymentMode) -> Bool {
|
|
// return lhs.rawValue == rhs.rawValue
|
|
// }
|
|
//
|
|
// var rawValue: DeploymentMode.RawValue
|
|
// static let dev: DeploymentMode = DeploymentMode(rawValue: 0)
|
|
// static let qa: DeploymentMode = DeploymentMode(rawValue: 1)
|
|
// static let release: DeploymentMode = DeploymentMode(rawValue: 2)
|
|
// static let releaseQa: DeploymentMode = DeploymentMode(rawValue: 3)
|
|
//}
|
|
//
|
|
//struct Configuration {
|
|
// let clientId: String
|
|
// let scope: String
|
|
// let clientSecret: String
|
|
// let apiKey: String
|
|
// let baseURL: String
|
|
// let authBaseURL: String
|
|
// let domain: String
|
|
//
|
|
// static var conf: Configuration {
|
|
// switch deploymentMode {
|
|
// case .dev:
|
|
// return Configuration(
|
|
// clientId: "3",
|
|
// scope: "",
|
|
// clientSecret: "4pvnOgcXc53tvFfT4nSFvupFMazxa7TlSRdrZ61z",
|
|
// apiKey: "16c9c17b5f17cba2edd2981deb74a46d123a9848d443c9d59ea4231f54892ada3391542f48609387",
|
|
// baseURL: "https://dev-b2bordering.ekbana.info/api/v1/",
|
|
// authBaseURL: "https://dev-b2bordering.ekbana.info/api/v1/auth/login",
|
|
// domain: "dev")
|
|
// case .qa:
|
|
// return Configuration(
|
|
// clientId: "3",
|
|
// scope: "",
|
|
// clientSecret: "MG7dmrKnwbRxXKDya6BvwzIEMWws1c2fQ9NMMAre",
|
|
// apiKey: "16c9c17b5f17cba2edd2981deb74a46d123a9848d443c9d59ea4231f54892ada3391542f48609387",
|
|
// baseURL: "https://qa-b2bordering.ekbana.info/api/v1/",
|
|
// authBaseURL: "https://qa-b2bordering.ekbana.info/api/v1/auth/login",
|
|
// domain: "qa")
|
|
// case .release:
|
|
// return Configuration(
|
|
// clientId: "6",
|
|
// scope: "",
|
|
// clientSecret: "5Oc8ZH15lfu9rcKK6HuQB9Lgs9vcITIRsbg2xNhG",
|
|
// apiKey: "16c9c17b5f17cba2edd2981deb74a46d123a9848d443c9d59ea4231f54892ada3391542f48609387",
|
|
// baseURL: "https://sipradib2b.ekbana.info/api/v1/",
|
|
// authBaseURL: "https://sipradib2b.ekbana.info/api/v1/auth/login",
|
|
// domain: "sipradib2b")
|
|
// case .releaseQa:
|
|
// return Configuration(
|
|
// clientId: "3",
|
|
// scope: "",
|
|
// clientSecret: "MG7dmrKnwbRxXKDya6BvwzIEMWws1c2fQ9NMMAre",
|
|
// apiKey: "16c9c17b5f17cba2edd2981deb74a46d123a9848d443c9d59ea4231f54892ada3391542f48609387",
|
|
// baseURL: "https://qa-b2bordering.ekbana.info/api/v1/",
|
|
// authBaseURL: "https://qa-b2bordering.ekbana.info/api/v1/auth/login",
|
|
// domain: "qa")
|
|
// default:
|
|
// return Configuration(
|
|
// clientId: "3",
|
|
// scope: "",
|
|
// clientSecret: "4pvnOgcXc53tvFfT4nSFvupFMazxa7TlSRdrZ61z",
|
|
// apiKey: "16c9c17b5f17cba2edd2981deb74a46d123a9848d443c9d59ea4231f54892ada3391542f48609387",
|
|
// baseURL: "https://dev-b2bordering.ekbana.info/api/v1/",
|
|
// authBaseURL: "https://dev-b2bordering.ekbana.info/api/v1/auth/login",
|
|
// domain: "dev")
|
|
// }
|
|
// }
|
|
//}
|
|
//
|
|
//public class Auth: NSObject, LoginServiceType {
|
|
// static let shared = Auth()
|
|
// let baseUrl: String = {return Configuration.conf.baseURL}()
|
|
//
|
|
// var oAuth: AuthModel? {
|
|
// return self.fetch().first
|
|
// }
|
|
//
|
|
// var isLoggedIn: Bool {
|
|
// return self.isTokenValid()
|
|
// }
|
|
//
|
|
// fileprivate var refreshQueue = [(success: (()->()), failure: ([ResponseMessage])->())]()
|
|
//
|
|
// fileprivate var isRefreshing: Bool {return refreshQueue.count > 0 }
|
|
//
|
|
// fileprivate let _manager: SessionManager = {
|
|
// let appVerion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as? String
|
|
// let osVersion = UIDevice.current.systemVersion
|
|
// let deviceModel = UIDevice.current.model
|
|
// let deviceID = UIDevice.current.identifierForVendor?.uuidString
|
|
//
|
|
// let configuration: URLSessionConfiguration = URLSessionConfiguration.default
|
|
//
|
|
// var headers = Alamofire.SessionManager.defaultHTTPHeaders
|
|
// headers["AppVersion"] = appVerion
|
|
// headers["OS"] = "iOS \(osVersion)"
|
|
// headers["DeviceModel"] = deviceModel
|
|
// headers["DeviceID"] = deviceID ?? ""
|
|
// headers["Api-Key"] = Configuration.conf.apiKey
|
|
//
|
|
// configuration.httpAdditionalHeaders = headers
|
|
//
|
|
// let sessionManager = SessionManager(configuration: configuration)
|
|
// return sessionManager
|
|
// }()
|
|
//
|
|
// func login(username: String, password: String, success: @escaping ()->(), failure: @escaping ([ResponseMessage])->()) {
|
|
// logger("Logging in...")
|
|
//
|
|
// let params = [
|
|
// "grant_type": Provider.pasword.rawValue,
|
|
// "username": username,
|
|
// "password": password,
|
|
// ]
|
|
//
|
|
// self.authRequest(parameters: params, success: success, failure: failure)
|
|
// }
|
|
//
|
|
// func refresh(success: @escaping ()->(), failure: @escaping ([ResponseMessage])->()) {
|
|
// guard let refreshToken = self.oAuth?.refreshToken else {return}
|
|
// let params = [
|
|
// "grant_type": Provider.refreshToken.rawValue,
|
|
// "refresh_token": refreshToken
|
|
// ] as [String : String]
|
|
//
|
|
// self.authRequest(parameters: params, success: success, failure: failure)
|
|
// }
|
|
//
|
|
//}
|
|
//
|
|
//extension Auth {
|
|
//
|
|
// private func getExtraHeaders() -> [String: String] {
|
|
// var language = Localize.currentLanguage()
|
|
// if language == "jp" {
|
|
// language = "ja"
|
|
// }
|
|
// var headers = ["Accept-Language" : language]
|
|
// if let storeId = StoreModel.selected?.id {
|
|
// headers["store-id"] = storeId
|
|
// }
|
|
// return headers
|
|
// }
|
|
//
|
|
// private func prepareParams(extra: [String: Any]) -> [String: Any] {
|
|
// let params = [
|
|
// "client_id": Configuration.conf.clientId,
|
|
// "client_secret": Configuration.conf.clientSecret,
|
|
// "scope": Configuration.conf.scope,
|
|
// ] as [String : Any]
|
|
//
|
|
// return extra.reduce(params) { (result, value) -> [String: Any] in
|
|
// var result = result
|
|
// result[value.key] = value.value
|
|
// return result
|
|
// }
|
|
// }
|
|
//
|
|
// func checkAuthorize(_ needsAuthorized: Bool, onAuthorize: @escaping () -> Void, onFailure: @escaping ([ResponseMessage])->Void) {
|
|
// if needsAuthorized {
|
|
// if let time = self.oAuth?.expiresIn, let date = self.oAuth?.date {
|
|
// let expiryDate = date.addingTimeInterval(time)
|
|
// if Date().compare(expiryDate) == ComparisonResult.orderedAscending {
|
|
// onAuthorize()
|
|
// }else {
|
|
//
|
|
// if !self.isRefreshing {
|
|
// self.refreshQueue.append((onAuthorize, onFailure))
|
|
// self.refresh(success: successRefreshingToken, failure: failedRefreshingToken)
|
|
// }else {
|
|
// self.refreshQueue.append((onAuthorize, onFailure))
|
|
// }
|
|
// }
|
|
// }else {
|
|
// handleStatusCode(statusCode: 401)
|
|
// }
|
|
// }else {
|
|
// onAuthorize()
|
|
// }
|
|
// }
|
|
//
|
|
// func isTokenValid() -> Bool {
|
|
// if let time = self.oAuth?.expiresIn, let date = self.oAuth?.date {
|
|
// let expiryDate = date.addingTimeInterval(time)
|
|
// return Date().compare(expiryDate) == ComparisonResult.orderedAscending
|
|
// }
|
|
// return false
|
|
// }
|
|
//
|
|
// func successRefreshingToken() {
|
|
// self.refreshQueue.forEach({
|
|
// $0.success()
|
|
// })
|
|
// self.refreshQueue = []
|
|
// }
|
|
//
|
|
// func failedRefreshingToken(error: [ResponseMessage]) {
|
|
// self.refreshQueue.forEach {
|
|
// $0.failure(error)
|
|
// }
|
|
// self.refreshQueue = []
|
|
// }
|
|
//
|
|
// func authRequest(
|
|
// parameters: [String: Any],
|
|
// success: @escaping () -> (),
|
|
// failure: @escaping ([ResponseMessage]) -> ()) {
|
|
// if NetworkReachabilityManager()?.isReachable == true {
|
|
// let alamofireRequest = self._manager.request(
|
|
// Configuration.conf.authBaseURL,
|
|
// method: .post,
|
|
// parameters: prepareParams(extra: parameters),
|
|
// encoding: URLEncoding.default,
|
|
// headers: self.getExtraHeaders())
|
|
//
|
|
// alamofireRequest.handleAuthResponse(success: success, failure: failure)
|
|
// }else {
|
|
// var responseMessage = ResponseMessage()
|
|
// let error = GlobalConstants.Errors.internetConnectionOffline.localizedDescription
|
|
// responseMessage.detail = error
|
|
// responseMessage.title = error
|
|
// responseMessage.source = "error"
|
|
// failure([responseMessage])
|
|
// }
|
|
// }
|
|
//
|
|
// func request<T>(
|
|
// method: HTTPMethod,
|
|
// _ URLString: URLConvertible,
|
|
// parameters: [String: Any]? = nil,
|
|
// encoding: Alamofire.ParameterEncoding = URLEncoding.default,
|
|
// headers: [String: String]? = nil,
|
|
// needsAuthorized: Bool = true,
|
|
// success: @escaping (ApiResponse<T>)-> Void,
|
|
// failure: @escaping ([ResponseMessage]) -> ()) {
|
|
// if NetworkReachabilityManager()?.isReachable == true {
|
|
// func makeRequest() {
|
|
// var hdrs = headers ?? [:]
|
|
//
|
|
// self.getExtraHeaders().forEach({
|
|
// hdrs[$0.key] = $0.value
|
|
// })
|
|
//
|
|
// if let token = self.oAuth?.accessToken, let type = self.oAuth?.tokenType {
|
|
// hdrs["Authorization"] = "\(type) \(token)"
|
|
// }
|
|
//
|
|
// let alamofireRequest = self._manager.request(
|
|
// URLString,
|
|
// method: method,
|
|
// parameters: parameters,
|
|
// encoding: encoding,
|
|
// headers: hdrs)
|
|
//
|
|
// alamofireRequest.handle(success: success, failure: failure)
|
|
//
|
|
// }
|
|
//
|
|
// self.checkAuthorize(needsAuthorized, onAuthorize: makeRequest, onFailure: failure)
|
|
// }else {
|
|
// var responseMessage = ResponseMessage()
|
|
// let error = GlobalConstants.Errors.internetConnectionOffline.localizedDescription
|
|
// responseMessage.detail = error
|
|
// responseMessage.title = error
|
|
// responseMessage.source = "error"
|
|
// failure([responseMessage])
|
|
// }
|
|
// }
|
|
//
|
|
//
|
|
// func download(
|
|
// _ url: URLConvertible,
|
|
// to destinationURL: URL,
|
|
// method: HTTPMethod = .get,
|
|
// parameters: Parameters? = nil,
|
|
// encoding: ParameterEncoding = URLEncoding.default,
|
|
// headers: HTTPHeaders? = nil,
|
|
// progressFraction: ((Double) -> Void)?,
|
|
// failure: @escaping (Error) -> Void,
|
|
// success: @escaping (URL) -> Void) {
|
|
//
|
|
// let destination = self.getDestination(for: destinationURL)
|
|
// var headers = headers ?? [:]
|
|
// self.getExtraHeaders().forEach({
|
|
// headers[$0.key] = $0.value
|
|
// })
|
|
//
|
|
// let request = _manager.download(url, method: method, parameters: parameters, encoding: encoding, headers: headers, to: destination)
|
|
//
|
|
// self.handle(request: request, progressFraction: progressFraction, failure: failure, success: success)
|
|
// }
|
|
//
|
|
// func download(request: URLRequest,
|
|
// to destinationURL: URL,
|
|
// progressFraction: ((Double) -> Void)?,
|
|
// failure: @escaping (Error) -> Void,
|
|
// success: @escaping (URL) -> Void) {
|
|
//
|
|
// let destination = self.getDestination(for: destinationURL)
|
|
//
|
|
// let request = _manager.download(request, to: destination)
|
|
// self.handle(request: request, progressFraction: progressFraction, failure: failure, success: success)
|
|
// }
|
|
//
|
|
// private func getDestination(for url: URL) -> DownloadRequest.DownloadFileDestination {
|
|
// return { _, _ in
|
|
// return (url, [.removePreviousFile])
|
|
// }
|
|
// }
|
|
//
|
|
// private func handle(request: DownloadRequest,
|
|
// progressFraction: ((Double) -> Void)?,
|
|
// failure: @escaping (Error) -> Void,
|
|
// success: @escaping (URL) -> Void) {
|
|
// request
|
|
// .downloadProgress { (progress: Progress) in
|
|
// let fractionOfProgress = progress.fractionCompleted
|
|
// progressFraction?(fractionOfProgress)
|
|
// }
|
|
// .response { (defaultDownloadResponse:DefaultDownloadResponse) in
|
|
//
|
|
// // now what?
|
|
// if let error = defaultDownloadResponse.error {
|
|
// logger("Error on 360 \(error)")
|
|
// failure(getError(error: error))
|
|
// }
|
|
//
|
|
// logger(defaultDownloadResponse.response?.allHeaderFields ?? "")
|
|
// if let destinationUrl = defaultDownloadResponse.destinationURL {
|
|
// logger("received")
|
|
// success(destinationUrl)
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// func requestMultipart<T>(
|
|
// method: HTTPMethod,
|
|
// _ URLString: URLConvertible,
|
|
// parameters: [String: String]? = nil,
|
|
// images: [String: Data],
|
|
// encoding: Alamofire.ParameterEncoding = URLEncoding.default,
|
|
// headers: [String: String]? = nil,
|
|
// needsAuthorized: Bool = true,
|
|
// success: @escaping (ApiResponse<T>)-> Void,
|
|
// failure: @escaping ([ResponseMessage]) -> ()) {
|
|
//
|
|
// if NetworkReachabilityManager()?.isReachable == true {
|
|
// func makeRequest() {
|
|
// var headers = headers ?? [:]
|
|
// self.getExtraHeaders().forEach({
|
|
// headers[$0.key] = $0.value
|
|
// })
|
|
// if let token = self.oAuth?.accessToken, let type = self.oAuth?.tokenType {
|
|
// headers["Authorization"] = "\(type) \(token)"
|
|
// }
|
|
//
|
|
// 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 encodingError):
|
|
// // make response message
|
|
// var responseMessage = ResponseMessage()
|
|
// responseMessage.detail = encodingError.localizedDescription
|
|
// responseMessage.title = encodingError.localizedDescription
|
|
// responseMessage.source = "error"
|
|
//
|
|
// }
|
|
// }
|
|
// )
|
|
//
|
|
// }
|
|
//
|
|
// self.checkAuthorize(needsAuthorized, onAuthorize: makeRequest, onFailure: failure)
|
|
//
|
|
// }else {
|
|
// var responseMessage = ResponseMessage()
|
|
// let error = GlobalConstants.Errors.internetConnectionOffline.localizedDescription
|
|
// responseMessage.detail = error
|
|
// responseMessage.title = error
|
|
// responseMessage.source = "error"
|
|
// failure([responseMessage])
|
|
// }
|
|
// }
|
|
//
|
|
//}
|
|
//
|
|
//fileprivate extension Alamofire.DataRequest {
|
|
//
|
|
// func handleAuthResponse(success: @escaping () -> (), failure: @escaping ([ResponseMessage]) -> Void) {
|
|
//
|
|
// self.responseJSON { (response) in
|
|
//
|
|
// handleStatusCode(statusCode: response.response?.statusCode ?? 500)
|
|
//
|
|
// var error = response.result.error
|
|
//
|
|
// switch response.result {
|
|
// case .success(let value):
|
|
// let json = JSON(value)
|
|
// if let errors: [ResponseMessage] = json["errors"].map() {
|
|
// failure(errors)
|
|
// return
|
|
// }
|
|
//
|
|
// if (200..<300).contains(response.response?.statusCode ?? 0) {
|
|
// if let authModel: AuthModel = json.map() {
|
|
// if !authModel.error.isEmpty {
|
|
// let errorDesc = (authModel.errorDescription.isEmpty ? authModel.error : authModel.errorDescription).replacingOccurrences(of: "_", with: " ").capitalizingFirstLetter()
|
|
// error = NSError(domain: "Auth_error", code: 12346, userInfo: [NSLocalizedDescriptionKey: errorDesc])
|
|
// }else {
|
|
// Auth.shared.save(models: [authModel])
|
|
// success()
|
|
// return
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// case .failure: break
|
|
// }
|
|
//
|
|
// self.handleError(error: error, failure: failure)
|
|
// }
|
|
// }
|
|
//
|
|
// func handle<T>(success: @escaping (ApiResponse<T>) -> (), failure: @escaping ([ResponseMessage]) -> ()) {
|
|
// self.responseJSON { (response) in
|
|
// let statusCode = response.response?.statusCode ?? 500
|
|
// handleStatusCode(statusCode: statusCode)
|
|
//
|
|
// switch response.result {
|
|
// case .success(let value):
|
|
//
|
|
// let json = JSON(value)
|
|
//
|
|
// if let errors: [ResponseMessage] = json["errors"].map() {
|
|
// failure(errors)
|
|
// return
|
|
// }
|
|
//
|
|
// if (200..<300).contains(statusCode) {
|
|
//
|
|
// if statusCode == 204 {
|
|
// let response = ApiResponse<T>()
|
|
// success(response)
|
|
// return
|
|
// }
|
|
//
|
|
// if let apiResponse: ApiResponse<T> = json.map() {
|
|
// success(apiResponse)
|
|
// return
|
|
// }
|
|
// }
|
|
//
|
|
// case .failure: break
|
|
// }
|
|
//
|
|
// let error = response.result.error
|
|
//
|
|
// self.handleError(error: error, failure: failure)
|
|
// }
|
|
// }
|
|
//
|
|
// private func handleError(error: Error?, failure: @escaping ([ResponseMessage]) -> ()) {
|
|
// let error = getError(error: error)
|
|
// var responseMessage = ResponseMessage()
|
|
// responseMessage.detail = error.localizedDescription
|
|
// responseMessage.title = error.localizedDescription
|
|
// responseMessage.source = "error"
|
|
// failure([responseMessage])
|
|
// }
|
|
//}
|
|
//
|
|
//func getError(error: Error?) -> Error {
|
|
// var error = error
|
|
// if let code = (error as? URLError)?.code {
|
|
// if code == URLError.notConnectedToInternet || code == URLError.networkConnectionLost {
|
|
// error = GlobalConstants.Errors.internetConnectionOffline
|
|
// }else {
|
|
// error = GlobalConstants.Errors.oops
|
|
// }
|
|
// }
|
|
// return error ?? GlobalConstants.Errors.oops
|
|
//}
|
|
//
|
|
//func handleStatusCode(statusCode: Int) {
|
|
// if let _ = StatusCode(rawValue: statusCode) {
|
|
// logger("Status code thrown : \(statusCode)")
|
|
// GlobalConstants.Notification.statusCodeNeedsToBeHandled.fire(withObject: statusCode)
|
|
// }
|
|
//}
|
|
//
|