42 lines
1.1 KiB
Swift
42 lines
1.1 KiB
Swift
//
|
|
// PasscodeLock.swift
|
|
// passKit
|
|
//
|
|
// Created by Yishi Lin on 28/1/2018.
|
|
// Copyright © 2017 Yishi Lin. All rights reserved.
|
|
//
|
|
|
|
public class PasscodeLock {
|
|
public static let shared = PasscodeLock()
|
|
|
|
private static let identifier = Globals.bundleIdentifier + "passcode"
|
|
|
|
/// Cached passcode to avoid frequent access to Keychain
|
|
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
|
|
}
|
|
}
|
|
|
|
public var hasPasscode: Bool {
|
|
passcode != nil
|
|
}
|
|
|
|
public func save(passcode: String) {
|
|
AppKeychain.shared.add(string: passcode, for: PasscodeLock.identifier)
|
|
self.passcode = passcode
|
|
}
|
|
|
|
public func check(passcode: String) -> Bool {
|
|
self.passcode == passcode
|
|
}
|
|
|
|
public func delete() {
|
|
AppKeychain.shared.removeContent(for: PasscodeLock.identifier)
|
|
passcode = nil
|
|
}
|
|
}
|