From ea37b40e2ff1ff983c2131e74cd761a55ed41732 Mon Sep 17 00:00:00 2001 From: Danny Moesch Date: Sat, 20 Jul 2019 22:59:22 +0200 Subject: [PATCH] Mark field 'gpgAgent' as never-nil --- .../AddPasswordTableViewController.swift | 2 +- .../GeneralSettingsTableViewController.swift | 2 +- ...GPKeyArmorSettingTableViewController.swift | 2 +- .../PGPKeySettingTableViewController.swift | 2 +- .../PasswordDetailTableViewController.swift | 4 +-- .../Controllers/PasswordsViewController.swift | 10 +++---- .../SettingsTableViewController.swift | 28 +++++++++---------- .../CredentialProviderViewController.swift | 6 ++-- .../Controllers/ExtensionViewController.swift | 6 ++-- passKit/Models/PasswordStore.swift | 18 ++++-------- 10 files changed, 37 insertions(+), 43 deletions(-) diff --git a/pass/Controllers/AddPasswordTableViewController.swift b/pass/Controllers/AddPasswordTableViewController.swift index 23f2f19..64dce89 100644 --- a/pass/Controllers/AddPasswordTableViewController.swift +++ b/pass/Controllers/AddPasswordTableViewController.swift @@ -31,7 +31,7 @@ class AddPasswordTableViewController: PasswordEditorTableViewController { override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { if identifier == "saveAddPasswordSegue" { // check PGP key - guard passwordStore.pgpAgent?.isImported ?? false else { + guard passwordStore.pgpAgent.isImported else { let alertTitle = "CannotAddPassword".localize() let alertMessage = "PgpKeyNotSet.".localize() Utils.alert(title: alertTitle, message: alertMessage, controller: self, completion: nil) diff --git a/pass/Controllers/GeneralSettingsTableViewController.swift b/pass/Controllers/GeneralSettingsTableViewController.swift index 34b803c..c63ed07 100644 --- a/pass/Controllers/GeneralSettingsTableViewController.swift +++ b/pass/Controllers/GeneralSettingsTableViewController.swift @@ -221,7 +221,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { @objc func rememberPGPPassphraseSwitchAction(_ sender: Any?) { SharedDefaults[.isRememberPGPPassphraseOn] = rememberPGPPassphraseSwitch.isOn if rememberPGPPassphraseSwitch.isOn == false { - passwordStore.pgpAgent?.passphrase = nil + passwordStore.pgpAgent.passphrase = nil } } diff --git a/pass/Controllers/PGPKeyArmorSettingTableViewController.swift b/pass/Controllers/PGPKeyArmorSettingTableViewController.swift index 24fc3a9..6b85e30 100644 --- a/pass/Controllers/PGPKeyArmorSettingTableViewController.swift +++ b/pass/Controllers/PGPKeyArmorSettingTableViewController.swift @@ -91,7 +91,7 @@ class PGPKeyArmorSettingTableViewController: AutoCellHeightUITableViewController override func viewDidLoad() { super.viewDidLoad() - pgpPassphrase = passwordStore.pgpAgent?.passphrase + pgpPassphrase = passwordStore.pgpAgent.passphrase scanPublicKeyCell?.textLabel?.text = "ScanPublicKeyQrCodes".localize() scanPublicKeyCell?.textLabel?.textColor = Globals.blue diff --git a/pass/Controllers/PGPKeySettingTableViewController.swift b/pass/Controllers/PGPKeySettingTableViewController.swift index 554155b..95492dd 100644 --- a/pass/Controllers/PGPKeySettingTableViewController.swift +++ b/pass/Controllers/PGPKeySettingTableViewController.swift @@ -20,7 +20,7 @@ class PGPKeySettingTableViewController: AutoCellHeightUITableViewController { super.viewDidLoad() pgpPublicKeyURLTextField.text = SharedDefaults[.pgpPublicKeyURL]?.absoluteString pgpPrivateKeyURLTextField.text = SharedDefaults[.pgpPrivateKeyURL]?.absoluteString - pgpPassphrase = passwordStore.pgpAgent?.passphrase + pgpPassphrase = passwordStore.pgpAgent.passphrase } private func validatePGPKeyURL(input: String?) -> Bool { diff --git a/pass/Controllers/PasswordDetailTableViewController.swift b/pass/Controllers/PasswordDetailTableViewController.swift index b16b7cd..11a91b0 100644 --- a/pass/Controllers/PasswordDetailTableViewController.swift +++ b/pass/Controllers/PasswordDetailTableViewController.swift @@ -103,7 +103,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni } let _ = sem.wait(timeout: DispatchTime.distantFuture) if SharedDefaults[.isRememberPGPPassphraseOn] { - self.passwordStore.pgpAgent?.passphrase = passphrase + self.passwordStore.pgpAgent.passphrase = passphrase } return passphrase } @@ -122,7 +122,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni } catch { DispatchQueue.main.async { // remove the wrong passphrase so that users could enter it next time - self.passwordStore.pgpAgent?.passphrase = nil + self.passwordStore.pgpAgent.passphrase = nil // alert: cancel or try again let alert = UIAlertController(title: "CannotShowPassword".localize(), message: error.localizedDescription, preferredStyle: UIAlertController.Style.alert) alert.addAction(UIAlertAction(title: "Cancel".localize(), style: UIAlertAction.Style.default) { _ in diff --git a/pass/Controllers/PasswordsViewController.swift b/pass/Controllers/PasswordsViewController.swift index 0fd4c89..46dc2e5 100644 --- a/pass/Controllers/PasswordsViewController.swift +++ b/pass/Controllers/PasswordsViewController.swift @@ -385,13 +385,13 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV SVProgressHUD.show(withStatus: "Decrypting".localize()) } if SharedDefaults[.isRememberPGPPassphraseOn] { - self.passwordStore.pgpAgent?.passphrase = passphrase + self.passwordStore.pgpAgent.passphrase = passphrase } return passphrase } private func decryptThenCopyPassword(from indexPath: IndexPath) { - guard self.passwordStore.pgpAgent?.isImported ?? false else { + guard self.passwordStore.pgpAgent.isImported else { Utils.alert(title: "CannotCopyPassword".localize(), message: "SetPgpKey.".localize(), controller: self, completion: nil) return } @@ -412,7 +412,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV } catch { DispatchQueue.main.async { // remove the wrong passphrase so that users could enter it next time - self.passwordStore.pgpAgent?.passphrase = nil + self.passwordStore.pgpAgent.passphrase = nil Utils.alert(title: "CannotCopyPassword".localize(), message: error.localizedDescription, controller: self, completion: nil) } } @@ -453,7 +453,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { if identifier == "showPasswordDetail" { - guard self.passwordStore.pgpAgent?.isImported ?? false else { + guard self.passwordStore.pgpAgent.isImported else { Utils.alert(title: "CannotShowPassword".localize(), message: "SetPgpKey.".localize(), controller: self, completion: nil) if let s = sender as? UITableViewCell { let selectedIndexPath = tableView.indexPath(for: s)! @@ -462,7 +462,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV return false } } else if identifier == "addPasswordSegue" { - guard self.passwordStore.pgpAgent?.isImported ?? false && self.passwordStore.storeRepository != nil else { + guard self.passwordStore.pgpAgent.isImported && self.passwordStore.storeRepository != nil else { Utils.alert(title: "CannotAddPassword".localize(), message: "MakeSurePgpAndGitProperlySet.".localize(), controller: self, completion: nil) return false } diff --git a/pass/Controllers/SettingsTableViewController.swift b/pass/Controllers/SettingsTableViewController.swift index 6a936af..3e7ac60 100644 --- a/pass/Controllers/SettingsTableViewController.swift +++ b/pass/Controllers/SettingsTableViewController.swift @@ -29,7 +29,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele SharedDefaults[.pgpPrivateKeyURL] = URL(string: controller.pgpPrivateKeyURLTextField.text!.trimmed) SharedDefaults[.pgpPublicKeyURL] = URL(string: controller.pgpPublicKeyURLTextField.text!.trimmed) if SharedDefaults[.isRememberPGPPassphraseOn] { - self.passwordStore.pgpAgent?.passphrase = controller.pgpPassphrase + self.passwordStore.pgpAgent.passphrase = controller.pgpPassphrase } SharedDefaults[.pgpKeySource] = "url" @@ -38,10 +38,10 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele SVProgressHUD.show(withStatus: "FetchingPgpKey".localize()) DispatchQueue.global(qos: .userInitiated).async { [unowned self] in do { - try self.passwordStore.pgpAgent?.initPGPKey(from: SharedDefaults[.pgpPublicKeyURL]!, keyType: .PUBLIC) - try self.passwordStore.pgpAgent?.initPGPKey(from: SharedDefaults[.pgpPrivateKeyURL]!, keyType: .PRIVATE) + try self.passwordStore.pgpAgent.initPGPKey(from: SharedDefaults[.pgpPublicKeyURL]!, keyType: .PUBLIC) + try self.passwordStore.pgpAgent.initPGPKey(from: SharedDefaults[.pgpPrivateKeyURL]!, keyType: .PRIVATE) DispatchQueue.main.async { - self.pgpKeyTableViewCell.detailTextLabel?.text = self.passwordStore.pgpAgent?.pgpKeyID + self.pgpKeyTableViewCell.detailTextLabel?.text = self.passwordStore.pgpAgent.pgpKeyID SVProgressHUD.showSuccess(withStatus: "Success".localize()) SVProgressHUD.dismiss(withDelay: 1) Utils.alert(title: "RememberToRemoveKey".localize(), message: "RememberToRemoveKeyFromServer.".localize(), controller: self, completion: nil) @@ -57,17 +57,17 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele } else if let controller = segue.source as? PGPKeyArmorSettingTableViewController { SharedDefaults[.pgpKeySource] = "armor" if SharedDefaults[.isRememberPGPPassphraseOn] { - self.passwordStore.pgpAgent?.passphrase = controller.pgpPassphrase + self.passwordStore.pgpAgent.passphrase = controller.pgpPassphrase } SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.setDefaultStyle(.light) SVProgressHUD.show(withStatus: "FetchingPgpKey".localize()) DispatchQueue.global(qos: .userInitiated).async { [unowned self] in do { - try self.passwordStore.pgpAgent?.initPGPKey(with: controller.armorPublicKeyTextView.text ?? "", keyType: .PUBLIC) - try self.passwordStore.pgpAgent?.initPGPKey(with: controller.armorPrivateKeyTextView.text ?? "", keyType: .PRIVATE) + try self.passwordStore.pgpAgent.initPGPKey(with: controller.armorPublicKeyTextView.text ?? "", keyType: .PUBLIC) + try self.passwordStore.pgpAgent.initPGPKey(with: controller.armorPrivateKeyTextView.text ?? "", keyType: .PRIVATE) DispatchQueue.main.async { - self.pgpKeyTableViewCell.detailTextLabel?.text = self.passwordStore.pgpAgent?.pgpKeyID + self.pgpKeyTableViewCell.detailTextLabel?.text = self.passwordStore.pgpAgent.pgpKeyID SVProgressHUD.showSuccess(withStatus: "Success".localize()) SVProgressHUD.dismiss(withDelay: 1) } @@ -89,9 +89,9 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele SVProgressHUD.show(withStatus: "FetchingPgpKey".localize()) DispatchQueue.global(qos: .userInitiated).async { [unowned self] in do { - try self.passwordStore.pgpAgent?.initPGPKeyFromFileSharing() + try self.passwordStore.pgpAgent.initPGPKeyFromFileSharing() DispatchQueue.main.async { - self.pgpKeyTableViewCell.detailTextLabel?.text = self.passwordStore.pgpAgent?.pgpKeyID + self.pgpKeyTableViewCell.detailTextLabel?.text = self.passwordStore.pgpAgent.pgpKeyID SVProgressHUD.showSuccess(withStatus: "Imported".localize()) SVProgressHUD.dismiss(withDelay: 1) } @@ -135,7 +135,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele } private func setPGPKeyTableViewCellDetailText() { - if let pgpKeyID = self.passwordStore.pgpAgent?.pgpKeyID { + if let pgpKeyID = self.passwordStore.pgpAgent.pgpKeyID { pgpKeyTableViewCell.detailTextLabel?.text = pgpKeyID } else { pgpKeyTableViewCell.detailTextLabel?.text = "NotSet".localize() @@ -192,14 +192,14 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele optionMenu.addAction(urlAction) optionMenu.addAction(armorAction) - if passwordStore.pgpAgent?.isFileSharingReady ?? false { + if passwordStore.pgpAgent.isFileSharingReady { fileActionTitle.append(" (\("Import".localize()))") let fileAction = UIAlertAction(title: fileActionTitle, style: .default) { _ in // passphrase related let savePassphraseAlert = UIAlertController(title: "Passphrase".localize(), message: "WantToSavePassphrase?".localize(), preferredStyle: UIAlertController.Style.alert) // no savePassphraseAlert.addAction(UIAlertAction(title: "No".localize(), style: UIAlertAction.Style.default) { _ in - self.passwordStore.pgpAgent?.passphrase = nil + self.passwordStore.pgpAgent.passphrase = nil SharedDefaults[.isRememberPGPPassphraseOn] = false self.saveImportedPGPKey() }) @@ -208,7 +208,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele // ask for the passphrase let alert = UIAlertController(title: "Passphrase".localize(), message: "FillInPgpPassphrase.".localize(), preferredStyle: UIAlertController.Style.alert) alert.addAction(UIAlertAction(title: "Ok".localize(), style: UIAlertAction.Style.default, handler: {_ in - self.passwordStore.pgpAgent?.passphrase = alert.textFields?.first?.text + self.passwordStore.pgpAgent.passphrase = alert.textFields?.first?.text SharedDefaults[.isRememberPGPPassphraseOn] = true self.saveImportedPGPKey() })) diff --git a/passAutoFillExtension/Controllers/CredentialProviderViewController.swift b/passAutoFillExtension/Controllers/CredentialProviderViewController.swift index 6bef8da..a006e80 100644 --- a/passAutoFillExtension/Controllers/CredentialProviderViewController.swift +++ b/passAutoFillExtension/Controllers/CredentialProviderViewController.swift @@ -145,7 +145,7 @@ class CredentialProviderViewController: ASCredentialProviderViewController, UITa func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let entry = getPasswordEntry(by: indexPath) - guard self.passwordStore.pgpAgent?.isImported ?? false else { + guard self.passwordStore.pgpAgent.isImported else { Utils.alert(title: "CannotCopyPassword".localize(), message: "PgpKeyNotSet.".localize(), controller: self, completion: nil) return } @@ -165,7 +165,7 @@ class CredentialProviderViewController: ASCredentialProviderViewController, UITa } catch { DispatchQueue.main.async { // remove the wrong passphrase so that users could enter it next time - self.passwordStore.pgpAgent?.passphrase = nil + self.passwordStore.pgpAgent.passphrase = nil Utils.alert(title: "CannotCopyPassword".localize(), message: error.localizedDescription, controller: self, completion: nil) } } @@ -200,7 +200,7 @@ class CredentialProviderViewController: ASCredentialProviderViewController, UITa } let _ = sem.wait(timeout: DispatchTime.distantFuture) if SharedDefaults[.isRememberPGPPassphraseOn] { - self.passwordStore.pgpAgent?.passphrase = passphrase + self.passwordStore.pgpAgent.passphrase = passphrase } return passphrase } diff --git a/passExtension/Controllers/ExtensionViewController.swift b/passExtension/Controllers/ExtensionViewController.swift index c6f208b..72db039 100644 --- a/passExtension/Controllers/ExtensionViewController.swift +++ b/passExtension/Controllers/ExtensionViewController.swift @@ -153,7 +153,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let entry = getPasswordEntry(by: indexPath) - guard self.passwordStore.pgpAgent?.isImported ?? false else { + guard self.passwordStore.pgpAgent.isImported else { Utils.alert(title: "CannotCopyPassword".localize(), message: "PgpKeyNotSet.".localize(), controller: self, completion: nil) return } @@ -191,7 +191,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV } catch { DispatchQueue.main.async { // remove the wrong passphrase so that users could enter it next time - self.passwordStore.pgpAgent?.passphrase = nil + self.passwordStore.pgpAgent.passphrase = nil Utils.alert(title: "CannotCopyPassword".localize(), message: error.localizedDescription, controller: self, completion: nil) } } @@ -227,7 +227,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV } let _ = sem.wait(timeout: DispatchTime.distantFuture) if SharedDefaults[.isRememberPGPPassphraseOn] { - self.passwordStore.pgpAgent?.passphrase = passphrase + self.passwordStore.pgpAgent.passphrase = passphrase } return passphrase } diff --git a/passKit/Models/PasswordStore.swift b/passKit/Models/PasswordStore.swift index fbbef0c..b908b44 100644 --- a/passKit/Models/PasswordStore.swift +++ b/passKit/Models/PasswordStore.swift @@ -25,7 +25,7 @@ public class PasswordStore { public let storeURL = URL(fileURLWithPath: "\(Globals.repositoryPath)") public let tempStoreURL = URL(fileURLWithPath: "\(Globals.repositoryPath)-temp") - public let pgpAgent: PGPAgent? + public let pgpAgent = PGPAgent() public var storeRepository: GTRepository? @@ -104,8 +104,6 @@ public class PasswordStore { } private init() { - self.pgpAgent = PGPAgent() - // Migration importExistingKeysIntoKeychain() @@ -113,7 +111,7 @@ public class PasswordStore { if fm.fileExists(atPath: storeURL.path) { try storeRepository = GTRepository.init(url: storeURL) } - try self.pgpAgent?.initPGPKeys() + try self.pgpAgent.initPGPKeys() } catch { print(error) } @@ -640,7 +638,7 @@ public class PasswordStore { try? fm.removeItem(atPath: Globals.gitSSHPrivateKeyPath) - self.pgpAgent?.removePGPKeys() + self.pgpAgent.removePGPKeys() AppKeychain.removeAllContent() @@ -701,7 +699,7 @@ public class PasswordStore { public func decrypt(passwordEntity: PasswordEntity, requestPGPKeyPassphrase: () -> String) throws -> Password? { let encryptedDataPath = storeURL.appendingPathComponent(passwordEntity.getPath()) let encryptedData = try Data(contentsOf: encryptedDataPath) - guard let decryptedData = try self.pgpAgent?.decrypt(encryptedData: encryptedData, requestPGPKeyPassphrase: requestPGPKeyPassphrase) else { + guard let decryptedData = try self.pgpAgent.decrypt(encryptedData: encryptedData, requestPGPKeyPassphrase: requestPGPKeyPassphrase) else { throw AppError.Decryption } let plainText = String(data: decryptedData, encoding: .utf8) ?? "" @@ -710,15 +708,11 @@ public class PasswordStore { } public func encrypt(password: Password) throws -> Data { - let plainData = password.plainData - guard let encryptedData = try self.pgpAgent?.encrypt(plainData: plainData) else { - throw AppError.Encryption - } - return encryptedData + return try self.pgpAgent.encrypt(plainData: password.plainData) } public func removePGPKeys() { - self.pgpAgent?.removePGPKeys() + self.pgpAgent.removePGPKeys() } public func removeGitSSHKeys() {