2017-02-07 20:24:58 +08:00
|
|
|
//
|
2018-01-29 03:23:34 +08:00
|
|
|
// PasscodeLock.swift
|
|
|
|
|
// 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-09-28 21:38:32 +08:00
|
|
|
private var passcode: String? {
|
|
|
|
|
get {
|
|
|
|
|
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() {
|
|
|
|
|
if let passcode = SharedDefaults[.passcodeKey] {
|
|
|
|
|
save(passcode: passcode)
|
|
|
|
|
SharedDefaults[.passcodeKey] = nil
|
|
|
|
|
}
|
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 {
|
|
|
|
|
return 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)
|
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 {
|
|
|
|
|
return self.passcode == passcode
|
|
|
|
|
}
|
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)
|
2017-02-07 20:24:58 +08:00
|
|
|
}
|
|
|
|
|
}
|