diff --git a/tools/code/common/ApiOperationPolicy.cs b/tools/code/common/ApiOperationPolicy.cs index b5c33a5f..d83e7175 100644 --- a/tools/code/common/ApiOperationPolicy.cs +++ b/tools/code/common/ApiOperationPolicy.cs @@ -107,18 +107,18 @@ public static IAsyncEnumerable ListNames(this ApiOperati .Select(jsonObject => jsonObject.GetStringProperty("name")) .Select(ApiOperationPolicyName.From); - public static IAsyncEnumerable<(ApiOperationPolicyName Name, ApiOperationPolicyDto Dto)> List(this ApiOperationPoliciesUri apioperationPoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(ApiOperationPolicyName Name, ApiOperationPolicyDto Dto)> List(this ApiOperationPoliciesUri apioperationPoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => apioperationPoliciesUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new ApiOperationPolicyUri { Parent = apioperationPoliciesUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this ApiOperationPolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this ApiOperationPolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -129,7 +129,8 @@ public static async ValueTask Delete(this ApiOperationPolicyUri uri, HttpPipelin public static async ValueTask PutDto(this ApiOperationPolicyUri uri, ApiOperationPolicyDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static async ValueTask WritePolicy(this ApiOperationPolicyFile file, string policy, CancellationToken cancellationToken) diff --git a/tools/code/common/ApiPolicy.cs b/tools/code/common/ApiPolicy.cs index b8a69ef5..2a73bd91 100644 --- a/tools/code/common/ApiPolicy.cs +++ b/tools/code/common/ApiPolicy.cs @@ -106,18 +106,18 @@ public static IAsyncEnumerable ListNames(this ApiPoliciesUri uri, .Select(jsonObject => jsonObject.GetStringProperty("name")) .Select(ApiPolicyName.From); - public static IAsyncEnumerable<(ApiPolicyName Name, ApiPolicyDto Dto)> List(this ApiPoliciesUri apiPoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(ApiPolicyName Name, ApiPolicyDto Dto)> List(this ApiPoliciesUri apiPoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => apiPoliciesUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new ApiPolicyUri { Parent = apiPoliciesUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this ApiPolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this ApiPolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -135,7 +135,8 @@ public static async ValueTask Delete(this ApiPolicyUri uri, HttpPipeline pipelin public static async ValueTask PutDto(this ApiPolicyUri uri, ApiPolicyDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static IEnumerable ListPolicyFiles(ApiName apiName, ManagementServiceDirectory serviceDirectory) diff --git a/tools/code/common/PolicyContentFormat.cs b/tools/code/common/PolicyContentFormat.cs new file mode 100644 index 00000000..933c3e15 --- /dev/null +++ b/tools/code/common/PolicyContentFormat.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace common +{ + public abstract record PolicyContentFormat + { + private static readonly Lazy instance = new Lazy(() => new RawXml()); + + public static PolicyContentFormat Default => instance.Value; + + public sealed record RawXml : PolicyContentFormat; + public sealed record Xml : PolicyContentFormat; + public sealed record RawXmlLink : PolicyContentFormat; + public sealed record XmlLink : PolicyContentFormat; + + + public string GetPolicyContentFormat + { + get + { + return this switch + { + PolicyContentFormat.RawXml => "rawxml", + PolicyContentFormat.Xml => "xml", + PolicyContentFormat.RawXmlLink => "rawxml-link", + PolicyContentFormat.XmlLink => "xml-link", + _ => throw new NotSupportedException() + }; + } + } + } +} diff --git a/tools/code/common/PolicyContentFormatModule.cs b/tools/code/common/PolicyContentFormatModule.cs new file mode 100644 index 00000000..63395abb --- /dev/null +++ b/tools/code/common/PolicyContentFormatModule.cs @@ -0,0 +1,64 @@ +using common; +using LanguageExt; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; +using System; +using System.Globalization; +using System.Text.Json.Serialization; +using System.Text.Json; + +namespace common; + +public static class PolicyContentFormatModule +{ + public static void ConfigureDefaultPolicyContentFormat(IHostApplicationBuilder builder) + { + builder.Services.TryAddSingleton(GetDefaultPolicyContentFormat); + } + + private static PolicyContentFormat GetDefaultPolicyContentFormat(IServiceProvider provider) + { + var configuration = provider.GetRequiredService(); + + var formatOption = configuration.TryGetValue("POLICY_CONTENT_FORMAT") + | configuration.TryGetValue("policyContentFormat"); + + var specification = formatOption.Map(format => format switch + { + var value when "RAWXML".Equals(value, StringComparison.OrdinalIgnoreCase) => new PolicyContentFormat.RawXml() as PolicyContentFormat, + var value when "XML".Equals(value, StringComparison.OrdinalIgnoreCase) => new PolicyContentFormat.Xml(), + var value => throw new NotSupportedException($"Policy content format '{value}' defined in configuration is not supported.") + }).IfNone(() => new PolicyContentFormat.RawXml()); + + return specification; + } +} + +//public class PolicyContentFormatJsonConverter : JsonConverter +//{ +// public override PolicyContentFormat Read( +// ref Utf8JsonReader reader, +// Type typeToConvert, +// JsonSerializerOptions options) +// { +// return reader.GetString() switch +// { +// "rawxml" => new PolicyContentFormat.RawXml(), +// "xml" => new PolicyContentFormat.Xml(), +// "rawxml-link" => new PolicyContentFormat.RawXmlLink(), +// "xml-link" => new PolicyContentFormat.XmlLink(), +// _ => throw new NotSupportedException() +// }; +// } + +// public override void Write( +// Utf8JsonWriter writer, +// PolicyContentFormat value, +// JsonSerializerOptions options) +// { +// // switch on PolicyContentFormat to determine the string to render +// writer.WriteStringValue(value.GetPolicyContentFormat); +// } +//} diff --git a/tools/code/common/PolicyFragment.cs b/tools/code/common/PolicyFragment.cs index d96ffb0c..4dd8ed3a 100644 --- a/tools/code/common/PolicyFragment.cs +++ b/tools/code/common/PolicyFragment.cs @@ -175,18 +175,18 @@ public static IAsyncEnumerable ListNames(this PolicyFragment .Select(jsonObject => jsonObject.GetStringProperty("name")) .Select(PolicyFragmentName.From); - public static IAsyncEnumerable<(PolicyFragmentName Name, PolicyFragmentDto Dto)> List(this PolicyFragmentsUri policyFragmentsUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(PolicyFragmentName Name, PolicyFragmentDto Dto)> List(this PolicyFragmentsUri policyFragmentsUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => policyFragmentsUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new PolicyFragmentUri { Parent = policyFragmentsUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this PolicyFragmentUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this PolicyFragmentUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -197,7 +197,8 @@ public static async ValueTask Delete(this PolicyFragmentUri uri, HttpPipeline pi public static async ValueTask PutDto(this PolicyFragmentUri uri, PolicyFragmentDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static IEnumerable ListDirectories(ManagementServiceDirectory serviceDirectory) diff --git a/tools/code/common/ProductPolicy.cs b/tools/code/common/ProductPolicy.cs index a648970a..124ab628 100644 --- a/tools/code/common/ProductPolicy.cs +++ b/tools/code/common/ProductPolicy.cs @@ -108,18 +108,18 @@ public static IAsyncEnumerable ListNames(this ProductPolicies .Select(jsonObject => jsonObject.GetStringProperty("name")) .Select(ProductPolicyName.From); - public static IAsyncEnumerable<(ProductPolicyName Name, ProductPolicyDto Dto)> List(this ProductPoliciesUri productPoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(ProductPolicyName Name, ProductPolicyDto Dto)> List(this ProductPoliciesUri productPoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => productPoliciesUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new ProductPolicyUri { Parent = productPoliciesUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this ProductPolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this ProductPolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -130,7 +130,8 @@ public static async ValueTask Delete(this ProductPolicyUri uri, HttpPipeline pip public static async ValueTask PutDto(this ProductPolicyUri uri, ProductPolicyDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static IEnumerable ListPolicyFiles(ProductName productName, ManagementServiceDirectory serviceDirectory) diff --git a/tools/code/common/ServicePolicy.cs b/tools/code/common/ServicePolicy.cs index 3204fbbc..d7a9ab9f 100644 --- a/tools/code/common/ServicePolicy.cs +++ b/tools/code/common/ServicePolicy.cs @@ -3,6 +3,7 @@ using LanguageExt; using System; using System.Collections.Generic; +using System.ComponentModel; using System.IO; using System.Linq; using System.Net; @@ -87,7 +88,7 @@ public sealed record ServicePolicyContract [JsonPropertyName("format")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string? Format { get; init; } + public string? Format { get ; init ; } [JsonPropertyName("value")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] @@ -108,18 +109,18 @@ public static IAsyncEnumerable ListNames(this ServicePolicies .Select(jsonObject => jsonObject.GetStringProperty("name")) .Select(ServicePolicyName.From); - public static IAsyncEnumerable<(ServicePolicyName Name, ServicePolicyDto Dto)> List(this ServicePoliciesUri servicePoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(ServicePolicyName Name, ServicePolicyDto Dto)> List(this ServicePoliciesUri servicePoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => servicePoliciesUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new ServicePolicyUri { Parent = servicePoliciesUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this ServicePolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this ServicePolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -130,7 +131,8 @@ public static async ValueTask Delete(this ServicePolicyUri uri, HttpPipeline pip public static async ValueTask PutDto(this ServicePolicyUri uri, ServicePolicyDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static IEnumerable ListPolicyFiles(ManagementServiceDirectory serviceDirectory) => diff --git a/tools/code/common/WorkspacePolicy.cs b/tools/code/common/WorkspacePolicy.cs index 87c55875..8629b74a 100644 --- a/tools/code/common/WorkspacePolicy.cs +++ b/tools/code/common/WorkspacePolicy.cs @@ -1,6 +1,7 @@ using Azure.Core.Pipeline; using Flurl; using LanguageExt; +using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.IO; @@ -117,18 +118,18 @@ public static async IAsyncEnumerable ListNames(this Workspa } } - public static IAsyncEnumerable<(WorkspacePolicyName Name, WorkspacePolicyDto Dto)> List(this WorkspacePoliciesUri workspacePoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(WorkspacePolicyName Name, WorkspacePolicyDto Dto)> List(this WorkspacePoliciesUri workspacePoliciesUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => workspacePoliciesUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new WorkspacePolicyUri { Parent = workspacePoliciesUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this WorkspacePolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this WorkspacePolicyUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -139,7 +140,8 @@ public static async ValueTask Delete(this WorkspacePolicyUri uri, HttpPipeline p public static async ValueTask PutDto(this WorkspacePolicyUri uri, WorkspacePolicyDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static IEnumerable ListPolicyFiles(WorkspaceName workspaceName, ManagementServiceDirectory serviceDirectory) diff --git a/tools/code/common/WorkspacePolicyFragment.cs b/tools/code/common/WorkspacePolicyFragment.cs index a8a73c4c..bf9ce942 100644 --- a/tools/code/common/WorkspacePolicyFragment.cs +++ b/tools/code/common/WorkspacePolicyFragment.cs @@ -1,6 +1,7 @@ using Azure.Core.Pipeline; using Flurl; using LanguageExt; +using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -164,18 +165,18 @@ public static IAsyncEnumerable ListNames(this WorkspacePolic .Select(jsonObject => jsonObject.GetStringProperty("name")) .Select(PolicyFragmentName.From); - public static IAsyncEnumerable<(PolicyFragmentName Name, WorkspacePolicyFragmentDto Dto)> List(this WorkspacePolicyFragmentsUri workspacePolicyFragmentsUri, HttpPipeline pipeline, CancellationToken cancellationToken) => + public static IAsyncEnumerable<(PolicyFragmentName Name, WorkspacePolicyFragmentDto Dto)> List(this WorkspacePolicyFragmentsUri workspacePolicyFragmentsUri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) => workspacePolicyFragmentsUri.ListNames(pipeline, cancellationToken) .SelectAwait(async name => { var uri = new WorkspacePolicyFragmentUri { Parent = workspacePolicyFragmentsUri, Name = name }; - var dto = await uri.GetDto(pipeline, cancellationToken); + var dto = await uri.GetDto(pipeline, cancellationToken, policyContentFormat); return (name, dto); }); - public static async ValueTask GetDto(this WorkspacePolicyFragmentUri uri, HttpPipeline pipeline, CancellationToken cancellationToken) + public static async ValueTask GetDto(this WorkspacePolicyFragmentUri uri, HttpPipeline pipeline, CancellationToken cancellationToken, PolicyContentFormat policyContentFormat) { - var contentUri = uri.ToUri().AppendQueryParam("format", "rawxml").ToUri(); + var contentUri = uri.ToUri().AppendQueryParam("format", policyContentFormat.GetPolicyContentFormat).ToUri(); var content = await pipeline.GetContent(contentUri, cancellationToken); return content.ToObjectFromJson(); } @@ -186,7 +187,8 @@ public static async ValueTask Delete(this WorkspacePolicyFragmentUri uri, HttpPi public static async ValueTask PutDto(this WorkspacePolicyFragmentUri uri, WorkspacePolicyFragmentDto dto, HttpPipeline pipeline, CancellationToken cancellationToken) { var content = BinaryData.FromObjectAsJson(dto); - await pipeline.PutContent(uri.ToUri(), content, cancellationToken); + var contentUri = string.IsNullOrEmpty(dto.Properties.Format) ? uri.ToUri() : uri.ToUri().AppendQueryParam("format", dto.Properties.Format).ToUri(); + await pipeline.PutContent(contentUri, content, cancellationToken); } public static async ValueTask WriteDto(this WorkspacePolicyFragmentInformationFile file, WorkspacePolicyFragmentDto dto, CancellationToken cancellationToken) diff --git a/tools/code/extractor/ApiOperationPolicy.cs b/tools/code/extractor/ApiOperationPolicy.cs index 41b19d36..a707343c 100644 --- a/tools/code/extractor/ApiOperationPolicy.cs +++ b/tools/code/extractor/ApiOperationPolicy.cs @@ -50,6 +50,7 @@ private static void ConfigureListApiOperationPolicies(IHostApplicationBuilder bu { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListApiOperationPolicies); } @@ -58,10 +59,11 @@ private static ListApiOperationPolicies GetListApiOperationPolicies(IServiceProv { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return (operationName, apiName, cancellationToken) => ApiOperationPoliciesUri.From(operationName, apiName, serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureWriteApiOperationPolicyArtifacts(IHostApplicationBuilder builder) diff --git a/tools/code/extractor/ApiPolicy.cs b/tools/code/extractor/ApiPolicy.cs index e91a17f1..30e9e6dd 100644 --- a/tools/code/extractor/ApiPolicy.cs +++ b/tools/code/extractor/ApiPolicy.cs @@ -50,6 +50,7 @@ private static void ConfigureListApiPolicies(IHostApplicationBuilder builder) { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListApiPolicies); } @@ -58,10 +59,11 @@ private static ListApiPolicies GetListApiPolicies(IServiceProvider provider) { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return (apiName, cancellationToken) => ApiPoliciesUri.From(apiName, serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureWriteApiPolicyArtifacts(IHostApplicationBuilder builder) diff --git a/tools/code/extractor/PolicyFragment.cs b/tools/code/extractor/PolicyFragment.cs index 35793de6..d1639fdd 100644 --- a/tools/code/extractor/PolicyFragment.cs +++ b/tools/code/extractor/PolicyFragment.cs @@ -57,6 +57,7 @@ private static void ConfigureListPolicyFragments(IHostApplicationBuilder builder { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListPolicyFragments); } @@ -65,10 +66,11 @@ private static ListPolicyFragments GetListPolicyFragments(IServiceProvider provi { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return cancellationToken => PolicyFragmentsUri.From(serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureShouldExtractPolicyFragment(IHostApplicationBuilder builder) @@ -118,6 +120,7 @@ private static WritePolicyFragmentInformationFile GetWritePolicyFragmentInformat { var serviceDirectory = provider.GetRequiredService(); var logger = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, dto, cancellationToken) => { diff --git a/tools/code/extractor/ProductPolicy.cs b/tools/code/extractor/ProductPolicy.cs index 3a24fbc6..97e54d24 100644 --- a/tools/code/extractor/ProductPolicy.cs +++ b/tools/code/extractor/ProductPolicy.cs @@ -50,6 +50,7 @@ private static void ConfigureListProductPolicies(IHostApplicationBuilder builder { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListProductPolicies); } @@ -58,10 +59,11 @@ private static ListProductPolicies GetListProductPolicies(IServiceProvider provi { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return (productName, cancellationToken) => ProductPoliciesUri.From(productName, serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureWriteProductPolicyArtifacts(IHostApplicationBuilder builder) diff --git a/tools/code/extractor/ServicePolicy.cs b/tools/code/extractor/ServicePolicy.cs index 2979498a..5d6c4fc0 100644 --- a/tools/code/extractor/ServicePolicy.cs +++ b/tools/code/extractor/ServicePolicy.cs @@ -50,6 +50,7 @@ private static void ConfigureListServicePolicies(IHostApplicationBuilder builder { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListServicePolicies); } @@ -58,10 +59,11 @@ private static ListServicePolicies GetListServicePolicies(IServiceProvider provi { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return cancellationToken => ServicePoliciesUri.From(serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureWriteServicePolicyArtifacts(IHostApplicationBuilder builder) diff --git a/tools/code/extractor/WorkspacePolicy.cs b/tools/code/extractor/WorkspacePolicy.cs index dead982e..5a758830 100644 --- a/tools/code/extractor/WorkspacePolicy.cs +++ b/tools/code/extractor/WorkspacePolicy.cs @@ -50,6 +50,7 @@ private static void ConfigureListWorkspacePolicies(IHostApplicationBuilder build { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListWorkspacePolicies); } @@ -58,10 +59,11 @@ private static ListWorkspacePolicies GetListWorkspacePolicies(IServiceProvider p { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return (workspaceName, cancellationToken) => WorkspacePoliciesUri.From(workspaceName, serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureWriteWorkspacePolicyArtifacts(IHostApplicationBuilder builder) diff --git a/tools/code/extractor/WorkspacePolicyFragment.cs b/tools/code/extractor/WorkspacePolicyFragment.cs index 1c28939d..3023bfa0 100644 --- a/tools/code/extractor/WorkspacePolicyFragment.cs +++ b/tools/code/extractor/WorkspacePolicyFragment.cs @@ -52,6 +52,7 @@ private static void ConfigureListWorkspacePolicyFragments(IHostApplicationBuilde { AzureModule.ConfigureManagementServiceUri(builder); AzureModule.ConfigureHttpPipeline(builder); + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); builder.Services.TryAddSingleton(GetListWorkspacePolicyFragments); } @@ -60,10 +61,11 @@ private static ListWorkspacePolicyFragments GetListWorkspacePolicyFragments(ISer { var serviceUri = provider.GetRequiredService(); var pipeline = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return (workspaceName, cancellationToken) => WorkspacePolicyFragmentsUri.From(workspaceName, serviceUri) - .List(pipeline, cancellationToken); + .List(pipeline, cancellationToken, policyContentFormat); } private static void ConfigureWriteWorkspacePolicyFragmentArtifacts(IHostApplicationBuilder builder) @@ -97,6 +99,7 @@ private static WriteWorkspacePolicyFragmentInformationFile GetWriteWorkspacePoli { var serviceDirectory = provider.GetRequiredService(); var logger = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, dto, workspaceName, cancellationToken) => { diff --git a/tools/code/integration.tests/ApiPolicy.cs b/tools/code/integration.tests/ApiPolicy.cs index 3a7c36fc..0958a783 100644 --- a/tools/code/integration.tests/ApiPolicy.cs +++ b/tools/code/integration.tests/ApiPolicy.cs @@ -28,7 +28,7 @@ private static ApiPolicyDto GetDto(ApiPolicyModel model) => { Properties = new ApiPolicyDto.ApiPolicyContract { - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; @@ -74,7 +74,7 @@ private static async ValueTask> Ge { var uri = ApiPoliciesUri.From(apiName, serviceUri); - return await uri.List(pipeline, cancellationToken) + return await uri.List(pipeline, cancellationToken, new PolicyContentFormat.RawXml()) .ToFrozenDictionary(cancellationToken); } @@ -86,7 +86,8 @@ await common.ApiPolicyModule.ListPolicyFiles(apiName, serviceDirectory) { Properties = new ApiPolicyDto.ApiPolicyContract { - Value = await file.ReadPolicy(cancellationToken) + Value = await file.ReadPolicy(cancellationToken), + Format = PolicyContentFormat.Default.GetPolicyContentFormat } })) .ToFrozenDictionary(cancellationToken); @@ -143,7 +144,8 @@ await Git.GetExistingFilesInCommit(serviceDirectory.ToDirectoryInfo(), commitId) { Properties = new ApiPolicyDto.ApiPolicyContract { - Value = data.ToString() + Value = data.ToString(), + Format = PolicyContentFormat.Default.GetPolicyContentFormat } }; return (name, dto); diff --git a/tools/code/integration.tests/PolicyFragment.cs b/tools/code/integration.tests/PolicyFragment.cs index 2cfeb90a..1013bc49 100644 --- a/tools/code/integration.tests/PolicyFragment.cs +++ b/tools/code/integration.tests/PolicyFragment.cs @@ -101,7 +101,7 @@ static PolicyFragmentDto getDto(PolicyFragmentModel model) => Properties = new PolicyFragmentDto.PolicyFragmentContract { Description = model.Description.ValueUnsafe(), - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; @@ -173,7 +173,7 @@ private static GetApimPolicyFragments GetGetApimPolicyFragments(IServiceProvider var serviceUri = getServiceUri(serviceName); return await PolicyFragmentsUri.From(serviceUri) - .List(pipeline, cancellationToken) + .List(pipeline, cancellationToken, new PolicyContentFormat.RawXml()) .ToFrozenDictionary(cancellationToken); }; } @@ -274,7 +274,7 @@ static PolicyFragmentDto getDto(PolicyFragmentModel model) => Properties = new PolicyFragmentDto.PolicyFragmentContract { Description = model.Description.ValueUnsafe(), - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; @@ -344,7 +344,7 @@ from content in PolicyFragmentModel.GenerateContent() Properties = new PolicyFragmentDto.PolicyFragmentContract { Description = description.ValueUnsafe(), - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = content } }; @@ -358,7 +358,7 @@ private static PolicyFragmentDto GetDto(PolicyFragmentModel model) => Properties = new PolicyFragmentDto.PolicyFragmentContract { Description = model.Description.ValueUnsafe(), - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; diff --git a/tools/code/integration.tests/ProductPolicy.cs b/tools/code/integration.tests/ProductPolicy.cs index 97cc3d19..ed147875 100644 --- a/tools/code/integration.tests/ProductPolicy.cs +++ b/tools/code/integration.tests/ProductPolicy.cs @@ -28,7 +28,7 @@ private static ProductPolicyDto GetDto(ProductPolicyModel model) => { Properties = new ProductPolicyDto.ProductPolicyContract { - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; @@ -74,7 +74,7 @@ private static async ValueTask { Properties = new ServicePolicyDto.ServicePolicyContract { - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; @@ -174,7 +174,7 @@ private static GetApimServicePolicies GetGetApimServicePolicies(IServiceProvider var serviceUri = getServiceUri(serviceName); return await ServicePoliciesUri.From(serviceUri) - .List(pipeline, cancellationToken) + .List(pipeline, cancellationToken, new PolicyContentFormat.RawXml()) .ToFrozenDictionary(cancellationToken); }; } @@ -224,7 +224,8 @@ async ValueTask> getWithCo { Properties = new ServicePolicyDto.ServicePolicyContract { - Value = data.ToString() + Value = data.ToString(), + Format = PolicyContentFormat.Default.GetPolicyContentFormat } }; return (name, dto); @@ -243,7 +244,8 @@ async ValueTask> getWithou { Properties = new ServicePolicyDto.ServicePolicyContract { - Value = await file.ReadPolicy(cancellationToken) + Value = await file.ReadPolicy(cancellationToken), + Format = PolicyContentFormat.Default.GetPolicyContentFormat, } })) .ToFrozenDictionary(cancellationToken); @@ -336,7 +338,8 @@ from content in ServicePolicyModel.GenerateContent() { Properties = new ServicePolicyDto.ServicePolicyContract { - Value = content + Value = content, + Format = PolicyContentFormat.Default.GetPolicyContentFormat } }; @@ -348,7 +351,7 @@ private static ServicePolicyDto GetDto(ServicePolicyModel model) => { Properties = new ServicePolicyDto.ServicePolicyContract { - Format = "rawxml", + Format = PolicyContentFormat.Default.GetPolicyContentFormat, Value = model.Content } }; diff --git a/tools/code/publisher/ApiOperationPolicy.cs b/tools/code/publisher/ApiOperationPolicy.cs index 3e8b7291..93a31aac 100644 --- a/tools/code/publisher/ApiOperationPolicy.cs +++ b/tools/code/publisher/ApiOperationPolicy.cs @@ -136,6 +136,7 @@ private static FindApiOperationPolicyDto GetFindApiOperationPolicyDto(IServicePr { var serviceDirectory = provider.GetRequiredService(); var tryGetFileContents = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, operationName, apiName, cancellationToken) => { @@ -146,7 +147,7 @@ private static FindApiOperationPolicyDto GetFindApiOperationPolicyDto(IServicePr { Properties = new ApiOperationPolicyDto.ApiOperationPolicyContract { - Format = "rawxml", + Format = policyContentFormat.GetPolicyContentFormat, Value = contents.ToString() } }; diff --git a/tools/code/publisher/ApiPolicy.cs b/tools/code/publisher/ApiPolicy.cs index 1a029560..4d1da20c 100644 --- a/tools/code/publisher/ApiPolicy.cs +++ b/tools/code/publisher/ApiPolicy.cs @@ -135,6 +135,7 @@ private static FindApiPolicyDto GetFindApiPolicyDto(IServiceProvider provider) { var serviceDirectory = provider.GetRequiredService(); var tryGetFileContents = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, apiName, cancellationToken) => { @@ -145,7 +146,7 @@ private static FindApiPolicyDto GetFindApiPolicyDto(IServiceProvider provider) { Properties = new ApiPolicyDto.ApiPolicyContract { - Format = "rawxml", + Format = policyContentFormat.GetPolicyContentFormat, Value = contents.ToString() } }; diff --git a/tools/code/publisher/App.cs b/tools/code/publisher/App.cs index 3d15d876..4492fd2d 100644 --- a/tools/code/publisher/App.cs +++ b/tools/code/publisher/App.cs @@ -13,6 +13,7 @@ internal static class AppModule { public static void ConfigureRunApplication(IHostApplicationBuilder builder) { + PolicyContentFormatModule.ConfigureDefaultPolicyContentFormat(builder); NamedValueModule.ConfigurePutNamedValues(builder); GatewayModule.ConfigurePutGateways(builder); BackendModule.ConfigurePutBackends(builder); diff --git a/tools/code/publisher/PolicyFragment.cs b/tools/code/publisher/PolicyFragment.cs index 51be0100..267ab6ec 100644 --- a/tools/code/publisher/PolicyFragment.cs +++ b/tools/code/publisher/PolicyFragment.cs @@ -153,6 +153,7 @@ private static FindPolicyFragmentDto GetFindPolicyFragmentDto(IServiceProvider p var serviceDirectory = provider.GetRequiredService(); var tryGetFileContents = provider.GetRequiredService(); var overrideFactory = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); var overrideDto = overrideFactory.Create(); @@ -192,7 +193,7 @@ Option tryGetDto(PolicyFragmentName name, Option(); var tryGetFileContents = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, productName, cancellationToken) => { @@ -145,7 +146,7 @@ private static FindProductPolicyDto GetFindProductPolicyDto(IServiceProvider pro { Properties = new ProductPolicyDto.ProductPolicyContract { - Format = "rawxml", + Format = policyContentFormat.GetPolicyContentFormat, Value = contents.ToString() } }; diff --git a/tools/code/publisher/ServicePolicy.cs b/tools/code/publisher/ServicePolicy.cs index a5e251f7..af25dda1 100644 --- a/tools/code/publisher/ServicePolicy.cs +++ b/tools/code/publisher/ServicePolicy.cs @@ -136,6 +136,7 @@ private static FindServicePolicyDto GetFindServicePolicyDto(IServiceProvider pro var serviceDirectory = provider.GetRequiredService(); var tryGetFileContents = provider.GetRequiredService(); var overrideFactory = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); var overrideDto = overrideFactory.Create(); @@ -148,7 +149,7 @@ private static FindServicePolicyDto GetFindServicePolicyDto(IServiceProvider pro { Properties = new ServicePolicyDto.ServicePolicyContract { - Format = "rawxml", + Format = policyContentFormat.GetPolicyContentFormat, Value = contents.ToString() } } diff --git a/tools/code/publisher/WorkspacePolicy.cs b/tools/code/publisher/WorkspacePolicy.cs index 5e996397..6513fc10 100644 --- a/tools/code/publisher/WorkspacePolicy.cs +++ b/tools/code/publisher/WorkspacePolicy.cs @@ -135,6 +135,7 @@ private static FindWorkspacePolicyDto GetFindWorkspacePolicyDto(IServiceProvider { var serviceDirectory = provider.GetRequiredService(); var tryGetFileContents = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, workspaceName, cancellationToken) => { @@ -145,7 +146,7 @@ private static FindWorkspacePolicyDto GetFindWorkspacePolicyDto(IServiceProvider { Properties = new WorkspacePolicyDto.WorkspacePolicyContract { - Format = "rawxml", + Format = policyContentFormat.GetPolicyContentFormat, Value = contents.ToString() } }; diff --git a/tools/code/publisher/WorkspacePolicyFragment.cs b/tools/code/publisher/WorkspacePolicyFragment.cs index a1115e2a..4f15abc1 100644 --- a/tools/code/publisher/WorkspacePolicyFragment.cs +++ b/tools/code/publisher/WorkspacePolicyFragment.cs @@ -152,6 +152,7 @@ private static FindWorkspacePolicyFragmentDto GetFindWorkspacePolicyFragmentDto( { var serviceDirectory = provider.GetRequiredService(); var tryGetFileContents = provider.GetRequiredService(); + var policyContentFormat = provider.GetRequiredService(); return async (name, workspaceName, cancellationToken) => { @@ -184,12 +185,12 @@ Option tryGetDto(Option return Option.None; } - var dto = informationFileDtoOption.IfNone(() => new WorkspacePolicyFragmentDto { Properties = new WorkspacePolicyFragmentDto.PolicyFragmentContract() }); + var dto = informationFileDtoOption.IfNone(() => new WorkspacePolicyFragmentDto { Properties = new WorkspacePolicyFragmentDto.PolicyFragmentContract() }); policyContentsOption.Iter(contents => dto = dto with { Properties = dto.Properties with { - Format = "rawxml", + Format = policyContentFormat.GetPolicyContentFormat, Value = contents.ToString() } });