Save app passcode in Keychain and migrate existing passcode from SharedDefaults
This commit is contained in:
parent
cc493cb490
commit
8e8501abb0
3 changed files with 18 additions and 11 deletions
|
|
@ -20,6 +20,7 @@ public extension DefaultsKeys {
|
|||
static let pgpPublicKeyArmor = DefaultsKey<String?>("pgpPublicKeyArmor")
|
||||
static let pgpPrivateKeyArmor = DefaultsKey<String?>("pgpPrivateKeyArmor")
|
||||
static let gitSSHPrivateKeyArmor = DefaultsKey<String?>("gitSSHPrivateKeyArmor")
|
||||
static let passcodeKey = DefaultsKey<String?>("passcodeKey")
|
||||
|
||||
static let gitURL = DefaultsKey<URL?>("gitURL")
|
||||
static let gitAuthenticationMethod = DefaultsKey<String?>("gitAuthenticationMethod")
|
||||
|
|
@ -33,7 +34,6 @@ public extension DefaultsKeys {
|
|||
static let lastSyncedTime = DefaultsKey<Date?>("lastSyncedTime")
|
||||
|
||||
static let isTouchIDOn = DefaultsKey<Bool>("isTouchIDOn", defaultValue: false)
|
||||
static let passcodeKey = DefaultsKey<String?>("passcodeKey")
|
||||
|
||||
static let isHideUnknownOn = DefaultsKey<Bool>("isHideUnknownOn", defaultValue: false)
|
||||
static let isHideOTPOn = DefaultsKey<Bool>("isHideOTPOn", defaultValue: false)
|
||||
|
|
|
|||
|
|
@ -6,15 +6,20 @@
|
|||
// Copyright © 2017 Yishi Lin. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import LocalAuthentication
|
||||
|
||||
open class PasscodeLock {
|
||||
public class PasscodeLock {
|
||||
public static let shared = PasscodeLock()
|
||||
|
||||
fileprivate let passcodeKey = "passcode.lock.passcode"
|
||||
fileprivate var passcode: String? {
|
||||
return SharedDefaults[.passcodeKey]
|
||||
private static let identifier = Globals.bundleIdentifier + "passcode"
|
||||
|
||||
/// Cached passcode to avoid frequent access to Keychain
|
||||
private var passcode: String? = AppKeychain.get(for: PasscodeLock.identifier)
|
||||
|
||||
/// Constructor used to migrate passcode from SharedDefaults to Keychain
|
||||
private init() {
|
||||
if let passcode = SharedDefaults[.passcodeKey] {
|
||||
save(passcode: passcode)
|
||||
SharedDefaults[.passcodeKey] = nil
|
||||
}
|
||||
}
|
||||
|
||||
public var hasPasscode: Bool {
|
||||
|
|
@ -22,7 +27,8 @@ open class PasscodeLock {
|
|||
}
|
||||
|
||||
public func save(passcode: String) {
|
||||
SharedDefaults[.passcodeKey] = passcode
|
||||
AppKeychain.add(string: passcode, for: PasscodeLock.identifier)
|
||||
self.passcode = passcode
|
||||
}
|
||||
|
||||
public func check(passcode: String) -> Bool {
|
||||
|
|
@ -30,6 +36,7 @@ open class PasscodeLock {
|
|||
}
|
||||
|
||||
public func delete() {
|
||||
SharedDefaults[.passcodeKey] = nil
|
||||
AppKeychain.removeContent(for: PasscodeLock.identifier)
|
||||
passcode = nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue