diff --git a/pass/Globals.swift b/pass/Globals.swift index 2c364f6..36ee341 100644 --- a/pass/Globals.swift +++ b/pass/Globals.swift @@ -12,5 +12,7 @@ class Globals { static let shared = Globals() let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]; let secringPath = "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/secring.gpg" + let sshPublicKeyPath = URL(fileURLWithPath: "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/ssh_key.pub") + let sshPrivateKeyPath = URL(fileURLWithPath: "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])/ssh_key") private init() { } } diff --git a/pass/PasswordStore.swift b/pass/PasswordStore.swift index f81720e..304a0c5 100644 --- a/pass/PasswordStore.swift +++ b/pass/PasswordStore.swift @@ -30,6 +30,7 @@ struct GitCredential { print("username \(userName), password \(password)") credential = try? GTCredential(userName: userName, password: password) case let .ssh(userName, password, publicKeyFile, privateKeyFile): + print("username \(userName), password \(password), publicKeyFile \(publicKeyFile), privateKeyFile \(privateKeyFile)") credential = try? GTCredential(userName: userName, publicKeyURL: publicKeyFile, privateKeyURL: privateKeyFile, passphrase: password) } return credential ?? GTCredential() diff --git a/pass/SSHKeySettingTableViewController.swift b/pass/SSHKeySettingTableViewController.swift index a3c8565..99639b1 100644 --- a/pass/SSHKeySettingTableViewController.swift +++ b/pass/SSHKeySettingTableViewController.swift @@ -34,6 +34,14 @@ class SSHKeySettingTableViewController: UITableViewController { Defaults[.gitRepositorySSHPublicKeyURL] = URL(string: publicKeyURLTextField.text!) Defaults[.gitRepositorySSHPrivateKeyURL] = URL(string: privateKeyURLTextField.text!) Defaults[.gitRepositorySSHPrivateKeyPassphrase] = passphraseTextField.text! + + do { + try Data(contentsOf: Defaults[.gitRepositorySSHPublicKeyURL]!).write(to: Globals.shared.sshPublicKeyPath, options: .atomic) + try Data(contentsOf: Defaults[.gitRepositorySSHPrivateKeyURL]!).write(to: Globals.shared.sshPrivateKeyPath, options: .atomic) + } catch { + print(error) + } + navigationController!.popViewController(animated: true) } diff --git a/pass/SettingsTableViewController.swift b/pass/SettingsTableViewController.swift index 3f3a6a5..25f29f0 100644 --- a/pass/SettingsTableViewController.swift +++ b/pass/SettingsTableViewController.swift @@ -26,19 +26,15 @@ class SettingsTableViewController: UITableViewController { let auth = controller.authenticationMethod - Defaults[.gitRepositoryURL] = URL(string: gitRepostiroyURL) - Defaults[.gitRepositoryUsername] = username - Defaults[.gitRepositoryPassword] = password - Defaults[.gitRepositoryAuthenticationMethod] = auth if Defaults[.gitRepositoryURL] == nil || gitRepostiroyURL != Defaults[.gitRepositoryURL]!.absoluteString { SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.show(withStatus: "Prepare Repository") var gitCredential: GitCredential - if Defaults[.gitRepositoryAuthenticationMethod] == "Password" { + if password == "Password" { gitCredential = GitCredential(credential: GitCredential.Credential.http(userName: username, password: password)) } else { - gitCredential = GitCredential(credential: GitCredential.Credential.ssh(userName: username, password: Defaults[.gitRepositorySSHPrivateKeyPassphrase]!, publicKeyFile: Defaults[.gitRepositorySSHPublicKeyURL]!, privateKeyFile: Defaults[.gitRepositorySSHPrivateKeyURL]!)) + gitCredential = GitCredential(credential: GitCredential.Credential.ssh(userName: username, password: Defaults[.gitRepositorySSHPrivateKeyPassphrase]!, publicKeyFile: Globals.shared.sshPublicKeyPath, privateKeyFile: Globals.shared.sshPrivateKeyPath)) } DispatchQueue.global(qos: .userInitiated).async { @@ -59,6 +55,11 @@ class SettingsTableViewController: UITableViewController { if ret { SVProgressHUD.showSuccess(withStatus: "Done") SVProgressHUD.dismiss(withDelay: 1) + + Defaults[.gitRepositoryURL] = URL(string: gitRepostiroyURL) + Defaults[.gitRepositoryUsername] = username + Defaults[.gitRepositoryPassword] = password + Defaults[.gitRepositoryAuthenticationMethod] = auth NotificationCenter.default.post(Notification(name: Notification.Name("passwordUpdated"))) } else {