mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
71 lines
2.6 KiB
Swift
71 lines
2.6 KiB
Swift
import Foundation
|
|
import LocalAuthentication
|
|
import SwiftSignalKit
|
|
|
|
public enum LocalAuthBiometricAuthentication {
|
|
case touchId
|
|
case faceId
|
|
}
|
|
|
|
public struct LocalAuth {
|
|
public 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
|
|
}
|
|
}()
|
|
|
|
public 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
|
|
}()
|
|
|
|
public 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()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|