diff --git a/.travis.yml b/.travis.yml index 0b96b3b..5c209f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode11 +osx_image: xcode11.3 addons: homebrew: packages: diff --git a/Cartfile.resolved b/Cartfile.resolved index dfbacc7..c73c681 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -4,4 +4,4 @@ github "leonbreedt/FavIcon" "3.0.6" github "mattrubin/Base32" "1.1.2+xcode10.2" github "mattrubin/OneTimePassword" "3.2.0" github "mssun/objective-git" "0.15" -github "radex/SwiftyUserDefaults" "4.0.0" +github "radex/SwiftyUserDefaults" "5.0.0" diff --git a/pass/Controllers/AddPasswordTableViewController.swift b/pass/Controllers/AddPasswordTableViewController.swift index 94e2578..bae6b2e 100644 --- a/pass/Controllers/AddPasswordTableViewController.swift +++ b/pass/Controllers/AddPasswordTableViewController.swift @@ -20,7 +20,7 @@ class AddPasswordTableViewController: PasswordEditorTableViewController { [[.type: PasswordEditorCellType.additionsCell, .title: "additions"]], [[.type: PasswordEditorCellType.scanQRCodeCell]] ] - if PasswordGeneratorFlavour.from(SharedDefaults[.passwordGeneratorFlavor]) == .RANDOM { + if PasswordGeneratorFlavour.from(Defaults.passwordGeneratorFlavor) == .RANDOM { tableData[1].append([.type: PasswordEditorCellType.passwordLengthCell, .title: "passwordlength"]) } tableData[1].append([.type: PasswordEditorCellType.memorablePasswordGeneratorCell]) diff --git a/pass/Controllers/AdvancedSettingsTableViewController.swift b/pass/Controllers/AdvancedSettingsTableViewController.swift index b0aa5c9..5ac0e5b 100644 --- a/pass/Controllers/AdvancedSettingsTableViewController.swift +++ b/pass/Controllers/AdvancedSettingsTableViewController.swift @@ -28,7 +28,7 @@ class AdvancedSettingsTableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() - encryptInASCIIArmoredSwitch.isOn = SharedDefaults[.encryptInArmored] + encryptInASCIIArmoredSwitch.isOn = Defaults.encryptInArmored encryptInASCIIArmoredTableViewCell.accessoryView = encryptInASCIIArmoredSwitch encryptInASCIIArmoredTableViewCell.selectionStyle = .none setGitSignatureText() @@ -39,7 +39,7 @@ class AdvancedSettingsTableViewController: UITableViewController { let gitSignatureEmail = passwordStore.gitSignatureForNow?.email ?? "" self.gitSignatureTableViewCell.detailTextLabel?.font = UIFont.preferredFont(forTextStyle: .footnote) self.gitSignatureTableViewCell.detailTextLabel?.text = "\(gitSignatureName) <\(gitSignatureEmail)>" - if SharedDefaults[.gitSignatureName] == nil && SharedDefaults[.gitSignatureEmail] == nil { + if Defaults.gitSignatureName == nil && Defaults.gitSignatureEmail == nil { self.gitSignatureTableViewCell.detailTextLabel?.font = UIFont.preferredFont(forTextStyle: .body) gitSignatureTableViewCell.detailTextLabel?.text = "NotSet".localize() } @@ -78,15 +78,15 @@ class AdvancedSettingsTableViewController: UITableViewController { } @objc func encryptInASCIIArmoredAction(_ sender: Any?) { - SharedDefaults[.encryptInArmored] = encryptInASCIIArmoredSwitch.isOn + Defaults.encryptInArmored = encryptInASCIIArmoredSwitch.isOn } @IBAction func saveGitConfigSetting(segue: UIStoryboardSegue) { if let controller = segue.source as? GitConfigSettingTableViewController { if let gitSignatureName = controller.nameTextField.text, let gitSignatureEmail = controller.emailTextField.text { - SharedDefaults[.gitSignatureName] = gitSignatureName.isEmpty ? nil : gitSignatureName - SharedDefaults[.gitSignatureEmail] = gitSignatureEmail.isEmpty ? nil : gitSignatureEmail + Defaults.gitSignatureName = gitSignatureName.isEmpty ? nil : gitSignatureName + Defaults.gitSignatureEmail = gitSignatureEmail.isEmpty ? nil : gitSignatureEmail } setGitSignatureText() } diff --git a/pass/Controllers/EditPasswordTableViewController.swift b/pass/Controllers/EditPasswordTableViewController.swift index b0269c3..32b2132 100644 --- a/pass/Controllers/EditPasswordTableViewController.swift +++ b/pass/Controllers/EditPasswordTableViewController.swift @@ -18,7 +18,7 @@ class EditPasswordTableViewController: PasswordEditorTableViewController { [[.type: PasswordEditorCellType.scanQRCodeCell], [.type: PasswordEditorCellType.deletePasswordCell]] ] - if PasswordGeneratorFlavour.from(SharedDefaults[.passwordGeneratorFlavor]) == .RANDOM { + if PasswordGeneratorFlavour.from(Defaults.passwordGeneratorFlavor) == .RANDOM { tableData[1].append([.type: PasswordEditorCellType.passwordLengthCell, .title: "passwordlength"]) } tableData[1].append([.type: PasswordEditorCellType.memorablePasswordGeneratorCell]) diff --git a/pass/Controllers/GeneralSettingsTableViewController.swift b/pass/Controllers/GeneralSettingsTableViewController.swift index aedb9a7..8d2cca3 100644 --- a/pass/Controllers/GeneralSettingsTableViewController.swift +++ b/pass/Controllers/GeneralSettingsTableViewController.swift @@ -33,7 +33,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { uiSwitch.onTintColor = Colors.systemBlue uiSwitch.sizeToFit() uiSwitch.addTarget(self, action: #selector(rememberPGPPassphraseSwitchAction(_:)), for: UIControl.Event.valueChanged) - uiSwitch.isOn = SharedDefaults[.isRememberPGPPassphraseOn] + uiSwitch.isOn = Defaults.isRememberPGPPassphraseOn return uiSwitch }() @@ -42,7 +42,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { uiSwitch.onTintColor = Colors.systemBlue uiSwitch.sizeToFit() uiSwitch.addTarget(self, action: #selector(rememberGitCredentialPassphraseSwitchAction(_:)), for: UIControl.Event.valueChanged) - uiSwitch.isOn = SharedDefaults[.isRememberGitCredentialPassphraseOn] + uiSwitch.isOn = Defaults.isRememberGitCredentialPassphraseOn return uiSwitch }() @@ -51,7 +51,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { uiSwitch.onTintColor = Colors.systemBlue uiSwitch.sizeToFit() uiSwitch.addTarget(self, action: #selector(showFolderSwitchAction(_:)), for: UIControl.Event.valueChanged) - uiSwitch.isOn = SharedDefaults[.isShowFolderOn] + uiSwitch.isOn = Defaults.isShowFolderOn return uiSwitch }() @@ -60,7 +60,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { uiSwitch.onTintColor = Colors.systemBlue uiSwitch.sizeToFit() uiSwitch.addTarget(self, action: #selector(hidePasswordImagesSwitchAction(_:)), for: UIControl.Event.valueChanged) - uiSwitch.isOn = SharedDefaults[.isHidePasswordImagesOn] + uiSwitch.isOn = Defaults.isHidePasswordImagesOn return uiSwitch }() @@ -105,7 +105,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { accessoryView.addSubview(hideUnknownSwitch) cell.accessoryView = accessoryView cell.selectionStyle = .none - hideUnknownSwitch.isOn = SharedDefaults[.isHideUnknownOn] + hideUnknownSwitch.isOn = Defaults.isHideUnknownOn case "HideOtpFields".localize(): cell.accessoryType = .none let detailButton = UIButton(type: .detailDisclosure) @@ -117,7 +117,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { accessoryView.addSubview(hideOTPSwitch) cell.accessoryView = accessoryView cell.selectionStyle = .none - hideOTPSwitch.isOn = SharedDefaults[.isHideOTPOn] + hideOTPSwitch.isOn = Defaults.isHideOTPOn case "RememberPgpKeyPassphrase".localize(): cell.accessoryType = .none cell.selectionStyle = .none @@ -141,10 +141,10 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { accessoryView.addSubview(hidePasswordImagesSwitch) cell.accessoryView = accessoryView cell.selectionStyle = .none - hidePasswordImagesSwitch.isOn = SharedDefaults[.isHidePasswordImagesOn] + hidePasswordImagesSwitch.isOn = Defaults.isHidePasswordImagesOn case "PasswordGeneratorFlavor".localize(): cell.accessoryType = .disclosureIndicator - cell.detailTextLabel?.text = PasswordGeneratorFlavour.from(SharedDefaults[.passwordGeneratorFlavor]).name + cell.detailTextLabel?.text = PasswordGeneratorFlavour.from(Defaults.passwordGeneratorFlavor).name default: break } return cell @@ -163,7 +163,7 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { let optionMenu = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) var randomFlavorActionTitle = "" var appleFlavorActionTitle = "" - if SharedDefaults[.passwordGeneratorFlavor] == PasswordGeneratorFlavour.RANDOM.rawValue { + if Defaults.passwordGeneratorFlavor == PasswordGeneratorFlavour.RANDOM.rawValue { randomFlavorActionTitle = "✓ " + "RandomString".localize() appleFlavorActionTitle = "ApplesKeychainStyle".localize() } else { @@ -171,12 +171,12 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { appleFlavorActionTitle = "✓ " + "ApplesKeychainStyle".localize() } let randomFlavorAction = UIAlertAction(title: randomFlavorActionTitle, style: .default) { _ in - SharedDefaults[.passwordGeneratorFlavor] = PasswordGeneratorFlavour.RANDOM.rawValue + Defaults.passwordGeneratorFlavor = PasswordGeneratorFlavour.RANDOM.rawValue sourceCell.detailTextLabel?.text = PasswordGeneratorFlavour.RANDOM.name } let appleFlavorAction = UIAlertAction(title: appleFlavorActionTitle, style: .default) { _ in - SharedDefaults[.passwordGeneratorFlavor] = PasswordGeneratorFlavour.APPLE.rawValue + Defaults.passwordGeneratorFlavor = PasswordGeneratorFlavour.APPLE.rawValue sourceCell.detailTextLabel?.text = PasswordGeneratorFlavour.APPLE.name } @@ -209,24 +209,24 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { } @objc func hideUnknownSwitchAction(_ sender: Any?) { - SharedDefaults[.isHideUnknownOn] = hideUnknownSwitch.isOn + Defaults.isHideUnknownOn = hideUnknownSwitch.isOn NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil) } @objc func hideOTPSwitchAction(_ sender: Any?) { - SharedDefaults[.isHideOTPOn] = hideOTPSwitch.isOn + Defaults.isHideOTPOn = hideOTPSwitch.isOn NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil) } @objc func rememberPGPPassphraseSwitchAction(_ sender: Any?) { - SharedDefaults[.isRememberPGPPassphraseOn] = rememberPGPPassphraseSwitch.isOn + Defaults.isRememberPGPPassphraseOn = rememberPGPPassphraseSwitch.isOn if rememberPGPPassphraseSwitch.isOn == false { AppKeychain.shared.removeContent(for: Globals.pgpKeyPassphrase) } } @objc func rememberGitCredentialPassphraseSwitchAction(_ sender: Any?) { - SharedDefaults[.isRememberGitCredentialPassphraseOn] = rememberGitCredentialPassphraseSwitch.isOn + Defaults.isRememberGitCredentialPassphraseOn = rememberGitCredentialPassphraseSwitch.isOn if rememberGitCredentialPassphraseSwitch.isOn == false { passwordStore.gitSSHPrivateKeyPassphrase = nil passwordStore.gitPassword = nil @@ -234,12 +234,12 @@ class GeneralSettingsTableViewController: BasicStaticTableViewController { } @objc func showFolderSwitchAction(_ sender: Any?) { - SharedDefaults[.isShowFolderOn] = showFolderSwitch.isOn + Defaults.isShowFolderOn = showFolderSwitch.isOn NotificationCenter.default.post(name: .passwordDisplaySettingChanged, object: nil) } @objc func hidePasswordImagesSwitchAction(_ sender: Any?) { - SharedDefaults[.isHidePasswordImagesOn] = hidePasswordImagesSwitch.isOn + Defaults.isHidePasswordImagesOn = hidePasswordImagesSwitch.isOn NotificationCenter.default.post(name: .passwordDetailDisplaySettingChanged, object: nil) } diff --git a/pass/Controllers/GitConfigSettingTableViewController.swift b/pass/Controllers/GitConfigSettingTableViewController.swift index f074e26..ae25bed 100644 --- a/pass/Controllers/GitConfigSettingTableViewController.swift +++ b/pass/Controllers/GitConfigSettingTableViewController.swift @@ -7,7 +7,6 @@ // import UIKit -import SwiftyUserDefaults import passKit class GitConfigSettingTableViewController: UITableViewController { @@ -23,8 +22,8 @@ class GitConfigSettingTableViewController: UITableViewController { let signature = passwordStore.gitSignatureForNow nameTextField.placeholder = signature?.name ?? "" emailTextField.placeholder = signature?.email ?? "" - nameTextField.text = SharedDefaults[.gitSignatureName] - emailTextField.text = SharedDefaults[.gitSignatureEmail] + nameTextField.text = Defaults.gitSignatureName + emailTextField.text = Defaults.gitSignatureEmail } override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { diff --git a/pass/Controllers/GitSSHKeyArmorSettingTableViewController.swift b/pass/Controllers/GitSSHKeyArmorSettingTableViewController.swift index 0453822..a3887d6 100644 --- a/pass/Controllers/GitSSHKeyArmorSettingTableViewController.swift +++ b/pass/Controllers/GitSSHKeyArmorSettingTableViewController.swift @@ -65,8 +65,8 @@ class GitSSHKeyArmorSettingTableViewController: AutoCellHeightUITableViewControl } catch { Utils.alert(title: "CannotSave".localize(), message: "CannotSaveSshKey".localize(), controller: self, completion: nil) } - SharedDefaults[.gitSSHKeySource] = .armor - SharedDefaults[.gitAuthenticationMethod] = .key + Defaults.gitSSHKeySource = .armor + Defaults.gitAuthenticationMethod = .key self.navigationController!.popViewController(animated: true) } diff --git a/pass/Controllers/GitServerSettingTableViewController.swift b/pass/Controllers/GitServerSettingTableViewController.swift index 7371e26..c6a3723 100644 --- a/pass/Controllers/GitServerSettingTableViewController.swift +++ b/pass/Controllers/GitServerSettingTableViewController.swift @@ -27,32 +27,32 @@ class GitServerSettingTableViewController: UITableViewController { private var sshLabel: UILabel? private let passwordStore = PasswordStore.shared private var gitAuthenticationMethod: GitAuthenticationMethod { - get { SharedDefaults[.gitAuthenticationMethod] } + get { Defaults.gitAuthenticationMethod } set { - SharedDefaults[.gitAuthenticationMethod] = newValue + Defaults.gitAuthenticationMethod = newValue updateAuthenticationMethodCheckView(for: newValue) } } private var gitUrl: URL { - get { SharedDefaults[.gitURL] } - set { SharedDefaults[.gitURL] = newValue } + get { Defaults.gitURL } + set { Defaults.gitURL = newValue } } private var gitBranchName: String { - get { SharedDefaults[.gitBranchName] } - set { SharedDefaults[.gitBranchName] = newValue } + get { Defaults.gitBranchName } + set { Defaults.gitBranchName = newValue } } private var gitUsername: String { - get { SharedDefaults[.gitUsername] } - set { SharedDefaults[.gitUsername] = newValue } + get { Defaults.gitUsername } + set { Defaults.gitUsername = newValue } } private var gitCredential: GitCredential { get { - switch SharedDefaults[.gitAuthenticationMethod] { + switch Defaults.gitAuthenticationMethod { case .password: - return GitCredential(credential: .http(userName: SharedDefaults[.gitUsername])) + return GitCredential(credential: .http(userName: Defaults.gitUsername)) case .key: let privateKey: String = AppKeychain.shared.get(for: SshKey.PRIVATE.getKeychainKey()) ?? "" - return GitCredential(credential: .ssh(userName: SharedDefaults[.gitUsername], privateKey: privateKey)) + return GitCredential(credential: .ssh(userName: Defaults.gitUsername, privateKey: privateKey)) } } } @@ -158,7 +158,7 @@ class GitServerSettingTableViewController: UITableViewController { private func cloneAndSegueIfSuccess() { // Remember git credential password/passphrase temporarily, ask whether users want this after a successful clone. - SharedDefaults[.isRememberGitCredentialPassphraseOn] = true + Defaults.isRememberGitCredentialPassphraseOn = true DispatchQueue.global(qos: .userInitiated).async() { do { let transferProgressBlock: (UnsafePointer, UnsafeMutablePointer) -> Void = { (git_transfer_progress, _) in @@ -183,13 +183,13 @@ class GitServerSettingTableViewController: UITableViewController { let savePassphraseAlert: UIAlertController = { let alert = UIAlertController(title: "Done".localize(), message: "WantToSaveGitCredential?".localize(), preferredStyle: .alert) alert.addAction(UIAlertAction(title: "No".localize(), style: .default) { _ in - SharedDefaults[.isRememberGitCredentialPassphraseOn] = false + Defaults.isRememberGitCredentialPassphraseOn = false self.passwordStore.gitPassword = nil self.passwordStore.gitSSHPrivateKeyPassphrase = nil self.performSegue(withIdentifier: "saveGitServerSettingSegue", sender: self) }) alert.addAction(UIAlertAction(title: "Yes".localize(), style: .destructive) {_ in - SharedDefaults[.isRememberGitCredentialPassphraseOn] = true + Defaults.isRememberGitCredentialPassphraseOn = true self.performSegue(withIdentifier: "saveGitServerSettingSegue", sender: self) }) return alert @@ -221,7 +221,7 @@ class GitServerSettingTableViewController: UITableViewController { var armorActionTitle = "AsciiArmorEncryptedKey".localize() var fileActionTitle = "ITunesFileSharing".localize() - switch SharedDefaults[.gitSSHKeySource] { + switch Defaults.gitSSHKeySource { case .url: urlActionTitle = "✓ \(urlActionTitle)" case .armor: armorActionTitle = "✓ \(armorActionTitle)" case .file: fileActionTitle = "✓ \(fileActionTitle)" @@ -244,7 +244,7 @@ class GitServerSettingTableViewController: UITableViewController { let action = UIAlertAction(title: fileActionTitle, style: .default) { _ in do { try self.passwordStore.gitSSHKeyImportFromFileSharing() - SharedDefaults[.gitSSHKeySource] = .file + Defaults.gitSSHKeySource = .file SVProgressHUD.showSuccess(withStatus: "Imported".localize()) SVProgressHUD.dismiss(withDelay: 1) self.sshLabel?.isEnabled = true @@ -268,10 +268,10 @@ class GitServerSettingTableViewController: UITableViewController { }() optionMenu.addAction(fileAction) - if SharedDefaults[.gitSSHKeySource] != nil { + if Defaults.gitSSHKeySource != nil { let deleteAction = UIAlertAction(title: "RemoveSShKeys".localize(), style: .destructive) { _ in self.passwordStore.removeGitSSHKeys() - SharedDefaults[.gitSSHKeySource] = nil + Defaults.gitSSHKeySource = nil self.sshLabel?.isEnabled = false self.updateAuthenticationMethodCheckView(for: .password) } diff --git a/pass/Controllers/PGPKeyArmorSettingTableViewController.swift b/pass/Controllers/PGPKeyArmorSettingTableViewController.swift index a01e75a..6daeb18 100644 --- a/pass/Controllers/PGPKeyArmorSettingTableViewController.swift +++ b/pass/Controllers/PGPKeyArmorSettingTableViewController.swift @@ -90,7 +90,7 @@ class PGPKeyArmorSettingTableViewController: AutoCellHeightUITableViewController // no savePassphraseAlert.addAction(UIAlertAction(title: "No".localize(), style: UIAlertAction.Style.default) { _ in self.keychain.removeContent(for: Globals.pgpKeyPassphrase) - SharedDefaults[.isRememberPGPPassphraseOn] = false + Defaults.isRememberPGPPassphraseOn = false self.performSegue(withIdentifier: "savePGPKeySegue", sender: self) }) // yes @@ -99,7 +99,7 @@ class PGPKeyArmorSettingTableViewController: AutoCellHeightUITableViewController 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.keychain.add(string: alert.textFields?.first?.text, for: Globals.pgpKeyPassphrase) - SharedDefaults[.isRememberPGPPassphraseOn] = true + Defaults.isRememberPGPPassphraseOn = true self.performSegue(withIdentifier: "savePGPKeySegue", sender: self) })) alert.addTextField(configurationHandler: {(textField: UITextField!) in diff --git a/pass/Controllers/PGPKeySettingTableViewController.swift b/pass/Controllers/PGPKeySettingTableViewController.swift index 6498057..8fa0c93 100644 --- a/pass/Controllers/PGPKeySettingTableViewController.swift +++ b/pass/Controllers/PGPKeySettingTableViewController.swift @@ -19,8 +19,8 @@ class PGPKeySettingTableViewController: AutoCellHeightUITableViewController { override func viewDidLoad() { super.viewDidLoad() - pgpPublicKeyURLTextField.text = SharedDefaults[.pgpPublicKeyURL]?.absoluteString - pgpPrivateKeyURLTextField.text = SharedDefaults[.pgpPrivateKeyURL]?.absoluteString + pgpPublicKeyURLTextField.text = Defaults.pgpPublicKeyURL?.absoluteString + pgpPrivateKeyURLTextField.text = Defaults.pgpPrivateKeyURL?.absoluteString } private func validatePGPKeyURL(input: String?) -> Bool { @@ -44,7 +44,7 @@ class PGPKeySettingTableViewController: AutoCellHeightUITableViewController { // no savePassphraseAlert.addAction(UIAlertAction(title: "No".localize(), style: UIAlertAction.Style.default) { _ in self.keychain.removeContent(for: Globals.pgpKeyPassphrase) - SharedDefaults[.isRememberPGPPassphraseOn] = false + Defaults.isRememberPGPPassphraseOn = false self.performSegue(withIdentifier: "savePGPKeySegue", sender: self) }) // yes @@ -53,7 +53,7 @@ class PGPKeySettingTableViewController: AutoCellHeightUITableViewController { 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.keychain.add(string: alert.textFields?.first?.text, for: Globals.pgpKeyPassphrase) - SharedDefaults[.isRememberPGPPassphraseOn] = true + Defaults.isRememberPGPPassphraseOn = true self.performSegue(withIdentifier: "savePGPKeySegue", sender: self) })) alert.addTextField(configurationHandler: {(textField: UITextField!) in diff --git a/pass/Controllers/PasswordDetailTableViewController.swift b/pass/Controllers/PasswordDetailTableViewController.swift index f6dfd12..be1b89e 100644 --- a/pass/Controllers/PasswordDetailTableViewController.swift +++ b/pass/Controllers/PasswordDetailTableViewController.swift @@ -103,7 +103,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni self.present(alert, animated: true, completion: nil) } let _ = sem.wait(timeout: DispatchTime.distantFuture) - if SharedDefaults[.isRememberPGPPassphraseOn] { + if Defaults.isRememberPGPPassphraseOn { self.keychain.add(string: passphrase, for: Globals.pgpKeyPassphrase) } return passphrase @@ -144,7 +144,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni self?.setTableData() self?.tableView.reloadData() self?.editUIBarButtonItem.isEnabled = true - if !SharedDefaults[.isHidePasswordImagesOn] { + if !Defaults.isHidePasswordImagesOn { if let urlString = self?.password?.urlString { if self?.passwordEntity?.getImage() == nil { self?.updatePasswordImage(urlString: urlString) @@ -395,7 +395,7 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni switch(tableData[sectionIndex].type) { case .name: let cell = tableView.dequeueReusableCell(withIdentifier: "passwordDetailTitleTableViewCell", for: indexPath) as! PasswordDetailTitleTableViewCell - if !SharedDefaults[.isHidePasswordImagesOn] { + if !Defaults.isHidePasswordImagesOn { cell.labelCellConstraint.isActive = false cell.labelImageConstraint.isActive = true cell.passwordImageImageView.image = passwordImage ?? #imageLiteral(resourceName: "PasswordImagePlaceHolder") @@ -438,8 +438,8 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni } var numberOfHiddenFields = 0 - numberOfHiddenFields += SharedDefaults[.isHideUnknownOn] ? password!.numberOfUnknowns : 0 - numberOfHiddenFields += SharedDefaults[.isHideOTPOn] ? password!.numberOfOtpRelated : 0 + numberOfHiddenFields += Defaults.isHideUnknownOn ? password!.numberOfUnknowns : 0 + numberOfHiddenFields += Defaults.isHideOTPOn ? password!.numberOfOtpRelated : 0 guard numberOfHiddenFields > 0 else { return } diff --git a/pass/Controllers/PasswordEditorTableViewController.swift b/pass/Controllers/PasswordEditorTableViewController.swift index 3888bbf..9ab75fb 100644 --- a/pass/Controllers/PasswordEditorTableViewController.swift +++ b/pass/Controllers/PasswordEditorTableViewController.swift @@ -116,7 +116,7 @@ class PasswordEditorTableViewController: UITableViewController, FillPasswordTabl return fillPasswordCell! case .passwordLengthCell: passwordLengthCell = tableView.dequeueReusableCell(withIdentifier: "passwordLengthCell", for: indexPath) as? SliderTableViewCell - let lengthSetting = PasswordGeneratorFlavour.from(SharedDefaults[.passwordGeneratorFlavor]).defaultLength + let lengthSetting = PasswordGeneratorFlavour.from(Defaults.passwordGeneratorFlavor).defaultLength let minimumLength = lengthSetting.min let maximumLength = lengthSetting.max var defaultLength = lengthSetting.def @@ -215,7 +215,7 @@ class PasswordEditorTableViewController: UITableViewController, FillPasswordTabl showPasswordSettings() let length = passwordLengthCell?.roundedValue ?? 0 - let plainPassword = PasswordGeneratorFlavour.from(SharedDefaults[.passwordGeneratorFlavor]).generatePassword(length: length) + let plainPassword = PasswordGeneratorFlavour.from(Defaults.passwordGeneratorFlavor).generatePassword(length: length) // update tableData so to make sure reloadData() works correctly tableData[passwordSection][0][PasswordEditorCellKey.content] = plainPassword diff --git a/pass/Controllers/PasswordsViewController.swift b/pass/Controllers/PasswordsViewController.swift index c07085d..18354cd 100644 --- a/pass/Controllers/PasswordsViewController.swift +++ b/pass/Controllers/PasswordsViewController.swift @@ -44,12 +44,12 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV private var gitCredential: GitCredential { get { - switch SharedDefaults[.gitAuthenticationMethod] { + switch Defaults.gitAuthenticationMethod { case .password: - return GitCredential(credential: .http(userName: SharedDefaults[.gitUsername])) + return GitCredential(credential: .http(userName: Defaults.gitUsername)) case .key: let privateKey: String = AppKeychain.shared.get(for: SshKey.PRIVATE.getKeychainKey()) ?? "" - return GitCredential(credential: .ssh(userName: SharedDefaults[.gitUsername], privateKey: privateKey)) + return GitCredential(credential: .ssh(userName: Defaults.gitUsername, privateKey: privateKey)) } } } @@ -135,7 +135,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV filteredPasswordsTableEntries.removeAll() var passwordEntities = [PasswordEntity]() var passwordAllEntities = [PasswordEntity]() - if SharedDefaults[.isShowFolderOn] { + if Defaults.isShowFolderOn { passwordEntities = self.passwordStore.fetchPasswordEntityCoreData(parent: parent) } else { passwordEntities = self.passwordStore.fetchPasswordEntityCoreData(withDir: false) @@ -230,7 +230,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) - if SharedDefaults[.isShowFolderOn] { + if Defaults.isShowFolderOn { searchController.searchBar.scopeButtonTitles = SearchBarScope.allCases.map { $0.localizedName } } else { searchController.searchBar.scopeButtonTitles = nil @@ -396,7 +396,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV } @objc func backAction(_ sender: Any?) { - guard SharedDefaults[.isShowFolderOn] else { return } + guard Defaults.isShowFolderOn else { return } var anim: CATransition? = transitionFromLeft if parentPasswordEntity == nil { anim = nil @@ -464,7 +464,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV self.present(alert, animated: true, completion: nil) } let _ = sem.wait(timeout: DispatchTime.distantFuture) - if SharedDefaults[.isRememberPGPPassphraseOn] { + if Defaults.isRememberPGPPassphraseOn { self.keychain.add(string: passphrase, for: Globals.pgpKeyPassphrase) } return passphrase @@ -682,13 +682,13 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) { // update the default search scope - SharedDefaults[.searchDefault] = SearchBarScope(rawValue: selectedScope) + Defaults.searchDefault = SearchBarScope(rawValue: selectedScope) updateSearchResults(for: searchController) } func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { // set the default search scope to "all" - if SharedDefaults[.isShowFolderOn] && SharedDefaults[.searchDefault] == .all { + if Defaults.isShowFolderOn && Defaults.searchDefault == .all { searchController.searchBar.selectedScopeButtonIndex = SearchBarScope.all.rawValue } else { searchController.searchBar.selectedScopeButtonIndex = SearchBarScope.current.rawValue diff --git a/pass/Controllers/SSHKeySettingTableViewController.swift b/pass/Controllers/SSHKeySettingTableViewController.swift index 1687239..55f596e 100644 --- a/pass/Controllers/SSHKeySettingTableViewController.swift +++ b/pass/Controllers/SSHKeySettingTableViewController.swift @@ -28,14 +28,14 @@ class SSHKeySettingTableViewController: AutoCellHeightUITableViewController { do { try Data(contentsOf: privateKeyURL).write(to: URL(fileURLWithPath: SshKey.PRIVATE.getFileSharingPath()), options: .atomic) try self.passwordStore.gitSSHKeyImportFromFileSharing() - SharedDefaults[.gitSSHKeySource] = .file - SharedDefaults[.gitAuthenticationMethod] = .key + Defaults.gitSSHKeySource = .file + Defaults.gitAuthenticationMethod = .key SVProgressHUD.showSuccess(withStatus: "Imported".localize()) SVProgressHUD.dismiss(withDelay: 1) } catch { Utils.alert(title: "Error".localize(), message: error.localizedDescription, controller: self, completion: nil) } - SharedDefaults[.gitSSHKeySource] = .url + Defaults.gitSSHKeySource = .url self.navigationController!.popViewController(animated: true) } diff --git a/pass/Controllers/SettingsTableViewController.swift b/pass/Controllers/SettingsTableViewController.swift index 38ca8c1..a40de20 100644 --- a/pass/Controllers/SettingsTableViewController.swift +++ b/pass/Controllers/SettingsTableViewController.swift @@ -27,17 +27,17 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele @IBAction func savePGPKey(segue: UIStoryboardSegue) { if let controller = segue.source as? PGPKeySettingTableViewController { - SharedDefaults[.pgpPrivateKeyURL] = URL(string: controller.pgpPrivateKeyURLTextField.text!.trimmed) - SharedDefaults[.pgpPublicKeyURL] = URL(string: controller.pgpPublicKeyURLTextField.text!.trimmed) - SharedDefaults[.pgpKeySource] = "url" + Defaults.pgpPrivateKeyURL = URL(string: controller.pgpPrivateKeyURLTextField.text!.trimmed) + Defaults.pgpPublicKeyURL = URL(string: controller.pgpPublicKeyURLTextField.text!.trimmed) + Defaults.pgpKeySource = "url" SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.setDefaultStyle(.light) SVProgressHUD.show(withStatus: "FetchingPgpKey".localize()) DispatchQueue.global(qos: .userInitiated).async { [unowned self] in do { - try KeyFileManager.PublicPgp.importKey(from: SharedDefaults[.pgpPublicKeyURL]!) - try KeyFileManager.PrivatePgp.importKey(from: SharedDefaults[.pgpPrivateKeyURL]!) + try KeyFileManager.PublicPgp.importKey(from: Defaults.pgpPublicKeyURL!) + try KeyFileManager.PrivatePgp.importKey(from: Defaults.pgpPrivateKeyURL!) try PGPAgent.shared.initKeys() DispatchQueue.main.async { self.setPGPKeyTableViewCellDetailText() @@ -54,7 +54,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele } } else if let controller = segue.source as? PGPKeyArmorSettingTableViewController { - SharedDefaults[.pgpKeySource] = "armor" + Defaults.pgpKeySource = "armor" SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.setDefaultStyle(.light) @@ -81,7 +81,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele private func saveImportedPGPKey() { // load keys - SharedDefaults[.pgpKeySource] = "file" + Defaults.pgpKeySource = "file" SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.setDefaultStyle(.light) SVProgressHUD.show(withStatus: "FetchingPgpKey".localize()) @@ -105,7 +105,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele } @IBAction func saveGitServerSetting(segue: UIStoryboardSegue) { - self.passwordRepositoryTableViewCell.detailTextLabel?.text = SharedDefaults[.gitURL].host + self.passwordRepositoryTableViewCell.detailTextLabel?.text = Defaults.gitURL.host } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { @@ -115,7 +115,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(SettingsTableViewController.actOnPasswordStoreErasedNotification), name: .passwordStoreErased, object: nil) - self.passwordRepositoryTableViewCell.detailTextLabel?.text = SharedDefaults[.gitURL].host + self.passwordRepositoryTableViewCell.detailTextLabel?.text = Defaults.gitURL.host setPGPKeyTableViewCellDetailText() setPasscodeLockCell() } @@ -140,7 +140,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele private func setPasswordRepositoryTableViewCellDetailText() { let host: String? = { - let gitURL = SharedDefaults[.gitURL] + let gitURL = Defaults.gitURL if gitURL.scheme == nil { return URL(string: "scheme://" + gitURL.absoluteString)?.host } else { @@ -186,11 +186,11 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele var armorActionTitle = "AsciiArmorEncryptedKey".localize() var fileActionTitle = "ITunesFileSharing".localize() - if SharedDefaults[.pgpKeySource] == "url" { + if Defaults.pgpKeySource == "url" { urlActionTitle = "✓ \(urlActionTitle)" - } else if SharedDefaults[.pgpKeySource] == "armor" { + } else if Defaults.pgpKeySource == "armor" { armorActionTitle = "✓ \(armorActionTitle)" - } else if SharedDefaults[.pgpKeySource] == "file" { + } else if Defaults.pgpKeySource == "file" { fileActionTitle = "✓ \(fileActionTitle)" } let urlAction = UIAlertAction(title: urlActionTitle, style: .default) { _ in @@ -211,7 +211,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele // no savePassphraseAlert.addAction(UIAlertAction(title: "No".localize(), style: UIAlertAction.Style.default) { _ in self.keychain.removeContent(for: Globals.pgpKeyPassphrase) - SharedDefaults[.isRememberPGPPassphraseOn] = false + Defaults.isRememberPGPPassphraseOn = false self.saveImportedPGPKey() }) // yes @@ -220,7 +220,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele 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.keychain.add(string: alert.textFields?.first?.text, for: Globals.pgpKeyPassphrase) - SharedDefaults[.isRememberPGPPassphraseOn] = true + Defaults.isRememberPGPPassphraseOn = true self.saveImportedPGPKey() })) alert.addTextField(configurationHandler: {(textField: UITextField!) in @@ -243,7 +243,7 @@ class SettingsTableViewController: UITableViewController, UITabBarControllerDele } - if SharedDefaults[.pgpKeySource] != nil { + if Defaults.pgpKeySource != nil { let deleteAction = UIAlertAction(title: "RemovePgpKeys".localize(), style: .destructive) { _ in self.keychain.removeContent(for: PgpKey.PUBLIC.getKeychainKey()) self.keychain.removeContent(for: PgpKey.PRIVATE.getKeychainKey()) diff --git a/passAutoFillExtension/Controllers/CredentialProviderViewController.swift b/passAutoFillExtension/Controllers/CredentialProviderViewController.swift index 71c48c4..3bf0977 100644 --- a/passAutoFillExtension/Controllers/CredentialProviderViewController.swift +++ b/passAutoFillExtension/Controllers/CredentialProviderViewController.swift @@ -198,7 +198,7 @@ class CredentialProviderViewController: ASCredentialProviderViewController, UITa self.present(alert, animated: true, completion: nil) } let _ = sem.wait(timeout: DispatchTime.distantFuture) - if SharedDefaults[.isRememberPGPPassphraseOn] { + if Defaults.isRememberPGPPassphraseOn { self.keychain.add(string: passphrase, for: Globals.pgpKeyPassphrase) } return passphrase diff --git a/passExtension/Controllers/ExtensionViewController.swift b/passExtension/Controllers/ExtensionViewController.swift index bdc2e81..50bdfcd 100644 --- a/passExtension/Controllers/ExtensionViewController.swift +++ b/passExtension/Controllers/ExtensionViewController.swift @@ -225,7 +225,7 @@ class ExtensionViewController: UIViewController, UITableViewDataSource, UITableV self.present(alert, animated: true, completion: nil) } let _ = sem.wait(timeout: DispatchTime.distantFuture) - if SharedDefaults[.isRememberPGPPassphraseOn] { + if Defaults.isRememberPGPPassphraseOn { self.keychain.add(string: passphrase, for: Globals.pgpKeyPassphrase) } return passphrase diff --git a/passKit/Crypto/GopenPgp.swift b/passKit/Crypto/GopenPgp.swift index 0a4b34d..a14fb6e 100644 --- a/passKit/Crypto/GopenPgp.swift +++ b/passKit/Crypto/GopenPgp.swift @@ -47,7 +47,7 @@ struct GopenPgp: PgpInterface { func encrypt(plainData: Data) throws -> Data { let encryptedData = try publicKey.encrypt(CryptoNewPlainMessage(plainData.mutable as Data), privateKey: nil) - if SharedDefaults[.encryptInArmored] { + if Defaults.encryptInArmored { var error: NSError? let armor = encryptedData.getArmored(&error) guard error == nil else { @@ -66,7 +66,7 @@ struct GopenPgp: PgpInterface { private func createPgpMessage(from encryptedData: Data) -> CryptoPGPMessage? { // Important note: - // Even if SharedDefaults[.encryptInArmored] is true now, it could be different during the encryption. + // Even if Defaults.encryptInArmored is true now, it could be different during the encryption. var error: NSError? let message = CryptoNewPGPMessageFromArmored(String(data: encryptedData, encoding: .ascii), &error) if error == nil { diff --git a/passKit/Crypto/ObjectivePgp.swift b/passKit/Crypto/ObjectivePgp.swift index 0a80c3b..b1ea12d 100644 --- a/passKit/Crypto/ObjectivePgp.swift +++ b/passKit/Crypto/ObjectivePgp.swift @@ -36,7 +36,7 @@ struct ObjectivePgp: PgpInterface { func encrypt(plainData: Data) throws -> Data { let encryptedData = try ObjectivePGP.encrypt(plainData, addSignature: false, using: keyring.keys, passphraseForKey: nil) - if SharedDefaults[.encryptInArmored] { + if Defaults.encryptInArmored { return Armor.armored(encryptedData, as: .message).data(using: .ascii)! } return encryptedData diff --git a/passKit/Helpers/DefaultsKeys.swift b/passKit/Helpers/DefaultsKeys.swift index 05b0842..6e0f13f 100644 --- a/passKit/Helpers/DefaultsKeys.swift +++ b/passKit/Helpers/DefaultsKeys.swift @@ -9,7 +9,7 @@ import Foundation import SwiftyUserDefaults -public var SharedDefaults = UserDefaults(suiteName: Globals.groupIdentifier)! +public var Defaults = DefaultsAdapter(defaults: UserDefaults(suiteName: Globals.groupIdentifier)!, keyStore: DefaultsKeys()) public enum GitAuthenticationMethod: String, DefaultsSerializable { case password, key @@ -20,37 +20,37 @@ public enum GitSSHKeySource: String, DefaultsSerializable { } public extension DefaultsKeys { - static let pgpKeySource = DefaultsKey("pgpKeySource") - static let pgpPublicKeyURL = DefaultsKey("pgpPublicKeyURL") - static let pgpPrivateKeyURL = DefaultsKey("pgpPrivateKeyURL") + var pgpKeySource: DefaultsKey { .init("pgpKeySource") } + var pgpPublicKeyURL: DefaultsKey { .init("pgpPublicKeyURL") } + var pgpPrivateKeyURL: DefaultsKey { .init("pgpPrivateKeyURL") } // Keep them for legacy reasons. - static let pgpPublicKeyArmor = DefaultsKey("pgpPublicKeyArmor") - static let pgpPrivateKeyArmor = DefaultsKey("pgpPrivateKeyArmor") - static let gitSSHPrivateKeyArmor = DefaultsKey("gitSSHPrivateKeyArmor") - static let passcodeKey = DefaultsKey("passcodeKey") + var pgpPublicKeyArmor: DefaultsKey { .init("pgpPublicKeyArmor") } + var pgpPrivateKeyArmor: DefaultsKey { .init("pgpPrivateKeyArmor") } + var gitSSHPrivateKeyArmor: DefaultsKey { .init("gitSSHPrivateKeyArmor") } + var passcodeKey: DefaultsKey { .init("passcodeKey") } - static let gitURL = DefaultsKey("gitURL", defaultValue: URL(string: "https://")!) - static let gitAuthenticationMethod = DefaultsKey("gitAuthenticationMethod", defaultValue: GitAuthenticationMethod.password) - static let gitUsername = DefaultsKey("gitUsername", defaultValue: "git") - static let gitBranchName = DefaultsKey("gitBranchName", defaultValue: "master") - static let gitSSHPrivateKeyURL = DefaultsKey("gitSSHPrivateKeyURL") - static let gitSSHKeySource = DefaultsKey("gitSSHKeySource") - static let gitSignatureName = DefaultsKey("gitSignatureName") - static let gitSignatureEmail = DefaultsKey("gitSignatureEmail") + var gitURL: DefaultsKey { .init("gitURL", defaultValue: URL(string: "https://")!) } + var gitAuthenticationMethod: DefaultsKey { .init("gitAuthenticationMethod", defaultValue: GitAuthenticationMethod.password) } + var gitUsername: DefaultsKey { .init("gitUsername", defaultValue: "git") } + var gitBranchName: DefaultsKey { .init("gitBranchName", defaultValue: "master") } + var gitSSHPrivateKeyURL: DefaultsKey { .init("gitSSHPrivateKeyURL") } + var gitSSHKeySource: DefaultsKey { .init("gitSSHKeySource") } + var gitSignatureName: DefaultsKey { .init("gitSignatureName") } + var gitSignatureEmail: DefaultsKey { .init("gitSignatureEmail") } - static let lastSyncedTime = DefaultsKey("lastSyncedTime") + var lastSyncedTime: DefaultsKey { .init("lastSyncedTime") } - static let isTouchIDOn = DefaultsKey("isTouchIDOn", defaultValue: false) + var isTouchIDOn: DefaultsKey { .init("isTouchIDOn", defaultValue: false) } - static let isHideUnknownOn = DefaultsKey("isHideUnknownOn", defaultValue: false) - static let isHideOTPOn = DefaultsKey("isHideOTPOn", defaultValue: false) - static let isRememberPGPPassphraseOn = DefaultsKey("isRememberPGPPassphraseOn", defaultValue: false) - static let isRememberGitCredentialPassphraseOn = DefaultsKey("isRememberGitCredentialPassphraseOn", defaultValue: false) - static let isShowFolderOn = DefaultsKey("isShowFolderOn", defaultValue: true) - static let isHidePasswordImagesOn = DefaultsKey("isHidePasswordImagesOn", defaultValue: false) - static let searchDefault = DefaultsKey("searchDefault", defaultValue: .all) - static let passwordGeneratorFlavor = DefaultsKey("passwordGeneratorFlavor", defaultValue: "Apple") + var isHideUnknownOn: DefaultsKey { .init("isHideUnknownOn", defaultValue: false) } + var isHideOTPOn: DefaultsKey { .init("isHideOTPOn", defaultValue: false) } + var isRememberPGPPassphraseOn: DefaultsKey { .init("isRememberPGPPassphraseOn", defaultValue: false) } + var isRememberGitCredentialPassphraseOn: DefaultsKey { .init("isRememberGitCredentialPassphraseOn", defaultValue: false) } + var isShowFolderOn: DefaultsKey { .init("isShowFolderOn", defaultValue: true) } + var isHidePasswordImagesOn: DefaultsKey { .init("isHidePasswordImagesOn", defaultValue: false) } + var searchDefault: DefaultsKey { .init("searchDefault", defaultValue: .all) } + var passwordGeneratorFlavor: DefaultsKey { .init("passwordGeneratorFlavor", defaultValue: "Apple") } - static let encryptInArmored = DefaultsKey("encryptInArmored", defaultValue: false) + var encryptInArmored: DefaultsKey { .init("encryptInArmored", defaultValue: false) } } diff --git a/passKit/Models/GitCredential.swift b/passKit/Models/GitCredential.swift index d7bb6dd..7a04c1e 100644 --- a/passKit/Models/GitCredential.swift +++ b/passKit/Models/GitCredential.swift @@ -36,7 +36,7 @@ public struct GitCredential { var lastPassword = self.passwordStore.gitPassword if lastPassword == nil || attempts != 0 { if let requestedPassword = requestCredentialPassword(self.credential, lastPassword) { - if SharedDefaults[.isRememberGitCredentialPassphraseOn] { + if Defaults.isRememberGitCredentialPassphraseOn { self.passwordStore.gitPassword = requestedPassword } lastPassword = requestedPassword @@ -54,7 +54,7 @@ public struct GitCredential { var lastPassword = self.passwordStore.gitSSHPrivateKeyPassphrase if lastPassword == nil || attempts != 0 { if let requestedPassword = requestCredentialPassword(self.credential, lastPassword) { - if SharedDefaults[.isRememberGitCredentialPassphraseOn] { + if Defaults.isRememberGitCredentialPassphraseOn { self.passwordStore.gitSSHPrivateKeyPassphrase = requestedPassword } lastPassword = requestedPassword diff --git a/passKit/Models/PasscodeLock.swift b/passKit/Models/PasscodeLock.swift index fa4d774..0420a4d 100644 --- a/passKit/Models/PasscodeLock.swift +++ b/passKit/Models/PasscodeLock.swift @@ -16,9 +16,9 @@ public class PasscodeLock { /// Constructor used to migrate passcode from SharedDefaults to Keychain private init() { - if let passcode = SharedDefaults[.passcodeKey] { + if let passcode = Defaults.passcodeKey { save(passcode: passcode) - SharedDefaults[.passcodeKey] = nil + Defaults.passcodeKey = nil } } diff --git a/passKit/Models/Password.swift b/passKit/Models/Password.swift index fde83b9..487c797 100644 --- a/passKit/Models/Password.swift +++ b/passKit/Models/Password.swift @@ -124,8 +124,8 @@ public class Password { return title != Constants.USERNAME_KEYWORD && title != Constants.LOGIN_KEYWORD && title != Constants.PASSWORD_KEYWORD - && (!Constants.isUnknown(title) || !SharedDefaults[.isHideUnknownOn]) - && (!Constants.isOtpKeyword(title) || !SharedDefaults[.isHideOTPOn]) + && (!Constants.isUnknown(title) || !Defaults.isHideUnknownOn) + && (!Constants.isOtpKeyword(title) || !Defaults.isHideOTPOn) } } diff --git a/passKit/Models/PasswordStore.swift b/passKit/Models/PasswordStore.swift index 67e5f97..66b4ce5 100644 --- a/passKit/Models/PasswordStore.swift +++ b/passKit/Models/PasswordStore.swift @@ -29,8 +29,8 @@ public class PasswordStore { public var gitSignatureForNow: GTSignature? { get { - let gitSignatureName = SharedDefaults[.gitSignatureName] ?? Globals.gitSignatureDefaultName - let gitSignatureEmail = SharedDefaults[.gitSignatureEmail] ?? Globals.gitSignatureDefaultEmail + let gitSignatureName = Defaults.gitSignatureName ?? Globals.gitSignatureDefaultName + let gitSignatureEmail = Defaults.gitSignatureEmail ?? Globals.gitSignatureDefaultEmail return GTSignature(name: gitSignatureName, email: gitSignatureEmail, time: Date()) } } @@ -94,7 +94,7 @@ public class PasswordStore { } public var lastSyncedTime: Date? { - return SharedDefaults[.lastSyncedTime] + return Defaults.lastSyncedTime } public var numberOfCommits: UInt? { @@ -119,9 +119,9 @@ public class PasswordStore { try? KeyFileManager(keyType: PgpKey.PUBLIC, keyPath: Globals.pgpPublicKeyPath).importKeyFromFileSharing() try? KeyFileManager(keyType: PgpKey.PRIVATE, keyPath: Globals.pgpPrivateKeyPath).importKeyFromFileSharing() try? KeyFileManager(keyType: SshKey.PRIVATE, keyPath: Globals.gitSSHPrivateKeyPath).importKeyFromFileSharing() - SharedDefaults.remove(.pgpPublicKeyArmor) - SharedDefaults.remove(.pgpPrivateKeyArmor) - SharedDefaults.remove(.gitSSHPrivateKeyArmor) + Defaults.remove(\.pgpPublicKeyArmor) + Defaults.remove(\.pgpPrivateKeyArmor) + Defaults.remove(\.gitSSHPrivateKeyArmor) } public func initGitSSHKey(with armorKey: String) throws { @@ -197,14 +197,14 @@ public class PasswordStore { } } catch { credential.delete() - SharedDefaults[.lastSyncedTime] = nil + Defaults.lastSyncedTime = nil DispatchQueue.main.async { self.deleteCoreData(entityName: "PasswordEntity") NotificationCenter.default.post(name: .passwordStoreUpdated, object: nil) } throw(error) } - SharedDefaults[.lastSyncedTime] = Date() + Defaults.lastSyncedTime = Date() DispatchQueue.main.async { self.updatePasswordEntityCoreData() NotificationCenter.default.post(name: .passwordStoreUpdated, object: nil) @@ -237,7 +237,7 @@ public class PasswordStore { let options = [GTRepositoryRemoteOptionsCredentialProvider: credentialProvider] let remote = try GTRemote(name: "origin", in: storeRepository) try storeRepository.pull(storeRepository.currentBranch(), from: remote, withOptions: options, progress: progressBlock) - SharedDefaults[.lastSyncedTime] = Date() + Defaults.lastSyncedTime = Date() self.setAllSynced() self.updatePasswordEntityCoreData() DispatchQueue.main.async { @@ -453,7 +453,7 @@ public class PasswordStore { do { let credentialProvider = try credential.credentialProvider(requestCredentialPassword: requestCredentialPassword) let options = [GTRepositoryRemoteOptionsCredentialProvider: credentialProvider] - if let branch = try getLocalBranch(withName: SharedDefaults[.gitBranchName]) { + if let branch = try getLocalBranch(withName: Defaults.gitBranchName) { let remote = try GTRemote(name: "origin", in: storeRepository) try storeRepository.push(branch, to: remote, withOptions: options, progress: transferProgressBlock) } @@ -620,7 +620,7 @@ public class PasswordStore { deleteCoreData(entityName: "PasswordEntity") // Delete default settings. - SharedDefaults.removeAll() + Defaults.removeAll() // Clean up variables inside PasswordStore. storeRepository = nil @@ -666,7 +666,7 @@ public class PasswordStore { throw AppError.RepositoryNotSet } // get the remote branch - let remoteBranchName = SharedDefaults[.gitBranchName] + let remoteBranchName = Defaults.gitBranchName guard let remoteBranch = try storeRepository.remoteBranches().first(where: { $0.shortName == remoteBranchName }) else { throw AppError.RepositoryRemoteBranchNotFound(remoteBranchName) } @@ -696,9 +696,9 @@ public class PasswordStore { public func removeGitSSHKeys() { try? fm.removeItem(atPath: Globals.gitSSHPrivateKeyPath) - Defaults.remove(.gitSSHKeySource) - Defaults.remove(.gitSSHPrivateKeyArmor) - Defaults.remove(.gitSSHPrivateKeyURL) + Defaults.remove(\.gitSSHKeySource) + Defaults.remove(\.gitSSHPrivateKeyArmor) + Defaults.remove(\.gitSSHPrivateKeyURL) AppKeychain.shared.removeContent(for: SshKey.PRIVATE.getKeychainKey()) gitSSHPrivateKeyPassphrase = nil } diff --git a/passKitTests/Crypto/PGPAgentTest.swift b/passKitTests/Crypto/PGPAgentTest.swift index 6347aa7..7e56e56 100644 --- a/passKitTests/Crypto/PGPAgentTest.swift +++ b/passKitTests/Crypto/PGPAgentTest.swift @@ -12,9 +12,6 @@ import SwiftyUserDefaults @testable import passKit class PGPAgentTest: XCTestCase { - enum ValidationError: Error { - case emptyName - } private var keychain: KeyStore! private var pgpAgent: PGPAgent! @@ -25,7 +22,7 @@ class PGPAgentTest: XCTestCase { keychain = DictBasedKeychain() pgpAgent = PGPAgent(keyStore: keychain) UserDefaults().removePersistentDomain(forName: "SharedDefaultsForPGPAgentTest") - SharedDefaults = UserDefaults(suiteName: "SharedDefaultsForPGPAgentTest")! + passKit.Defaults = DefaultsAdapter(defaults: UserDefaults(suiteName: "SharedDefaultsForPGPAgentTest")!, keyStore: DefaultsKeys()) } override func tearDown() { @@ -35,9 +32,9 @@ class PGPAgentTest: XCTestCase { } func basicEncryptDecrypt(using pgpAgent: PGPAgent, requestPassphrase: () -> String = requestPGPKeyPassphrase, encryptInArmored: Bool = true, encryptInArmoredNow: Bool = true) throws -> Data? { - SharedDefaults[.encryptInArmored] = encryptInArmored + passKit.Defaults.encryptInArmored = encryptInArmored let encryptedData = try pgpAgent.encrypt(plainData: testData) - SharedDefaults[.encryptInArmored] = encryptInArmoredNow + passKit.Defaults.encryptInArmored = encryptInArmoredNow return try pgpAgent.decrypt(encryptedData: encryptedData, requestPGPKeyPassphrase: requestPassphrase) }