No Description

GuestUserInfoRemoteAPI.swift 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //
  2. // GuestUserInfoRemoteAPI.swift
  3. // PaiaiDataKit
  4. //
  5. // Created by FFIB on 2018/12/26.
  6. // Copyright © 2018 FFIB. All rights reserved.
  7. //
  8. import Foundation
  9. import RxSwift
  10. struct GuestUserInfoRemoteAPI: UserInfoRemoteAPI {
  11. private func parse(_ json: JSON) -> UserInfo? {
  12. guard let data = json["data"] as? [String: AnyObject] else { return nil }
  13. return UserInfo(json: data)
  14. }
  15. func login() -> Single<UserInfo> {
  16. let contentResource = ContentResource(path: .guestLogin,
  17. parameter: ["uuid": getUUID()],
  18. parseJSON: parse)
  19. return contentResource.loadContent()
  20. }
  21. func getUUID() -> String {
  22. let keyChainDic = NSMutableDictionary()
  23. keyChainDic.setObject(String(kSecClassGenericPassword), forKey: kSecClass as! NSCopying)
  24. keyChainDic.setObject("uuid", forKey: kSecAttrAccount as! NSCopying)
  25. keyChainDic.setObject(kCFBooleanTrue as Any, forKey: kSecReturnAttributes as! NSCopying)
  26. keyChainDic.setObject(kCFBooleanTrue as Any, forKey: kSecReturnData as! NSCopying)
  27. var result: AnyObject?
  28. var uuid: String? = nil
  29. SecItemCopyMatching(keyChainDic, &result)
  30. if let resultDic = result as? NSDictionary {
  31. if let data = resultDic.object(forKey: kSecValueData) as? Data {
  32. uuid = NSString(data: data, encoding: String.Encoding.ascii.rawValue) as String?
  33. }
  34. }
  35. if let uuid = uuid { return uuid }
  36. let uuidStr = UUID().uuidString
  37. let data = uuidStr.data(using: .ascii)
  38. keyChainDic.setObject(data!, forKey: kSecValueData as! NSCopying)
  39. SecItemAdd(keyChainDic, nil)
  40. return uuidStr
  41. }
  42. }