Passcode refactoring & improvements

This commit is contained in:
Igor Kislyuk 2018-03-23 12:48:36 +03:00
parent 4861749415
commit ce2c69e854
2 changed files with 23 additions and 19 deletions

View File

@ -76,11 +76,22 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
initialLoadView()
initialDotNumberConfiguration()
enebleKeyboard()
configureBackgroundNotifications()
showTouchIdIfNeeded(with: touchIdHint)
}
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
fakeTextField.becomeFirstResponder()
}
override open func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
fakeTextField.resignFirstResponder()
}
// MARK: - Private functions
private func configureBackgroundNotifications() {
@ -95,10 +106,6 @@ open class BasePassCodeViewController: UIViewController, ConfigurableController
.disposed(by: disposeBag)
}
private func enebleKeyboard() {
fakeTextField.becomeFirstResponder()
}
private func initialDotNumberConfiguration() {
dotStackView.arrangedSubviews.forEach { dotStackView.removeArrangedSubview($0) }

View File

@ -28,7 +28,7 @@ import IDZSwiftCommonCrypto
open class BasePassCodeService {
/// Override to set specific keychain service name
open class var keychainService: String {
open class var keychainServiceString: String {
return Bundle.main.bundleIdentifier ?? ""
}
@ -42,37 +42,34 @@ open class BasePassCodeService {
// MARK: - Private stuff
fileprivate lazy var keychain: Keychain = {
return Keychain(service: BasePassCodeService.keychainService)
.synchronizable(false)
}()
private lazy var keychain = Keychain(service: BasePassCodeService.keychainServiceString).synchronizable(false)
fileprivate var passCodeHash: String? {
private var passCodeHash: String? {
return keychain[Keys.passCodeHash]
}
fileprivate enum Keys {
private enum Keys {
static let passCodeHash = "passCodeHash"
static let isTouchIdEnabled = "isTouchIdEnabled"
static let isInitialLoad = "isInitialLoad"
}
fileprivate enum Values {
private enum Values {
static let touchIdEnabled = "touchIdEnabled"
static let initialLoad = "initialLoad"
}
}
extension BasePassCodeService {
public extension BasePassCodeService {
/// Indicates is pass code already saved on this device
public var isPassCodeSaved: Bool {
var isPassCodeSaved: Bool {
return keychain[Keys.passCodeHash] != nil
}
/// Indicates is it possible to authenticate on this device via touch id
public var isTouchIdEnabled: Bool {
var isTouchIdEnabled: Bool {
get {
return keychain[Keys.isTouchIdEnabled] == Values.touchIdEnabled
}
@ -82,7 +79,7 @@ extension BasePassCodeService {
}
/// Saves new pass code
public func save(passCode: String?) {
func save(passCode: String?) {
if let passCode = passCode {
keychain[Keys.passCodeHash] = sha256(passCode)
} else {
@ -91,12 +88,12 @@ extension BasePassCodeService {
}
/// Check if pass code is correct
public func check(passCode: String) -> Bool {
func check(passCode: String) -> Bool {
return sha256(passCode) == passCodeHash
}
/// Reset pass code settings
public func reset() {
func reset() {
save(passCode: nil)
isTouchIdEnabled = false
}