Skip to content

Commit

Permalink
Fix ImageBuild Auth, message stream
Browse files Browse the repository at this point in the history
  • Loading branch information
jhenkens committed Jun 18, 2020
1 parent 9daaae6 commit 9c3757f
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 7 deletions.
5 changes: 3 additions & 2 deletions src/Docker.DotNet/Endpoints/IImageOperations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,11 @@ public interface IImageOperations
///
/// HTTP POST /build
///
/// 204 - No error.
/// 200 - No error.
/// 400 - Bad parameter.
/// 500 - Server error.
/// </remarks>
Task<Stream> BuildImageFromDockerfileAsync(Stream contents, ImageBuildParameters parameters, CancellationToken cancellationToken = default(CancellationToken));
Task BuildImageFromDockerfileAsync(ImageBuildParameters parameters, Stream contents, IEnumerable<AuthConfig> authConfigs, IDictionary<string, string> headers, IProgress<JSONMessage> progress, CancellationToken cancellationToken = default(CancellationToken));

/// <summary>
/// Create an image.
Expand Down
43 changes: 41 additions & 2 deletions src/Docker.DotNet/Endpoints/ImageOperations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
Expand All @@ -21,6 +22,7 @@ internal class ImageOperations : IImageOperations
};

private const string RegistryAuthHeaderKey = "X-Registry-Auth";
private const string RegistryConfigHeaderKey = "X-Registry-Config";
private const string TarContentType = "application/x-tar";
private const string ImportFromBodySource = "-";

Expand All @@ -43,7 +45,7 @@ public async Task<IList<ImagesListResponse>> ListImagesAsync(ImagesListParameter
return this._client.JsonSerializer.DeserializeObject<ImagesListResponse[]>(response.Body);
}

public Task<Stream> BuildImageFromDockerfileAsync(Stream contents, ImageBuildParameters parameters, CancellationToken cancellationToken = default(CancellationToken))
public Task BuildImageFromDockerfileAsync(ImageBuildParameters parameters, Stream contents, IEnumerable<AuthConfig> authConfigs, IDictionary<string, string> headers, IProgress<JSONMessage> progress, CancellationToken cancellationToken = default(CancellationToken))
{
if (contents == null)
{
Expand All @@ -55,9 +57,34 @@ public Task<Stream> BuildImageFromDockerfileAsync(Stream contents, ImageBuildPar
throw new ArgumentNullException(nameof(parameters));
}

HttpMethod httpMethod = HttpMethod.Post;

var data = new BinaryRequestContent(contents, TarContentType);

IQueryString queryParameters = new QueryString<ImageBuildParameters>(parameters);
return this._client.MakeRequestForStreamAsync(this._client.NoErrorHandlers, HttpMethod.Post, "build", queryParameters, data, cancellationToken);

Dictionary<string, string> customHeaders = RegistryConfigHeaders(authConfigs);

if (headers != null)
{
foreach (string key in headers.Keys)
{
customHeaders[key] = headers[key];
}
}

return StreamUtil.MonitorResponseForMessagesAsync(
this._client.MakeRequestForRawResponseAsync(
httpMethod,
"build",
queryParameters,
data,
customHeaders,
cancellationToken),
this._client,
cancellationToken,
progress
);
}

public Task CreateImageAsync(ImagesCreateParameters parameters, AuthConfig authConfig, IProgress<JSONMessage> progress, CancellationToken cancellationToken = default(CancellationToken))
Expand Down Expand Up @@ -269,5 +296,17 @@ public Task LoadImageAsync(ImageLoadParameters parameters, Stream imageStream, I
}
};
}

private Dictionary<string, string> RegistryConfigHeaders(IEnumerable<AuthConfig> authConfig)
{
var configDictionary = (authConfig ?? new AuthConfig[0]).ToDictionary(e => e.ServerAddress, e => e);
return new Dictionary<string, string>
{
{
RegistryConfigHeaderKey,
Convert.ToBase64String(Encoding.UTF8.GetBytes(this._client.JsonSerializer.SerializeObject(configDictionary)))
}
};
}
}
}
3 changes: 0 additions & 3 deletions src/Docker.DotNet/Models/ImageBuildParameters.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,6 @@ public class ImageBuildParameters // (main.ImageBuildParameters)
[QueryStringParameter("buildargs", false, typeof(MapQueryStringConverter))]
public IDictionary<string, string> BuildArgs { get; set; }

[DataMember(Name = "AuthConfigs", EmitDefaultValue = false)]
public IDictionary<string, AuthConfig> AuthConfigs { get; set; }

[QueryStringParameter("labels", false, typeof(MapQueryStringConverter))]
public IDictionary<string, string> Labels { get; set; }

Expand Down

0 comments on commit 9c3757f

Please sign in to comment.