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

////
//// 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)
// }
//}
//