Peter b317aab568 Add 'submodules/TelegramUI/' from commit 'fa3ac0b61a27c8dd3296518a15891a6f9750cbf2'
git-subtree-dir: submodules/TelegramUI
git-subtree-mainline: 5c1613d1048026b9e00a6ce753775cef87eb53fa
git-subtree-split: fa3ac0b61a27c8dd3296518a15891a6f9750cbf2
2019-06-11 19:00:46 +01:00

71 lines
2.5 KiB
Swift

import Foundation
import LocalAuthentication
import SwiftSignalKit
enum LocalAuthBiometricAuthentication {
case touchId
case faceId
}
struct LocalAuth {
static let biometricAuthentication: LocalAuthBiometricAuthentication? = {
let context = LAContext()
if context.canEvaluatePolicy(LAPolicy(rawValue: Int(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, error: nil) {
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
switch context.biometryType {
case .faceID:
return .faceId
case .touchID:
return .touchId
case .none:
return nil
}
} else {
return .touchId
}
} else {
return nil
}
}()
static let evaluatedPolicyDomainState: Data? = {
let context = LAContext()
if context.canEvaluatePolicy(LAPolicy(rawValue: Int(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, error: nil) {
if #available(iOSApplicationExtension 9.0, iOS 9.0, *) {
return context.evaluatedPolicyDomainState
} else {
return Data()
}
}
return nil
}()
static func auth(reason: String) -> Signal<(Bool, Data?), NoError> {
return Signal { subscriber in
let context = LAContext()
if LAContext().canEvaluatePolicy(LAPolicy(rawValue: Int(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, error: nil) {
context.evaluatePolicy(LAPolicy(rawValue: Int(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, localizedReason: reason, reply: { result, _ in
let evaluatedPolicyDomainState: Data?
if #available(iOSApplicationExtension 9.0, iOS 9.0, *) {
evaluatedPolicyDomainState = context.evaluatedPolicyDomainState
} else {
evaluatedPolicyDomainState = Data()
}
subscriber.putNext((result, evaluatedPolicyDomainState))
subscriber.putCompletion()
})
} else {
subscriber.putNext((false, nil))
subscriber.putCompletion()
}
return ActionDisposable {
if #available(iOSApplicationExtension 9.0, iOS 9.0, *) {
context.invalidate()
}
}
}
}
}