fix bugs of ssh key authentication method

This commit is contained in:
Bob Sun 2017-01-31 22:54:58 +08:00
parent 6f7d62dc60
commit 07da510ccb
No known key found for this signature in database
GPG key ID: 1F86BA2052FED3B4
4 changed files with 18 additions and 6 deletions

View file

@ -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() { }
}

View file

@ -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()

View file

@ -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)
}

View file

@ -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 {
@ -60,6 +56,11 @@ class SettingsTableViewController: UITableViewController {
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 {
SVProgressHUD.showError(withStatus: "Error")