2017-02-07 20:24:58 +08:00
|
|
|
//
|
2018-01-29 03:23:34 +08:00
|
|
|
// PasscodeLock.swift
|
2021-08-28 07:32:31 +02:00
|
|
|
// passKit
|
2017-02-07 20:24:58 +08:00
|
|
|
//
|
2018-01-29 03:23:34 +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
|
|
|
//
|
|
|
|
|
|
2019-07-10 21:57:15 +02:00
|
|
|
public class PasscodeLock {
|
2018-01-29 03:23:34 +08:00
|
|
|
public static let shared = PasscodeLock()
|
2018-12-09 16:59:07 -08:00
|
|
|
|
2019-07-10 21:57:15 +02: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)
|
2019-07-10 21:57:15 +02:00
|
|
|
|
|
|
|
|
/// Constructor used to migrate passcode from SharedDefaults to Keychain
|
|
|
|
|
private init() {
|
2020-01-02 00:48:00 +01:00
|
|
|
if let passcode = Defaults.passcodeKey {
|
2019-07-10 21:57:15 +02:00
|
|
|
save(passcode: passcode)
|
2020-01-02 00:48:00 +01:00
|
|
|
Defaults.passcodeKey = nil
|
2019-07-10 21:57:15 +02:00
|
|
|
}
|
2017-02-07 20:24:58 +08:00
|
|
|
}
|
2018-12-09 16:59:07 -08:00
|
|
|
|
2018-01-29 03:23:34 +08:00
|
|
|
public var hasPasscode: Bool {
|
2020-06-28 21:25:40 +02:00
|
|
|
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 {
|
2020-06-28 21:25:40 +02: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 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
|
|
|
}
|
|
|
|
|
}
|