forked from libgit2/libgit2sharp
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSshExtensions.cs
More file actions
141 lines (118 loc) · 5.64 KB
/
SshExtensions.cs
File metadata and controls
141 lines (118 loc) · 5.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using LibGit2Sharp.Core;
using System;
using System.Runtime.InteropServices;
namespace LibGit2Sharp.Ssh
{
internal static class NativeMethods
{
private const string libgit2 = NativeDllName.Name;
[DllImport(libgit2, CallingConvention = CallingConvention.Cdecl)]
internal static extern int git_cred_ssh_key_new(
out IntPtr cred,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string username,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string publickey,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string privatekey,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string passphrase);
[DllImport(libgit2)]
internal static extern int git_cred_ssh_key_memory_new(
out IntPtr cred,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string username,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string publickey,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string privatekey,
[MarshalAs(UnmanagedType.CustomMarshaler, MarshalCookie = UniqueId.UniqueIdentifier, MarshalTypeRef = typeof(StrictUtf8Marshaler))] string passphrase);
}
/// <summary>
/// Class that holds SSH username with key credentials for remote repository access.
/// </summary>
public sealed class SshUserKeyCredentials : Credentials
{
/// <summary>
/// Callback to acquire a credential object.
/// </summary>
/// <param name="cred">The newly created credential object.</param>
/// <returns>0 for success, < 0 to indicate an error, > 0 to indicate no credential was acquired.</returns>
protected internal override int GitCredentialHandler(out IntPtr cred)
{
if (Username == null)
{
throw new InvalidOperationException("SshUserKeyCredentials contains a null Username.");
}
if (Passphrase == null)
{
throw new InvalidOperationException("SshUserKeyCredentials contains a null Passphrase.");
}
if (PublicKey == null)
{
throw new InvalidOperationException("SshUserKeyCredentials contains a null PublicKey.");
}
if (PrivateKey == null)
{
throw new InvalidOperationException("SshUserKeyCredentials contains a null PrivateKey.");
}
return NativeMethods.git_cred_ssh_key_new(out cred, Username, PublicKey, PrivateKey, Passphrase);
}
/// <summary>
/// Username for SSH authentication.
/// </summary>
public string Username { get; set; }
/// <summary>
/// Public key file location for SSH authentication.
/// </summary>
public string PublicKey { get; set; }
/// <summary>
/// Private key file location for SSH authentication.
/// </summary>
public string PrivateKey { get; set; }
/// <summary>
/// Passphrase for SSH authentication.
/// </summary>
public string Passphrase { get; set; }
}
/// <summary>
/// Class that holds SSH username with in-memory key credentials for remote repository access.
/// </summary>
public sealed class SshUserKeyMemoryCredentials : Credentials
{
/// <summary>
/// Callback to acquire a credential object.
/// </summary>
/// <param name="cred">The newly created credential object.</param>
/// <returns>0 for success, < 0 to indicate an error, > 0 to indicate no credential was acquired.</returns>
protected internal override int GitCredentialHandler(out IntPtr cred)
{
if (Username == null)
{
throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null Username.");
}
if (Passphrase == null)
{
throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null Passphrase.");
}
if (PublicKey == null)
{
//throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null PublicKey.");
}
if (PrivateKey == null)
{
throw new InvalidOperationException("SshUserKeyMemoryCredentials contains a null PrivateKey.");
}
return NativeMethods.git_cred_ssh_key_memory_new(out cred, Username, PublicKey, PrivateKey, Passphrase);
}
/// <summary>
/// Username for SSH authentication.
/// </summary>
public string Username { get; set; }
/// <summary>
/// Public key for SSH authentication.
/// </summary>
public string PublicKey { get; set; }
/// <summary>
/// Private key for SSH authentication.
/// </summary>
public string PrivateKey { get; set; }
/// <summary>
/// Passphrase for SSH authentication.
/// </summary>
public string Passphrase { get; set; }
}
}