|
//
// UserSessionStore.swift
// PaiaiDataKit
//
// Created by ffib on 2018/12/20.
// Copyright © 2018 yb. All rights reserved.
//
import Foundation
fileprivate extension UserDefaults {
struct Account: BoolUserDefaultable, DictionaryUserDefaultable {
enum DictionaryDefaultKey: String {
case userInfo
}
enum BoolDefaultKey: String {
case isLogin
case isAudit
}
}
}
final class UserSessionStore {
#warning("是否加密存储userId")
func save(_ userInfo: UserInfo) {
UserDefaults.Account.set(true, forKey: .isLogin)
UserDefaults.Account.set(userInfo.toJSON(), forKey: .userInfo)
}
func delete() {
UserDefaults.Account.set([:], forKey: .userInfo)
UserDefaults.Account.set(false, forKey: .isLogin)
}
func load() -> UserInfo {
let json = UserDefaults.Account.dictionary(forKey: .userInfo)
return UserInfo(json: json as [String: AnyObject])
}
func getUUID() -> String {
let keyChainDic = NSMutableDictionary()
keyChainDic.setObject(String(kSecClassGenericPassword), forKey: kSecClass as! NSCopying)
keyChainDic.setObject("uuid", forKey: kSecAttrAccount as! NSCopying)
keyChainDic.setObject(kCFBooleanTrue, forKey: kSecReturnAttributes as! NSCopying)
keyChainDic.setObject(kCFBooleanTrue, forKey: kSecReturnData as! NSCopying)
var result: AnyObject?
var uuid: String? = nil
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
}
}
|