|
//
// GuestUserInfoRemoteAPI.swift
// PaiaiDataKit
//
// Created by FFIB on 2018/12/26.
// Copyright © 2018 FFIB. All rights reserved.
//
import Foundation
import RxSwift
struct GuestUserInfoRemoteAPI: UserInfoRemoteAPI {
private func parse(_ json: JSON) -> UserInfo? {
guard let data = json["data"] as? [String: AnyObject] else { return nil }
return UserInfo(json: data)
}
func login() -> Single<UserInfo> {
let contentResource = ContentResource(path: .guestLogin,
parameter: ["uuid": getUUID()],
parseJSON: parse)
return contentResource.loadContent()
}
func getUUID() -> String {
let keyChainDic = NSMutableDictionary()
keyChainDic.setObject(String(kSecClassGenericPassword), forKey: kSecClass as! NSCopying)
keyChainDic.setObject("uuid", forKey: kSecAttrAccount as! NSCopying)
keyChainDic.setObject(kCFBooleanTrue as Any, forKey: kSecReturnAttributes as! NSCopying)
keyChainDic.setObject(kCFBooleanTrue as Any, forKey: kSecReturnData as! NSCopying)
var result: AnyObject?
var uuid: String?
SecItemCopyMatching(keyChainDic, &result)
if let resultDic = result as? NSDictionary {
if let data = resultDic.object(forKey: kSecValueData) as? Data {
uuid = NSString(data: data, encoding: String.Encoding.ascii.rawValue) as String?
}
}
if let uuid = uuid { return uuid }
let uuidStr = UUID().uuidString
let data = uuidStr.data(using: .ascii)
keyChainDic.setObject(data!, forKey: kSecValueData as! NSCopying)
SecItemAdd(keyChainDic, nil)
return uuidStr
}
}
|