Clear the copied ascii-armor keys 10s after pasting.

This commit is contained in:
Yishi Lin 2017-04-04 00:03:21 +08:00
parent e155cbedb3
commit 855e3c34d9
3 changed files with 85 additions and 167 deletions

View file

@ -9,13 +9,15 @@
import UIKit
import SwiftyUserDefaults
class GitSSHKeyArmorSettingTableViewController: UITableViewController {
class GitSSHKeyArmorSettingTableViewController: UITableViewController, UITextViewDelegate {
@IBOutlet weak var armorPublicKeyTextView: UITextView!
@IBOutlet weak var armorPrivateKeyTextView: UITextView!
var gitSSHPrivateKeyPassphrase: String?
let passwordStore = PasswordStore.shared
var doneBarButtonItem: UIBarButtonItem?
private var recentPastedText = ""
override func viewDidLoad() {
super.viewDidLoad()
armorPublicKeyTextView.text = Defaults[.gitSSHPublicKeyArmor]
@ -28,6 +30,8 @@ class GitSSHKeyArmorSettingTableViewController: UITableViewController {
action: #selector(doneButtonTapped(_:)))
navigationItem.rightBarButtonItem = doneBarButtonItem
navigationItem.title = "SSH Key"
armorPublicKeyTextView.delegate = self
armorPrivateKeyTextView.delegate = self
}
private func createSavePassphraseAlert() -> UIAlertController {
@ -68,5 +72,17 @@ class GitSSHKeyArmorSettingTableViewController: UITableViewController {
self.present(alert, animated: true, completion: nil)
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == UIPasteboard.general.string {
// user pastes somethint, get ready to clear in 10s
recentPastedText = text
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime.now() + 10) { [weak weakSelf = self] in
if let pasteboardString = UIPasteboard.general.string,
pasteboardString == weakSelf?.recentPastedText {
UIPasteboard.general.string = ""
}
}
}
return true
}
}

View file

@ -9,17 +9,22 @@
import UIKit
import SwiftyUserDefaults
class PGPKeyArmorSettingTableViewController: UITableViewController {
class PGPKeyArmorSettingTableViewController: UITableViewController, UITextViewDelegate {
@IBOutlet weak var armorPublicKeyTextView: UITextView!
@IBOutlet weak var armorPrivateKeyTextView: UITextView!
var pgpPassphrase: String?
let passwordStore = PasswordStore.shared
private var recentPastedText = ""
override func viewDidLoad() {
super.viewDidLoad()
armorPublicKeyTextView.text = Defaults[.pgpPublicKeyArmor]
armorPrivateKeyTextView.text = Defaults[.pgpPrivateKeyArmor]
pgpPassphrase = passwordStore.pgpKeyPassphrase
armorPublicKeyTextView.delegate = self
armorPrivateKeyTextView.delegate = self
}
private func createSavePassphraseAlert() -> UIAlertController {
@ -48,5 +53,18 @@ class PGPKeyArmorSettingTableViewController: UITableViewController {
})
self.present(alert, animated: true, completion: nil)
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == UIPasteboard.general.string {
// user pastes somethint, get ready to clear in 10s
recentPastedText = text
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime.now() + 10) { [weak weakSelf = self] in
if let pasteboardString = UIPasteboard.general.string,
pasteboardString == weakSelf?.recentPastedText {
UIPasteboard.general.string = ""
}
}
}
return true
}
}