diff --git a/dev-proxy-plugins/MinimalPermissions/GraphRequestInfo.cs b/dev-proxy-plugins/MinimalPermissions/GraphRequestInfo.cs index 5d628c0c..13a2f5f1 100644 --- a/dev-proxy-plugins/MinimalPermissions/GraphRequestInfo.cs +++ b/dev-proxy-plugins/MinimalPermissions/GraphRequestInfo.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. - using System.Text.Json.Serialization; namespace DevProxy.Plugins.MinimalPermissions; diff --git a/dev-proxy-plugins/Reporters/MarkdownReporter.cs b/dev-proxy-plugins/Reporters/MarkdownReporter.cs index 6c67ef94..3b13570a 100644 --- a/dev-proxy-plugins/Reporters/MarkdownReporter.cs +++ b/dev-proxy-plugins/Reporters/MarkdownReporter.cs @@ -23,8 +23,9 @@ public class MarkdownReporter(IPluginEvents pluginEvents, IProxyContext context, { typeof(ExecutionSummaryPluginReportByUrl), TransformExecutionSummaryByUrl }, { typeof(ExecutionSummaryPluginReportByMessageType), TransformExecutionSummaryByMessageType }, { typeof(HttpFileGeneratorPlugin), TransformHttpFileGeneratorReport }, - { typeof(GraphMinimalPermissionsGuidancePluginReport), TransformMinimalPermissionsGuidanceReport }, - { typeof(GraphMinimalPermissionsPluginReport), TransformMinimalPermissionsReport }, + { typeof(GraphMinimalPermissionsGuidancePluginReport), TransformGraphMinimalPermissionsGuidanceReport }, + { typeof(GraphMinimalPermissionsPluginReport), TransformGraphMinimalPermissionsReport }, + { typeof(MinimalPermissionsPluginReport), TransformMinimalPermissionsReport }, { typeof(OpenApiSpecGeneratorPluginReport), TransformOpenApiSpecGeneratorReport }, { typeof(UrlDiscoveryPluginReport), TransformUrlDiscoveryReport } }; @@ -366,7 +367,7 @@ private static void AddExecutionSummaryReportSummary(IEnumerable req } } - private static string? TransformMinimalPermissionsGuidanceReport(object report) + private static string? TransformGraphMinimalPermissionsGuidanceReport(object report) { var minimalPermissionsGuidanceReport = (GraphMinimalPermissionsGuidancePluginReport)report; @@ -433,7 +434,7 @@ void transformPermissionsInfo(GraphMinimalPermissionsInfo permissionsInfo, strin return sb.ToString(); } - private static string? TransformMinimalPermissionsReport(object report) + private static string? TransformGraphMinimalPermissionsReport(object report) { var minimalPermissionsReport = (GraphMinimalPermissionsPluginReport)report; @@ -536,4 +537,44 @@ void transformPermissionsInfo(GraphMinimalPermissionsInfo permissionsInfo, strin return sb.ToString(); } + + private static string? TransformMinimalPermissionsReport(object report) + { + var minimalPermissionsReport = (MinimalPermissionsPluginReport)report; + + var sb = new StringBuilder(); + sb.AppendLine($"# Minimal permissions report"); + + foreach (var apiResult in minimalPermissionsReport.Results) + { + sb.AppendLine(); + sb.AppendLine($"## API {apiResult.ApiName}:"); + + sb.AppendLine("### Requests"); + sb.AppendLine(); + sb.AppendJoin(Environment.NewLine, apiResult.Requests.Select(r => $"- {r}")); + sb.AppendLine(); + + sb.AppendLine(); + sb.AppendLine("### Minimal permissions"); + sb.AppendLine(); + sb.AppendJoin(Environment.NewLine, apiResult.MinimalPermissions.Select(p => $"- {p}")); + sb.AppendLine(); + } + + if (minimalPermissionsReport.Errors.Length != 0) + { + sb.AppendLine(); + sb.AppendLine("## 🛑 Errors"); + sb.AppendLine(); + sb.AppendLine("Couldn't determine minimal permissions for the following URLs:"); + sb.AppendLine(); + sb.AppendJoin(Environment.NewLine, minimalPermissionsReport.Errors.Select(e => $"- {e}")); + sb.AppendLine(); + } + + sb.AppendLine(); + + return sb.ToString(); + } } \ No newline at end of file diff --git a/dev-proxy-plugins/Reporters/PlainTextReporter.cs b/dev-proxy-plugins/Reporters/PlainTextReporter.cs index f7088c9c..37ba8d78 100644 --- a/dev-proxy-plugins/Reporters/PlainTextReporter.cs +++ b/dev-proxy-plugins/Reporters/PlainTextReporter.cs @@ -23,8 +23,9 @@ public class PlainTextReporter(IPluginEvents pluginEvents, IProxyContext context { typeof(ExecutionSummaryPluginReportByUrl), TransformExecutionSummaryByUrl }, { typeof(ExecutionSummaryPluginReportByMessageType), TransformExecutionSummaryByMessageType }, { typeof(HttpFileGeneratorPluginReport), TransformHttpFileGeneratorReport }, - { typeof(GraphMinimalPermissionsGuidancePluginReport), TransformMinimalPermissionsGuidanceReport }, - { typeof(GraphMinimalPermissionsPluginReport), TransformMinimalPermissionsReport }, + { typeof(GraphMinimalPermissionsGuidancePluginReport), TransformGraphMinimalPermissionsGuidanceReport }, + { typeof(GraphMinimalPermissionsPluginReport), TransformGraphMinimalPermissionsReport }, + { typeof(MinimalPermissionsPluginReport), TransformMinimalPermissionsReport }, { typeof(OpenApiSpecGeneratorPluginReport), TransformOpenApiSpecGeneratorReport }, { typeof(UrlDiscoveryPluginReport), TransformUrlDiscoveryReport } }; @@ -269,7 +270,7 @@ private static void AddExecutionSummaryReportSummary(IEnumerable req sb.AppendLine("Azure API Center minimal permissions report") .AppendLine(); - + sb.AppendLine("APIS") .AppendLine(); @@ -392,7 +393,7 @@ private static void AddExecutionSummaryReportSummary(IEnumerable req return sb.ToString(); } - private static string? TransformMinimalPermissionsReport(object report) + private static string? TransformGraphMinimalPermissionsReport(object report) { var minimalPermissionsReport = (GraphMinimalPermissionsPluginReport)report; @@ -420,7 +421,7 @@ private static void AddExecutionSummaryReportSummary(IEnumerable req return sb.ToString(); } - private static string? TransformMinimalPermissionsGuidanceReport(object report) + private static string? TransformGraphMinimalPermissionsGuidanceReport(object report) { var minimalPermissionsGuidanceReport = (GraphMinimalPermissionsGuidancePluginReport)report; @@ -475,4 +476,38 @@ void transformPermissionsInfo(GraphMinimalPermissionsInfo permissionsInfo, strin return sb.ToString(); } + + private static string? TransformMinimalPermissionsReport(object report) + { + var minimalPermissionsReport = (MinimalPermissionsPluginReport)report; + + var sb = new StringBuilder(); + + sb.AppendLine($"Minimal permissions report"); + + foreach (var apiResult in minimalPermissionsReport.Results) + { + sb.AppendLine(); + sb.AppendLine($"API {apiResult.ApiName}:"); + sb.AppendLine(); + sb.AppendLine("Requests:"); + sb.AppendLine(); + sb.AppendJoin(Environment.NewLine, apiResult.Requests.Select(r => $"- {r}")); + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine("Minimal permissions:"); + sb.AppendLine(); + sb.AppendJoin(Environment.NewLine, apiResult.MinimalPermissions.Select(p => $"- {p}")); + } + + if (minimalPermissionsReport.Errors.Length != 0) + { + sb.AppendLine(); + sb.AppendLine("Couldn't determine minimal permissions for the following requests:"); + sb.AppendLine(); + sb.AppendJoin(Environment.NewLine, minimalPermissionsReport.Errors.Select(e => $"- {e.Request}: {e.Error}")); + } + + return sb.ToString(); + } } \ No newline at end of file