diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/CHANGELOG.md b/sdk/containerregistry/Azure.Containers.ContainerRegistry/CHANGELOG.md index bb1a8c4935ab..893290cac642 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/CHANGELOG.md +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/CHANGELOG.md @@ -1,14 +1,10 @@ # Release History -## 1.0.0-beta.5 (Unreleased) +## 1.1.0-beta.1 (2021-09-07) ### Features Added -### Breaking Changes - -### Bugs Fixed - -### Other Changes +- Added `ContainerRegistryBlobClient` with methods to upload and download OCI Manifests and artifact blobs, to enable implementation of push/pull for OCI artifacts. ## 1.0.0-beta.4 (2021-08-10) diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/api/Azure.Containers.ContainerRegistry.netstandard2.0.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/api/Azure.Containers.ContainerRegistry.netstandard2.0.cs index 7397252aaf10..f69994c9f5c9 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/api/Azure.Containers.ContainerRegistry.netstandard2.0.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/api/Azure.Containers.ContainerRegistry.netstandard2.0.cs @@ -212,3 +212,86 @@ protected RegistryArtifact() { } public virtual System.Threading.Tasks.Task> UpdateTagPropertiesAsync(string tag, Azure.Containers.ContainerRegistry.ArtifactTagProperties value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } } } +namespace Azure.Containers.ContainerRegistry.Specialized +{ + public partial class ContainerRegistryBlobClient + { + protected ContainerRegistryBlobClient() { } + public ContainerRegistryBlobClient(System.Uri endpoint, Azure.Core.TokenCredential credential, string repository) { } + public ContainerRegistryBlobClient(System.Uri endpoint, Azure.Core.TokenCredential credential, string repository, Azure.Containers.ContainerRegistry.ContainerRegistryClientOptions options) { } + public virtual System.Uri Endpoint { get { throw null; } } + public virtual string RepositoryName { get { throw null; } } + public virtual Azure.Response DeleteBlob(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual System.Threading.Tasks.Task DeleteBlobAsync(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual Azure.Response DeleteManifest(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual System.Threading.Tasks.Task DeleteManifestAsync(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual Azure.Response DownloadBlob(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual System.Threading.Tasks.Task> DownloadBlobAsync(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual Azure.Response DownloadManifest(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual System.Threading.Tasks.Task> DownloadManifestAsync(string digest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual Azure.Response UploadBlob(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual System.Threading.Tasks.Task> UploadBlobAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual Azure.Response UploadManifest(Azure.Containers.ContainerRegistry.Specialized.OciManifest manifest, Azure.Containers.ContainerRegistry.Specialized.UploadManifestOptions options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + public virtual System.Threading.Tasks.Task> UploadManifestAsync(Azure.Containers.ContainerRegistry.Specialized.OciManifest manifest, Azure.Containers.ContainerRegistry.Specialized.UploadManifestOptions options = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; } + } + public partial class DownloadBlobResult + { + internal DownloadBlobResult() { } + public System.IO.Stream Content { get { throw null; } } + public string Digest { get { throw null; } } + } + public partial class DownloadManifestResult + { + internal DownloadManifestResult() { } + public string Digest { get { throw null; } } + public Azure.Containers.ContainerRegistry.Specialized.OciManifest Manifest { get { throw null; } } + } + public partial class OciAnnotations + { + public OciAnnotations() { } + public System.Collections.Generic.IDictionary AdditionalProperties { get { throw null; } } + public string Authors { get { throw null; } set { } } + public System.DateTimeOffset? CreatedOn { get { throw null; } set { } } + public string Description { get { throw null; } set { } } + public string Documentation { get { throw null; } set { } } + public string Licenses { get { throw null; } set { } } + public string Name { get { throw null; } set { } } + public string Revision { get { throw null; } set { } } + public string Source { get { throw null; } set { } } + public string Title { get { throw null; } set { } } + public string Url { get { throw null; } set { } } + public string Vendor { get { throw null; } set { } } + public string Version { get { throw null; } set { } } + } + public partial class OciBlobDescriptor + { + public OciBlobDescriptor() { } + public Azure.Containers.ContainerRegistry.Specialized.OciAnnotations Annotations { get { throw null; } set { } } + public string Digest { get { throw null; } set { } } + public string MediaType { get { throw null; } set { } } + public long? Size { get { throw null; } set { } } + } + public partial class OciManifest + { + public OciManifest() { } + public Azure.Containers.ContainerRegistry.Specialized.OciAnnotations Annotations { get { throw null; } } + public Azure.Containers.ContainerRegistry.Specialized.OciBlobDescriptor Config { get { throw null; } set { } } + public System.Collections.Generic.IList Layers { get { throw null; } } + public int? SchemaVersion { get { throw null; } set { } } + } + public partial class UploadBlobResult + { + internal UploadBlobResult() { } + public string Digest { get { throw null; } } + } + public partial class UploadManifestOptions + { + public UploadManifestOptions() { } + public string Tag { get { throw null; } set { } } + } + public partial class UploadManifestResult + { + internal UploadManifestResult() { } + public string Digest { get { throw null; } } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Azure.Containers.ContainerRegistry.csproj b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Azure.Containers.ContainerRegistry.csproj index 055e4a52997a..aca9ca0d5f07 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Azure.Containers.ContainerRegistry.csproj +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Azure.Containers.ContainerRegistry.csproj @@ -2,7 +2,7 @@ This client library enables working with the Microsoft Azure Container Registry service to store and manage container images and deployment artifacts. Microsoft Azure.Containers.ContainerRegistry client library - 1.0.0-beta.5 + 1.1.0-beta.1 Azure Container Registry;$(PackageCommonTags) $(RequiredTargetFrameworks) diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/ContainerRegistryBlobClient.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/ContainerRegistryBlobClient.cs new file mode 100644 index 000000000000..d04bc03208e5 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/ContainerRegistryBlobClient.cs @@ -0,0 +1,459 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.IO; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; +using Azure.Core; +using Azure.Core.Pipeline; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// The Azure Container Registry blob client, responsible for uploading and downloading + /// blobs and manifests, the building blocks of artifacts. + public class ContainerRegistryBlobClient + { + private readonly Uri _endpoint; + private readonly string _registryName; + private readonly string _repositoryName; + private readonly HttpPipeline _pipeline; + private readonly HttpPipeline _acrAuthPipeline; + private readonly ClientDiagnostics _clientDiagnostics; + private readonly ContainerRegistryRestClient _restClient; + private readonly AuthenticationRestClient _acrAuthClient; + private readonly ContainerRegistryBlobRestClient _blobRestClient; + + /// + /// Initializes a new instance of the for managing upload and download of container images and artifacts. + /// + /// The URI endpoint of the container registry. This is likely to be similar + /// to "https://{registry-name}.azurecr.io". + /// The API key credential used to authenticate requests + /// against the container registry. + /// The name of the repository that logically groups the artifact parts. + /// Thrown when the , , or is null. + public ContainerRegistryBlobClient(Uri endpoint, TokenCredential credential, string repository) : this(endpoint, credential, repository, new ContainerRegistryClientOptions()) + { + } + + /// + /// Initializes a new instance of the ContainerRegistryClient for managing container images and artifacts. + /// + /// The URI endpoint of the container registry. This is likely to be similar + /// to "https://{registry-name}.azurecr.io". + /// The API key credential used to authenticate requests + /// against the container registry. + /// The name of the repository that logically groups the artifact parts + /// Client configuration options for connecting to Azure Container Registry. + /// Thrown when the , , or is null. + public ContainerRegistryBlobClient(Uri endpoint, TokenCredential credential, string repository, ContainerRegistryClientOptions options) + { + Argument.AssertNotNull(endpoint, nameof(endpoint)); + Argument.AssertNotNull(credential, nameof(credential)); + Argument.AssertNotNull(repository, nameof(repository)); + + _endpoint = endpoint; + _registryName = endpoint.Host.Split('.')[0]; + _repositoryName = repository; + _clientDiagnostics = new ClientDiagnostics(options); + + _acrAuthPipeline = HttpPipelineBuilder.Build(options); + _acrAuthClient = new AuthenticationRestClient(_clientDiagnostics, _acrAuthPipeline, endpoint.AbsoluteUri); + + string defaultScope = options.Audience + "/.default"; + _pipeline = HttpPipelineBuilder.Build(options, new ContainerRegistryChallengeAuthenticationPolicy(credential, defaultScope, _acrAuthClient)); + _restClient = new ContainerRegistryRestClient(_clientDiagnostics, _pipeline, _endpoint.AbsoluteUri); + _blobRestClient = new ContainerRegistryBlobRestClient(_clientDiagnostics, _pipeline, _endpoint.AbsoluteUri); + } + + /// Initializes a new instance of ContainerRegistryBlobClient for mocking. + protected ContainerRegistryBlobClient() + { + } + + /// + /// Gets the registry service endpoint for this client. + /// + public virtual Uri Endpoint => _endpoint; + + /// + /// Gets the name of the repository that logically groups the artifact parts. + /// + public virtual string RepositoryName => _repositoryName; + + /// + /// Upload a manifest for an OCI Artifact. + /// + /// The manifest to upload. + /// Options for configuring the upload operation. + /// The cancellation token to use. + /// + public virtual Response UploadManifest(OciManifest manifest, UploadManifestOptions options = default, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(manifest, nameof(manifest)); + + options ??= new UploadManifestOptions(); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(UploadManifest)}"); + scope.Start(); + try + { + var stream = SerializeManifest(manifest); + string tagOrDigest = options.Tag ?? OciBlobDescriptor.ComputeDigest(stream); + ResponseWithHeaders response = _restClient.CreateManifest(_repositoryName, tagOrDigest, manifest, ManifestMediaType.OciManifest.ToString(), cancellationToken); + return Response.FromValue(new UploadManifestResult(response.Headers.DockerContentDigest), response.GetRawResponse()); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Upload a manifest for an OCI Artifact. + /// + /// The manifest to upload. + /// Options for configuring the upload operation. + /// The cancellation token to use. + /// + public async virtual Task> UploadManifestAsync(OciManifest manifest, UploadManifestOptions options = default, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(manifest, nameof(manifest)); + + options ??= new UploadManifestOptions(); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(UploadManifest)}"); + scope.Start(); + try + { + var stream = SerializeManifest(manifest); + string tagOrDigest = options.Tag ?? OciBlobDescriptor.ComputeDigest(stream); + ResponseWithHeaders response = await _restClient.CreateManifestAsync(_repositoryName, tagOrDigest, manifest, ManifestMediaType.OciManifest.ToString(), cancellationToken).ConfigureAwait(false); + return Response.FromValue(new UploadManifestResult(response.Headers.DockerContentDigest), response.GetRawResponse()); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + private static Stream SerializeManifest(OciManifest manifest) + { + MemoryStream stream = new MemoryStream(); + Utf8JsonWriter jsonWriter = new Utf8JsonWriter(stream); + ((IUtf8JsonSerializable)manifest).Write(jsonWriter); + jsonWriter.Flush(); + return stream; + } + + private static OciManifest DeserializeManifest(Stream stream) + { + using var document = JsonDocument.Parse(stream); + return OciManifest.DeserializeOciManifest(document.RootElement); + } + + /// + /// Upload an artifact blob. + /// + /// The stream containing the blob data. + /// The cancellation token to use. + /// + public virtual Response UploadBlob(Stream stream, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(stream, nameof(stream)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(UploadBlob)}"); + scope.Start(); + try + { + string digest = OciBlobDescriptor.ComputeDigest(stream); + + ResponseWithHeaders startUploadResult = + _blobRestClient.StartUpload(_repositoryName, cancellationToken); + + ResponseWithHeaders uploadChunkResult = + _blobRestClient.UploadChunk(startUploadResult.Headers.Location, stream, cancellationToken); + + ResponseWithHeaders completeUploadResult = + _blobRestClient.CompleteUpload(digest, uploadChunkResult.Headers.Location, null, cancellationToken); + + return Response.FromValue(new UploadBlobResult(completeUploadResult.Headers.DockerContentDigest), completeUploadResult.GetRawResponse()); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Upload an artifact blob. + /// + /// The stream containing the blob data. + /// The cancellation token to use. + /// + public virtual async Task> UploadBlobAsync(Stream stream, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(stream, nameof(stream)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(UploadBlob)}"); + scope.Start(); + try + { + string digest = OciBlobDescriptor.ComputeDigest(stream); + + ResponseWithHeaders startUploadResult = + await _blobRestClient.StartUploadAsync(_repositoryName, cancellationToken).ConfigureAwait(false); + + ResponseWithHeaders uploadChunkResult = + await _blobRestClient.UploadChunkAsync(startUploadResult.Headers.Location, stream, cancellationToken).ConfigureAwait(false); + + ResponseWithHeaders completeUploadResult = + await _blobRestClient.CompleteUploadAsync(digest, uploadChunkResult.Headers.Location, null, cancellationToken).ConfigureAwait(false); + + return Response.FromValue(new UploadBlobResult(completeUploadResult.Headers.DockerContentDigest), completeUploadResult.GetRawResponse()); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Download the manifest for an OCI Artifact. + /// + /// The digest of the manifest to download. + /// The cancellation token to use. + /// + public virtual Response DownloadManifest(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DownloadManifest)}"); + scope.Start(); + try + { + Response response = _restClient.GetManifest(_repositoryName, digest, ManifestMediaType.OciManifest.ToString(), cancellationToken); + Response rawResponse = response.GetRawResponse(); + ManifestMediaType mediaType = rawResponse.Headers.ContentType; + + if (!ValidateDigest(rawResponse.ContentStream, digest)) + { + throw _clientDiagnostics.CreateRequestFailedException(rawResponse, "The requested digest does not match the digest of the received manifest."); + } + + using var document = JsonDocument.Parse(rawResponse.ContentStream); + var manifest = OciManifest.DeserializeOciManifest(document.RootElement); + return Response.FromValue(new DownloadManifestResult(digest, manifest), rawResponse); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Download the manifest for an OCI Artifact. + /// + /// The digest of the manifest to download. + /// The cancellation token to use. + /// + public virtual async Task> DownloadManifestAsync(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DownloadManifest)}"); + scope.Start(); + try + { + Response response = await _restClient.GetManifestAsync(_repositoryName, digest, ManifestMediaType.OciManifest.ToString(), cancellationToken).ConfigureAwait(false); + Response rawResponse = response.GetRawResponse(); + ManifestMediaType mediaType = rawResponse.Headers.ContentType; + + if (!ValidateDigest(rawResponse.ContentStream, digest)) + { + throw _clientDiagnostics.CreateRequestFailedException(rawResponse, "The requested digest does not match the digest of the received manifest."); + } + + using var document = JsonDocument.Parse(rawResponse.ContentStream); + var manifest = OciManifest.DeserializeOciManifest(document.RootElement); + return Response.FromValue(new DownloadManifestResult(digest, manifest), rawResponse); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + private static bool ValidateDigest(Stream content, string digest) + { + // Validate that the file content did not change in transmission from the registry. + + // TODO: The registry may use a different digest algorithm - we may need to handle that + string contentDigest = OciBlobDescriptor.ComputeDigest(content); + content.Position = 0; + return digest.Equals(contentDigest, StringComparison.OrdinalIgnoreCase); + } + + /// + /// Download a blob that is part of an artifact. + /// + /// The digest of the blob to download. + /// The cancellation token to use. + /// + public virtual Response DownloadBlob(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DownloadBlob)}"); + scope.Start(); + try + { + ResponseWithHeaders blobResult = _blobRestClient.GetBlob(_repositoryName, digest, cancellationToken); + + if (!ValidateDigest(blobResult.Value, digest)) + { + throw _clientDiagnostics.CreateRequestFailedException(blobResult, "The requested digest does not match the digest of the received manifest."); + } + + return Response.FromValue(new DownloadBlobResult(digest, blobResult.Value), blobResult.GetRawResponse()); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Download a blob that is part of an artifact. + /// + /// The digest of the blob to download. + /// The cancellation token to use. + /// + public virtual async Task> DownloadBlobAsync(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DownloadBlob)}"); + scope.Start(); + try + { + ResponseWithHeaders blobResult = await _blobRestClient.GetBlobAsync(_repositoryName, digest, cancellationToken).ConfigureAwait(false); + + if (!ValidateDigest(blobResult.Value, digest)) + { + throw _clientDiagnostics.CreateRequestFailedException(blobResult, "The requested digest does not match the digest of the received manifest."); + } + + return Response.FromValue(new DownloadBlobResult(digest, blobResult.Value), blobResult.GetRawResponse()); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Delete a blob. + /// + /// The digest of the blob to delete. + /// The cancellation token to use. + /// + public virtual Response DeleteBlob(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DeleteBlob)}"); + scope.Start(); + try + { + ResponseWithHeaders blobResult = _blobRestClient.DeleteBlob(_repositoryName, digest, cancellationToken); + return blobResult.GetRawResponse(); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Delete a blob. + /// + /// The digest of the blob to delete. + /// The cancellation token to use. + /// + public virtual async Task DeleteBlobAsync(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DeleteBlob)}"); + scope.Start(); + try + { + ResponseWithHeaders blobResult = await _blobRestClient.DeleteBlobAsync(_repositoryName, digest, cancellationToken).ConfigureAwait(false); + return blobResult.GetRawResponse(); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Delete a manifest. Doing so effectively deletes the artifact from the registry. + /// + /// The digest of the manifest to delete. + /// The cancellation token to use. + /// + public virtual Response DeleteManifest(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DeleteManifest)}"); + scope.Start(); + try + { + return _restClient.DeleteManifest(_repositoryName, digest, cancellationToken); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + + /// + /// Delete a manifest. Doing so effectively deletes the artifact from the registry. + /// + /// The digest of the manifest to delete. + /// The cancellation token to use. + /// + public virtual async Task DeleteManifestAsync(string digest, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(digest, nameof(digest)); + + using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ContainerRegistryBlobClient)}.{nameof(DeleteManifest)}"); + scope.Start(); + try + { + return await _restClient.DeleteManifestAsync(_repositoryName, digest, cancellationToken).ConfigureAwait(false); + } + catch (Exception e) + { + scope.Failed(e); + throw; + } + } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/DownloadBlobResult.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/DownloadBlobResult.cs new file mode 100644 index 000000000000..908c1a77f2c7 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/DownloadBlobResult.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// + /// The result from downloading a blob from the registry. + /// + public class DownloadBlobResult + { + internal DownloadBlobResult(string digest, Stream content) + { + Digest = digest; + Content = content; + } + + /// + /// The blob's digest, calculated by the registry. + /// + public string Digest { get; } + + /// + /// The blob content. + /// + public Stream Content { get; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/DownloadManifestResult.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/DownloadManifestResult.cs new file mode 100644 index 000000000000..bffa7362deec --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/DownloadManifestResult.cs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// + /// The result from downloading an OCI manifest from the registry. + /// + public class DownloadManifestResult + { + internal DownloadManifestResult(string digest, OciManifest manifest) + { + Digest = digest; + Manifest = manifest; + } + + /// + /// The manifest's digest, calculated by the registry. + /// + public string Digest { get; } + + /// + /// The OCI manifest that was downloaded. + /// + public OciManifest Manifest { get; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/ManifestMediaType.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/ManifestMediaType.cs new file mode 100644 index 000000000000..c0a992366069 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/ManifestMediaType.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.ComponentModel; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + internal readonly struct ManifestMediaType : IEquatable + { + public static readonly ManifestMediaType OciManifest = new ManifestMediaType("application/vnd.oci.image.manifest.v1+json"); + + // The below manifest types will be added in in a later v1.1.0 library version -- keeping them here for when needed. + // + // public static readonly ManifestMediaType OciIndex = new ManifestMediaType("application/vnd.oci.image.index.v1+json"); + // public static readonly ManifestMediaType DockerManifestV1 = new ManifestMediaType("application/vnd.docker.container.image.v1+json"); + // public static readonly ManifestMediaType DockerManifestV2 = new ManifestMediaType("application/vnd.docker.distribution.manifest.v2+json"); + // public static readonly ManifestMediaType DockerManifestList = new ManifestMediaType("application/vnd.docker.distribution.manifest.list.v2+json"); + + private readonly string _value; + + private ManifestMediaType(string mediaType) + { + _value = mediaType; + } + + public static implicit operator ManifestMediaType(string mediaType) => new ManifestMediaType(mediaType); + + public static explicit operator string(ManifestMediaType mediaType) => mediaType._value; + + public static bool operator ==(ManifestMediaType left, ManifestMediaType right) => Equals(left, right); + + public static bool operator !=(ManifestMediaType left, ManifestMediaType right) => !Equals(left, right); + + public bool Equals(ManifestMediaType other) => _value == other._value; + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ManifestMediaType mediaType && Equals(mediaType); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _value.GetHashCode(); + + public override string ToString() => _value; + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciAnnotations.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciAnnotations.cs new file mode 100644 index 000000000000..24650c353502 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciAnnotations.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Azure.Core; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + [CodeGenModel("Annotations")] + public partial class OciAnnotations + { + /// Date and time on which the image was built. + [CodeGenMember("Created")] + public DateTimeOffset? CreatedOn { get; set; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciBlobDescriptor.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciBlobDescriptor.cs new file mode 100644 index 000000000000..63c83eb4941a --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciBlobDescriptor.cs @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using Azure.Core; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + [CodeGenModel("Descriptor")] + public partial class OciBlobDescriptor + { + /// Layer media type. + public string MediaType { get; set; } + /// Layer size. + public long? Size { get; set; } + /// Layer digest. + public string Digest { get; set; } + + /// Additional information provided through arbitrary metadata. + public OciAnnotations Annotations { get; set; } + + /// Specifies a list of URIs from which this object may be downloaded. + internal IList Urls { get; } + + internal static string ComputeDigest(Stream stream) + { + using (SHA256 sha256 = SHA256.Create()) + { + var position = stream.Position; + string digest = default; + + // Compute and print the hash values for each file in directory. + try + { + stream.Position = 0; + var hashValue = sha256.ComputeHash(stream); + digest = "sha256:" + PrintByteArray(hashValue); + } + catch (IOException e) + { + Console.WriteLine($"I/O Exception: {e.Message}"); + throw; + } + catch (UnauthorizedAccessException e) + { + Console.WriteLine($"Access Exception: {e.Message}"); + throw; + } + finally + { + stream.Position = position; + } + + return digest; + } + } + + // Display the byte array in a readable format. + private static string PrintByteArray(byte[] array) + { + var builder = new StringBuilder(); + for (int i = 0; i < array.Length; i++) + { +#pragma warning disable CA1305 // Specify IFormatProvider + builder.AppendFormat($"{array[i]:X2}"); +#pragma warning restore CA1305 // Specify IFormatProvider + } +#pragma warning disable CA1304 // Specify CultureInfo + return builder.ToString().ToLower(); +#pragma warning restore CA1304 // Specify CultureInfo + } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciManifest.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciManifest.cs new file mode 100644 index 000000000000..cfbe9bd0c6a6 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/OciManifest.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Azure.Core; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// + /// A manifest for an OCI (Open Container Initiative) artifact. + /// + [CodeGenModel("OCIManifest")] + public partial class OciManifest + { + /// Additional information provided through arbitrary metadata. + public OciAnnotations Annotations { get; } + + /// Schema version. + public int? SchemaVersion { get; set; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadBlobResult.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadBlobResult.cs new file mode 100644 index 000000000000..a1f8eded9ccc --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadBlobResult.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// + /// The result from uploading a blob. + /// + public class UploadBlobResult + { + internal UploadBlobResult(string digest) + { + Digest = digest; + } + + /// + /// The digest of the uploaded blob, calculated by the registry. + /// + public string Digest { get; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadManifestOptions.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadManifestOptions.cs new file mode 100644 index 000000000000..5347eb0be046 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadManifestOptions.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// + /// Options for configuring the upload manifest operation. + /// + public class UploadManifestOptions + { + /// + /// A tag to assign to the artifact represented by this manifest. + /// + public string Tag { get; set; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadManifestResult.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadManifestResult.cs new file mode 100644 index 000000000000..b766ac7a5670 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Blob/UploadManifestResult.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// + /// The result from uploading a manifest. + /// + public class UploadManifestResult + { + internal UploadManifestResult(string digest) + { + Digest = digest; + } + + /// + /// The digest of the uploaded manifest, calculated by the registry. + /// + public string Digest { get; } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryBlobRestClient.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryBlobRestClient.cs index bf73db2dfbf7..826327cb8837 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryBlobRestClient.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryBlobRestClient.cs @@ -350,7 +350,7 @@ public ResponseWithHeaders MountBlob(stri } } - internal HttpMessage CreateGetUploadStatusRequest(string location) + internal HttpMessage CreateGetUploadStatusRequest(string nextLink) { var message = _pipeline.CreateMessage(); var request = message.Request; @@ -358,24 +358,24 @@ internal HttpMessage CreateGetUploadStatusRequest(string location) var uri = new RawRequestUriBuilder(); uri.AppendRaw(url, false); uri.AppendPath("/", false); - uri.AppendPath(location, false); + uri.AppendRawNextLink(nextLink, false); request.Uri = uri; request.Headers.Add("Accept", "application/json"); return message; } /// Retrieve status of upload identified by uuid. The primary purpose of this endpoint is to resolve the current status of a resumable upload. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// The cancellation token to use. - /// is null. - public async Task> GetUploadStatusAsync(string location, CancellationToken cancellationToken = default) + /// is null. + public async Task> GetUploadStatusAsync(string nextLink, CancellationToken cancellationToken = default) { - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } - using var message = CreateGetUploadStatusRequest(location); + using var message = CreateGetUploadStatusRequest(nextLink); await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); var headers = new ContainerRegistryBlobGetUploadStatusHeaders(message.Response); switch (message.Response.Status) @@ -388,17 +388,17 @@ public async Task Retrieve status of upload identified by uuid. The primary purpose of this endpoint is to resolve the current status of a resumable upload. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// The cancellation token to use. - /// is null. - public ResponseWithHeaders GetUploadStatus(string location, CancellationToken cancellationToken = default) + /// is null. + public ResponseWithHeaders GetUploadStatus(string nextLink, CancellationToken cancellationToken = default) { - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } - using var message = CreateGetUploadStatusRequest(location); + using var message = CreateGetUploadStatusRequest(nextLink); _pipeline.Send(message, cancellationToken); var headers = new ContainerRegistryBlobGetUploadStatusHeaders(message.Response); switch (message.Response.Status) @@ -410,7 +410,7 @@ public ResponseWithHeaders GetUploa } } - internal HttpMessage CreateUploadChunkRequest(string location, Stream value) + internal HttpMessage CreateUploadChunkRequest(string nextLink, Stream value) { var message = _pipeline.CreateMessage(); var request = message.Request; @@ -418,7 +418,7 @@ internal HttpMessage CreateUploadChunkRequest(string location, Stream value) var uri = new RawRequestUriBuilder(); uri.AppendRaw(url, false); uri.AppendPath("/", false); - uri.AppendPath(location, false); + uri.AppendRawNextLink(nextLink, false); request.Uri = uri; request.Headers.Add("Accept", "application/json"); request.Headers.Add("Content-Type", "application/octet-stream"); @@ -427,22 +427,22 @@ internal HttpMessage CreateUploadChunkRequest(string location, Stream value) } /// Upload a stream of data without completing the upload. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// Raw data of blob. /// The cancellation token to use. - /// or is null. - public async Task> UploadChunkAsync(string location, Stream value, CancellationToken cancellationToken = default) + /// or is null. + public async Task> UploadChunkAsync(string nextLink, Stream value, CancellationToken cancellationToken = default) { - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } - using var message = CreateUploadChunkRequest(location, value); + using var message = CreateUploadChunkRequest(nextLink, value); await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); var headers = new ContainerRegistryBlobUploadChunkHeaders(message.Response); switch (message.Response.Status) @@ -455,22 +455,22 @@ public async Task> } /// Upload a stream of data without completing the upload. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// Raw data of blob. /// The cancellation token to use. - /// or is null. - public ResponseWithHeaders UploadChunk(string location, Stream value, CancellationToken cancellationToken = default) + /// or is null. + public ResponseWithHeaders UploadChunk(string nextLink, Stream value, CancellationToken cancellationToken = default) { - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } - using var message = CreateUploadChunkRequest(location, value); + using var message = CreateUploadChunkRequest(nextLink, value); _pipeline.Send(message, cancellationToken); var headers = new ContainerRegistryBlobUploadChunkHeaders(message.Response); switch (message.Response.Status) @@ -482,7 +482,7 @@ public ResponseWithHeaders UploadChunk( } } - internal HttpMessage CreateCompleteUploadRequest(string digest, string location, Stream value) + internal HttpMessage CreateCompleteUploadRequest(string digest, string nextLink, Stream value) { var message = _pipeline.CreateMessage(); var request = message.Request; @@ -490,7 +490,7 @@ internal HttpMessage CreateCompleteUploadRequest(string digest, string location, var uri = new RawRequestUriBuilder(); uri.AppendRaw(url, false); uri.AppendPath("/", false); - uri.AppendPath(location, false); + uri.AppendRawNextLink(nextLink, false); uri.AppendQuery("digest", digest, true); request.Uri = uri; request.Headers.Add("Accept", "application/json"); @@ -504,22 +504,22 @@ internal HttpMessage CreateCompleteUploadRequest(string digest, string location, /// Complete the upload, providing all the data in the body, if necessary. A request without a body will just complete the upload with previously uploaded content. /// Digest of a BLOB. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// Optional raw data of blob. /// The cancellation token to use. - /// or is null. - public async Task> CompleteUploadAsync(string digest, string location, Stream value = null, CancellationToken cancellationToken = default) + /// or is null. + public async Task> CompleteUploadAsync(string digest, string nextLink, Stream value = null, CancellationToken cancellationToken = default) { if (digest == null) { throw new ArgumentNullException(nameof(digest)); } - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } - using var message = CreateCompleteUploadRequest(digest, location, value); + using var message = CreateCompleteUploadRequest(digest, nextLink, value); await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); var headers = new ContainerRegistryBlobCompleteUploadHeaders(message.Response); switch (message.Response.Status) @@ -533,22 +533,22 @@ public async Task Complete the upload, providing all the data in the body, if necessary. A request without a body will just complete the upload with previously uploaded content. /// Digest of a BLOB. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// Optional raw data of blob. /// The cancellation token to use. - /// or is null. - public ResponseWithHeaders CompleteUpload(string digest, string location, Stream value = null, CancellationToken cancellationToken = default) + /// or is null. + public ResponseWithHeaders CompleteUpload(string digest, string nextLink, Stream value = null, CancellationToken cancellationToken = default) { if (digest == null) { throw new ArgumentNullException(nameof(digest)); } - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } - using var message = CreateCompleteUploadRequest(digest, location, value); + using var message = CreateCompleteUploadRequest(digest, nextLink, value); _pipeline.Send(message, cancellationToken); var headers = new ContainerRegistryBlobCompleteUploadHeaders(message.Response); switch (message.Response.Status) @@ -560,7 +560,7 @@ public ResponseWithHeaders CompleteU } } - internal HttpMessage CreateCancelUploadRequest(string location) + internal HttpMessage CreateCancelUploadRequest(string nextLink) { var message = _pipeline.CreateMessage(); var request = message.Request; @@ -568,24 +568,24 @@ internal HttpMessage CreateCancelUploadRequest(string location) var uri = new RawRequestUriBuilder(); uri.AppendRaw(url, false); uri.AppendPath("/", false); - uri.AppendPath(location, false); + uri.AppendRawNextLink(nextLink, false); request.Uri = uri; request.Headers.Add("Accept", "application/json"); return message; } /// Cancel outstanding upload processes, releasing associated resources. If this is not called, the unfinished uploads will eventually timeout. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// The cancellation token to use. - /// is null. - public async Task CancelUploadAsync(string location, CancellationToken cancellationToken = default) + /// is null. + public async Task CancelUploadAsync(string nextLink, CancellationToken cancellationToken = default) { - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } - using var message = CreateCancelUploadRequest(location); + using var message = CreateCancelUploadRequest(nextLink); await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); switch (message.Response.Status) { @@ -597,17 +597,17 @@ public async Task CancelUploadAsync(string location, CancellationToken } /// Cancel outstanding upload processes, releasing associated resources. If this is not called, the unfinished uploads will eventually timeout. - /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). + /// Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) ). /// The cancellation token to use. - /// is null. - public Response CancelUpload(string location, CancellationToken cancellationToken = default) + /// is null. + public Response CancelUpload(string nextLink, CancellationToken cancellationToken = default) { - if (location == null) + if (nextLink == null) { - throw new ArgumentNullException(nameof(location)); + throw new ArgumentNullException(nameof(nextLink)); } - using var message = CreateCancelUploadRequest(location); + using var message = CreateCancelUploadRequest(nextLink); _pipeline.Send(message, cancellationToken); switch (message.Response.Status) { diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryRestClient.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryRestClient.cs index e63ccb5c40f9..d179311167a7 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryRestClient.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/ContainerRegistryRestClient.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using Azure; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; using Azure.Core.Pipeline; @@ -162,7 +163,7 @@ public Response GetManifest(string name, string reference, stri } } - internal HttpMessage CreateCreateManifestRequest(string name, string reference, Manifest payload) + internal HttpMessage CreateCreateManifestRequest(string name, string reference, OciManifest payload, string contentType) { var message = _pipeline.CreateMessage(); var request = message.Request; @@ -175,7 +176,10 @@ internal HttpMessage CreateCreateManifestRequest(string name, string reference, uri.AppendPath(reference, true); request.Uri = uri; request.Headers.Add("Accept", "application/json"); - request.Headers.Add("Content-Type", "application/vnd.docker.distribution.manifest.v2+json"); + if (contentType != null) + { + request.Headers.Add("Content-Type", contentType); + } var content = new Utf8JsonRequestContent(); content.JsonWriter.WriteObjectValue(payload); request.Content = content; @@ -186,9 +190,10 @@ internal HttpMessage CreateCreateManifestRequest(string name, string reference, /// Name of the image (including the namespace). /// A tag or a digest, pointing to a specific image. /// Manifest body, can take v1 or v2 values depending on accept header. + /// The manifest's Content-Type. /// The cancellation token to use. /// , , or is null. - public async Task> CreateManifestAsync(string name, string reference, Manifest payload, CancellationToken cancellationToken = default) + public async Task> CreateManifestAsync(string name, string reference, OciManifest payload, string contentType = null, CancellationToken cancellationToken = default) { if (name == null) { @@ -203,18 +208,13 @@ public async Task Name of the image (including the namespace). /// A tag or a digest, pointing to a specific image. /// Manifest body, can take v1 or v2 values depending on accept header. + /// The manifest's Content-Type. /// The cancellation token to use. /// , , or is null. - public ResponseWithHeaders CreateManifest(string name, string reference, Manifest payload, CancellationToken cancellationToken = default) + public ResponseWithHeaders CreateManifest(string name, string reference, OciManifest payload, string contentType = null, CancellationToken cancellationToken = default) { if (name == null) { @@ -241,18 +242,13 @@ public ResponseWithHeaders Creat throw new ArgumentNullException(nameof(payload)); } - using var message = CreateCreateManifestRequest(name, reference, payload); + using var message = CreateCreateManifestRequest(name, reference, payload, contentType); _pipeline.Send(message, cancellationToken); var headers = new ContainerRegistryCreateManifestHeaders(message.Response); switch (message.Response.Status) { case 201: - { - object value = default; - using var document = JsonDocument.Parse(message.Response.ContentStream); - value = document.RootElement.GetObject(); - return ResponseWithHeaders.FromValue(value, headers, message.Response); - } + return ResponseWithHeaders.FromValue(headers, message.Response); default: throw _clientDiagnostics.CreateRequestFailedException(message.Response); } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Descriptor.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Descriptor.cs deleted file mode 100644 index 1034f52083f1..000000000000 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Descriptor.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -// - -#nullable disable - -using System.Collections.Generic; -using Azure.Core; - -namespace Azure.Containers.ContainerRegistry -{ - /// Docker V2 image layer descriptor including config and layers. - internal partial class Descriptor - { - /// Initializes a new instance of Descriptor. - public Descriptor() - { - Urls = new ChangeTrackingList(); - } - - /// Initializes a new instance of Descriptor. - /// Layer media type. - /// Layer size. - /// Layer digest. - /// Specifies a list of URIs from which this object may be downloaded. - /// Additional information provided through arbitrary metadata. - internal Descriptor(string mediaType, long? size, string digest, IList urls, Annotations annotations) - { - MediaType = mediaType; - Size = size; - Digest = digest; - Urls = urls; - Annotations = annotations; - } - - /// Layer media type. - public string MediaType { get; set; } - /// Layer size. - public long? Size { get; set; } - /// Layer digest. - public string Digest { get; set; } - /// Specifies a list of URIs from which this object may be downloaded. - public IList Urls { get; } - /// Additional information provided through arbitrary metadata. - public Annotations Annotations { get; set; } - } -} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.Serialization.cs index 605defc93d64..ec323a6e2122 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.Serialization.cs @@ -10,19 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class FsLayer : IUtf8JsonSerializable + internal partial class FsLayer { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(BlobSum)) - { - writer.WritePropertyName("blobSum"); - writer.WriteStringValue(BlobSum); - } - writer.WriteEndObject(); - } - internal static FsLayer DeserializeFsLayer(JsonElement element) { Optional blobSum = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.cs index 4c08cf841bb5..e68a7ce23057 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/FsLayer.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class FsLayer { /// Initializes a new instance of FsLayer. - public FsLayer() + internal FsLayer() { } @@ -23,6 +23,6 @@ internal FsLayer(string blobSum) } /// SHA of an image layer. - public string BlobSum { get; set; } + public string BlobSum { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.Serialization.cs index ca9e7f59a62b..d7e42fc705e1 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.Serialization.cs @@ -10,19 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class History : IUtf8JsonSerializable + internal partial class History { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(V1Compatibility)) - { - writer.WritePropertyName("v1Compatibility"); - writer.WriteStringValue(V1Compatibility); - } - writer.WriteEndObject(); - } - internal static History DeserializeHistory(JsonElement element) { Optional v1Compatibility = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.cs index e8d94d016d96..85dc513a2c83 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/History.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class History { /// Initializes a new instance of History. - public History() + internal History() { } @@ -23,6 +23,6 @@ internal History(string v1Compatibility) } /// The raw v1 compatibility information. - public string V1Compatibility { get; set; } + public string V1Compatibility { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.Serialization.cs index 1a7b236b9605..15b059dd9be0 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.Serialization.cs @@ -10,29 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class ImageSignature : IUtf8JsonSerializable + internal partial class ImageSignature { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(Header)) - { - writer.WritePropertyName("header"); - writer.WriteObjectValue(Header); - } - if (Optional.IsDefined(Signature)) - { - writer.WritePropertyName("signature"); - writer.WriteStringValue(Signature); - } - if (Optional.IsDefined(Protected)) - { - writer.WritePropertyName("protected"); - writer.WriteStringValue(Protected); - } - writer.WriteEndObject(); - } - internal static ImageSignature DeserializeImageSignature(JsonElement element) { Optional header = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.cs index 99e76fa286db..923b68e06acf 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ImageSignature.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class ImageSignature { /// Initializes a new instance of ImageSignature. - public ImageSignature() + internal ImageSignature() { } @@ -27,10 +27,10 @@ internal ImageSignature(JWK header, string signature, string @protected) } /// A JSON web signature. - public JWK Header { get; set; } + public JWK Header { get; } /// A signature for the image manifest, signed by a libtrust private key. - public string Signature { get; set; } + public string Signature { get; } /// The signed protected header. - public string Protected { get; set; } + public string Protected { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.Serialization.cs index 907fa42926f2..282c4fb59023 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.Serialization.cs @@ -10,24 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class JWK : IUtf8JsonSerializable + internal partial class JWK { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(Jwk)) - { - writer.WritePropertyName("jwk"); - writer.WriteObjectValue(Jwk); - } - if (Optional.IsDefined(Alg)) - { - writer.WritePropertyName("alg"); - writer.WriteStringValue(Alg); - } - writer.WriteEndObject(); - } - internal static JWK DeserializeJWK(JsonElement element) { Optional jwk = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.cs index fc1b294b7bcb..f0b30848f12f 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWK.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class JWK { /// Initializes a new instance of JWK. - public JWK() + internal JWK() { } @@ -25,8 +25,8 @@ internal JWK(JWKHeader jwk, string alg) } /// JSON web key parameter. - public JWKHeader Jwk { get; set; } + public JWKHeader Jwk { get; } /// The algorithm used to sign or encrypt the JWT. - public string Alg { get; set; } + public string Alg { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.Serialization.cs index eb394f39b94d..d10dd9e06fef 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.Serialization.cs @@ -10,39 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class JWKHeader : IUtf8JsonSerializable + internal partial class JWKHeader { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(Crv)) - { - writer.WritePropertyName("crv"); - writer.WriteStringValue(Crv); - } - if (Optional.IsDefined(Kid)) - { - writer.WritePropertyName("kid"); - writer.WriteStringValue(Kid); - } - if (Optional.IsDefined(Kty)) - { - writer.WritePropertyName("kty"); - writer.WriteStringValue(Kty); - } - if (Optional.IsDefined(X)) - { - writer.WritePropertyName("x"); - writer.WriteStringValue(X); - } - if (Optional.IsDefined(Y)) - { - writer.WritePropertyName("y"); - writer.WriteStringValue(Y); - } - writer.WriteEndObject(); - } - internal static JWKHeader DeserializeJWKHeader(JsonElement element) { Optional crv = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.cs index 706053f6dd83..8c15893b2315 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/JWKHeader.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class JWKHeader { /// Initializes a new instance of JWKHeader. - public JWKHeader() + internal JWKHeader() { } @@ -31,14 +31,14 @@ internal JWKHeader(string crv, string kid, string kty, string x, string y) } /// crv value. - public string Crv { get; set; } + public string Crv { get; } /// kid value. - public string Kid { get; set; } + public string Kid { get; } /// kty value. - public string Kty { get; set; } + public string Kty { get; } /// x value. - public string X { get; set; } + public string X { get; } /// y value. - public string Y { get; set; } + public string Y { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.Serialization.cs index 3bb9d1d323f8..21134ca953e0 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.Serialization.cs @@ -10,19 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class Manifest : IUtf8JsonSerializable + internal partial class Manifest { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(SchemaVersion)) - { - writer.WritePropertyName("schemaVersion"); - writer.WriteNumberValue(SchemaVersion.Value); - } - writer.WriteEndObject(); - } - internal static Manifest DeserializeManifest(JsonElement element) { Optional schemaVersion = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.cs index 99feb03f9afc..fd7049cef26b 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Manifest.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class Manifest { /// Initializes a new instance of Manifest. - public Manifest() + internal Manifest() { } @@ -23,6 +23,6 @@ internal Manifest(int? schemaVersion) } /// Schema version. - public int? SchemaVersion { get; set; } + public int? SchemaVersion { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.Serialization.cs index 39fa2015238e..fbe09c4c516b 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.Serialization.cs @@ -11,38 +11,12 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class ManifestList : IUtf8JsonSerializable + internal partial class ManifestList { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(MediaType)) - { - writer.WritePropertyName("mediaType"); - writer.WriteStringValue(MediaType); - } - if (Optional.IsCollectionDefined(Manifests)) - { - writer.WritePropertyName("manifests"); - writer.WriteStartArray(); - foreach (var item in Manifests) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(SchemaVersion)) - { - writer.WritePropertyName("schemaVersion"); - writer.WriteNumberValue(SchemaVersion.Value); - } - writer.WriteEndObject(); - } - internal static ManifestList DeserializeManifestList(JsonElement element) { Optional mediaType = default; - Optional> manifests = default; + Optional> manifests = default; Optional schemaVersion = default; foreach (var property in element.EnumerateObject()) { diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.cs index b4f028b7768a..6228c3e4a899 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestList.cs @@ -14,7 +14,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class ManifestList : Manifest { /// Initializes a new instance of ManifestList. - public ManifestList() + internal ManifestList() { Manifests = new ChangeTrackingList(); } @@ -23,15 +23,15 @@ public ManifestList() /// Schema version. /// Media type for this Manifest. /// List of V2 image layer information. - internal ManifestList(int? schemaVersion, string mediaType, IList manifests) : base(schemaVersion) + internal ManifestList(int? schemaVersion, string mediaType, IReadOnlyList manifests) : base(schemaVersion) { MediaType = mediaType; Manifests = manifests; } /// Media type for this Manifest. - public string MediaType { get; set; } + public string MediaType { get; } /// List of V2 image layer information. - public IList Manifests { get; } + public IReadOnlyList Manifests { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.Serialization.cs index c80aba9fbdf0..a5c198b2b0e7 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.Serialization.cs @@ -10,34 +10,8 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class ManifestListAttributes : IUtf8JsonSerializable + internal partial class ManifestListAttributes { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(MediaType)) - { - writer.WritePropertyName("mediaType"); - writer.WriteStringValue(MediaType); - } - if (Optional.IsDefined(Size)) - { - writer.WritePropertyName("size"); - writer.WriteNumberValue(Size.Value); - } - if (Optional.IsDefined(Digest)) - { - writer.WritePropertyName("digest"); - writer.WriteStringValue(Digest); - } - if (Optional.IsDefined(Platform)) - { - writer.WritePropertyName("platform"); - writer.WriteObjectValue(Platform); - } - writer.WriteEndObject(); - } - internal static ManifestListAttributes DeserializeManifestListAttributes(JsonElement element) { Optional mediaType = default; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.cs index e331df2719df..4c56d72504b2 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestListAttributes.cs @@ -11,7 +11,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class ManifestListAttributes { /// Initializes a new instance of ManifestListAttributes. - public ManifestListAttributes() + internal ManifestListAttributes() { } @@ -29,12 +29,12 @@ internal ManifestListAttributes(string mediaType, long? size, string digest, Pla } /// The MIME type of the referenced object. This will generally be application/vnd.docker.image.manifest.v2+json, but it could also be application/vnd.docker.image.manifest.v1+json. - public string MediaType { get; set; } + public string MediaType { get; } /// The size in bytes of the object. - public long? Size { get; set; } + public long? Size { get; } /// The digest of the content, as defined by the Registry V2 HTTP API Specification. - public string Digest { get; set; } + public string Digest { get; } /// The platform object describes the platform which the image in the manifest runs on. A full list of valid operating system and architecture values are listed in the Go language documentation for $GOOS and $GOARCH. - public Platform Platform { get; set; } + public Platform Platform { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.Serialization.cs index d91770e29e22..7f10d809f235 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.Serialization.cs @@ -7,123 +7,26 @@ using System.Collections.Generic; using System.Text.Json; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; namespace Azure.Containers.ContainerRegistry { - internal partial class ManifestWrapper : IUtf8JsonSerializable + internal partial class ManifestWrapper { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(MediaType)) - { - writer.WritePropertyName("mediaType"); - writer.WriteStringValue(MediaType); - } - if (Optional.IsCollectionDefined(Manifests)) - { - writer.WritePropertyName("manifests"); - writer.WriteStartArray(); - foreach (var item in Manifests) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(Config)) - { - writer.WritePropertyName("config"); - writer.WriteObjectValue(Config); - } - if (Optional.IsCollectionDefined(Layers)) - { - writer.WritePropertyName("layers"); - writer.WriteStartArray(); - foreach (var item in Layers) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(Annotations)) - { - if (Annotations != null) - { - writer.WritePropertyName("annotations"); - writer.WriteObjectValue(Annotations); - } - else - { - writer.WriteNull("annotations"); - } - } - if (Optional.IsDefined(Architecture)) - { - writer.WritePropertyName("architecture"); - writer.WriteStringValue(Architecture); - } - if (Optional.IsDefined(Name)) - { - writer.WritePropertyName("name"); - writer.WriteStringValue(Name); - } - if (Optional.IsDefined(Tag)) - { - writer.WritePropertyName("tag"); - writer.WriteStringValue(Tag); - } - if (Optional.IsCollectionDefined(FsLayers)) - { - writer.WritePropertyName("fsLayers"); - writer.WriteStartArray(); - foreach (var item in FsLayers) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsCollectionDefined(History)) - { - writer.WritePropertyName("history"); - writer.WriteStartArray(); - foreach (var item in History) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsCollectionDefined(Signatures)) - { - writer.WritePropertyName("signatures"); - writer.WriteStartArray(); - foreach (var item in Signatures) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(SchemaVersion)) - { - writer.WritePropertyName("schemaVersion"); - writer.WriteNumberValue(SchemaVersion.Value); - } - writer.WriteEndObject(); - } - internal static ManifestWrapper DeserializeManifestWrapper(JsonElement element) { Optional mediaType = default; - Optional> manifests = default; - Optional config = default; - Optional> layers = default; - Optional annotations = default; + Optional> manifests = default; + Optional config = default; + Optional> layers = default; + Optional annotations = default; Optional architecture = default; Optional name = default; Optional tag = default; - Optional> fsLayers = default; - Optional> history = default; - Optional> signatures = default; + Optional> fsLayers = default; + Optional> history = default; + Optional> signatures = default; Optional schemaVersion = default; foreach (var property in element.EnumerateObject()) { @@ -154,7 +57,7 @@ internal static ManifestWrapper DeserializeManifestWrapper(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - config = Descriptor.DeserializeDescriptor(property.Value); + config = OciBlobDescriptor.DeserializeOciBlobDescriptor(property.Value); continue; } if (property.NameEquals("layers")) @@ -164,10 +67,10 @@ internal static ManifestWrapper DeserializeManifestWrapper(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - List array = new List(); + List array = new List(); foreach (var item in property.Value.EnumerateArray()) { - array.Add(Descriptor.DeserializeDescriptor(item)); + array.Add(OciBlobDescriptor.DeserializeOciBlobDescriptor(item)); } layers = array; continue; @@ -179,7 +82,7 @@ internal static ManifestWrapper DeserializeManifestWrapper(JsonElement element) annotations = null; continue; } - annotations = Annotations.DeserializeAnnotations(property.Value); + annotations = OciAnnotations.DeserializeOciAnnotations(property.Value); continue; } if (property.NameEquals("architecture")) diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.cs index cc785118e43e..b8d36244a0ac 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/ManifestWrapper.cs @@ -6,6 +6,7 @@ #nullable disable using System.Collections.Generic; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; namespace Azure.Containers.ContainerRegistry @@ -14,10 +15,10 @@ namespace Azure.Containers.ContainerRegistry internal partial class ManifestWrapper : Manifest { /// Initializes a new instance of ManifestWrapper. - public ManifestWrapper() + internal ManifestWrapper() { Manifests = new ChangeTrackingList(); - Layers = new ChangeTrackingList(); + Layers = new ChangeTrackingList(); FsLayers = new ChangeTrackingList(); History = new ChangeTrackingList(); Signatures = new ChangeTrackingList(); @@ -36,7 +37,7 @@ public ManifestWrapper() /// (V1) List of layer information. /// (V1) Image history. /// (V1) Image signature. - internal ManifestWrapper(int? schemaVersion, string mediaType, IList manifests, Descriptor config, IList layers, Annotations annotations, string architecture, string name, string tag, IList fsLayers, IList history, IList signatures) : base(schemaVersion) + internal ManifestWrapper(int? schemaVersion, string mediaType, IReadOnlyList manifests, OciBlobDescriptor config, IReadOnlyList layers, OciAnnotations annotations, string architecture, string name, string tag, IReadOnlyList fsLayers, IReadOnlyList history, IReadOnlyList signatures) : base(schemaVersion) { MediaType = mediaType; Manifests = manifests; @@ -52,26 +53,26 @@ internal ManifestWrapper(int? schemaVersion, string mediaType, IList Media type for this Manifest. - public string MediaType { get; set; } + public string MediaType { get; } /// (ManifestList, OCIIndex) List of V2 image layer information. - public IList Manifests { get; } + public IReadOnlyList Manifests { get; } /// (V2, OCI) Image config descriptor. - public Descriptor Config { get; set; } + public OciBlobDescriptor Config { get; } /// (V2, OCI) List of V2 image layer information. - public IList Layers { get; } + public IReadOnlyList Layers { get; } /// (OCI, OCIIndex) Additional metadata. - public Annotations Annotations { get; set; } + public OciAnnotations Annotations { get; } /// (V1) CPU architecture. - public string Architecture { get; set; } + public string Architecture { get; } /// (V1) Image name. - public string Name { get; set; } + public string Name { get; } /// (V1) Image tag. - public string Tag { get; set; } + public string Tag { get; } /// (V1) List of layer information. - public IList FsLayers { get; } + public IReadOnlyList FsLayers { get; } /// (V1) Image history. - public IList History { get; } + public IReadOnlyList History { get; } /// (V1) Image signature. - public IList Signatures { get; } + public IReadOnlyList Signatures { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.Serialization.cs index 572e29da53e3..38572c36f615 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.Serialization.cs @@ -7,49 +7,17 @@ using System.Collections.Generic; using System.Text.Json; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; namespace Azure.Containers.ContainerRegistry { - internal partial class OCIIndex : IUtf8JsonSerializable + internal partial class OCIIndex { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsCollectionDefined(Manifests)) - { - writer.WritePropertyName("manifests"); - writer.WriteStartArray(); - foreach (var item in Manifests) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(Annotations)) - { - if (Annotations != null) - { - writer.WritePropertyName("annotations"); - writer.WriteObjectValue(Annotations); - } - else - { - writer.WriteNull("annotations"); - } - } - if (Optional.IsDefined(SchemaVersion)) - { - writer.WritePropertyName("schemaVersion"); - writer.WriteNumberValue(SchemaVersion.Value); - } - writer.WriteEndObject(); - } - internal static OCIIndex DeserializeOCIIndex(JsonElement element) { - Optional> manifests = default; - Optional annotations = default; + Optional> manifests = default; + Optional annotations = default; Optional schemaVersion = default; foreach (var property in element.EnumerateObject()) { @@ -75,7 +43,7 @@ internal static OCIIndex DeserializeOCIIndex(JsonElement element) annotations = null; continue; } - annotations = Annotations.DeserializeAnnotations(property.Value); + annotations = OciAnnotations.DeserializeOciAnnotations(property.Value); continue; } if (property.NameEquals("schemaVersion")) diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.cs index 3a38c71775fc..503c935a5c2e 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIIndex.cs @@ -6,6 +6,7 @@ #nullable disable using System.Collections.Generic; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; namespace Azure.Containers.ContainerRegistry @@ -14,7 +15,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class OCIIndex : Manifest { /// Initializes a new instance of OCIIndex. - public OCIIndex() + internal OCIIndex() { Manifests = new ChangeTrackingList(); } @@ -23,15 +24,15 @@ public OCIIndex() /// Schema version. /// List of OCI image layer information. /// Additional information provided through arbitrary metadata. - internal OCIIndex(int? schemaVersion, IList manifests, Annotations annotations) : base(schemaVersion) + internal OCIIndex(int? schemaVersion, IReadOnlyList manifests, OciAnnotations annotations) : base(schemaVersion) { Manifests = manifests; Annotations = annotations; } /// List of OCI image layer information. - public IList Manifests { get; } + public IReadOnlyList Manifests { get; } /// Additional information provided through arbitrary metadata. - public Annotations Annotations { get; set; } + public OciAnnotations Annotations { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.cs index 61167658a479..9346824210d5 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.cs @@ -8,34 +8,33 @@ using System.Collections.Generic; using Azure.Core; -namespace Azure.Containers.ContainerRegistry +namespace Azure.Containers.ContainerRegistry.Specialized { /// Returns the requested OCI Manifest file. - internal partial class OCIManifest : Manifest + public partial class OciManifest { - /// Initializes a new instance of OCIManifest. - public OCIManifest() + /// Initializes a new instance of OciManifest. + public OciManifest() { - Layers = new ChangeTrackingList(); + Layers = new ChangeTrackingList(); } - /// Initializes a new instance of OCIManifest. - /// Schema version. + /// Initializes a new instance of OciManifest. /// V2 image config descriptor. /// List of V2 image layer information. /// Additional information provided through arbitrary metadata. - internal OCIManifest(int? schemaVersion, Descriptor config, IList layers, Annotations annotations) : base(schemaVersion) + /// Schema version. + internal OciManifest(OciBlobDescriptor config, IList layers, OciAnnotations annotations, int? schemaVersion) { Config = config; Layers = layers; Annotations = annotations; + SchemaVersion = schemaVersion; } /// V2 image config descriptor. - public Descriptor Config { get; set; } + public OciBlobDescriptor Config { get; set; } /// List of V2 image layer information. - public IList Layers { get; } - /// Additional information provided through arbitrary metadata. - public Annotations Annotations { get; set; } + public IList Layers { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Annotations.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciAnnotations.Serialization.cs similarity index 89% rename from sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Annotations.Serialization.cs rename to sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciAnnotations.Serialization.cs index 265072eb0feb..d0cdf6a475dd 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Annotations.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciAnnotations.Serialization.cs @@ -10,17 +10,17 @@ using System.Text.Json; using Azure.Core; -namespace Azure.Containers.ContainerRegistry +namespace Azure.Containers.ContainerRegistry.Specialized { - internal partial class Annotations : IUtf8JsonSerializable + public partial class OciAnnotations : IUtf8JsonSerializable { void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) { writer.WriteStartObject(); - if (Optional.IsDefined(Created)) + if (Optional.IsDefined(CreatedOn)) { writer.WritePropertyName("org.opencontainers.image.created"); - writer.WriteStringValue(Created.Value, "O"); + writer.WriteStringValue(CreatedOn.Value, "O"); } if (Optional.IsDefined(Authors)) { @@ -85,7 +85,7 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) writer.WriteEndObject(); } - internal static Annotations DeserializeAnnotations(JsonElement element) + internal static OciAnnotations DeserializeOciAnnotations(JsonElement element) { Optional orgOpencontainersImageCreated = default; Optional orgOpencontainersImageAuthors = default; @@ -171,7 +171,7 @@ internal static Annotations DeserializeAnnotations(JsonElement element) additionalPropertiesDictionary.Add(property.Name, property.Value.GetObject()); } additionalProperties = additionalPropertiesDictionary; - return new Annotations(Optional.ToNullable(orgOpencontainersImageCreated), orgOpencontainersImageAuthors.Value, orgOpencontainersImageUrl.Value, orgOpencontainersImageDocumentation.Value, orgOpencontainersImageSource.Value, orgOpencontainersImageVersion.Value, orgOpencontainersImageRevision.Value, orgOpencontainersImageVendor.Value, orgOpencontainersImageLicenses.Value, orgOpencontainersImageRefName.Value, orgOpencontainersImageTitle.Value, orgOpencontainersImageDescription.Value, additionalProperties); + return new OciAnnotations(Optional.ToNullable(orgOpencontainersImageCreated), orgOpencontainersImageAuthors.Value, orgOpencontainersImageUrl.Value, orgOpencontainersImageDocumentation.Value, orgOpencontainersImageSource.Value, orgOpencontainersImageVersion.Value, orgOpencontainersImageRevision.Value, orgOpencontainersImageVendor.Value, orgOpencontainersImageLicenses.Value, orgOpencontainersImageRefName.Value, orgOpencontainersImageTitle.Value, orgOpencontainersImageDescription.Value, additionalProperties); } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Annotations.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciAnnotations.cs similarity index 79% rename from sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Annotations.cs rename to sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciAnnotations.cs index 7cc892496abc..8476cd814ba4 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Annotations.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciAnnotations.cs @@ -9,19 +9,19 @@ using System.Collections.Generic; using Azure.Core; -namespace Azure.Containers.ContainerRegistry +namespace Azure.Containers.ContainerRegistry.Specialized { /// Additional information provided through arbitrary metadata. - internal partial class Annotations + public partial class OciAnnotations { - /// Initializes a new instance of Annotations. - public Annotations() + /// Initializes a new instance of OciAnnotations. + public OciAnnotations() { AdditionalProperties = new ChangeTrackingDictionary(); } - /// Initializes a new instance of Annotations. - /// Date and time on which the image was built (string, date-time as defined by https://tools.ietf.org/html/rfc3339#section-5.6). + /// Initializes a new instance of OciAnnotations. + /// Date and time on which the image was built (string, date-time as defined by https://tools.ietf.org/html/rfc3339#section-5.6). /// Contact details of the people or organization responsible for the image. /// URL to find more information on the image. /// URL to get documentation on the image. @@ -34,9 +34,9 @@ public Annotations() /// Human-readable title of the image. /// Human-readable description of the software packaged in the image. /// Additional Properties. - internal Annotations(DateTimeOffset? created, string authors, string url, string documentation, string source, string version, string revision, string vendor, string licenses, string name, string title, string description, IDictionary additionalProperties) + internal OciAnnotations(DateTimeOffset? createdOn, string authors, string url, string documentation, string source, string version, string revision, string vendor, string licenses, string name, string title, string description, IDictionary additionalProperties) { - Created = created; + CreatedOn = createdOn; Authors = authors; Url = url; Documentation = documentation; @@ -50,9 +50,6 @@ internal Annotations(DateTimeOffset? created, string authors, string url, string Description = description; AdditionalProperties = additionalProperties; } - - /// Date and time on which the image was built (string, date-time as defined by https://tools.ietf.org/html/rfc3339#section-5.6). - public DateTimeOffset? Created { get; set; } /// Contact details of the people or organization responsible for the image. public string Authors { get; set; } /// URL to find more information on the image. diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Descriptor.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciBlobDescriptor.Serialization.cs similarity index 81% rename from sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Descriptor.Serialization.cs rename to sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciBlobDescriptor.Serialization.cs index 0b0d7e5c804f..b0cb976341fb 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Descriptor.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciBlobDescriptor.Serialization.cs @@ -5,13 +5,14 @@ #nullable disable +using System; using System.Collections.Generic; using System.Text.Json; using Azure.Core; -namespace Azure.Containers.ContainerRegistry +namespace Azure.Containers.ContainerRegistry.Specialized { - internal partial class Descriptor : IUtf8JsonSerializable + public partial class OciBlobDescriptor : IUtf8JsonSerializable { void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) { @@ -37,7 +38,7 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) writer.WriteStartArray(); foreach (var item in Urls) { - writer.WriteStringValue(item); + writer.WriteStringValue(item.AbsoluteUri); } writer.WriteEndArray(); } @@ -56,13 +57,13 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) writer.WriteEndObject(); } - internal static Descriptor DeserializeDescriptor(JsonElement element) + internal static OciBlobDescriptor DeserializeOciBlobDescriptor(JsonElement element) { Optional mediaType = default; Optional size = default; Optional digest = default; - Optional> urls = default; - Optional annotations = default; + Optional> urls = default; + Optional annotations = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("mediaType")) @@ -92,10 +93,10 @@ internal static Descriptor DeserializeDescriptor(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - List array = new List(); + List array = new List(); foreach (var item in property.Value.EnumerateArray()) { - array.Add(item.GetString()); + array.Add(new Uri(item.GetString())); } urls = array; continue; @@ -107,11 +108,11 @@ internal static Descriptor DeserializeDescriptor(JsonElement element) annotations = null; continue; } - annotations = Annotations.DeserializeAnnotations(property.Value); + annotations = OciAnnotations.DeserializeOciAnnotations(property.Value); continue; } } - return new Descriptor(mediaType.Value, Optional.ToNullable(size), digest.Value, Optional.ToList(urls), annotations.Value); + return new OciBlobDescriptor(mediaType.Value, Optional.ToNullable(size), digest.Value, Optional.ToList(urls), annotations.Value); } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciBlobDescriptor.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciBlobDescriptor.cs new file mode 100644 index 000000000000..8724e6d9d566 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciBlobDescriptor.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// + +#nullable disable + +using System; +using System.Collections.Generic; +using Azure.Core; + +namespace Azure.Containers.ContainerRegistry.Specialized +{ + /// Docker V2 image layer descriptor including config and layers. + public partial class OciBlobDescriptor + { + /// Initializes a new instance of OciBlobDescriptor. + public OciBlobDescriptor() + { + Urls = new ChangeTrackingList(); + } + + /// Initializes a new instance of OciBlobDescriptor. + /// Layer media type. + /// Layer size. + /// Layer digest. + /// Specifies a list of URIs from which this object may be downloaded. + /// Additional information provided through arbitrary metadata. + internal OciBlobDescriptor(string mediaType, long? size, string digest, IList urls, OciAnnotations annotations) + { + MediaType = mediaType; + Size = size; + Digest = digest; + Urls = urls; + Annotations = annotations; + } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciManifest.Serialization.cs similarity index 67% rename from sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.Serialization.cs rename to sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciManifest.Serialization.cs index 6ad79eb53969..48316c198fff 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OCIManifest.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/OciManifest.Serialization.cs @@ -5,13 +5,16 @@ #nullable disable +using System; using System.Collections.Generic; using System.Text.Json; +using System.Text.Json.Serialization; using Azure.Core; -namespace Azure.Containers.ContainerRegistry +namespace Azure.Containers.ContainerRegistry.Specialized { - internal partial class OCIManifest : IUtf8JsonSerializable + [JsonConverter(typeof(OciManifestConverter))] + public partial class OciManifest : IUtf8JsonSerializable { void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) { @@ -51,11 +54,11 @@ void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) writer.WriteEndObject(); } - internal static OCIManifest DeserializeOCIManifest(JsonElement element) + internal static OciManifest DeserializeOciManifest(JsonElement element) { - Optional config = default; - Optional> layers = default; - Optional annotations = default; + Optional config = default; + Optional> layers = default; + Optional annotations = default; Optional schemaVersion = default; foreach (var property in element.EnumerateObject()) { @@ -66,7 +69,7 @@ internal static OCIManifest DeserializeOCIManifest(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - config = Descriptor.DeserializeDescriptor(property.Value); + config = OciBlobDescriptor.DeserializeOciBlobDescriptor(property.Value); continue; } if (property.NameEquals("layers")) @@ -76,10 +79,10 @@ internal static OCIManifest DeserializeOCIManifest(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - List array = new List(); + List array = new List(); foreach (var item in property.Value.EnumerateArray()) { - array.Add(Descriptor.DeserializeDescriptor(item)); + array.Add(OciBlobDescriptor.DeserializeOciBlobDescriptor(item)); } layers = array; continue; @@ -91,7 +94,7 @@ internal static OCIManifest DeserializeOCIManifest(JsonElement element) annotations = null; continue; } - annotations = Annotations.DeserializeAnnotations(property.Value); + annotations = OciAnnotations.DeserializeOciAnnotations(property.Value); continue; } if (property.NameEquals("schemaVersion")) @@ -105,7 +108,20 @@ internal static OCIManifest DeserializeOCIManifest(JsonElement element) continue; } } - return new OCIManifest(Optional.ToNullable(schemaVersion), config.Value, Optional.ToList(layers), annotations.Value); + return new OciManifest(config.Value, Optional.ToList(layers), annotations.Value, Optional.ToNullable(schemaVersion)); + } + + internal partial class OciManifestConverter : JsonConverter + { + public override void Write(Utf8JsonWriter writer, OciManifest model, JsonSerializerOptions options) + { + writer.WriteObjectValue(model); + } + public override OciManifest Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + using var document = JsonDocument.ParseValue(ref reader); + return DeserializeOciManifest(document.RootElement); + } } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.Serialization.cs index 0ae90b90d457..af74e480ec56 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.Serialization.cs @@ -11,62 +11,16 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class Platform : IUtf8JsonSerializable + internal partial class Platform { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(Architecture)) - { - writer.WritePropertyName("architecture"); - writer.WriteStringValue(Architecture); - } - if (Optional.IsDefined(Os)) - { - writer.WritePropertyName("os"); - writer.WriteStringValue(Os); - } - if (Optional.IsDefined(OsVersion)) - { - writer.WritePropertyName("os.version"); - writer.WriteStringValue(OsVersion); - } - if (Optional.IsCollectionDefined(OsFeatures)) - { - writer.WritePropertyName("os.features"); - writer.WriteStartArray(); - foreach (var item in OsFeatures) - { - writer.WriteStringValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(Variant)) - { - writer.WritePropertyName("variant"); - writer.WriteStringValue(Variant); - } - if (Optional.IsCollectionDefined(Features)) - { - writer.WritePropertyName("features"); - writer.WriteStartArray(); - foreach (var item in Features) - { - writer.WriteStringValue(item); - } - writer.WriteEndArray(); - } - writer.WriteEndObject(); - } - internal static Platform DeserializePlatform(JsonElement element) { Optional architecture = default; Optional os = default; Optional osVersion = default; - Optional> osFeatures = default; + Optional> osFeatures = default; Optional variant = default; - Optional> features = default; + Optional> features = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("architecture")) diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.cs index cf78a2dcfe05..4aadf41587fa 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/Platform.cs @@ -14,7 +14,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class Platform { /// Initializes a new instance of Platform. - public Platform() + internal Platform() { OsFeatures = new ChangeTrackingList(); Features = new ChangeTrackingList(); @@ -27,7 +27,7 @@ public Platform() /// The optional os.features field specifies an array of strings, each listing a required OS feature (for example on Windows win32k. /// The optional variant field specifies a variant of the CPU, for example armv6l to specify a particular CPU variant of the ARM CPU. /// The optional features field specifies an array of strings, each listing a required CPU feature (for example sse4 or aes. - internal Platform(string architecture, string os, string osVersion, IList osFeatures, string variant, IList features) + internal Platform(string architecture, string os, string osVersion, IReadOnlyList osFeatures, string variant, IReadOnlyList features) { Architecture = architecture; Os = os; @@ -38,16 +38,16 @@ internal Platform(string architecture, string os, string osVersion, IList Specifies the CPU architecture, for example amd64 or ppc64le. - public string Architecture { get; set; } + public string Architecture { get; } /// The os field specifies the operating system, for example linux or windows. - public string Os { get; set; } + public string Os { get; } /// The optional os.version field specifies the operating system version, for example 10.0.10586. - public string OsVersion { get; set; } + public string OsVersion { get; } /// The optional os.features field specifies an array of strings, each listing a required OS feature (for example on Windows win32k. - public IList OsFeatures { get; } + public IReadOnlyList OsFeatures { get; } /// The optional variant field specifies a variant of the CPU, for example armv6l to specify a particular CPU variant of the ARM CPU. - public string Variant { get; set; } + public string Variant { get; } /// The optional features field specifies an array of strings, each listing a required CPU feature (for example sse4 or aes. - public IList Features { get; } + public IReadOnlyList Features { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.Serialization.cs index a9e353b6da19..e9b96055c126 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.Serialization.cs @@ -11,72 +11,16 @@ namespace Azure.Containers.ContainerRegistry { - internal partial class V1Manifest : IUtf8JsonSerializable + internal partial class V1Manifest { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(Architecture)) - { - writer.WritePropertyName("architecture"); - writer.WriteStringValue(Architecture); - } - if (Optional.IsDefined(Name)) - { - writer.WritePropertyName("name"); - writer.WriteStringValue(Name); - } - if (Optional.IsDefined(Tag)) - { - writer.WritePropertyName("tag"); - writer.WriteStringValue(Tag); - } - if (Optional.IsCollectionDefined(FsLayers)) - { - writer.WritePropertyName("fsLayers"); - writer.WriteStartArray(); - foreach (var item in FsLayers) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsCollectionDefined(History)) - { - writer.WritePropertyName("history"); - writer.WriteStartArray(); - foreach (var item in History) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsCollectionDefined(Signatures)) - { - writer.WritePropertyName("signatures"); - writer.WriteStartArray(); - foreach (var item in Signatures) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(SchemaVersion)) - { - writer.WritePropertyName("schemaVersion"); - writer.WriteNumberValue(SchemaVersion.Value); - } - writer.WriteEndObject(); - } - internal static V1Manifest DeserializeV1Manifest(JsonElement element) { Optional architecture = default; Optional name = default; Optional tag = default; - Optional> fsLayers = default; - Optional> history = default; - Optional> signatures = default; + Optional> fsLayers = default; + Optional> history = default; + Optional> signatures = default; Optional schemaVersion = default; foreach (var property in element.EnumerateObject()) { diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.cs index 5fdab4837ee1..2beee2df8199 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V1Manifest.cs @@ -14,7 +14,7 @@ namespace Azure.Containers.ContainerRegistry internal partial class V1Manifest : Manifest { /// Initializes a new instance of V1Manifest. - public V1Manifest() + internal V1Manifest() { FsLayers = new ChangeTrackingList(); History = new ChangeTrackingList(); @@ -29,7 +29,7 @@ public V1Manifest() /// List of layer information. /// Image history. /// Image signature. - internal V1Manifest(int? schemaVersion, string architecture, string name, string tag, IList fsLayers, IList history, IList signatures) : base(schemaVersion) + internal V1Manifest(int? schemaVersion, string architecture, string name, string tag, IReadOnlyList fsLayers, IReadOnlyList history, IReadOnlyList signatures) : base(schemaVersion) { Architecture = architecture; Name = name; @@ -40,16 +40,16 @@ internal V1Manifest(int? schemaVersion, string architecture, string name, string } /// CPU architecture. - public string Architecture { get; set; } + public string Architecture { get; } /// Image name. - public string Name { get; set; } + public string Name { get; } /// Image tag. - public string Tag { get; set; } + public string Tag { get; } /// List of layer information. - public IList FsLayers { get; } + public IReadOnlyList FsLayers { get; } /// Image history. - public IList History { get; } + public IReadOnlyList History { get; } /// Image signature. - public IList Signatures { get; } + public IReadOnlyList Signatures { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.Serialization.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.Serialization.cs index 6a5a33e2303f..9d2cc4a1e93f 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.Serialization.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.Serialization.cs @@ -7,48 +7,18 @@ using System.Collections.Generic; using System.Text.Json; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; namespace Azure.Containers.ContainerRegistry { - internal partial class V2Manifest : IUtf8JsonSerializable + internal partial class V2Manifest { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) - { - writer.WriteStartObject(); - if (Optional.IsDefined(MediaType)) - { - writer.WritePropertyName("mediaType"); - writer.WriteStringValue(MediaType); - } - if (Optional.IsDefined(Config)) - { - writer.WritePropertyName("config"); - writer.WriteObjectValue(Config); - } - if (Optional.IsCollectionDefined(Layers)) - { - writer.WritePropertyName("layers"); - writer.WriteStartArray(); - foreach (var item in Layers) - { - writer.WriteObjectValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(SchemaVersion)) - { - writer.WritePropertyName("schemaVersion"); - writer.WriteNumberValue(SchemaVersion.Value); - } - writer.WriteEndObject(); - } - internal static V2Manifest DeserializeV2Manifest(JsonElement element) { Optional mediaType = default; - Optional config = default; - Optional> layers = default; + Optional config = default; + Optional> layers = default; Optional schemaVersion = default; foreach (var property in element.EnumerateObject()) { @@ -64,7 +34,7 @@ internal static V2Manifest DeserializeV2Manifest(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - config = Descriptor.DeserializeDescriptor(property.Value); + config = OciBlobDescriptor.DeserializeOciBlobDescriptor(property.Value); continue; } if (property.NameEquals("layers")) @@ -74,10 +44,10 @@ internal static V2Manifest DeserializeV2Manifest(JsonElement element) property.ThrowNonNullablePropertyIsNull(); continue; } - List array = new List(); + List array = new List(); foreach (var item in property.Value.EnumerateArray()) { - array.Add(Descriptor.DeserializeDescriptor(item)); + array.Add(OciBlobDescriptor.DeserializeOciBlobDescriptor(item)); } layers = array; continue; diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.cs index df8a98230ffb..3569eef7f7c4 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/Generated/Models/V2Manifest.cs @@ -6,6 +6,7 @@ #nullable disable using System.Collections.Generic; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core; namespace Azure.Containers.ContainerRegistry @@ -14,9 +15,9 @@ namespace Azure.Containers.ContainerRegistry internal partial class V2Manifest : Manifest { /// Initializes a new instance of V2Manifest. - public V2Manifest() + internal V2Manifest() { - Layers = new ChangeTrackingList(); + Layers = new ChangeTrackingList(); } /// Initializes a new instance of V2Manifest. @@ -24,7 +25,7 @@ public V2Manifest() /// Media type for this Manifest. /// V2 image config descriptor. /// List of V2 image layer information. - internal V2Manifest(int? schemaVersion, string mediaType, Descriptor config, IList layers) : base(schemaVersion) + internal V2Manifest(int? schemaVersion, string mediaType, OciBlobDescriptor config, IReadOnlyList layers) : base(schemaVersion) { MediaType = mediaType; Config = config; @@ -32,10 +33,10 @@ internal V2Manifest(int? schemaVersion, string mediaType, Descriptor config, ILi } /// Media type for this Manifest. - public string MediaType { get; set; } + public string MediaType { get; } /// V2 image config descriptor. - public Descriptor Config { get; set; } + public OciBlobDescriptor Config { get; } /// List of V2 image layer information. - public IList Layers { get; } + public IReadOnlyList Layers { get; } } } diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/GlobalSuppressions.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/GlobalSuppressions.cs index 989b59f6a6c2..576ffa48d84c 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/GlobalSuppressions.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/GlobalSuppressions.cs @@ -9,3 +9,4 @@ using System.Diagnostics.CodeAnalysis; [assembly: SuppressMessage("Usage", "AZC0001:Use one of the following pre-approved namespace groups (https://azure.github.io/azure-sdk/registered_namespaces.html): Azure.AI, Azure.Analytics, Azure.Communication, Azure.Data, Azure.DigitalTwins, Azure.Iot, Azure.Learn, Azure.Media, Azure.Management, Azure.Messaging, Azure.Search, Azure.Security, Azure.Storage, Azure.Template, Azure.Identity, Microsoft.Extensions.Azure", Justification = "", Scope = "namespace", Target = "~N:Azure.Containers.ContainerRegistry")] +[assembly: SuppressMessage("Usage", "AZC0001:Use one of the following pre-approved namespace groups (https://azure.github.io/azure-sdk/registered_namespaces.html): Azure.AI, Azure.Analytics, Azure.Communication, Azure.Data, Azure.DigitalTwins, Azure.Iot, Azure.Learn, Azure.Media, Azure.Management, Azure.Messaging, Azure.Search, Azure.Security, Azure.Storage, Azure.Template, Azure.Identity, Microsoft.Extensions.Azure", Justification = "", Scope = "namespace", Target = "~N:Azure.Containers.ContainerRegistry.Specialized")] diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/autorest.md b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/autorest.md index 0a11ad9bdbd1..80937cd54fbc 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/autorest.md +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/src/autorest.md @@ -9,3 +9,72 @@ input-file: model-namespace: false ``` + +# Add content-type parameter +``` yaml +directive: + from: swagger-document + where: $.paths["/v2/{name}/manifests/{reference}"].put + transform: > + $.parameters.push({ + "name": "Content-Type", + "in": "header", + "type": "string", + "description": "The manifest's Content-Type." + }); + delete $.responses["201"].schema; +``` + +# Change NextLink client name to nextLink +``` yaml +directive: + from: swagger-document + where: $.parameters.NextLink + transform: > + $["x-ms-client-name"] = "nextLink" +``` + +# Updates to OciManifest +``` yaml +directive: + from: swagger-document + where: $.definitions.OCIManifest + transform: > + $["x-csharp-usage"] = "model,input,output,converter"; + $["x-csharp-formats"] = "json"; + delete $["x-accessibility"]; + delete $["allOf"]; + $.properties["schemaVersion"] = { + "type": "integer", + "description": "Schema version" + }; +``` + +# Take only OciManifest +``` yaml +directive: + from: swagger-document + where: $.parameters.ManifestBody + transform: > + $.schema = { + "$ref": "#/definitions/OCIManifest" + } +``` + +# Make ArtifactBlobDescriptor a public type +``` yaml +directive: + from: swagger-document + where: $.definitions.Descriptor + transform: > + delete $["x-accessibility"] +``` + +# Make OciAnnotations a public type +``` yaml +directive: + from: swagger-document + where: $.definitions.Annotations + transform: > + delete $["x-accessibility"] +``` diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Azure.Containers.ContainerRegistry.Tests.csproj b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Azure.Containers.ContainerRegistry.Tests.csproj index d9a76f37bc69..2995f47d5a00 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Azure.Containers.ContainerRegistry.Tests.csproj +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Azure.Containers.ContainerRegistry.Tests.csproj @@ -21,4 +21,17 @@ + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryBlobClientLiveTests.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryBlobClientLiveTests.cs new file mode 100644 index 000000000000..91f7bd79073f --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryBlobClientLiveTests.cs @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Azure.Containers.ContainerRegistry.Specialized; +using Azure.Core.TestFramework; +using NUnit.Framework; + +namespace Azure.Containers.ContainerRegistry.Tests +{ + [NonParallelizable] + public class ContainerRegistryBlobClientLiveTests : ContainerRegistryRecordedTestBase + { + public ContainerRegistryBlobClientLiveTests(bool isAsync) : base(isAsync) + { + } + + /// + /// Create an OciManifest type that matches the contents of the manifest.json test data file. + /// + /// + private static OciManifest CreateManifest() + { + OciManifest manifest = new OciManifest() + { + SchemaVersion = 2, + Config = new OciBlobDescriptor() + { + MediaType = "application/vnd.acme.rocket.config", + Digest = "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + Size = 171 + } + }; + manifest.Layers.Add(new OciBlobDescriptor() + { + MediaType = "application/vnd.oci.image.layer.v1.tar", + Digest = "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + Size = 28, + Annotations = new OciAnnotations() + { + Name = "artifact.txt" + } + }); + + return manifest; + } + + [RecordedTest] + public async Task CanUploadOciManifest() + { + // Arrange + var client = CreateBlobClient("oci-artifact"); + + // Act + var manifest = CreateManifest(); + var uploadResult = await client.UploadManifestAsync(manifest); + string digest = uploadResult.Value.Digest; + + // Assert + var downloadResult = await client.DownloadManifestAsync(digest); + Assert.AreEqual(digest, downloadResult.Value.Digest); + ValidateManifest(downloadResult.Value.Manifest); + + // Clean up + await client.DeleteManifestAsync(digest); + } + + [RecordedTest] + public async Task CanUploadOciManifestWithTag() + { + // Arrange + string repository = "oci-artifact"; + var client = CreateBlobClient(repository); + var metadataClient = CreateClient(); + string tag = "v1"; + + await UploadManifestPrerequisites(client); + + // Act + var manifest = CreateManifest(); + var uploadResult = await client.UploadManifestAsync(manifest, new UploadManifestOptions() + { + Tag = tag + }); + var digest = uploadResult.Value.Digest; + + // Assert + var downloadResult = await client.DownloadManifestAsync(digest); + Assert.AreEqual(digest, downloadResult.Value.Digest); + ValidateManifest(downloadResult.Value.Manifest); + + var artifact = metadataClient.GetArtifact(repository, digest); + var tags = artifact.GetTagPropertiesCollectionAsync(); + var count = await tags.CountAsync(); + Assert.AreEqual(1, count); + var firstTag = await tags.FirstAsync(); + Assert.AreEqual(tag, firstTag.Name); + + // Clean up + await client.DeleteManifestAsync(digest); + } + + private async Task UploadManifestPrerequisites(ContainerRegistryBlobClient client) + { + var layer = "654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed"; + var config = "config.json"; + var basePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Data", "oci-artifact"); + + // Upload config + using (var fs = File.OpenRead(Path.Combine(basePath, config))) + { + var uploadResult = await client.UploadBlobAsync(fs); + } + + // Upload layer + using (var fs = File.OpenRead(Path.Combine(basePath, layer))) + { + var uploadResult = await client.UploadBlobAsync(fs); + } + } + + private static void ValidateManifest(OciManifest manifest) + { + // These are from the values in the Data\oci-artifact\manifest.json file. + Assert.IsNotNull(manifest); + + Assert.IsNotNull(manifest.Config); + Assert.AreEqual("application/vnd.acme.rocket.config", manifest.Config.MediaType); + Assert.AreEqual("sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", manifest.Config.Digest); + Assert.AreEqual(171, manifest.Config.Size); + + Assert.IsNotNull(manifest.Layers); + Assert.AreEqual(1, manifest.Layers.Count); + Assert.AreEqual("application/vnd.oci.image.layer.v1.tar", manifest.Layers[0].MediaType); + Assert.AreEqual("sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", manifest.Layers[0].Digest); + Assert.AreEqual(28, manifest.Layers[0].Size); + } + + [RecordedTest] + public async Task CanUploadBlob() + { + // Arrange + var client = CreateBlobClient("oci-artifact"); + var blob = "654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed"; + var path = Path.Combine(TestContext.CurrentContext.TestDirectory, "Data", "oci-artifact", blob); + + string digest = default; + long streamLength; + // Act + using (var fs = File.OpenRead(path)) + { + streamLength = fs.Length; + var uploadResult = await client.UploadBlobAsync(fs); + digest = uploadResult.Value.Digest; + } + + // Assert + var downloadResult = await client.DownloadBlobAsync(digest); + Assert.AreEqual(digest, downloadResult.Value.Digest); + Assert.AreEqual(streamLength, downloadResult.Value.Content.Length); + + // Clean up + await client.DeleteBlobAsync(digest); + } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryBlobClientTests.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryBlobClientTests.cs new file mode 100644 index 000000000000..a466926a9292 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryBlobClientTests.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.IO; +using Azure.Containers.ContainerRegistry.Specialized; +using Azure.Core; +using Azure.Core.TestFramework; +using Azure.Identity; +using NUnit.Framework; + +namespace Azure.Containers.ContainerRegistry.Tests +{ + public class ContainerRegistryBlobClientTests : ClientTestBase + { + public ContainerRegistryBlobClientTests(bool isAsync) : base(isAsync) + { + } + + private ContainerRegistryBlobClient client { get; set; } + private readonly Uri _url = new Uri("https://example.azurecr.io"); + + private TokenCredential GetCredential() + { + return new EnvironmentCredential(); + } + + [SetUp] + public void TestSetup() + { + client = InstrumentClient(new ContainerRegistryBlobClient(_url, GetCredential(), "", new ContainerRegistryClientOptions() + { + Audience = ContainerRegistryAudience.AzureResourceManagerPublicCloud + })); + } + + /// + /// Validates client constructor argument null checks. + /// + [Test] + public void ConstructorValidatesArguments() + { + Assert.That(() => new ContainerRegistryBlobClient(null, GetCredential(), ""), Throws.InstanceOf(), "The constructor should validate the url."); + + Assert.That(() => new ContainerRegistryBlobClient(_url, credential: null, ""), Throws.InstanceOf(), "The constructor should not accept a null credential."); + + Assert.That(() => new ContainerRegistryBlobClient(_url, GetCredential(), null), Throws.InstanceOf(), "The constructor should not accept null repository."); + } + + /// + /// Validates service method argument null checks. + /// + [Test] + public void ServiceMethodsValidateArguments() + { + Assert.That(async () => await client.DeleteBlobAsync(null), Throws.InstanceOf(), "The method should validate that `digest` is not null."); + Assert.That(async () => await client.DeleteManifestAsync(null), Throws.InstanceOf(), "The method should validate that `digest` is not null."); + Assert.That(async () => await client.DownloadBlobAsync(null), Throws.InstanceOf(), "The method should validate that `digest` is not null."); + Assert.That(async () => await client.DownloadManifestAsync(null), Throws.InstanceOf(), "The method should validate that `digest` is not null."); + Assert.That(async () => await client.UploadManifestAsync(null), Throws.InstanceOf(), "The method should validate that `manifest` is not null."); + Assert.That(async () => await client.UploadBlobAsync(null), Throws.InstanceOf(), "The method should validate that `stream` is not null."); + } + } +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryRecordedTestBase.cs b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryRecordedTestBase.cs index e62572704c78..b052bc8ca8fb 100644 --- a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryRecordedTestBase.cs +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/ContainerRegistryRecordedTestBase.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Azure.Containers.ContainerRegistry.Specialized; using Azure.Core.TestFramework; using Azure.Identity; using Microsoft.Azure.Management.ContainerRegistry; @@ -62,6 +63,22 @@ private ContainerRegistryClient CreateAnonymousClient() }) )); } + public ContainerRegistryBlobClient CreateBlobClient(string repository) + { + string endpoint = TestEnvironment.Endpoint; + Uri authorityHost = GetAuthorityHost(endpoint); + ContainerRegistryAudience audience = GetAudience(authorityHost); + + return InstrumentClient(new ContainerRegistryBlobClient( + new Uri(endpoint), + TestEnvironment.Credential, + repository, + InstrumentClientOptions(new ContainerRegistryClientOptions() + { + Audience = audience + }) + )); + } internal static Uri GetAuthorityHost(string endpoint) { diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed new file mode 100644 index 000000000000..80993781b54e Binary files /dev/null and b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed differ diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/config.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/config.json new file mode 100644 index 000000000000..2e34cd1899dc Binary files /dev/null and b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/config.json differ diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/manifest.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/manifest.json new file mode 100644 index 000000000000..97ab36d0ddcf --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/Data/oci-artifact/manifest.json @@ -0,0 +1,18 @@ +{ + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "size": 171 + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "size": 28, + "annotations": { + "org.opencontainers.image.title": "artifact.txt" + } + } + ] +} diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadBlob.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadBlob.json new file mode 100644 index 000000000000..f56b463bdc99 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadBlob.json @@ -0,0 +1,591 @@ +{ + "Entries": [ + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-a35dd9d2c6366b4e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "4f804ec3ea6fa93e288da3fff6e6a379", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:34 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "ae916009-8cf7-4a44-89a8-b3000c462ca2" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "80", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-354de3d41934264f-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "d895b5b114f3ce6f9b90525f5c585b77", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=localtestacr01.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:36 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "e75810cf-fd73-44ff-bc2b-fc00cd06483c", + "x-ms-ratelimit-remaining-calls-per-second": "166.65" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzY3NzE2NzJ9.Sanitized" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-f98553fd0f68d746-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "a43bd8d3f42ae9a796acba4d9ea1c2ce", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:36 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "b94b56c7-b712-4b36-89d1-1b7301e262f4", + "x-ms-ratelimit-remaining-calls-per-second": "166.633333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI4MDJmN2M2Ni04MTE2LTQ1NmYtYWQ2MS0wY2JkNTJmYmM2ZDUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA3NzYsImV4cCI6MTYzMDY5NTI3NiwiaWF0IjoxNjMwNjkwNzc2LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.aCJgYuhLDmm3yYX47mbEGJhO3twryexvlD82j4i1ZdwmL4IOUvCwqTKL7ddsMC0XNlhTnCth3yD6swbq5uBxyZAeAFAtDz59_DhpLuZvE-A1F19WWC7EDoC5mTedKZrWB1mRYvltie9K_fGI8r5vHC1cEZ5nBnVAtMDOSvWPppiuVj-Qbiv-slMStnM70Od-b2xLjsI7itfgSsHXQt3EKqBvRn1T6D1Vs6t562KwYvTb8VBPrYXXLDsRjkMSukrFRMKcdT9His0zQbemU_z1TzZqZCrD3xSUloCbZSfcO6aw_IzI6SVT3lxJcHLEex-sCpcJVyCeALgBn6by-Gav6w" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-a35dd9d2c6366b4e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "4f804ec3ea6fa93e288da3fff6e6a379", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "403fdbc6-fe22-4227-841d-3628fbac9239", + "Location": "/v2/oci-artifact/blobs/uploads/403fdbc6-fe22-4227-841d-3628fbac9239?_nouploadcache=false\u0026_state=EbZqy9eptxrXAdUe4g-qgNMWVlURJeT2ajfs79lSM4l7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNDAzZmRiYzYtZmUyMi00MjI3LTg0MWQtMzYyOGZiYWM5MjM5IiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTAzVDE3OjU0OjM2Ljg0NzE4NzQxMVoifQ%3D%3D", + "Range": "0-0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "4f804ec3ea6fa93e288da3fff6e6a379", + "X-Ms-Correlation-Request-Id": "99fc5c1a-c0c6-41c0-ae10-68fab365a400", + "X-Ms-Request-Id": "9cd6a060-a733-4dce-9a53-dc2195775630" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/403fdbc6-fe22-4227-841d-3628fbac9239?_nouploadcache=false\u0026_state=EbZqy9eptxrXAdUe4g-qgNMWVlURJeT2ajfs79lSM4l7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNDAzZmRiYzYtZmUyMi00MjI3LTg0MWQtMzYyOGZiYWM5MjM5IiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTAzVDE3OjU0OjM2Ljg0NzE4NzQxMVoifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-9b93098726686341-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "6d1169842186af4adfb2b4df97de4ccf", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:push,pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "2537af2c-7021-4561-9367-b19e57ec177a" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-e873e35a905bb14a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1e2c2b32ffabbc4e0dab424659222ffa", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apush%2cpull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "deb5c84c-8170-45df-91dc-6855d950c863", + "x-ms-ratelimit-remaining-calls-per-second": "166.616667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJhMjE0NTBhMS02NTgzLTQ2M2QtYTJmZS02YzY3ZDUxNjk4NGEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA3NzcsImV4cCI6MTYzMDY5NTI3NywiaWF0IjoxNjMwNjkwNzc3LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1c2giLCJwdWxsIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.g8KYoeT221EdI1zx4tmebv_697_J4otK9wlS2TH8tIxy89Nzp4SOEiJPxOK0tncTFz_v2QSIHfe3neFZRKD3HjPgQb7jcbQgQqID-14A5IYdd6DaQdF_QH-NUaYSl_MU9v1v-zFqmmWX35xoMbglAQc9HmM9K5iU9RdZ8Kh-3yqjTgSLeFdZiw69FIjp5Bv-N-P3ju3VmHNxpa3cUK6Aji1QxBIXVbcyTX2kMWCx9BgNLnMEoyTdOMwHtTxE2aKtIaAyC4sRJ9fNp5AE_LhpOs_yEzJ3xpvk6N-B1s5sy38MPqeN7wVH89szOe_LWFSXUPm1z7EAwmnYvrTXf-Tlkg" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/403fdbc6-fe22-4227-841d-3628fbac9239?_nouploadcache=false\u0026_state=EbZqy9eptxrXAdUe4g-qgNMWVlURJeT2ajfs79lSM4l7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNDAzZmRiYzYtZmUyMi00MjI3LTg0MWQtMzYyOGZiYWM5MjM5IiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTAzVDE3OjU0OjM2Ljg0NzE4NzQxMVoifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-9b93098726686341-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "6d1169842186af4adfb2b4df97de4ccf", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "403fdbc6-fe22-4227-841d-3628fbac9239", + "Location": "/v2/oci-artifact/blobs/uploads/403fdbc6-fe22-4227-841d-3628fbac9239?_nouploadcache=false\u0026_state=vxbkJs_hHIrIx0_pE4V7uzVQo3yfQFkrBmln57yRZkh7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNDAzZmRiYzYtZmUyMi00MjI3LTg0MWQtMzYyOGZiYWM5MjM5IiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wM1QxNzo1NDozNloifQ%3D%3D", + "Range": "0-27", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "6d1169842186af4adfb2b4df97de4ccf", + "X-Ms-Correlation-Request-Id": "35733c58-b10d-4aba-ac88-08839870a9a0", + "X-Ms-Request-Id": "0da11d4a-90a4-4d19-9589-96e1c16359f9" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/403fdbc6-fe22-4227-841d-3628fbac9239?_nouploadcache=false\u0026_state=vxbkJs_hHIrIx0_pE4V7uzVQo3yfQFkrBmln57yRZkh7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNDAzZmRiYzYtZmUyMi00MjI3LTg0MWQtMzYyOGZiYWM5MjM5IiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wM1QxNzo1NDozNloifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-931777f27b72ec47-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "f3db84cdee46b1f18e8cc57840c851b7", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "3b540f4d-5880-402d-ab87-4d256bedb619" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-f28cb2f47fd40f45-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "721aeb60a47585231a555fdade0455bc", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "9525f030-2253-40f7-a4cb-3eb24123faa6", + "x-ms-ratelimit-remaining-calls-per-second": "166.6" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI3YWU1ODYzMS0wNTAzLTRlYjctOGI3OC0xMWU5MWQ3YWJmNDUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA3NzcsImV4cCI6MTYzMDY5NTI3NywiaWF0IjoxNjMwNjkwNzc3LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.cla1HX2KDXkuBpkUAEUfW7VEAHJKQLxiHrBv0HDzYNZ1LchEW-DeRudMhWkz9IztQ1QLzi2-qtCHhlI1F2C57F9a3MbWBZWB5dsV5urjPsBrIYdA93sTlKeg1vP9_Kj4cJnlG1aTT5eU8FkA7zQt3GE24tJGqhYXnZkYfv1uY9Ik3Tmc0QwK-RRfxTn61V-RFbNfkar64t4dS-RqNpHWeRW_6GCsbJ_v7JM6NtGjJg7c5x34GPBNcwMblMup6uap8DOKHku78Qv9TraI4ePWTr-fS5KAwHcR04KBec427l3q257B-G0MD0WemMfU9qq_XsJ1t3Ihkz01uQ2fVaCcGQ" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/403fdbc6-fe22-4227-841d-3628fbac9239?_nouploadcache=false\u0026_state=vxbkJs_hHIrIx0_pE4V7uzVQo3yfQFkrBmln57yRZkh7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNDAzZmRiYzYtZmUyMi00MjI3LTg0MWQtMzYyOGZiYWM5MjM5IiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wM1QxNzo1NDozNloifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-3fb36961fdb0ca41ae93e7c801454029-931777f27b72ec47-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "f3db84cdee46b1f18e8cc57840c851b7", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Content-Digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/blobs/sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "f3db84cdee46b1f18e8cc57840c851b7", + "X-Ms-Correlation-Request-Id": "ddfaa9b8-4cf3-49c8-86ac-71187dd4928e", + "X-Ms-Request-Id": "9719e1a9-564a-4b9e-ae3f-ff7032d56ebb" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/octet-stream", + "traceparent": "00-78b1beb62899f8408a68f8b8f72c101c-8aa7f160fa2f1f4b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1311b982580344883a7a8f1f39d67c44", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "206", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "4114e335-6fe0-4c38-81ed-e9145c989f93" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "121", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-78b1beb62899f8408a68f8b8f72c101c-57eae15db7a22242-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "6ee58b5abc0729856056d8f18e16d389", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "ac33f911-e23f-42b9-82ff-0ec4a8cedd19", + "x-ms-ratelimit-remaining-calls-per-second": "166.583333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiIxOGZhYjg3Yy1kMjlhLTQyYjgtOGM3MC1iYWM5ODc5NGFmYTciLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA3NzcsImV4cCI6MTYzMDY5NTI3NywiaWF0IjoxNjMwNjkwNzc3LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.Ez7vpLlaYEM8jRo8R0uCyA6LVL9RZHaVsnFoSW8hYZ2uWRJogm9I3cM0lOxD28f7s-FapaAN_F7BtziqR-A2sVpcmGNYgErPvEN5brUN5kafO6F-OccUdCkJVtnvESPOWHMznOfVXW_UOp721rj7xcN8ZrHZa-7nnUefEf7ZohHqkFh4dSu2EDDV_faRHgXrW4okzDnemSjY2ns76-FPv0YtjEYxRdegRcqxRcOdWp5VjS5o7eo8GD2q_lz2A3pPM-ZhrSiExss9T7k3Ri3a-aLmytJL6FOtESQASdk70VGu0lqZVALsb7RBM4TBYI_6YYFGUhcJg22lRX0Eu3s__Q" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/octet-stream", + "Authorization": "Sanitized", + "traceparent": "00-78b1beb62899f8408a68f8b8f72c101c-8aa7f160fa2f1f4b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1311b982580344883a7a8f1f39d67c44", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 307, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "408", + "Content-Type": "text/html; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/blobs/sha256/65/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed/data?se=2021-09-03T18%3A14%3A37Z\u0026sig=Pv%2BtZD9CXhrD6gdRayTPcnSBTuplhaoZ4JS59RYS9yo%3D\u0026sp=r\u0026spr=https\u0026sr=b\u0026sv=2016-05-31\u0026regid=13bb6af5960c4b27a5cd2448fe073239", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "b55c4f68-7f4d-44a2-898c-fa30244bdb84" + }, + "ResponseBody": [ + "\u003Ca href=\u0022https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/blobs/sha256/65/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed/data?se=2021-09-03T18%3A14%3A37Z\u0026amp;sig=Pv%2BtZD9CXhrD6gdRayTPcnSBTuplhaoZ4JS59RYS9yo%3D\u0026amp;sp=r\u0026amp;spr=https\u0026amp;sr=b\u0026amp;sv=2016-05-31\u0026amp;regid=13bb6af5960c4b27a5cd2448fe073239\u0022\u003ETemporary Redirect\u003C/a\u003E.\n\n" + ] + }, + { + "RequestUri": "https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/blobs/sha256/65/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed/data?se=2021-09-03T18%3A14%3A37Z\u0026sig=Pv%2BtZD9CXhrD6gdRayTPcnSBTuplhaoZ4JS59RYS9yo%3D\u0026sp=r\u0026spr=https\u0026sr=b\u0026sv=2016-05-31\u0026regid=13bb6af5960c4b27a5cd2448fe073239", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/octet-stream", + "traceparent": "00-78b1beb62899f8408a68f8b8f72c101c-8aa7f160fa2f1f4b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1311b982580344883a7a8f1f39d67c44", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "Date": "Fri, 03 Sep 2021 17:54:37 GMT", + "ETag": "\u00220x8D96DA42417F2DD\u0022", + "Last-Modified": "Wed, 01 Sep 2021 23:56:39 GMT", + "Server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-committed-block-count": "1", + "x-ms-blob-type": "AppendBlob", + "x-ms-copy-completion-time": "Wed, 01 Sep 2021 23:26:39 GMT", + "x-ms-copy-id": "298d0cdb-a174-4fb6-a6f1-fe3a329ff422", + "x-ms-copy-progress": "28/28", + "x-ms-copy-source": "https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/repositories/oci-artifact/_uploads/77653eb6-56c6-459d-bdb5-9b2e259f8e73/data", + "x-ms-copy-status": "success", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "9aa2b48c-501e-00a2-3aec-a0c214000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2016-05-31" + }, + "ResponseBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==" + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/octet-stream", + "traceparent": "00-73ecf5c5b9e3f24aa44b29263a3719fb-0fab02ff2b18a047-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "86f508363eb608b363d638fa14034b44", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "208", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:38 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:delete\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "dfa1ca4b-271e-4440-8fff-9330790fe48f" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022delete\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "123", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-73ecf5c5b9e3f24aa44b29263a3719fb-7a920eaf60e98840-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "52801bd8e71ec5b534e8b2ad8096b623", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3adelete\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:54:38 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "530b2ec1-bb74-457b-858a-13bf839baef6", + "x-ms-ratelimit-remaining-calls-per-second": "166.566667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJjMGJiZjk1My1kNWM5LTQ1NTYtOGNkNi1kOWE2MWI2OTJiZmEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA3NzgsImV4cCI6MTYzMDY5NTI3OCwiaWF0IjoxNjMwNjkwNzc4LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbImRlbGV0ZSJdfV0sInJvbGVzIjpbXSwiZ3JhbnRfdHlwZSI6ImFjY2Vzc190b2tlbiIsImFwcGlkIjoiMDJkOGVjYWUtNGI5ZS00NWU0LTgxODAtYTkwOWM1ZTlhNmEzIn0.ISAKWOHzyZYwh55aCA7AEvBrSbveFWPCD8IWZJejOo2rEK7XYSaHOSL--C3kAgBBya0O15NZ7vBU8BdA6CG2E-7XzWTvxW4n0HiqBzUp3w3b9LndMgNuOt4jZP8GrbqYbPEtjHgV0a0zSHRytW0oNJUtEu_ljox8kihF_hQR1TyL52CiRYHGDvQlozlsi4uYzY9HI80DXePgV3zpewJZbJrh3gioRFlJcA2daKVBZMM6R80f2sxeuQ8xBVXq99iq5IwXHxfreCIk0PnJmWMNuZBSiBCdNtEF1GlN7RFzB4QeFer2ZjRCzI5BkSIMmpqkdqtuJzPWF3Abn5xJ9m3EwQ" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/octet-stream", + "Authorization": "Sanitized", + "traceparent": "00-73ecf5c5b9e3f24aa44b29263a3719fb-0fab02ff2b18a047-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "86f508363eb608b363d638fa14034b44", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:54:38 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "86f508363eb608b363d638fa14034b44", + "X-Ms-Correlation-Request-Id": "b48d5395-9a9f-4068-b51a-8abcee6102f3", + "X-Ms-Ratelimit-Remaining-Calls-Per-Second": "8.000000", + "X-Ms-Request-Id": "28323717-d860-46c3-93e4-9001871138eb" + }, + "ResponseBody": [] + } + ], + "Variables": { + "CONTAINERREGISTRY_ENDPOINT": "https://localtestacr01.azurecr.io", + "RandomSeed": "224302992" + } +} \ No newline at end of file diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadBlobAsync.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadBlobAsync.json new file mode 100644 index 000000000000..54e1180af7a3 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadBlobAsync.json @@ -0,0 +1,591 @@ +{ + "Entries": [ + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-fa63ae6861ca6045-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "ae4960bbb1bacc5008dfc18c722b729f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:09 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "8546ce9f-1029-4b0b-8078-4a4f7c7ed6cc" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "80", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-c2371e3773e02f47-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1602ba4e34131fd4978da91ec9756d2b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=localtestacr01.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:11 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "c357ed8b-a162-4338-baef-7871233dce9d", + "x-ms-ratelimit-remaining-calls-per-second": "166.65" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzY3NzA0NDd9.Sanitized" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-3b129ea10ebce34c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "90344e27911c3aa8b196deba287ad1c8", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:11 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "a6b27ce0-6fba-4553-89d0-94abf2f4d392", + "x-ms-ratelimit-remaining-calls-per-second": "166.633333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJmMTVmNGVhYy01NGQzLTRmMmEtOTBkNC00YjRhOGVhNTAwM2EiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2ODk1NTEsImV4cCI6MTYzMDY5NDA1MSwiaWF0IjoxNjMwNjg5NTUxLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.PnkicWW_K7NdNJO44EGX5QYbsFt3ZrT8jtJNd0IPHIA-qieSUQiuHDQKm7WW7cqTipcUylHV6A5pAErXlijIFH0BQ5IMG10gGLCfTEt8_BaCdWURfzzgCgTYbF6tpAwDs7MDYRWKxyCSk6pnp0K-MJf-eOwr115ztGJdG4rFu6ovkdQLTAGW2V4_N4kUmpXoE9t5Nl3WbL7jcI7JrQfcbjva7xQABxrbsQVEcnkNxB7yz9z2Z4ksingNVgpoF36r1Q10o5SlO3BtHmZN00_1o3ZYG0k-wqu2uR40E3B5-3HY0EwmRfBjchnnStJtWr3z6GaRyHv7OOsmeZJC133PUg" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-fa63ae6861ca6045-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "ae4960bbb1bacc5008dfc18c722b729f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:34:11 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "99f86a3a-92d6-49f4-9ec5-f0772d426410", + "Location": "/v2/oci-artifact/blobs/uploads/99f86a3a-92d6-49f4-9ec5-f0772d426410?_nouploadcache=false\u0026_state=_D0xSNo_egktr5fm9f1sok5QtQP4EyqtEMFxlWJnHoJ7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiOTlmODZhM2EtOTJkNi00OWY0LTllYzUtZjA3NzJkNDI2NDEwIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTAzVDE3OjM0OjExLjgxNTI2MjUwNloifQ%3D%3D", + "Range": "0-0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "ae4960bbb1bacc5008dfc18c722b729f", + "X-Ms-Correlation-Request-Id": "449fed70-5f36-40c0-bf1e-50f8bd740693", + "X-Ms-Request-Id": "78e27982-805b-40a4-a35a-73bbf2d8f405" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/99f86a3a-92d6-49f4-9ec5-f0772d426410?_nouploadcache=false\u0026_state=_D0xSNo_egktr5fm9f1sok5QtQP4EyqtEMFxlWJnHoJ7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiOTlmODZhM2EtOTJkNi00OWY0LTllYzUtZjA3NzJkNDI2NDEwIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTAzVDE3OjM0OjExLjgxNTI2MjUwNloifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-4213dd2990fc204c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "20d99c6cc46787dd8b2a172c08320292", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:12 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "31b20015-db10-4e83-92a6-1012d6255a42" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-d0f4127cd2af6c48-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "24659671e1f7bc8311c7657c5519f61d", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:12 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "1beda1ce-24e9-4b44-877f-ea5c7da8ae3e", + "x-ms-ratelimit-remaining-calls-per-second": "166.616667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiIzNTBiN2E5Yy1mM2IxLTQxMTctYjlhZS05Mzg2YjljODcyYWYiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2ODk1NTIsImV4cCI6MTYzMDY5NDA1MiwiaWF0IjoxNjMwNjg5NTUyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.gK7yofd83cg-N3VknmcAiqyf5XSZIzw-lrzFNgYkhVzOaviU7LFjtOJvupYeaa-seucU_mLn1fCr2vtCWKOQocII45Df-offzcJbnwB7Ib1MvpOGsBU7alzz2ErEnZruuiHLsJgaFIgpjXRF1AbMVtpwaVnfRingRTZtZKbiHUIOfSAu4nXtNJdc84qzE6DLpiU6iqfzdHoOJ6enmDHHVcpKhL1Ad3CxmO25cRou7WPQhtomYHnSN7-lW4dDaS_xwNSHZcl-FxT8vDTRoGqRGGqdYP2mTAdVg_gHypPXeCzwXSGfB0Z2C2FziXQhAec5IWE7Tcr8160hsoP6LJQ0VQ" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/99f86a3a-92d6-49f4-9ec5-f0772d426410?_nouploadcache=false\u0026_state=_D0xSNo_egktr5fm9f1sok5QtQP4EyqtEMFxlWJnHoJ7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiOTlmODZhM2EtOTJkNi00OWY0LTllYzUtZjA3NzJkNDI2NDEwIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTAzVDE3OjM0OjExLjgxNTI2MjUwNloifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-4213dd2990fc204c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "20d99c6cc46787dd8b2a172c08320292", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:34:13 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "99f86a3a-92d6-49f4-9ec5-f0772d426410", + "Location": "/v2/oci-artifact/blobs/uploads/99f86a3a-92d6-49f4-9ec5-f0772d426410?_nouploadcache=false\u0026_state=neCab1-IxEOounmVa0_T-IkLDzkEyiRvvBgD3iJhxqt7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiOTlmODZhM2EtOTJkNi00OWY0LTllYzUtZjA3NzJkNDI2NDEwIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wM1QxNzozNDoxMVoifQ%3D%3D", + "Range": "0-27", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "20d99c6cc46787dd8b2a172c08320292", + "X-Ms-Correlation-Request-Id": "01e39b65-530a-43dd-b0f9-47d13eca33b4", + "X-Ms-Request-Id": "2b772b82-9031-4ad5-825e-39e33141c607" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/99f86a3a-92d6-49f4-9ec5-f0772d426410?_nouploadcache=false\u0026_state=neCab1-IxEOounmVa0_T-IkLDzkEyiRvvBgD3iJhxqt7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiOTlmODZhM2EtOTJkNi00OWY0LTllYzUtZjA3NzJkNDI2NDEwIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wM1QxNzozNDoxMVoifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-37086911700d7a40-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "2db2e0bc4d9c63c370ac04f27a7c327f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:13 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "a96e82c9-43bd-46f2-9601-3a4ea69aa03c" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-56edb4a54120134a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "92484b93ad158ad0181c0ea05f613172", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:13 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "d2f39738-675f-43f2-b9e7-5c5ef3f2695a", + "x-ms-ratelimit-remaining-calls-per-second": "166.6" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI1ZTA3NzJiZC0zYTM2LTQyMTAtOWUyYS1jOTJjYmMzNGZkNWQiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2ODk1NTMsImV4cCI6MTYzMDY5NDA1MywiaWF0IjoxNjMwNjg5NTUzLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.syx2YmB-L6AW4u0ELRT281PXgqTQqox0s0PNDmMjtzcCzucvDNXOzS5Fti4fu7xvYj9PnqqEv6jIky475vJsVFWyA_aH9oDg78u4paN-5pVY54Jp9dEZZyFHjznRXFel2vhz7KZOiHJl2X7HOsn65mJkR2qHqNlkDagC_ozVJuq9_KrdXqxOdLa22OagdoqqDaxvZhb74kiNlZ_XdtS_cn-ETvOL78scAHZ9fftBkcnkYLUz_cZGAaSC1u_P36HmkULk2WFbxP22BBEEWZPACEVy3QiV_dwYOo0EAdmCcuCD7SsIywxXLoJ_YBw05_gjdH0u-4ruRQrpi7cUb2rV7w" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/uploads/99f86a3a-92d6-49f4-9ec5-f0772d426410?_nouploadcache=false\u0026_state=neCab1-IxEOounmVa0_T-IkLDzkEyiRvvBgD3iJhxqt7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiOTlmODZhM2EtOTJkNi00OWY0LTllYzUtZjA3NzJkNDI2NDEwIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wM1QxNzozNDoxMVoifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-6b906caabde76a478304663e5c4a68bf-37086911700d7a40-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "2db2e0bc4d9c63c370ac04f27a7c327f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:34:14 GMT", + "Docker-Content-Digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/blobs/sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "2db2e0bc4d9c63c370ac04f27a7c327f", + "X-Ms-Correlation-Request-Id": "faea29de-6201-4075-8288-6bfbce7b516a", + "X-Ms-Request-Id": "6ac40b4f-642d-4310-884d-f018c7b59c72" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/octet-stream", + "traceparent": "00-da2c368755a92e479696e5619483cdb3-c7526a4b1e934f4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "276ffa33d57f24f6d201b34adc914195", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "206", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "ed56dea9-4376-4ccf-8dba-1a1e32ef88d8" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "121", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-da2c368755a92e479696e5619483cdb3-44df7cc8eefa9449-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "0ae8e59464d00e081027147f3e23030f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:24 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "57e0551f-a94b-4597-b0df-02872a69cc06", + "x-ms-ratelimit-remaining-calls-per-second": "166.583333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI1M2NlZWIyZi1mNzQ4LTQxMmMtYjJmZS1mOWJjM2JiNjgwMzAiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2ODk1NjQsImV4cCI6MTYzMDY5NDA2NCwiaWF0IjoxNjMwNjg5NTY0LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.k2C0cQZS2JGX9sXgcVy3KrzpsP20--NhTfUNgMJ2xWanoSZrEbZRbhxpJcNAaU6J_YzT0kfaVvnjzctPEwajt6q57bvH2F_NkoM0wJ8InyVmyrd9w0UCZesj-IZSF2ahR0NZh8s_rSuJr9B6Fsqkcm55flNtotzVa3Q5Mpq7YdHkHA_cy9wRHad9w4kyVQc3LhSTUiVAXfPELGhW5Kv9Pcs7ZEuH8aL-mgdjzi4tovmNaP9j7GN_W5XBRFJWqKTXf8VNvjoVznJqhBuCIeSMOkGwfC-UJbsS02laDT-gaydFBzR_0nditPbhlFy7d4ZlN08zukfn9BVsK6AgnGlh2w" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/octet-stream", + "Authorization": "Sanitized", + "traceparent": "00-da2c368755a92e479696e5619483cdb3-c7526a4b1e934f4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "276ffa33d57f24f6d201b34adc914195", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 307, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "408", + "Content-Type": "text/html; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/blobs/sha256/65/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed/data?se=2021-09-03T17%3A52%3A39Z\u0026sig=64HaGF1jk1LD3gdxxEh4B6mt%2BMkMBtN8vMqCEv3A5M0%3D\u0026sp=r\u0026spr=https\u0026sr=b\u0026sv=2016-05-31\u0026regid=13bb6af5960c4b27a5cd2448fe073239", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "f34634d5-2b25-4457-9051-db714c92ae3f" + }, + "ResponseBody": [ + "\u003Ca href=\u0022https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/blobs/sha256/65/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed/data?se=2021-09-03T17%3A52%3A39Z\u0026amp;sig=64HaGF1jk1LD3gdxxEh4B6mt%2BMkMBtN8vMqCEv3A5M0%3D\u0026amp;sp=r\u0026amp;spr=https\u0026amp;sr=b\u0026amp;sv=2016-05-31\u0026amp;regid=13bb6af5960c4b27a5cd2448fe073239\u0022\u003ETemporary Redirect\u003C/a\u003E.\n\n" + ] + }, + { + "RequestUri": "https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/blobs/sha256/65/654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed/data?se=2021-09-03T17%3A52%3A39Z\u0026sig=64HaGF1jk1LD3gdxxEh4B6mt%2BMkMBtN8vMqCEv3A5M0%3D\u0026sp=r\u0026spr=https\u0026sr=b\u0026sv=2016-05-31\u0026regid=13bb6af5960c4b27a5cd2448fe073239", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/octet-stream", + "traceparent": "00-da2c368755a92e479696e5619483cdb3-c7526a4b1e934f4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "276ffa33d57f24f6d201b34adc914195", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Accept-Ranges": "bytes", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "Date": "Fri, 03 Sep 2021 17:34:24 GMT", + "ETag": "\u00220x8D96DA42417F2DD\u0022", + "Last-Modified": "Wed, 01 Sep 2021 23:56:39 GMT", + "Server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-committed-block-count": "1", + "x-ms-blob-type": "AppendBlob", + "x-ms-copy-completion-time": "Wed, 01 Sep 2021 23:26:39 GMT", + "x-ms-copy-id": "298d0cdb-a174-4fb6-a6f1-fe3a329ff422", + "x-ms-copy-progress": "28/28", + "x-ms-copy-source": "https://wus2managed101.blob.core.windows.net/13bb6af5960c4b27a5cd2448fe073239-g5mmt3vcf6//docker/registry/v2/repositories/oci-artifact/_uploads/77653eb6-56c6-459d-bdb5-9b2e259f8e73/data", + "x-ms-copy-status": "success", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "63235fd1-e01e-00c5-5be9-a0d2e8000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2016-05-31" + }, + "ResponseBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==" + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/octet-stream", + "traceparent": "00-81ae65560b49c14ca2ef4daedbb0b600-2e16879fd6bb8540-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "80be927b0b0cbeff5424c013f986ae87", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "208", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:25 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:delete\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "f14d45cf-8993-4fe7-8944-309ee40c791c" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022delete\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "123", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-81ae65560b49c14ca2ef4daedbb0b600-268b144467b31546-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "790b78da2678cea1f1611758c177e6ae", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3adelete\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:34:25 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "12496c00-7b10-48e6-9bea-6aa94a090a32", + "x-ms-ratelimit-remaining-calls-per-second": "166.566667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI5YmU5YzdlNi1kYzA2LTRhOGYtOWMzNC0yYjM5MzFlN2Y1NjUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2ODk1NjUsImV4cCI6MTYzMDY5NDA2NSwiaWF0IjoxNjMwNjg5NTY1LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbImRlbGV0ZSJdfV0sInJvbGVzIjpbXSwiZ3JhbnRfdHlwZSI6ImFjY2Vzc190b2tlbiIsImFwcGlkIjoiMDJkOGVjYWUtNGI5ZS00NWU0LTgxODAtYTkwOWM1ZTlhNmEzIn0.MlzkPp5K7aJjF_Z-y8NTRN1NaSE4up-o5mYwjHX9EQ3vKkNAYkE7mtBUYKkpx-AYJcJ-Cz4Sj5VhIXEjakdadCGcGoqa8BKPQSW-bpL-R6gjcVgySqPl4WXU6mmFFv7MrwxPPOYJMDAh-3XRzOCS0Sf257lXZtTq9LpfR4DNpkSIo8FCkzTM_g6Bzdfa18HZBI-Id65nAg4mcrRFpMvd1NCWChfA51JnHSVH67x2nhbvnFt4CHaRzjVvIXkZxJZGYcFuDRgZV9wtTvY-GlkoCxdTH4QstWiCVizOzRpAUl9MSa3Cx-t8Ogt_-gj_ZJmEtL7wzexVJ08s0bxkAtpC4w" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/blobs/sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/octet-stream", + "Authorization": "Sanitized", + "traceparent": "00-81ae65560b49c14ca2ef4daedbb0b600-2e16879fd6bb8540-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "80be927b0b0cbeff5424c013f986ae87", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:34:25 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "80be927b0b0cbeff5424c013f986ae87", + "X-Ms-Correlation-Request-Id": "c96940eb-8819-40e1-9034-4b4ed3863644", + "X-Ms-Ratelimit-Remaining-Calls-Per-Second": "8.000000", + "X-Ms-Request-Id": "b2cd5e24-9684-4993-88b8-f2bdc38e03cf" + }, + "ResponseBody": [] + } + ], + "Variables": { + "CONTAINERREGISTRY_ENDPOINT": "https://localtestacr01.azurecr.io", + "RandomSeed": "1699525556" + } +} \ No newline at end of file diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifest.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifest.json new file mode 100644 index 000000000000..326655cadf97 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifest.json @@ -0,0 +1,406 @@ +{ + "Entries": [ + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-f59aee991191714d88e544223e9e5c05-1bf8fff3ec65ff4e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "9c4fb2104a8319d16c55ecb9534cb315", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:40 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "4d9ab31e-eb6c-4fff-82fb-a01a3725c0eb" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "80", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-f59aee991191714d88e544223e9e5c05-718206b853d34c44-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "0d06d0375b2c81282c0be7de978a8ed6", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=localtestacr01.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:43 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "11ca31a1-c589-46ef-8e61-e7570ac6a18c", + "x-ms-ratelimit-remaining-calls-per-second": "166.65" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzY3NzE4NTh9.Sanitized" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-f59aee991191714d88e544223e9e5c05-9db7eed322ea0d4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "dc561d4ffca7c904bdb9e1cee8f0cbf7", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:43 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "021c5a13-ed31-495d-9022-076f6b296727", + "x-ms-ratelimit-remaining-calls-per-second": "166.633333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI1YjE2M2QyMy1jM2M5LTQ1OTYtYTQ3ZC0zY2FlMDUxNGI4NjUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA5NjMsImV4cCI6MTYzMDY5NTQ2MywiaWF0IjoxNjMwNjkwOTYzLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.cAtYrFqftAESuXldxeGA3_vG-upid5msIl9zDy-jnxQKtnABMkjAybmKZ0pBRpCBD4asVvAui4mfuioe4aCvgKQ5zDQAfXKulgjbq-JI9bPtutKnC8a9NPnjl2OtoHQzGUQ72PqJC3tcg4GaVXyZr136Wpe_4_xwP3nVuTpDwj2x--Mp5CanhqBHF--E9A-tODegwTMa0ffXxGVN3XeP3Z6fqyxWPbANKMsSIwPIje6uyBXlcgbMYDeF08j9LNFpmWGULXzTE8v_xvvuSVdl_aWQfsQtWRBlspuCBEonAqAHQAsnqpbBQ_pt4kyWzvodIWfbgjiG7nn80m97ubXjXw" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-f59aee991191714d88e544223e9e5c05-1bf8fff3ec65ff4e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "9c4fb2104a8319d16c55ecb9534cb315", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:57:43 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/manifests/sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "9c4fb2104a8319d16c55ecb9534cb315", + "X-Ms-Correlation-Request-Id": "b115209a-4b97-420c-83d6-8a6470cbbd22", + "X-Ms-Request-Id": "7dca5ff9-4a20-4274-9ed6-6d886a6dde8a" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "traceparent": "00-8d183809516e32429553cf1535eb356b-319910a1ab229246-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "ecb86525aa6bb5678acd707762f281e2", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "206", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:43 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "bcaa35f3-b42a-4845-8844-f894f6c9e813" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "121", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-8d183809516e32429553cf1535eb356b-2d04484e27b2aa47-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "366916c6d7f53a6ecc3c50727959993b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:43 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "76b19773-a91a-4a69-9c53-be38b622e2ed", + "x-ms-ratelimit-remaining-calls-per-second": "166.616667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJmMWMzZDc1Ni0xN2VkLTRkMGUtYWIzZi00NDdhMzNiN2QyYjkiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA5NjMsImV4cCI6MTYzMDY5NTQ2MywiaWF0IjoxNjMwNjkwOTYzLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.ZTureCgUnQeOl6pmJev3aCLPFCyS6gynLvaBpIuu0g-TE33nBAMUZPHDowmFIMyX2PCo-ipalLiC49yW_2uqDm4wy32a_1X5vGmFiE2jCwrO7NDGPfCWvgZGnkcw27GCqLt1XFMPFwVwhTZZ1r1RuBBPMcvdNI3zYvKZvcGznuxmPWWiAi5Z5J_KFS8q5QensXpT5KYilGw4ddaTR24I_oUhm4fM5Ye7QbA7iWLgY2hKkmMJNDm8gKovE6fdVnVrceDV8oqwtiv07KYFacK6JDr8qMouqR2jGDADdhIKvBb3xiGQHqaG_BVH7irUQmaGtBAM5ZEOZZi5tf8jx_ZkQA" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "Authorization": "Sanitized", + "traceparent": "00-8d183809516e32429553cf1535eb356b-319910a1ab229246-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "ecb86525aa6bb5678acd707762f281e2", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "Date": "Fri, 03 Sep 2021 17:57:43 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "ETag": "\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "ecb86525aa6bb5678acd707762f281e2", + "X-Ms-Correlation-Request-Id": "fff21828-02fd-473e-9cb1-a1950d9f5841", + "X-Ms-Request-Id": "8b3dad1a-e4a6-4989-9e33-397ba161ae04" + }, + "ResponseBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-4a814e55ef91df46a584fef3b3e81ffa-0fb2bf7e23e6f241-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "31b8f040a2d1a56ab5a151d98b8c66ca", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "208", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:44 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:delete\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "061f71da-300f-49f8-80c7-177cf1b7636b" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022delete\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "123", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-4a814e55ef91df46a584fef3b3e81ffa-00a8426f9099a445-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "d208ff3795864e01f67d1f2f59f43b31", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3adelete\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Fri, 03 Sep 2021 17:57:44 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "a94ae3a9-129f-466d-abc8-3a908cd6e7d7", + "x-ms-ratelimit-remaining-calls-per-second": "166.6" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJiYmY5ZWZjMy1jZGYzLTQ3NGYtYjAxMy0wODQ0NDU5MzdkN2UiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2OTA5NjQsImV4cCI6MTYzMDY5NTQ2NCwiaWF0IjoxNjMwNjkwOTY0LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbImRlbGV0ZSJdfV0sInJvbGVzIjpbXSwiZ3JhbnRfdHlwZSI6ImFjY2Vzc190b2tlbiIsImFwcGlkIjoiMDJkOGVjYWUtNGI5ZS00NWU0LTgxODAtYTkwOWM1ZTlhNmEzIn0.aligUMOP6PvsBcUpyYsBYEYH1D45R2bW44-fHrzY7won1r5t7ofduIqgPyjTgTz3lTVaNB79aLDhAlnoalGLwrElfEv300Zl20O0zTq5rqie9m7TXCUIlmDZRI7RbIOwxmUeYUJWDESjBp5fo2KeZLrUyOSWiC0BRd-62nHeXdv2slGlMQNAm_4hTQ7JhQFQM2jF4dUmC1j451o-U9joZ2sPUfCzDL7e5FCx37MntS7hd-dIz4O0eTggMrh5eYR1jPtTXwCRqQ5F6IwXXx1h-xwTZ29hTLQ8EnWAfGQxUvVjz-quQP9V7W0xINPFN324aOz-H7wo4qYTjPg4ho8aQQ" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-4a814e55ef91df46a584fef3b3e81ffa-0fb2bf7e23e6f241-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210903.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "31b8f040a2d1a56ab5a151d98b8c66ca", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Fri, 03 Sep 2021 17:57:44 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "31b8f040a2d1a56ab5a151d98b8c66ca", + "X-Ms-Correlation-Request-Id": "b58f5295-00ad-4485-9837-8ad323eb1b7c", + "X-Ms-Ratelimit-Remaining-Calls-Per-Second": "8.000000", + "X-Ms-Request-Id": "acf84102-fa4a-412e-ac55-6ba8ecdc4576" + }, + "ResponseBody": [] + } + ], + "Variables": { + "CONTAINERREGISTRY_ENDPOINT": "https://localtestacr01.azurecr.io", + "RandomSeed": "1534461645" + } +} \ No newline at end of file diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestAsync.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestAsync.json new file mode 100644 index 000000000000..75d66221f059 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestAsync.json @@ -0,0 +1,406 @@ +{ + "Entries": [ + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-e6e097b5c614064c9be6e26eb39358a2-4ddabc7a89c2b14c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "6237e52d79433d0fb10eac6662b62cc6", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:37 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "a7447fe8-d9c4-4e3a-842c-ccad60e2aafa" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "80", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-e6e097b5c614064c9be6e26eb39358a2-d69dba1ab47dee47-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "0a34c56b149180730d640d53c1e9f49e", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=localtestacr01.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:39 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "2d50b639-5ea2-4d52-8122-09c91515c5c3", + "x-ms-ratelimit-remaining-calls-per-second": "166.65" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzY2ODQwMTV9.Sanitized" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "128", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-e6e097b5c614064c9be6e26eb39358a2-e7b197e87d1e3544-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "fee69d784c62a583116a27f5b2fcdcae", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:39 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "a6660b11-b8be-413b-89f6-e91f8c6b237a", + "x-ms-ratelimit-remaining-calls-per-second": "166.633333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiIyMjUzOWMwYi03YjY0LTRhYjktYTc1My04NGRiMWU2ZDI2NDUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2MDMxMTksImV4cCI6MTYzMDYwNzYxOSwiaWF0IjoxNjMwNjAzMTE5LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.PiXunbqwf1gOyu-9KWrS2a326qKIxBRFjfv8gk7vr_PGOhwjGAUzPNY0TMKCzIOPZeu9f8Xr6e1ubBaEuy6see_mgSJiW7ME32vQfWSOfvv0-cVvBMgJoYvYFKjLF1sPQAQEg_JDL_ltf1Z-Pr6P8waGby1hk6Uxxbonc0_sfmw0xqCgjCsUph6e88qJ4f1UQnhYtjzks9SxZda3_VOrbi1ZQ3RgyUZfventx7nH_LD8oWho45uMY38bK86nCIvQvpkiJfaZQwKFACXWTIiB3-JGevBQgRlHopdxXNv32xXYmTc-6ouUd15f6vqxX9xb6L9g8S90fL4NFxPeKlKh5w" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-e6e097b5c614064c9be6e26eb39358a2-4ddabc7a89c2b14c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "6237e52d79433d0fb10eac6662b62cc6", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Thu, 02 Sep 2021 17:33:39 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/manifests/sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "6237e52d79433d0fb10eac6662b62cc6", + "X-Ms-Correlation-Request-Id": "0455f8ef-480b-4297-8cf5-abdca3d18993", + "X-Ms-Request-Id": "3f12d3c8-b4d7-46dd-8a3b-a2685015bfe0" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "traceparent": "00-2f7d6807e03b24409f1ee90c341b7b38-08e9b7185c50054e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "46e28142363018e772b654de6bbb7cc8", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "206", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:40 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "b1bd2fa6-7844-454e-bda7-bfed31e88da1" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "121", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-2f7d6807e03b24409f1ee90c341b7b38-80b8a62f52782c4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "c5ed0d1a2dcf1e64418ef827ed7dce11", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3apull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:40 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "ce484443-3b24-4da5-abb9-f3fcc4144e10", + "x-ms-ratelimit-remaining-calls-per-second": "166.616667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJlNzM5NmUyMS01MTAwLTQ2ODQtODgxYy00NjkxMDg5MTQ1MDAiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2MDMxMjAsImV4cCI6MTYzMDYwNzYyMCwiaWF0IjoxNjMwNjAzMTIwLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.WsgnQOEb3MesSwTiXQ4mdeUjjdW6M9McGAPm9eqXaUjx2sIVwjmAV0eFW9s-B-6IdSqkYKp3vLyb3kwDJgRjZTng5ZpuM6r3pjgsOMQDuWIbeYE0Uy3VfdIwF9u-OLvB9-hoRRG2uYD42OsqSjNBNnV8Fdxm0pDh3m2-DYy8uj4W4uumZ10uzoTbQGEmhNKoQzw_CFRyjbYZUsIHoH4cRwvyPHXRj3qjnL3NBLe9-wkBLqdJx8toOvCg9jkrJF9rAeC_fc0A8odJDADsOIXPf4BobQGJ_qWpHHN1NHBvNlTrlAMVqJb4HDDdTzw9MqPtB2VUv2MML_oDXdIYWtETsg" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "Authorization": "Sanitized", + "traceparent": "00-2f7d6807e03b24409f1ee90c341b7b38-08e9b7185c50054e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "46e28142363018e772b654de6bbb7cc8", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "Date": "Thu, 02 Sep 2021 17:33:40 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "ETag": "\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "46e28142363018e772b654de6bbb7cc8", + "X-Ms-Correlation-Request-Id": "8e9de1da-6e92-428c-8f70-65536eb01747", + "X-Ms-Request-Id": "d21a07ad-add6-461b-b63b-72716b7c21b2" + }, + "ResponseBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-165c9686879d8140ab7a0bc5cde65fe6-35d3afc6166f944e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "3f105f88ad06426eb6cd8cacf7a53955", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "208", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:40 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://localtestacr01.azurecr.io/oauth2/token\u0022,service=\u0022localtestacr01.azurecr.io\u0022,scope=\u0022repository:oci-artifact:delete\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "d2a28f4f-4540-47c9-9059-1044435d3a1e" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022delete\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "123", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-165c9686879d8140ab7a0bc5cde65fe6-a51242b84f1f6545-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "a4db5eee170e14de1cc304a13dc02bf4", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=localtestacr01.azurecr.io\u0026scope=repository%3aoci-artifact%3adelete\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Thu, 02 Sep 2021 17:33:40 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "aaf560bb-c9d8-4e3c-aa31-0547e514068a", + "x-ms-ratelimit-remaining-calls-per-second": "166.6" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI0N2JhYTJlMy1kZGQ4LTQyYjUtOTIxMy0zYzQ2ODVmZjJjNTIiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzA2MDMxMjAsImV4cCI6MTYzMDYwNzYyMCwiaWF0IjoxNjMwNjAzMTIwLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJsb2NhbHRlc3RhY3IwMS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6IjEzYmI2YWY1OTYwYzRiMjdhNWNkMjQ0OGZlMDczMjM5IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbImRlbGV0ZSJdfV0sInJvbGVzIjpbXSwiZ3JhbnRfdHlwZSI6ImFjY2Vzc190b2tlbiIsImFwcGlkIjoiMDJkOGVjYWUtNGI5ZS00NWU0LTgxODAtYTkwOWM1ZTlhNmEzIn0.G-yhmgrGznz2Az0VBlLVs4ZyJqlxbwW3yN6tsVt-9mNj2HQvZTxcvc_UxTt6x3FOCyk17Hhb9EmN4BWSbFekYz5tFMbnvFk3T7Fsh8ZYE6qPaNouBUMGMSZ2LA5IAMtZdipND6GZ82sWmQVUi3NBnaW6BdnlBeLssGCDr69sr1ycOR1-NWOTTo1rNBDKIwgWbP14lWkucPUqkxzFqTcDiFR1LR3UXhVu-pXt0OV3A7yd0wbIDGhdZ9yGgtL9pMhNO8pWm7GrLAZWqBPdOZqJd_sJmZ84mdNS0dMaoAH-Nd3dpgJjXoNBcRf1DF_9jHTKsWTHnqhjuY1u8ZeruVYEXg" + } + }, + { + "RequestUri": "https://localtestacr01.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-165c9686879d8140ab7a0bc5cde65fe6-35d3afc6166f944e-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210902.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "3f105f88ad06426eb6cd8cacf7a53955", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Thu, 02 Sep 2021 17:33:40 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "3f105f88ad06426eb6cd8cacf7a53955", + "X-Ms-Correlation-Request-Id": "a8bcdf30-9e30-4712-9dce-7a72f9170181", + "X-Ms-Ratelimit-Remaining-Calls-Per-Second": "8.000000", + "X-Ms-Request-Id": "76ea2c85-1dbe-4b3e-bfe2-1b0b7d9a8dc5" + }, + "ResponseBody": [] + } + ], + "Variables": { + "CONTAINERREGISTRY_ENDPOINT": "https://localtestacr01.azurecr.io", + "RandomSeed": "1715166934" + } +} \ No newline at end of file diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestWithTag.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestWithTag.json new file mode 100644 index 000000000000..5d06c439ae34 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestWithTag.json @@ -0,0 +1,1261 @@ +{ + "Entries": [ + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-2ad39777c7b40842-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "33f41ee863cec99e43ead0e5083093fd", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:20 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "a1f80017-27cd-4057-89e1-286a40455ba4" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "89", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-09d70ad59e16eb47-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "d949730841174c7524d7b5d9fba4325b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=annelocontainerregistry.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "ae6ad4f0-1b49-4c64-aa80-773dd2a31f31", + "x-ms-ratelimit-remaining-calls-per-second": "166.65" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzcxMTAwNTl9.Sanitized" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-f291af8fbb6a7546-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "9311ed2c85016fe7f0bfdedfe8475577", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "b5cd0227-2a5f-4a97-bd19-df945005f472", + "x-ms-ratelimit-remaining-calls-per-second": "166.633333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI0NGVhMDliYi1iZjk4LTRkM2YtOGFmYS00ZDU0NTk0YTM1NDQiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjIsImV4cCI6MTYzMTAzMzY2MiwiaWF0IjoxNjMxMDI5MTYyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.dXWQ6yLlgP6wIWDVk8OG-0PsW9SJstFjv9wuGB-sTbWUui1xCY2O9e9m-1k_wF-kXQU_4y_ob1BIg4Cf7Jm-qacnlFiMnjmZwcHTpwjmm9SZQFuYSauoHsUqjP3iWHn_TvFCaW1BIR_hhmqsriulsh8mrCTHz7hCdjohmKnj3UGSK5bbHXI5gQGun_0i53O2gPhd2a1UOPt_ZS442gnMPkdeJFxwik3ZQmX69xIl1PvtpBXXY-LXrGC1n7uvUBHkgdEyCZ2c-eUee7cTxDZKQONwr1qbvqv71v2n2PAxiYZmGIrw9VhMqp8BnLD0BCdhTHgnnILDDAEJAbyyB41NlQ" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-2ad39777c7b40842-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "33f41ee863cec99e43ead0e5083093fd", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "7bd9785a-fe6d-4aa9-8ee1-7fc058fea069", + "Location": "/v2/oci-artifact/blobs/uploads/7bd9785a-fe6d-4aa9-8ee1-7fc058fea069?_nouploadcache=false\u0026_state=pG4r87xPtHn35J01iVmgbuMGFjMQj42kbxOCfPXKLth7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2JkOTc4NWEtZmU2ZC00YWE5LThlZTEtN2ZjMDU4ZmVhMDY5IiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU0OjIyLjI0MDAxMzQwN1oifQ%3D%3D", + "Range": "0-0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "33f41ee863cec99e43ead0e5083093fd", + "X-Ms-Correlation-Request-Id": "f3d67fd2-602e-4e52-93c2-cd0dcaffd46a", + "X-Ms-Request-Id": "39cae1ae-c618-4676-aa1e-7d956f0032a4" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7bd9785a-fe6d-4aa9-8ee1-7fc058fea069?_nouploadcache=false\u0026_state=pG4r87xPtHn35J01iVmgbuMGFjMQj42kbxOCfPXKLth7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2JkOTc4NWEtZmU2ZC00YWE5LThlZTEtN2ZjMDU4ZmVhMDY5IiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU0OjIyLjI0MDAxMzQwN1oifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "171", + "Content-Type": "application/octet-stream", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-e20bc84bb4da0241-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "3328df2e68afa679a9a80ff7aec4cd9f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "H4sIAAAAAAAA/\u002BzRwcrCMBAE4Dn/8L9DD551tulmn6dUq4VioUb06VUsORU8aRQx32VzSjYzi2bYt90WKZGkmU2T5HxOZ6lo6lTNPCjUUlFo0q2i4yHUI8hn75l/7kvE/lf1GLq2bsIynMOr37jn4b1/3L\u002BrYv9lWYkDxYkoireE\u002BOP9Xy87bNCjx4ACJwwY0WONf/x9erUsy7IsoVsAAAD//yO/fykACgAA", + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "f2994dc2-32ba-425a-9aa5-8240efead35d" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-de44387a3bc4094c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1ab974b8001e82fb8bdae957629563dc", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "465ef731-f3b5-4c2d-a051-e95bbcb5d54d", + "x-ms-ratelimit-remaining-calls-per-second": "166.616667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiIwNzZhMzgzNy02OTQyLTQ4N2MtODAyYi03NjUzOWRkNzU4OTYiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjIsImV4cCI6MTYzMTAzMzY2MiwiaWF0IjoxNjMxMDI5MTYyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.CPW1fCjqbqZ7YIGb7lN8PDSCtDynK4GAMpOkHwFsgvY8GrmaGqczFcVavCAT-Fg8eJ5r66f1LSztwSk1_JkrkKEoclR_L9py6k_viEdidaHi8PyBLKTVpxP4JkmtzDSnErAzCccfliztej5QfNacjLBqDwQr1dpdjhe5NANLAX-1-u3dE1aPoxY30m4G_KrYx7v3vn4YI-ByhHSqBLxFATPIPGaMXTP7MIibod1S7EY9RgTmFGOHb74CWMiypLxpHmCLIjNkbhw3_E7oL6I2eqB407FF7466wO4lTGl8_ylf-Z2kJmh7_dd5y6jmzk-CLZcHGRshFBDjkmJh0pDgBA" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7bd9785a-fe6d-4aa9-8ee1-7fc058fea069?_nouploadcache=false\u0026_state=pG4r87xPtHn35J01iVmgbuMGFjMQj42kbxOCfPXKLth7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2JkOTc4NWEtZmU2ZC00YWE5LThlZTEtN2ZjMDU4ZmVhMDY5IiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU0OjIyLjI0MDAxMzQwN1oifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "171", + "Content-Type": "application/octet-stream", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-e20bc84bb4da0241-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "3328df2e68afa679a9a80ff7aec4cd9f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "H4sIAAAAAAAA/\u002BzRwcrCMBAE4Dn/8L9DD551tulmn6dUq4VioUb06VUsORU8aRQx32VzSjYzi2bYt90WKZGkmU2T5HxOZ6lo6lTNPCjUUlFo0q2i4yHUI8hn75l/7kvE/lf1GLq2bsIynMOr37jn4b1/3L\u002BrYv9lWYkDxYkoireE\u002BOP9Xy87bNCjx4ACJwwY0WONf/x9erUsy7IsoVsAAAD//yO/fykACgAA", + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "7bd9785a-fe6d-4aa9-8ee1-7fc058fea069", + "Location": "/v2/oci-artifact/blobs/uploads/7bd9785a-fe6d-4aa9-8ee1-7fc058fea069?_nouploadcache=false\u0026_state=51CYqXOp9cjFWobhBPzaeMqSpDRMaL0fYmfyolRbeKl7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2JkOTc4NWEtZmU2ZC00YWE5LThlZTEtN2ZjMDU4ZmVhMDY5IiwiT2Zmc2V0IjoxNzEsIlN0YXJ0ZWRBdCI6IjIwMjEtMDktMDdUMTU6NTQ6MjJaIn0%3D", + "Range": "0-170", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "3328df2e68afa679a9a80ff7aec4cd9f", + "X-Ms-Correlation-Request-Id": "9e0518fb-29c9-4a24-9ab3-8c27fe93249e", + "X-Ms-Request-Id": "ae36a8c4-4473-4ea5-8fb7-a6d422ddef77" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7bd9785a-fe6d-4aa9-8ee1-7fc058fea069?_nouploadcache=false\u0026_state=51CYqXOp9cjFWobhBPzaeMqSpDRMaL0fYmfyolRbeKl7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2JkOTc4NWEtZmU2ZC00YWE5LThlZTEtN2ZjMDU4ZmVhMDY5IiwiT2Zmc2V0IjoxNzEsIlN0YXJ0ZWRBdCI6IjIwMjEtMDktMDdUMTU6NTQ6MjJaIn0%3D\u0026digest=sha256%3Ad25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-7606052ada8f3d4d-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1caa3e81fe7bc4ac746aea5976f0c02b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "4cfa24da-17d7-4946-b034-2f094f154eb1" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-2b2ae218e8554d4b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "73273ff13a8e2e59e3a5a7d57e214414", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "6b6fa4b6-0859-4c47-ac5d-e0a2aa56643d", + "x-ms-ratelimit-remaining-calls-per-second": "166.6" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI1NmQyMTIyYS1kYmMwLTRmYWEtYWQ4Yy0yMzYwNDBmNWM1MmIiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjIsImV4cCI6MTYzMTAzMzY2MiwiaWF0IjoxNjMxMDI5MTYyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.qjjpmpuF5FhoQm0BzdGjnQM_IkYOFqrvZIS-TBN1RlTOTAU3xvY6NBmXg0R85Fym6y6qz04tdoRiY26qPq-kOqU2qkx_tesmxLOeWYYLp5W2RNXGsbB0Z6PCNAP_oo7F9YZGBBXFJ2rD6WC-CsiV53C1ksMjjL2EgEWZU8xyQ8bWO7f9fOEFt8NL-CsYabC8XQ_RTkj1dDBt6ZzfUTsPMA6n278umvAB84M_lxDqdm9UlSOU6DM0FbaACSm3X0R3o9PDRU8H77qYms9bYp-CU_adCL1EfHXowCVqUVY7VCzr3kEI-c65FhYpFjb_-K0ZfFUF-Rk8gCYpClTh3Zczbw" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7bd9785a-fe6d-4aa9-8ee1-7fc058fea069?_nouploadcache=false\u0026_state=51CYqXOp9cjFWobhBPzaeMqSpDRMaL0fYmfyolRbeKl7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2JkOTc4NWEtZmU2ZC00YWE5LThlZTEtN2ZjMDU4ZmVhMDY5IiwiT2Zmc2V0IjoxNzEsIlN0YXJ0ZWRBdCI6IjIwMjEtMDktMDdUMTU6NTQ6MjJaIn0%3D\u0026digest=sha256%3Ad25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-36c68e6eeccfd247a95130513ccf1934-7606052ada8f3d4d-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1caa3e81fe7bc4ac746aea5976f0c02b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Content-Digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/blobs/sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "1caa3e81fe7bc4ac746aea5976f0c02b", + "X-Ms-Correlation-Request-Id": "586450ad-2c9d-44d4-9822-61bc6f55171d", + "X-Ms-Request-Id": "79ed9548-e168-4cf3-aed3-d7c20c7f2982" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-4016241a6c21324c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "70753244b119b923c8f4a6b315a20b9b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "0a388a2e-e2e3-42a9-afee-4758d4350295" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-d8cb871c13e08846-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "2366bd19f06e474ee57b38d656d74552", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "c2293149-09c5-421d-81ae-53d2b1d4f4ec", + "x-ms-ratelimit-remaining-calls-per-second": "166.583333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI2ZWZkYjA5Yi1iOTQyLTQwY2MtYTMzYy0xMzllYTRmOTdlN2IiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjIsImV4cCI6MTYzMTAzMzY2MiwiaWF0IjoxNjMxMDI5MTYyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.NmikWd_qvhQ14kXjN681g4xjdlnK-4RzvK8An2r7_CGnc8C-f_3eAf0sQcLby0yUg5BsRY2okydMr3Da1BByJpl3eKKpenVhfMQo9KHATqbfsvcqioijhCZ29lBse-NPeuSkE5QjksLCkNrG7SqdULsK52X5gQwe_hpeLa3gGMPeJDw6aGC2WSkz1SV_Y9VOr-MDb9cDdWOHqQ1jcppJGuHO6dFOB7dyUrK0v_4wjt3T3H7OyBpsZ1KtMeyDI-yErNgOKgMEZrN4oW3IAAkN2H7T0MBeD2YfsKz51rzEu1bprnMn-MCi4KIvTVqtcx5l7CBcV_oqtTDhszTc0F1cRQ" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-4016241a6c21324c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "70753244b119b923c8f4a6b315a20b9b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "4e47a409-62b9-4f84-8cd3-8314fcf3ae30", + "Location": "/v2/oci-artifact/blobs/uploads/4e47a409-62b9-4f84-8cd3-8314fcf3ae30?_nouploadcache=false\u0026_state=hvSAEZ3mLw7Yl4ApJzW7XEdzQIzA3hBmyhj6FE9EuD97Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNGU0N2E0MDktNjJiOS00Zjg0LThjZDMtODMxNGZjZjNhZTMwIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU0OjIyLjc2NzcwNDE4NloifQ%3D%3D", + "Range": "0-0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "70753244b119b923c8f4a6b315a20b9b", + "X-Ms-Correlation-Request-Id": "be1f4d8a-b9e6-43ef-9dc1-0b042b1d3675", + "X-Ms-Request-Id": "870946a2-709b-43ac-8164-b92243b7673a" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/4e47a409-62b9-4f84-8cd3-8314fcf3ae30?_nouploadcache=false\u0026_state=hvSAEZ3mLw7Yl4ApJzW7XEdzQIzA3hBmyhj6FE9EuD97Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNGU0N2E0MDktNjJiOS00Zjg0LThjZDMtODMxNGZjZjNhZTMwIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU0OjIyLjc2NzcwNDE4NloifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-7a955b8dc61df340-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "4414d626507b40111b6daa9994a51841", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "fc75cd28-e5f3-4f78-a0c7-12870ec615b1" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-5c29bec83e20c646-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "c1bb0c9a20bb54a5e32e8b9e784d63f1", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "bfde45fa-3bb5-4876-be78-7214f6b3ddfb", + "x-ms-ratelimit-remaining-calls-per-second": "166.566667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI5ZWRjYmQxZC1kZjU0LTQwNTUtYmZkNi0wZDFhZWVmNjQyNDUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjIsImV4cCI6MTYzMTAzMzY2MiwiaWF0IjoxNjMxMDI5MTYyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.XVYZCBrw9WJnHncU2touqgV_rm85sDOOtMyE6gGY0uSkEfwqHg8gWushr3R0xpizRGSwnyQA0Owe5UgSF56BwMJMV_nCNKykpSBslvV98ezzpZ_Nhk4S9GbrIasoUvnHJRw63eFK-kdstNE9u7vJ1RPEXxlDR9FIGF5t9IrBmI60FivOEM4sHXyydg5GOAKXYxXgJXQUyCpQpCsamqlwEw__F1uCwlQEW36A4srTqWSF7-EJEOjGYidJVlI_E7GzDfv7OlQdnw9C-CeKxQrCuI5m7r3zz-iFVb0lKMPHuYtBHKwo-sw7HNOEOFBjFuc2KJbSXMwGoa9BdlPSQjXz2A" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/4e47a409-62b9-4f84-8cd3-8314fcf3ae30?_nouploadcache=false\u0026_state=hvSAEZ3mLw7Yl4ApJzW7XEdzQIzA3hBmyhj6FE9EuD97Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNGU0N2E0MDktNjJiOS00Zjg0LThjZDMtODMxNGZjZjNhZTMwIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU0OjIyLjc2NzcwNDE4NloifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-7a955b8dc61df340-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "4414d626507b40111b6daa9994a51841", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "4e47a409-62b9-4f84-8cd3-8314fcf3ae30", + "Location": "/v2/oci-artifact/blobs/uploads/4e47a409-62b9-4f84-8cd3-8314fcf3ae30?_nouploadcache=false\u0026_state=d8r6OqDqm2j8cs4TD8MxysvKNSDJqwQGlV_z3RUYB0t7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNGU0N2E0MDktNjJiOS00Zjg0LThjZDMtODMxNGZjZjNhZTMwIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wN1QxNTo1NDoyMloifQ%3D%3D", + "Range": "0-27", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "4414d626507b40111b6daa9994a51841", + "X-Ms-Correlation-Request-Id": "8a01c94c-ddd6-41be-8fcc-77c20df439b1", + "X-Ms-Request-Id": "8359b151-c686-49ba-9bf9-fd561262d342" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/4e47a409-62b9-4f84-8cd3-8314fcf3ae30?_nouploadcache=false\u0026_state=d8r6OqDqm2j8cs4TD8MxysvKNSDJqwQGlV_z3RUYB0t7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNGU0N2E0MDktNjJiOS00Zjg0LThjZDMtODMxNGZjZjNhZTMwIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wN1QxNTo1NDoyMloifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-d16ffa47d4c30948-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "3f8c53afc78dc820ab25070045b5b23f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:22 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:push,pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "f0b131ef-7c69-4255-8cd8-c6c1aeb2012a" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-d9fbeef93ae78e42-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "493cf762841b069730c0604cc573c8ce", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apush%2cpull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "d1c8672a-cb8a-4fda-97c2-90583e3e7930", + "x-ms-ratelimit-remaining-calls-per-second": "166.55" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJiOWEzMDViZi0wNjE0LTRmODItYjNhOS1mOGQyNDQyYjIzYjMiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjMsImV4cCI6MTYzMTAzMzY2MywiaWF0IjoxNjMxMDI5MTYzLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1c2giLCJwdWxsIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.CgcwTIQHAzUYvyDjHpKd9_HuS6PJe76GHkZU-mu2tJbADbEzxZQz8pSKOClt0_zS8sO1ybsOEiOF0FSxll1Hqr_fInpOdHwTVxe7ICEtw8uK-0H07kIg2QoyQ_SRmfJ_rtvXMLwo4jTwhMVaBkL2asO7YfiU_l2UPIn5KdH_EPKKzOf9oY5qwb_xHSLMkf3ZkijT9Nm3JoyBDjknrrMDJuhJugrjwuHPNStLhmK7VU1zdItu4SKoXnkL1SB-A8B4KYtfJqTYK2DbPhnkfWtlaQvdldysOMPV5yl4r-fAgGvmUmHzBlreGChK-AGXhvdDsevkPz1JjnwYrg5nK4htPQ" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/4e47a409-62b9-4f84-8cd3-8314fcf3ae30?_nouploadcache=false\u0026_state=d8r6OqDqm2j8cs4TD8MxysvKNSDJqwQGlV_z3RUYB0t7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiNGU0N2E0MDktNjJiOS00Zjg0LThjZDMtODMxNGZjZjNhZTMwIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wN1QxNTo1NDoyMloifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-0d2d27690a0a1444a2e6baa06ff28597-d16ffa47d4c30948-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "3f8c53afc78dc820ab25070045b5b23f", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Docker-Content-Digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/blobs/sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "3f8c53afc78dc820ab25070045b5b23f", + "X-Ms-Correlation-Request-Id": "ec2767c4-b777-44ee-abfb-7d2805deac37", + "X-Ms-Request-Id": "7da00e20-2dc5-4baf-86ae-04c1b90d4ce9" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/v1", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-c71cc4be1b85bd4082bcb90d573fde4f-ad1c1fbcdd90ef41-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "40e9b90ad919d2b4ecf2159518a50e2e", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "c34a0b38-0950-4ef6-ba62-aa8dc28e6763" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-c71cc4be1b85bd4082bcb90d573fde4f-dd8cc9ef2e5e2348-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "813b4b7b19112bd5bb850fcd66d30237", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "5101f718-e34a-41f2-9ae8-7e6a981fc3fe", + "x-ms-ratelimit-remaining-calls-per-second": "166.533333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJhM2MzOGM3MC1jMGMxLTQyZGYtYTcxYi0yNTJlNDQ0NjBiYjciLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjMsImV4cCI6MTYzMTAzMzY2MywiaWF0IjoxNjMxMDI5MTYzLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.mn3-kDRIY6RwOXw8ZFYYQnyNb5J0L01_-7bDoy7L-a1APXrB3JKDbxbY4cSLe61WRtP7ZyY1_QA-isebKJzQz1DDMLvCHAZFwa9WeOhyo1dV4egbwXUD_WuCQgXW_Ok2BYhafn3F5sJ5EoDPNdQIeWDZWIYLzVVUtREPOuT2C9-mFTGT_IC3hqYzNqdpvB99e4ckQcd2uJXc28JTRUPUoiKtMlaB6HNDMkv128Oy9aBENns292PQ1RI6o123bQfNANkDWvktd-aaUI_z7LLjRsqnnVpa38US2_xZOFOtsxfJG4HLZScynmptK6OO9xwU4tEW8TyLHiziXrE3_89dsw" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/v1", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-c71cc4be1b85bd4082bcb90d573fde4f-ad1c1fbcdd90ef41-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "40e9b90ad919d2b4ecf2159518a50e2e", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/manifests/sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "40e9b90ad919d2b4ecf2159518a50e2e", + "X-Ms-Correlation-Request-Id": "190c35c0-6335-4a86-a885-5a9d333cb012", + "X-Ms-Request-Id": "f5daf426-09f3-4b0c-a922-d40b290f809f" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "traceparent": "00-2968ba6483240c4891967abe3a1fb01b-345a7b606dc6cd4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "8bf6395d71cb892542695d296e02ed8a", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "206", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "b5ca76f3-822b-4c91-affa-b191a21e2b8b" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "130", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-2968ba6483240c4891967abe3a1fb01b-a7e6fbd37cd05541-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "7ad132b14638f1bce4be8593c9e66b19", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "7fb5ecdd-05a8-4832-a1a7-aa9b102099c9", + "x-ms-ratelimit-remaining-calls-per-second": "166.516667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI5Yjg1ZjA1My04YzdjLTQ5ODQtOGM1OS03Mzk4NWVkNDA2ZTUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjMsImV4cCI6MTYzMTAzMzY2MywiaWF0IjoxNjMxMDI5MTYzLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.smjnyLlK0KQdXQvi9TdqCe-16ZkJ8iPFZb3DD-huETABqt2Q0BkTC4S380cD1k0LpSjLJmgTu7vvqfoL5N4MykhBYsaHSbkM8XveZ01WR6gblhx-Jj1hquIKQbX_0lYA_5kPQg59Q54oD9G2yhjho3NSwmxiFihUeuuthBRHW40ZzzuC32SgKnEE7dCKUYrZ7FCknz63JbUroOTDGTc6p0LEFdhVM5ieiaIDZzv-GOSLrepZImxojE_oM1TOwb5ZQxs_iLM02NCysPGKy0MM3p8YhIvDCnustXh0a55no7NLs3g-0bEReK4yfXt7sVuqOeANRiajJjvsz0FXk5j1-Q" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "Authorization": "Sanitized", + "traceparent": "00-2968ba6483240c4891967abe3a1fb01b-345a7b606dc6cd4c-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "8bf6395d71cb892542695d296e02ed8a", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "ETag": "\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "8bf6395d71cb892542695d296e02ed8a", + "X-Ms-Correlation-Request-Id": "6e1d5ade-788a-4f65-ace5-5ad73d17019e", + "X-Ms-Request-Id": "1b578823-e6c8-4009-9575-37688eb3b6bd" + }, + "ResponseBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "df37ddef82af0a6325b13ea7bbacbcb9", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "215", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:metadata_read\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "0b142276-0da7-498b-838a-db67630452e1" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022metadata_read\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "89", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "341b8498880216ff7c04a70cec92c05c", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=annelocontainerregistry.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:23 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "ce96e6be-27db-4ba2-aa3e-5c7721fb4d2d", + "x-ms-ratelimit-remaining-calls-per-second": "166.5" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzcxMTAwNTl9.Sanitized" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "139", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "903943fd0eca2edbcec7548708143537", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3ametadata_read\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "347e88aa-eda0-4b44-8db3-673dd92b159f", + "x-ms-ratelimit-remaining-calls-per-second": "166.483333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI5NTdmMDA2My04Mzc1LTRhMDctOWMyYy04ZTBjNjdkZWVkMmEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjQsImV4cCI6MTYzMTAzMzY2NCwiaWF0IjoxNjMxMDI5MTY0LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjIuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbIm1ldGFkYXRhX3JlYWQiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.BNlc4KoSt_a0rMoBKdnL6g78Ypz6HCYQGDfsu6OE59Y5PDnRQjHLSAAuw7wpP2HjCMzUi_PF0JbYvoBgUZ_slFjY_VHeTJw_PeXIHDcgkP8eQ57ermEmL_-VJSfvmYyTgfbkOm330mRIL124a1CF8DW1bu1TwiS12OEIDlreSRCiEExqkXJWJd78N_zJrITdxksO9GcM1Z7yiZfD8uGAwDQ3uHcExW3hu9A9yfvtp_j7WTtFIlNVi4EnmS0vjDdlhUUeoYxDx8ula6Qn6szaMYlV1zhBLzHEOINArM96H0ytcCAC1OsTJxvrg4vEtAN4JnE5bhVI4tSYW8rNNh7z-A" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "df37ddef82af0a6325b13ea7bbacbcb9", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "395", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "b7955041-18c1-408a-bb20-6a26df304264" + }, + "ResponseBody": [ + "{\u0022registry\u0022:\u0022annelocontainerregistry.azurecr.io\u0022,\u0022imageName\u0022:\u0022oci-artifact\u0022,\u0022tags\u0022:[{\u0022name\u0022:\u0022v1\u0022,\u0022digest\u0022:\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022,\u0022createdTime\u0022:\u00222021-09-07T15:54:23.5587772Z\u0022,\u0022lastUpdateTime\u0022:\u00222021-09-07T15:54:23.5587772Z\u0022,\u0022signed\u0022:false,\u0022changeableAttributes\u0022:{\u0022deleteEnabled\u0022:true,\u0022writeEnabled\u0022:true,\u0022readEnabled\u0022:true,\u0022listEnabled\u0022:true}}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "44fbcb0236cb6617de2162aadb561d93", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "215", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:metadata_read\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "c8d07b80-996a-4723-bc2d-ab949c6dbbf6" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022metadata_read\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "139", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "77aae2f12b7289eea9ec653a34770e67", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3ametadata_read\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "1f591754-aee1-4f84-a6b4-cc46db298baf", + "x-ms-ratelimit-remaining-calls-per-second": "166.466667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiIzZjIxNmU1MC1mMzcxLTRiZGQtOTM1NS04OTU3YjdmNGY1MzEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjQsImV4cCI6MTYzMTAzMzY2NCwiaWF0IjoxNjMxMDI5MTY0LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjIuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbIm1ldGFkYXRhX3JlYWQiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.oZxHwTLmsXykkHz9NFkH1jHAjq0RfxKNXkCoJ1X8ho285gTFw0SyJaKPQmJMWnk_aZ9R_Nw_yPYzUrZq4GpxHym-dDTTi6BHlNsJhkFl4mt4sSjqQwzZtYp8wAjO8Jt2_cgn6M9Xm9iJyKZhL97GWL-ptPGNPI9J0wTEybibu4MbYFkdombrg_kuyxQEuAhn_cRx2Zg8cdyV54-FNi_FBQ6WljPom6cl7Fg1vaAfDncAoEcMN2ijhmJVyZKx19fqaZzzpQvH-w4PfvbCV7xFaWmSTMHKZoLAQK8yv6mx6O5YZvcYgMho4fHsKAb5ldV6euXLTp2fGksRV3SWOj8LDg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "44fbcb0236cb6617de2162aadb561d93", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "395", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "fca8dcd8-d269-4a27-b85f-b5c8ab91236a" + }, + "ResponseBody": [ + "{\u0022registry\u0022:\u0022annelocontainerregistry.azurecr.io\u0022,\u0022imageName\u0022:\u0022oci-artifact\u0022,\u0022tags\u0022:[{\u0022name\u0022:\u0022v1\u0022,\u0022digest\u0022:\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022,\u0022createdTime\u0022:\u00222021-09-07T15:54:23.5587772Z\u0022,\u0022lastUpdateTime\u0022:\u00222021-09-07T15:54:23.5587772Z\u0022,\u0022signed\u0022:false,\u0022changeableAttributes\u0022:{\u0022deleteEnabled\u0022:true,\u0022writeEnabled\u0022:true,\u0022readEnabled\u0022:true,\u0022listEnabled\u0022:true}}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-57b06bca7e97274785c3d8a68a5c47ee-8776287a1126fa48-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "200a70cf7c97c6902cd2b2a9ac315378", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "208", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:delete\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "cb3a96ba-0520-4c9b-be69-b4c8f9a2adbb" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022delete\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "132", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-57b06bca7e97274785c3d8a68a5c47ee-18c698f87c219f42-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "2696c0a9bd6ad6c4dd719aded0dc3166", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3adelete\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "2757955b-07d2-418b-a8ba-3b7a75624585", + "x-ms-ratelimit-remaining-calls-per-second": "166.45" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI0ZTM5MDg0Yi03N2JhLTQ4MzQtYTJhNi1lZjM1NTFiM2RlYTkiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkxNjQsImV4cCI6MTYzMTAzMzY2NCwiaWF0IjoxNjMxMDI5MTY0LCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbImRlbGV0ZSJdfV0sInJvbGVzIjpbXSwiZ3JhbnRfdHlwZSI6ImFjY2Vzc190b2tlbiIsImFwcGlkIjoiMDJkOGVjYWUtNGI5ZS00NWU0LTgxODAtYTkwOWM1ZTlhNmEzIn0.gTeDXYBPk2NT6iHmxHesCarNj5T0tV0Ij5jqcL1NVspj-Y5DmqX8zymPo-I6qu1Mg850NW6ZbzN4FqX8rpBZ1lUnayN93Bo0N-33TeY-64-Fn6eCDwvs-BbYd4QxO4DL9h6S6a_JExs5G663mXR5wMRoHFeOXP-LFwj6Oom3N-jF0LY0J34ejFgcfhAq_vOCLdE_R5kjqu4AU8vkcQ-sFR7gHXSaKo0cscTrtvgiyMjO4d3IlmdOOAf6h2CHBN0hbgyNXWa6QYkA1_egiqQSqyyA8LFL2ARSTM6JekppiMiHSGsbE1qdTyri5zQM2TDp_4TvRqhI7VpOEr74QT-Wwg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-57b06bca7e97274785c3d8a68a5c47ee-8776287a1126fa48-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "200a70cf7c97c6902cd2b2a9ac315378", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:54:24 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "200a70cf7c97c6902cd2b2a9ac315378", + "X-Ms-Correlation-Request-Id": "bb8685cd-4033-4e98-8473-0baca19112d5", + "X-Ms-Ratelimit-Remaining-Calls-Per-Second": "8.000000", + "X-Ms-Request-Id": "c3da9117-f589-42d2-84ff-67e7c8184a71" + }, + "ResponseBody": [] + } + ], + "Variables": { + "CONTAINERREGISTRY_ENDPOINT": "https://annelocontainerregistry.azurecr.io", + "RandomSeed": "1919299874" + } +} \ No newline at end of file diff --git a/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestWithTagAsync.json b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestWithTagAsync.json new file mode 100644 index 000000000000..7c8d582cac26 --- /dev/null +++ b/sdk/containerregistry/Azure.Containers.ContainerRegistry/tests/SessionRecords/ContainerRegistryBlobClientLiveTests/CanUploadOciManifestWithTagAsync.json @@ -0,0 +1,1261 @@ +{ + "Entries": [ + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-e094b3dab295254b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "720ce22d093b7e3b9f6815efda553f4d", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:54:58 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "5c203a9f-ca9f-40b1-8665-073ec365f818" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "89", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-9a5ad4ddfa2db149-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "10d20133e28ef84fa3f428009c2cc816", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=annelocontainerregistry.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "c2643f84-2358-4b39-bf67-ebf2d69918be", + "x-ms-ratelimit-remaining-calls-per-second": "166.65" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzcxMTAwOTd9.Sanitized" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-7187990a0e928644-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "f1b8c0da5d7c397bc83d5311b0d8ceed", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "60317b0f-3c3c-489a-ab2f-96f34e7f0151", + "x-ms-ratelimit-remaining-calls-per-second": "166.633333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJmNmIxZGEzOC1jMTRiLTQ0NjctYTdjOC1hMTU0ZWQwYWQzNTEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDAsImV4cCI6MTYzMTAzMzcwMCwiaWF0IjoxNjMxMDI5MjAwLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.I-plaNbQ5BmLTuTsE22v0f1pXPc5lMC0lHOpOLHDR53220sXwbqdWYdRssT8g87SU-ulxvc9MJ_0cmr0iyt2s82pI-BH8vo2FPxhwIcCGdatn0APR5D5xQ2CNhYtCH4o_u8p0Yy26wf8oZYEq7MtFlWLKnIapaG0mqrURnqvXM4bh7G8LuKypHgVyDBaVfwIm14N_SRmQMphi1ZSFcOW_JLw7KJyZ16bXaNenFtBJFT-tKtIaqICebDPQUZvkm__ToRh9NeZLihFiSwH_U5Y4n9KSxwMx_-Vi49fI1KZYPBucy2lqA0fgeRfzdqGw6xmnHhX5wybcpgujIjR_W_Afg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-e094b3dab295254b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "720ce22d093b7e3b9f6815efda553f4d", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "1a18436f-9e29-451f-b15f-5a0abc536c53", + "Location": "/v2/oci-artifact/blobs/uploads/1a18436f-9e29-451f-b15f-5a0abc536c53?_nouploadcache=false\u0026_state=JhzOSHZFKm01sUWZ1aKZFtmOt925qUUvhOmEvMAsw7F7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiMWExODQzNmYtOWUyOS00NTFmLWIxNWYtNWEwYWJjNTM2YzUzIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU1OjAwLjM2NjQzMTI5OVoifQ%3D%3D", + "Range": "0-0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "720ce22d093b7e3b9f6815efda553f4d", + "X-Ms-Correlation-Request-Id": "09ecb8de-0f54-4a63-b56c-78c2dfedb3e8", + "X-Ms-Request-Id": "ad77fe04-c1d8-449d-8b3a-dc166740241c" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/1a18436f-9e29-451f-b15f-5a0abc536c53?_nouploadcache=false\u0026_state=JhzOSHZFKm01sUWZ1aKZFtmOt925qUUvhOmEvMAsw7F7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiMWExODQzNmYtOWUyOS00NTFmLWIxNWYtNWEwYWJjNTM2YzUzIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU1OjAwLjM2NjQzMTI5OVoifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "171", + "Content-Type": "application/octet-stream", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-c0c415646a393e4f-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "bee3fc52578e4b319313ce46e03ae273", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "H4sIAAAAAAAA/\u002BzRwcrCMBAE4Dn/8L9DD551tulmn6dUq4VioUb06VUsORU8aRQx32VzSjYzi2bYt90WKZGkmU2T5HxOZ6lo6lTNPCjUUlFo0q2i4yHUI8hn75l/7kvE/lf1GLq2bsIynMOr37jn4b1/3L\u002BrYv9lWYkDxYkoireE\u002BOP9Xy87bNCjx4ACJwwY0WONf/x9erUsy7IsoVsAAAD//yO/fykACgAA", + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "30e01d78-cbcb-4f3b-8e75-1184959e4dc7" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-d9f4ace25d097942-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "1a14ff9f4e9dd5d0869848508e3e48cb", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "1ccef693-6e45-4adb-b9b1-80ca0975ec68", + "x-ms-ratelimit-remaining-calls-per-second": "166.616667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJhNjE4NDUwNi04N2JhLTRiMTEtOTBkNC0yYTVkMzNlMWY0MTAiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDAsImV4cCI6MTYzMTAzMzcwMCwiaWF0IjoxNjMxMDI5MjAwLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.UOLE9R-JfccDOT7JqPW6GbueILWDBwVJzX-WudSVKbaBzPSk_k4ioa2vDQi_rZeo5zh0hDXqOUmk560iWX5xFX0uhdoMandBXIOBoLB6epqNaElU01HmjzbJosF8Hwwr2rJ_BZzteIfkidQw93m_Zgc5wcYd5bGg8FSKyWAkHrI5Pb0Syry-RZQZS8p6i5W_D4CZ4G9wd93db-3vepw6PfcVztU_nIk0kM7DpipZ5ZuVHuQezCkV1_Djvy7HqzkFK8SPUh11S2L5zzWter1SfY1-yS64YjdqDzydbtetYMW13Md_mySrd0jNyAfzVArqb19-YliQk2TcHvvCfxVOwQ" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/1a18436f-9e29-451f-b15f-5a0abc536c53?_nouploadcache=false\u0026_state=JhzOSHZFKm01sUWZ1aKZFtmOt925qUUvhOmEvMAsw7F7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiMWExODQzNmYtOWUyOS00NTFmLWIxNWYtNWEwYWJjNTM2YzUzIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU1OjAwLjM2NjQzMTI5OVoifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "171", + "Content-Type": "application/octet-stream", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-c0c415646a393e4f-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "bee3fc52578e4b319313ce46e03ae273", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "H4sIAAAAAAAA/\u002BzRwcrCMBAE4Dn/8L9DD551tulmn6dUq4VioUb06VUsORU8aRQx32VzSjYzi2bYt90WKZGkmU2T5HxOZ6lo6lTNPCjUUlFo0q2i4yHUI8hn75l/7kvE/lf1GLq2bsIynMOr37jn4b1/3L\u002BrYv9lWYkDxYkoireE\u002BOP9Xy87bNCjx4ACJwwY0WONf/x9erUsy7IsoVsAAAD//yO/fykACgAA", + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "1a18436f-9e29-451f-b15f-5a0abc536c53", + "Location": "/v2/oci-artifact/blobs/uploads/1a18436f-9e29-451f-b15f-5a0abc536c53?_nouploadcache=false\u0026_state=wPASxFPuRbbMYGWZxjdPfyx6UCA4963kD66aikJk9mh7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiMWExODQzNmYtOWUyOS00NTFmLWIxNWYtNWEwYWJjNTM2YzUzIiwiT2Zmc2V0IjoxNzEsIlN0YXJ0ZWRBdCI6IjIwMjEtMDktMDdUMTU6NTU6MDBaIn0%3D", + "Range": "0-170", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "bee3fc52578e4b319313ce46e03ae273", + "X-Ms-Correlation-Request-Id": "9a715437-1d16-4a67-bc03-f03d9fbaab8a", + "X-Ms-Request-Id": "91c9bb7c-ded0-4aef-80de-cf515f867994" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/1a18436f-9e29-451f-b15f-5a0abc536c53?_nouploadcache=false\u0026_state=wPASxFPuRbbMYGWZxjdPfyx6UCA4963kD66aikJk9mh7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiMWExODQzNmYtOWUyOS00NTFmLWIxNWYtNWEwYWJjNTM2YzUzIiwiT2Zmc2V0IjoxNzEsIlN0YXJ0ZWRBdCI6IjIwMjEtMDktMDdUMTU6NTU6MDBaIn0%3D\u0026digest=sha256%3Ad25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-43fe5ff37e694946-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "9fae3b250a4882878f6c5d698e34588d", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "554cff00-8104-4256-869e-367ca4cac963" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-e3741cb2bbd02140-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "b071e05bb4c304502c0d37f50fe0bd55", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "f8caf5c4-238e-4f4d-888f-fe553be4bb1f", + "x-ms-ratelimit-remaining-calls-per-second": "166.6" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiIwZDYzYTcwMS0xMmMyLTQ0ZTYtYWQwOS1jNDc5MDU0MDQ5ZjYiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDAsImV4cCI6MTYzMTAzMzcwMCwiaWF0IjoxNjMxMDI5MjAwLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.Mxuh13TCl6pXxvaTl9yBCaTXcxGgTrkTblU19czK3VcMN9DK5AFMijTfrrB2Lo24uRnwYThHw8S8xPWzV1lw1ismTdZ3_eFHdSs0Zw6sjCPCE2sHBTGUA1WYRDwnW8mKb3zAfGzjKu-CXaHMuzzNmbIoPgZw9ua7WrYpeM_8d1HNyFS1QlIkCQozksnLnDVnHjWk0_0LompEGUAKPMS7o1ubWxsRy1y8oB6FqmJqUBuEdan_gLnWEwJAjUDbISU97_6sSG_-QemjEcEVX7mXC5wKvSNhoew4TQjjoWK-GPjSNzrif_B7rAldPj1cffBuGUYR-6lQapVuSj3a-vOHBQ" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/1a18436f-9e29-451f-b15f-5a0abc536c53?_nouploadcache=false\u0026_state=wPASxFPuRbbMYGWZxjdPfyx6UCA4963kD66aikJk9mh7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiMWExODQzNmYtOWUyOS00NTFmLWIxNWYtNWEwYWJjNTM2YzUzIiwiT2Zmc2V0IjoxNzEsIlN0YXJ0ZWRBdCI6IjIwMjEtMDktMDdUMTU6NTU6MDBaIn0%3D\u0026digest=sha256%3Ad25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-83f9df30c1237740a5c73f9888a6e23f-43fe5ff37e694946-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "9fae3b250a4882878f6c5d698e34588d", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Content-Digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/blobs/sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "9fae3b250a4882878f6c5d698e34588d", + "X-Ms-Correlation-Request-Id": "3394db8c-b080-40ba-9935-cd4ebc1c5891", + "X-Ms-Request-Id": "ca9ba1c9-8144-43af-bbdf-b1030c179258" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-f3f8e609a37d594a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "a52103cb438c952a78918b30f0674652", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "7959928d-f7a7-4e5c-b232-8071c9d2c5cb" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-825f1f1d2c8b5f4a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "aef5ba4097cc7107eaa9723ad29173ae", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "69dd27da-6d4f-4759-bd0a-72581293242d", + "x-ms-ratelimit-remaining-calls-per-second": "166.583333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJhYWI4NTllMS1jNjVhLTRhN2ItYjQwNS0wZDc1YWFjMGEyOTEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDAsImV4cCI6MTYzMTAzMzcwMCwiaWF0IjoxNjMxMDI5MjAwLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.siGclXOvdIs6NumMllkZV-cmr_ZCzNi90jP6SyRsYlC9ApO1oR6KTSVDgICteLNCtTfO0HrfN-F7Jk8iD9YLYvoZovXzIEoCgVGeEpt6HgNtM2xZvvBjVbgU2Hsn07oAoAt1IRnZFE9V3zQVMuBeDLyJJVrTkJt5u-tOK_9bZs36sUUgtKrfbwzOeWs3TpKALw4IYQRKCSMZA2qzb75Anq5Pre4I_n8yT09jby0zEqesdJ77sNcypkmmhZlVtyL1XKzb4tDN3cxAB6y4SXCijVoEjXUyffGHXsEnHdzIAJRuFKc3Uy1w-vvi2yNcRqYlSCB6kWZC4UF_VaN8KACmEQ" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-f3f8e609a37d594a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "a52103cb438c952a78918b30f0674652", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "7a06c170-6b89-42f7-9e11-03d743b74533", + "Location": "/v2/oci-artifact/blobs/uploads/7a06c170-6b89-42f7-9e11-03d743b74533?_nouploadcache=false\u0026_state=7sQhSw3Wu0M5ID3S5nQFZUML3nUSb64jDTyYPxInW7p7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2EwNmMxNzAtNmI4OS00MmY3LTllMTEtMDNkNzQzYjc0NTMzIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU1OjAwLjkzMTYzMjgzNFoifQ%3D%3D", + "Range": "0-0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "a52103cb438c952a78918b30f0674652", + "X-Ms-Correlation-Request-Id": "138803a9-1ab2-459f-bfbd-915c12f71c58", + "X-Ms-Request-Id": "1519867a-a70b-4e2f-b6e0-1d505c5e780d" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7a06c170-6b89-42f7-9e11-03d743b74533?_nouploadcache=false\u0026_state=7sQhSw3Wu0M5ID3S5nQFZUML3nUSb64jDTyYPxInW7p7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2EwNmMxNzAtNmI4OS00MmY3LTllMTEtMDNkNzQzYjc0NTMzIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU1OjAwLjkzMTYzMjgzNFoifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-024adcccb62a3c4b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "8b9d08afb2131801b5db3832292013c4", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:00 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "524c2ed8-3942-4e65-abd2-6827e1915351" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-b0a2b9801a91d947-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "54b5e5c60eeb3488fcafbbe2d0efc3e6", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "05e7d456-c49f-49e4-aebd-e552f30496c8", + "x-ms-ratelimit-remaining-calls-per-second": "166.566667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI3YjEyZTU1YS0zYjRiLTQ4YjgtYWNhMy0xNjhkNjA0MjBkNWUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDEsImV4cCI6MTYzMTAzMzcwMSwiaWF0IjoxNjMxMDI5MjAxLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.Q_n18V_zzxdjR0V8e-t8d1ayBSe1EEefnAmx1HFiuFVbc_Y2Ig3B42dZ9ZBK-Ss9Zf-VHQUjQHF1Lk2iuiRCBVASW3X0CJ85Lrj6HfGqhzIMrI3x9T47ESg191ui8vqsLtSTLmYe4TCcvj7cPsf0zxtOZLoHlgx69Uzdl5F6k4fnvoxHMGdZCKJDmQchyNWu9Pj48f0iYN_Vwc9axlB4Gp2Ue1VHYFhLya1ljEysmxLrKDFAkkXL9y3Cc722g2lTc5Dk175vEvp5FexOZDqEXz303f5qqEAC16l0PTLc7vaEQNb_L6ti-zR9u-szvGS4RJl7WLrjDisX--ZH1zsGHg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7a06c170-6b89-42f7-9e11-03d743b74533?_nouploadcache=false\u0026_state=7sQhSw3Wu0M5ID3S5nQFZUML3nUSb64jDTyYPxInW7p7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2EwNmMxNzAtNmI4OS00MmY3LTllMTEtMDNkNzQzYjc0NTMzIiwiT2Zmc2V0IjowLCJTdGFydGVkQXQiOiIyMDIxLTA5LTA3VDE1OjU1OjAwLjkzMTYzMjgzNFoifQ%3D%3D", + "RequestMethod": "PATCH", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "28", + "Content-Type": "application/octet-stream", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-024adcccb62a3c4b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "8b9d08afb2131801b5db3832292013c4", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA==", + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Docker-Upload-Uuid": "7a06c170-6b89-42f7-9e11-03d743b74533", + "Location": "/v2/oci-artifact/blobs/uploads/7a06c170-6b89-42f7-9e11-03d743b74533?_nouploadcache=false\u0026_state=Lrmuuj28dVIfd7xfQ94oglFC3-hyxm41Ye3ybK--vUZ7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2EwNmMxNzAtNmI4OS00MmY3LTllMTEtMDNkNzQzYjc0NTMzIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wN1QxNTo1NTowMFoifQ%3D%3D", + "Range": "0-27", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "8b9d08afb2131801b5db3832292013c4", + "X-Ms-Correlation-Request-Id": "b1adeb8c-e1c1-4306-a66a-d2e9b064a956", + "X-Ms-Request-Id": "50c09253-6770-45a0-a9fc-0c292ac9238a" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7a06c170-6b89-42f7-9e11-03d743b74533?_nouploadcache=false\u0026_state=Lrmuuj28dVIfd7xfQ94oglFC3-hyxm41Ye3ybK--vUZ7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2EwNmMxNzAtNmI4OS00MmY3LTllMTEtMDNkNzQzYjc0NTMzIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wN1QxNTo1NTowMFoifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-688b711ccdd0954a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "e880dc1ebbca8d3fb9ddf9f05ed548ca", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:push,pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "5c876460-56f2-487f-9211-e6fd0cd426cb" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-e3b8a3be6f32f948-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "ed74ad951edca1c37f688e63f71e47c5", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apush%2cpull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "1f8ba0e1-f1d7-4035-ae8e-bb7dff3e27b5", + "x-ms-ratelimit-remaining-calls-per-second": "166.55" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI5NjAxNWMwZi1kYTg2LTQyNjMtYWY1Mi1hZjQwMDlhNjkxOTMiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDEsImV4cCI6MTYzMTAzMzcwMSwiaWF0IjoxNjMxMDI5MjAxLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1c2giLCJwdWxsIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.BK7MBEgI9xiT_wpuYEbc-IyqTD1YEM2i3QLFu9NZV--7kLKc2pK3jfPg90QcocpAV7xU8gkb2lwWCjBJIKJRmr0tIbkZwdBjICd2gQo7eYxCePeIkOtLgqXg-pwxQsVxXWvSyVZcrQg3X9ITjvOc010n4V5aqo5BaMwmCDJGJ2cyXNDmDxlHO7cNZUyO9sO-HcJQJRT316x-Br0CJEMqGSFj3jwVODw-0wjJJQHZZRXfefEp12st3ZW0xpu0rgGGB4D8qEjmRgP8IgNuve5gGdXl6JupNCbXsNuXY5uczMfLBVuCe8U-8uW20ld5CQeuWrxuUqwkLs2GLJH_mNWcNA" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/blobs/uploads/7a06c170-6b89-42f7-9e11-03d743b74533?_nouploadcache=false\u0026_state=Lrmuuj28dVIfd7xfQ94oglFC3-hyxm41Ye3ybK--vUZ7Ik5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJVVUlEIjoiN2EwNmMxNzAtNmI4OS00MmY3LTllMTEtMDNkNzQzYjc0NTMzIiwiT2Zmc2V0IjoyOCwiU3RhcnRlZEF0IjoiMjAyMS0wOS0wN1QxNTo1NTowMFoifQ%3D%3D\u0026digest=sha256%3A654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-4f22c43a6f3dc04a9066fad18e1dd977-688b711ccdd0954a-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "e880dc1ebbca8d3fb9ddf9f05ed548ca", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Docker-Content-Digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/blobs/sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "e880dc1ebbca8d3fb9ddf9f05ed548ca", + "X-Ms-Correlation-Request-Id": "d1173982-3262-4d01-b2b6-958c8badf708", + "X-Ms-Request-Id": "906b6bf1-e97c-4eee-95c5-0ebe23e44aae" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/v1", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-e113c786d725c74dbf57884954c1e56b-0c600e64e21ac04b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "4c1352182b9f0bfaa5279b0d1598d627", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "266", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull,push\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "9699a221-98df-4763-830b-1393b220e2e5" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022},{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022push\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "137", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-e113c786d725c74dbf57884954c1e56b-efb5f0fdfb862948-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "224df067d57bff0919df68612ddc969b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull%2cpush\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "701c90aa-114b-4644-ad1a-fabf6509209f", + "x-ms-ratelimit-remaining-calls-per-second": "166.533333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI4NDIxOGY3ZC1mNWYyLTRiMjctOWRlMC05NWRmYmM4ODBmNTkiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDEsImV4cCI6MTYzMTAzMzcwMSwiaWF0IjoxNjMxMDI5MjAxLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiLCJwdXNoIl19XSwicm9sZXMiOltdLCJncmFudF90eXBlIjoiYWNjZXNzX3Rva2VuIiwiYXBwaWQiOiIwMmQ4ZWNhZS00YjllLTQ1ZTQtODE4MC1hOTA5YzVlOWE2YTMifQ.mVa9-r6BPLp05qBVzhL52rsbRPZMBLWa8U3sp4vvPKM4NQhinATGYXRQbd3OnWo3dA6zm3E2KtcZI-lbHke__SwdWNVeJyoIqNfAPzU3OnIX7q5BhguYU4wvWRYwwpYaXYodddLGcXBgYq4dfknAfVGuBTPGaUNzP72PlJQxwmarR0IbLqISmWIHFZ5ULJqp6tlB68MKVA5F42eAic4QhJCzXaq-s2vitukI6yi_wWxvwzd7X30G-T0V9keb-DRHWOVNWEvFswoxYqZGKOydrxibT0M7QCm_UasI8ts34VJPjUJy8xV1HQlka2om8K-hG-hNoRKJHzs_rgfcDGiGCg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/v1", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "traceparent": "00-e113c786d725c74dbf57884954c1e56b-0c600e64e21ac04b-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "4c1352182b9f0bfaa5279b0d1598d627", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + }, + "StatusCode": 201, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "Location": "/v2/oci-artifact/manifests/sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "4c1352182b9f0bfaa5279b0d1598d627", + "X-Ms-Correlation-Request-Id": "f76c3e22-61f8-44be-b7ea-87d5fb62a8a2", + "X-Ms-Request-Id": "cf3993fb-cd1b-4460-8de8-c159622cbc6e" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "traceparent": "00-e9237f84cf8f524783cc44a7f0c992c1-c2bf0a359799044d-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "0cd73495fbc1692ab36947b583b58be6", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "206", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:pull\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "04e00010-5ee3-4b47-8d8c-efbbd220e641" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022pull\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "130", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-e9237f84cf8f524783cc44a7f0c992c1-785a19e12889e346-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "07fc669224d04349481333c0c399ddc9", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3apull\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:01 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "96f2d338-18fb-4340-a1c6-fbcd8babafec", + "x-ms-ratelimit-remaining-calls-per-second": "166.516667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJlOGY0NmY1YS01NWE5LTRjZmEtOTE3NC0zNWUzZGE1MjUzMDEiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDEsImV4cCI6MTYzMTAzMzcwMSwiaWF0IjoxNjMxMDI5MjAxLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbInB1bGwiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.Blk8TkpPw3rAVq1IjoiVO0pWzpfolfAqQrm8CewcbTYxWFyaXJVrwV1n_LMozzuaDEJTEgAX8h9qj_6ma7soXerQh9H9zxkfPX0P7CN1FPmWIyuSPSVZb4S1E5iaMbIRBV4WGXc0TzrqG8wJU6ulJEqpKkj0baoaIM7TxTeGXJTiwJjSUPzLVOs_iiA50w6GdR5XjeF3w5-utvor9FuLLiBUtFEN1qDlw1AtI8QTzctZuyiEfxG_deiJ8-PiNrfSXQkvQgk3Fxruxz37TJ9pR4wzIWe8ki58VU_lqKAu_e-ppOLGVZEulLspVN2X-m-8ex0LrJMBCOkUeKM7t8Mv0A" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "accept": [ + "application/vnd.oci.image.manifest.v1\u002Bjson", + "application/json" + ], + "Authorization": "Sanitized", + "traceparent": "00-e9237f84cf8f524783cc44a7f0c992c1-c2bf0a359799044d-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "0cd73495fbc1692ab36947b583b58be6", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "399", + "Content-Type": "application/vnd.oci.image.manifest.v1\u002Bjson", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Docker-Content-Digest": "sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "Docker-Distribution-Api-Version": "registry/2.0", + "ETag": "\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "0cd73495fbc1692ab36947b583b58be6", + "X-Ms-Correlation-Request-Id": "da91d569-edbd-4ad2-82bb-5415cb7f57ef", + "X-Ms-Request-Id": "b5e6cea0-7a15-460c-821b-eaadfc21e97c" + }, + "ResponseBody": { + "config": { + "mediaType": "application/vnd.acme.rocket.config", + "size": 171, + "digest": "sha256:d25b42d3dbad5361ed2d909624d899e7254a822c9a632b582ebd3a44f9b0dbc8" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar", + "size": 28, + "digest": "sha256:654b93f61054e4ce90ed203bb8d556a6200d5f906cf3eca0620738d6dc18cbed", + "annotations": { + "org.opencontainers.image.ref.name": "artifact.txt" + } + } + ], + "schemaVersion": 2 + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "e177ff90c9c06b66c5e36f128d547c63", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "215", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:metadata_read\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "7303b564-469e-43c4-be70-fa82bf28b48e" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022metadata_read\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/exchange", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "89", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "c6cf81538fdf70caea94c3aec86aa61a", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "grant_type=access_token\u0026service=annelocontainerregistry.azurecr.io\u0026access_token=Sanitized", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "1e372298-2693-4ae5-913d-14fe98e9c5fb", + "x-ms-ratelimit-remaining-calls-per-second": "166.5" + }, + "ResponseBody": { + "refresh_token": "Sanitized.eyJleHAiOjI1NzcxMTAwOTd9.Sanitized" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "139", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "84247e8baa3dc826009041edb536b5f4", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3ametadata_read\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "d0f6d14c-2810-46d5-9f7e-082a30b66f7f", + "x-ms-ratelimit-remaining-calls-per-second": "166.483333" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI1NTgzNGNhNS02MmE0LTQwODMtYTk4Ni05ZDYyMDliNGU2YzgiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDIsImV4cCI6MTYzMTAzMzcwMiwiaWF0IjoxNjMxMDI5MjAyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjIuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbIm1ldGFkYXRhX3JlYWQiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.r5YCFyX2dVz1pjUaN30x_XR_MEbFy-dp6x8tWiFLaHOXeDxHGPYCtENeAAOxS0LvKOESttIgJEPNuBmn_1ods5_vWxnpdctUcAdYCPkpRJ8kntLxmmpjn1-IBLzEWykml3p90UNA_1fJ3Bsi3UmwhYThSjSm_Fem7YE-oh6PRz9r-iz_XSEMmw6MvUxXIN1ERDwgXmWBGV6EfkCfrgx4Et4i9jvsZAiWUEA9tT0vsqDlB5TZNi4zM42PsDUbJkZ02CD1t4TH7nNb1kvXNaLb4GNkhljtY5OwVRvnksEuRI3cSj81VVgQqoOTbEv8ZHFS48LoHcYNey8o0ypYXDy5Lg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "e177ff90c9c06b66c5e36f128d547c63", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "395", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "54666bf5-8e4e-46a9-a57b-4bf8e96495bf" + }, + "ResponseBody": [ + "{\u0022registry\u0022:\u0022annelocontainerregistry.azurecr.io\u0022,\u0022imageName\u0022:\u0022oci-artifact\u0022,\u0022tags\u0022:[{\u0022name\u0022:\u0022v1\u0022,\u0022digest\u0022:\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022,\u0022createdTime\u0022:\u00222021-09-07T15:55:01.8601288Z\u0022,\u0022lastUpdateTime\u0022:\u00222021-09-07T15:55:01.8601288Z\u0022,\u0022signed\u0022:false,\u0022changeableAttributes\u0022:{\u0022deleteEnabled\u0022:true,\u0022writeEnabled\u0022:true,\u0022readEnabled\u0022:true,\u0022listEnabled\u0022:true}}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "416cd09716ca01e93507f62c05b8a35b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "215", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:metadata_read\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "a126af5d-6f3a-4608-a68d-43324caf9bf2" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022metadata_read\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "139", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "0f87553df82fa9255b06c64f4dddbbb4", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3ametadata_read\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "7e42cdcb-5136-41fd-a1e1-b6aa643b3e75", + "x-ms-ratelimit-remaining-calls-per-second": "166.466667" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiI5ZjEwYjE0Ny03MDYzLTQ5YmEtOTViYS01YTBhY2MzYzY3ZjUiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDIsImV4cCI6MTYzMTAzMzcwMiwiaWF0IjoxNjMxMDI5MjAyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjIuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbIm1ldGFkYXRhX3JlYWQiXX1dLCJyb2xlcyI6W10sImdyYW50X3R5cGUiOiJhY2Nlc3NfdG9rZW4iLCJhcHBpZCI6IjAyZDhlY2FlLTRiOWUtNDVlNC04MTgwLWE5MDljNWU5YTZhMyJ9.RDdkE5LhDRafYmLNnE0LplF-oUy_hcX_k9S97yi2Ei0rJfup5gBDwdzWPTe8gWML8-Yx2hcbW9TfBDJ9zCcmqCBgcJayIhB2rS83UIuGA22uya7oD1DbBmFLKGGpTmOVBtEtauI5n6nWYrnHWTn2PNSgQlitqqeN_M4Q-OyQk3hdyt80f98izKF81tplf638q1m0cuVVCpS7W8LtKJqlfvrRH66P68BkeMUfEUONxRe4v_4rv-wHRtxMQ0EFA3a1-fMp8QTYbMQXiqcn3MuWUjGiNEtMk3IyZ_V7G_jUuylKjDNBwc84AZAUrSWYV652sLxtArNYamQdkbA8vmLumg" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/acr/v1/oci-artifact/_tags?digest=sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "416cd09716ca01e93507f62c05b8a35b", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "395", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "0c91fcf9-e7f6-4dc4-9583-649f8c78ad55" + }, + "ResponseBody": [ + "{\u0022registry\u0022:\u0022annelocontainerregistry.azurecr.io\u0022,\u0022imageName\u0022:\u0022oci-artifact\u0022,\u0022tags\u0022:[{\u0022name\u0022:\u0022v1\u0022,\u0022digest\u0022:\u0022sha256:e2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13\u0022,\u0022createdTime\u0022:\u00222021-09-07T15:55:01.8601288Z\u0022,\u0022lastUpdateTime\u0022:\u00222021-09-07T15:55:01.8601288Z\u0022,\u0022signed\u0022:false,\u0022changeableAttributes\u0022:{\u0022deleteEnabled\u0022:true,\u0022writeEnabled\u0022:true,\u0022readEnabled\u0022:true,\u0022listEnabled\u0022:true}}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "traceparent": "00-619b9044dd584441b0395f16db576b34-5683530116cd0b42-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "f716cfde64fd755094224e36b3f9c248", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 401, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "208", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "WWW-Authenticate": "Bearer realm=\u0022https://annelocontainerregistry.azurecr.io/oauth2/token\u0022,service=\u0022annelocontainerregistry.azurecr.io\u0022,scope=\u0022repository:oci-artifact:delete\u0022", + "X-Content-Type-Options": "nosniff", + "X-Ms-Correlation-Request-Id": "e8ee3cda-9780-4693-8c97-e02799440951" + }, + "ResponseBody": [ + "{\u0022errors\u0022:[{\u0022code\u0022:\u0022UNAUTHORIZED\u0022,\u0022message\u0022:\u0022authentication required, visit https://aka.ms/acr/authorization for more information.\u0022,\u0022detail\u0022:[{\u0022Type\u0022:\u0022repository\u0022,\u0022Name\u0022:\u0022oci-artifact\u0022,\u0022Action\u0022:\u0022delete\u0022}]}]}\n" + ] + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/oauth2/token", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json", + "Content-Length": "132", + "Content-Type": "application/x-www-form-urlencoded", + "traceparent": "00-619b9044dd584441b0395f16db576b34-530a60f5f02f4e40-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "60b0e6eda6af9ec4abc2e5c34f9ab358", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": "service=annelocontainerregistry.azurecr.io\u0026scope=repository%3aoci-artifact%3adelete\u0026refresh_token=Sanitized\u0026grant_type=refresh_token", + "StatusCode": 200, + "ResponseHeaders": { + "Connection": "keep-alive", + "Content-Type": "application/json; charset=utf-8", + "Date": "Tue, 07 Sep 2021 15:55:02 GMT", + "Server": "openresty", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Transfer-Encoding": "chunked", + "X-Ms-Correlation-Request-Id": "41b29200-d324-4c44-afe1-074a9fbb5ac6", + "x-ms-ratelimit-remaining-calls-per-second": "166.45" + }, + "ResponseBody": { + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVERFE6SFVYWDpMQzQ3OlpCUk06T0k0WTpPUjY2OkFVWko6Qlk3RTo3N0pWOjU0UlI6UU1BSzpOTDI1In0.eyJqdGkiOiJlMDAxOTJjNS05M2ZkLTQ0ZDAtODg1OC03OThkMDlmZjgwZDMiLCJzdWIiOiIxZjc5ZjlkMC1lZWI0LTQxNDQtOGI3YS05MDNlYjNjNWU4MjQiLCJuYmYiOjE2MzEwMjkyMDIsImV4cCI6MTYzMTAzMzcwMiwiaWF0IjoxNjMxMDI5MjAyLCJpc3MiOiJBenVyZSBDb250YWluZXIgUmVnaXN0cnkiLCJhdWQiOiJhbm5lbG9jb250YWluZXJyZWdpc3RyeS5henVyZWNyLmlvIiwidmVyc2lvbiI6IjEuMCIsInJpZCI6ImNmYjZiMTdlNzIwMzQ2NTM4NmU5NDU3YmNhYjhmOGU3IiwiYWNjZXNzIjpbeyJUeXBlIjoicmVwb3NpdG9yeSIsIk5hbWUiOiJvY2ktYXJ0aWZhY3QiLCJBY3Rpb25zIjpbImRlbGV0ZSJdfV0sInJvbGVzIjpbXSwiZ3JhbnRfdHlwZSI6ImFjY2Vzc190b2tlbiIsImFwcGlkIjoiMDJkOGVjYWUtNGI5ZS00NWU0LTgxODAtYTkwOWM1ZTlhNmEzIn0.gTkB0wo_mOLGqvuhW30ExuVul6ddcnOEBKH5RZNr6a_rW-pTlyKnGK0W3znt7r8mEQV8w4obqEHoNIdXwyi_RN1EVDZVcqZE7uNNqxNiri0ATotAXqkx75aMRkWiLQVOtq1uZKDm-Z8hGZGvdIeB_nGKadVcJn0NauV5QHNwFB_PH_FUOIVL12FSo6PBKA6o3s2a-KRjgmciFJMJcL1U7aR3g-QIy5PgMJGM4hnpKy47x9tsjgewpK7GWbcaHZrRwqV-ah53thLkxpLaWuV-kwd0lQOoy0fWs-QaJy-OWr1QFaL1yED-9f_Ip3LdlreKNMOXWbOoiZ4vsHa8BonPFw" + } + }, + { + "RequestUri": "https://annelocontainerregistry.azurecr.io/v2/oci-artifact/manifests/sha256%3Ae2fffb656966c98a0b7712672e996a58327eff7705fb3d8d9581fc16ef412d13", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Authorization": "Sanitized", + "traceparent": "00-619b9044dd584441b0395f16db576b34-5683530116cd0b42-00", + "User-Agent": "azsdk-net-Containers.ContainerRegistry/1.0.0-alpha.20210907.1 (.NET Framework 4.8.4300.0; Microsoft Windows 10.0.19042 )", + "x-ms-client-request-id": "f716cfde64fd755094224e36b3f9c248", + "x-ms-return-client-request-id": "true" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Access-Control-Expose-Headers": [ + "Docker-Content-Digest", + "WWW-Authenticate", + "Link", + "X-Ms-Correlation-Request-Id" + ], + "Connection": "keep-alive", + "Content-Length": "0", + "Date": "Tue, 07 Sep 2021 15:55:03 GMT", + "Docker-Distribution-Api-Version": "registry/2.0", + "Server": "openresty", + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains", + "max-age=31536000; includeSubDomains" + ], + "X-Content-Type-Options": "nosniff", + "X-Ms-Client-Request-Id": "f716cfde64fd755094224e36b3f9c248", + "X-Ms-Correlation-Request-Id": "affee0b4-3d78-4b29-a3f3-c10a2b0ea9c2", + "X-Ms-Ratelimit-Remaining-Calls-Per-Second": "8.000000", + "X-Ms-Request-Id": "60e8541f-f5f7-4479-aea8-5a0640089fd1" + }, + "ResponseBody": [] + } + ], + "Variables": { + "CONTAINERREGISTRY_ENDPOINT": "https://annelocontainerregistry.azurecr.io", + "RandomSeed": "1833723727" + } +} \ No newline at end of file