Skip to content

Commit bc033c1

Browse files
committed
Add base skeleton to hook SSH auth
1 parent 31ec90e commit bc033c1

6 files changed

Lines changed: 70 additions & 4 deletions

File tree

src/Docker.DotNet.BasicAuth/BasicAuthCredentials.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,15 @@ public override bool IsTlsCredentials()
3737
return _isTls;
3838
}
3939

40+
public override bool IsSshCredentials()
41+
{
42+
return false;
43+
}
44+
4045
public override void Dispose()
4146
{
4247
_username.Dispose();
4348
_password.Dispose();
4449
}
4550
}
46-
}
51+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.IO;
2+
using System.Net.Http;
3+
using System.Threading;
4+
using Microsoft.Net.Http.Client;
5+
6+
namespace Docker.DotNet.SSH
7+
{
8+
public class SSHCredentials : Credentials
9+
{
10+
public override HttpMessageHandler GetHandler(HttpMessageHandler innerHandler)
11+
{
12+
return innerHandler;
13+
}
14+
15+
public override bool IsSshCredentials()
16+
{
17+
return true;
18+
}
19+
20+
public override bool IsTlsCredentials()
21+
{
22+
return false;
23+
}
24+
25+
public override ManagedHandler.StreamOpener GetStreamOpener()
26+
{
27+
// TODO
28+
return async (string host, int port, CancellationToken cancellationToken) => {
29+
return File.OpenRead("/dev/null");
30+
};
31+
}
32+
}
33+
}

src/Docker.DotNet.X509/CertificateCredentials.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ public override bool IsTlsCredentials()
4040
return true;
4141
}
4242

43+
public override bool IsSshCredentials()
44+
{
45+
return false;
46+
}
47+
4348
public override void Dispose()
4449
{
4550
}
4651
}
47-
}
52+
}

src/Docker.DotNet/AnonymousCredentials.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ public override bool IsTlsCredentials()
99
return false;
1010
}
1111

12+
public override bool IsSshCredentials()
13+
{
14+
return false;
15+
}
16+
1217
public override void Dispose()
1318
{
1419
}
@@ -18,4 +23,4 @@ public override HttpMessageHandler GetHandler(HttpMessageHandler innerHandler)
1823
return innerHandler;
1924
}
2025
}
21-
}
26+
}

src/Docker.DotNet/Credentials.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
using System;
22
using System.Net.Http;
3+
using Microsoft.Net.Http.Client;
34

45
namespace Docker.DotNet
56
{
67
public abstract class Credentials : IDisposable
78
{
89
public abstract bool IsTlsCredentials();
910

11+
public abstract bool IsSshCredentials();
12+
1013
public abstract HttpMessageHandler GetHandler(HttpMessageHandler innerHandler);
1114

15+
public virtual ManagedHandler.StreamOpener GetStreamOpener()
16+
{
17+
return null;
18+
}
19+
1220
public virtual void Dispose()
1321
{
1422
}
1523
}
16-
}
24+
}

src/Docker.DotNet/DockerClient.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,16 @@ await sock.ConnectAsync(new Microsoft.Net.Http.Client.UnixDomainSocketEndPoint(p
114114
uri = new UriBuilder("http", uri.Segments.Last()).Uri;
115115
break;
116116

117+
case "ssh":
118+
if(!Configuration.Credentials.IsSshCredentials())
119+
{
120+
throw new ArgumentException("ssh:// protocol can only be used with SSHCredentials");
121+
};
122+
handler = new ManagedHandler(Configuration.Credentials.GetStreamOpener());
123+
uri = new UriBuilder("http", uri.Host, uri.IsDefaultPort ? 22 : uri.Port).Uri;
124+
Console.WriteLine(uri.ToString());
125+
break;
126+
117127
default:
118128
throw new Exception($"Unknown URL scheme {configuration.EndpointBaseUri.Scheme}");
119129
}

0 commit comments

Comments
 (0)