Merge pull request #101 from jakeva/add-agent-auth

add ssh agent authentication
This commit is contained in:
Matt Diephouse 2017-08-14 09:09:54 -04:00 committed by GitHub
commit c5eb8036d0

View File

@ -18,6 +18,7 @@ private class Wrapper<T> {
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<UnsafeMutablePointer<git_cred>?>?, _: UnsafePointer<Int8>?,
_: UnsafePointer<Int8>?, _: UInt32, payload: UnsafeMutableRawPointer?) -> Int32 {
internal func credentialsCallback(
cred: UnsafeMutablePointer<UnsafeMutablePointer<git_cred>?>?,
url: UnsafePointer<CChar>?,
username: UnsafePointer<CChar>?,
_: 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):