diff --git a/SwiftGit2/Credentials.swift b/SwiftGit2/Credentials.swift index df750d3..2ac5884 100644 --- a/SwiftGit2/Credentials.swift +++ b/SwiftGit2/Credentials.swift @@ -18,6 +18,7 @@ private class Wrapper { public enum Credentials { case `default` + case sshAgent case plaintext(username: String, password: String) case sshMemory(username: String, publicKey: String, privateKey: String, passphrase: String) @@ -33,13 +34,23 @@ public enum Credentials { /// Handle the request of credentials, passing through to a wrapped block after converting the arguments. /// Converts the result to the correct error code required by libgit2 (0 = success, 1 = rejected setting creds, /// -1 = error) -internal func credentialsCallback(cred: UnsafeMutablePointer?>?, _: UnsafePointer?, - _: UnsafePointer?, _: UInt32, payload: UnsafeMutableRawPointer?) -> Int32 { +internal func credentialsCallback( + cred: UnsafeMutablePointer?>?, + url: UnsafePointer?, + username: UnsafePointer?, + _: UInt32, + payload: UnsafeMutableRawPointer? ) -> Int32 { + let result: Int32 + // Find username_from_url + let name = username.map(String.init(cString:)) + switch Credentials.fromPointer(payload!) { case .default: result = git_cred_default_new(cred) + case .sshAgent: + result = git_cred_ssh_key_from_agent(cred, name!) case .plaintext(let username, let password): result = git_cred_userpass_plaintext_new(cred, username, password) case .sshMemory(let username, let publicKey, let privateKey, let passphrase):