passforios/passKit/Models/PasscodeLock.swift

43 lines
1.1 KiB
Swift
Raw Normal View History

2017-02-07 20:24:58 +08:00
//
// PasscodeLock.swift
2021-08-28 07:32:31 +02:00
// passKit
2017-02-07 20:24:58 +08:00
//
// Created by Yishi Lin on 28/1/2018.
// Copyright © 2017 Yishi Lin. All rights reserved.
2017-02-07 20:24:58 +08:00
//
public class PasscodeLock {
public static let shared = PasscodeLock()
2018-12-09 16:59:07 -08:00
private static let identifier = Globals.bundleIdentifier + "passcode"
/// Cached passcode to avoid frequent access to Keychain
2019-10-01 00:16:56 +08:00
private var passcode: String? = AppKeychain.shared.get(for: PasscodeLock.identifier)
/// Constructor used to migrate passcode from SharedDefaults to Keychain
private init() {
if let passcode = Defaults.passcodeKey {
save(passcode: passcode)
Defaults.passcodeKey = nil
}
2017-02-07 20:24:58 +08:00
}
2018-12-09 16:59:07 -08:00
public var hasPasscode: Bool {
passcode != nil
2017-02-07 20:24:58 +08:00
}
2018-12-09 16:59:07 -08:00
2017-02-07 20:24:58 +08:00
public func save(passcode: String) {
2019-07-20 23:31:13 +02:00
AppKeychain.shared.add(string: passcode, for: PasscodeLock.identifier)
2019-10-01 00:16:56 +08:00
self.passcode = passcode
2017-02-07 20:24:58 +08:00
}
2018-12-09 16:59:07 -08:00
2017-02-07 20:24:58 +08:00
public func check(passcode: String) -> Bool {
self.passcode == passcode
2017-02-07 20:24:58 +08:00
}
2018-12-09 16:59:07 -08:00
2017-02-07 20:24:58 +08:00
public func delete() {
2019-07-20 23:31:13 +02:00
AppKeychain.shared.removeContent(for: PasscodeLock.identifier)
2019-10-01 00:16:56 +08:00
passcode = nil
2017-02-07 20:24:58 +08:00
}
}