Skip to content

Instantly share code, notes, and snippets.

@TsRebornz
Created November 26, 2019 07:57
Show Gist options
  • Save TsRebornz/bd4bdb250be51746797e24e33d8cee19 to your computer and use it in GitHub Desktop.
Save TsRebornz/bd4bdb250be51746797e24e33d8cee19 to your computer and use it in GitHub Desktop.
final class SharedTokenManager {
private let tokenKey = "token"
private let accessGroup: String
init(accessGroup: String) {
self.accessGroup = accessGroup
}
func getToken() -> String? {
let queryLoad: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: tokenKey as AnyObject,
kSecReturnData as String: kCFBooleanTrue,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecAttrAccessGroup as String: accessGroup as AnyObject
]
var result: AnyObject?
let resultCodeLoad = withUnsafeMutablePointer(to: &result) {
SecItemCopyMatching(queryLoad as CFDictionary, UnsafeMutablePointer($0))
}
if resultCodeLoad == noErr {
if let result = result as? Data,
let keyValue = NSString(data: result,
encoding: String.Encoding.utf8.rawValue) as? String {
// Found successfully
print(keyValue)
return keyValue
}
} else {
print("Error loading from Keychain: \(resultCodeLoad)")
}
return nil
}
func setToken(token: String) {
guard let valueData = token.data(using: String.Encoding.utf8) else {
print("Error saving text to Keychain")
return
}
let queryAdd: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: tokenKey as AnyObject,
kSecValueData as String: valueData as AnyObject,
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked,
kSecAttrAccessGroup as String: accessGroup as AnyObject
]
let resultCode = SecItemAdd(queryAdd as CFDictionary, nil)
if resultCode != noErr {
print("Error saving to Keychain: \(resultCode)")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment