diff options
author | 2019-02-06 03:23:51 +0100 | |
---|---|---|
committer | 2019-02-06 06:20:23 +0100 | |
commit | bebcaa012bfafb5ab1a8ee4db11feffd3843c52c (patch) | |
tree | ee89b91f60bd267c356b0931d72bde9a288c8771 /WireGuard/WireGuard/UI/PrivateDataConfirmation.swift | |
parent | LegacyConfig: Remove and support plaintext for .mobileconfig (diff) | |
download | wireguard-apple-bebcaa012bfafb5ab1a8ee4db11feffd3843c52c.tar.xz wireguard-apple-bebcaa012bfafb5ab1a8ee4db11feffd3843c52c.zip |
PrivateDataConfirmation: prompt with touch/face/pin/password ID for viewing/exporting keys
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'WireGuard/WireGuard/UI/PrivateDataConfirmation.swift')
-rw-r--r-- | WireGuard/WireGuard/UI/PrivateDataConfirmation.swift | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/UI/PrivateDataConfirmation.swift b/WireGuard/WireGuard/UI/PrivateDataConfirmation.swift new file mode 100644 index 0000000..c03e64a --- /dev/null +++ b/WireGuard/WireGuard/UI/PrivateDataConfirmation.swift @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved. + +import Foundation +import LocalAuthentication +#if os(macOS) +import AppKit +#endif + +class PrivateDataConfirmation { + static func confirmAccess(to reason: String, _ after: @escaping () -> Void) { + let context = LAContext() + + var error: NSError? + if !context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) { + guard let error = error as? LAError else { return } + if error.code == .passcodeNotSet { + // We give no protection to folks who just don't set a passcode. + after() + } + return + } + + context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) { success, _ in + DispatchQueue.main.async { + #if os(macOS) + if !NSApp.isActive { + NSApp.activate(ignoringOtherApps: true) + } + #endif + if success { + after() + } + } + } + } +} |