mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-30 15:10:56 +00:00

git-subtree-dir: submodules/TelegramUI git-subtree-mainline: 5c1613d1048026b9e00a6ce753775cef87eb53fa git-subtree-split: fa3ac0b61a27c8dd3296518a15891a6f9750cbf2
71 lines
2.5 KiB
Swift
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()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|