diff --git a/dev-proxy/CommandHandlers/PresetGetCommandHandler.cs b/dev-proxy/CommandHandlers/ConfigGetCommandHandler.cs similarity index 74% rename from dev-proxy/CommandHandlers/PresetGetCommandHandler.cs rename to dev-proxy/CommandHandlers/ConfigGetCommandHandler.cs index 296e647f..d2b024ef 100644 --- a/dev-proxy/CommandHandlers/PresetGetCommandHandler.cs +++ b/dev-proxy/CommandHandlers/ConfigGetCommandHandler.cs @@ -8,7 +8,7 @@ namespace DevProxy.CommandHandlers; -class ProxyPresetInfo +class ProxyConfigInfo { public IList ConfigFiles { get; set; } = []; public IList MockFiles { get; set; } = []; @@ -26,9 +26,9 @@ class GitHubTreeItem public string Type { get; set; } = string.Empty; } -public static class PresetGetCommandHandler +public static class ConfigGetCommandHandler { - public static async Task DownloadPresetAsync(string presetId, ILogger logger) + public static async Task DownloadConfigAsync(string configId, ILogger logger) { try { @@ -39,39 +39,44 @@ public static async Task DownloadPresetAsync(string presetId, ILogger logger) return; } - var presetsFolderPath = Path.Combine(appFolder, "presets"); - logger.LogDebug("Checking if presets folder {presetsFolderPath} exists...", presetsFolderPath); - if (!Directory.Exists(presetsFolderPath)) + var configFolderPath = Path.Combine(appFolder, "config"); + logger.LogDebug("Checking if config folder {configFolderPath} exists...", configFolderPath); + if (!Directory.Exists(configFolderPath)) { - logger.LogDebug("Presets folder not found, creating it..."); - Directory.CreateDirectory(presetsFolderPath); - logger.LogDebug("Presets folder created"); + logger.LogDebug("Config folder not found, creating it..."); + Directory.CreateDirectory(configFolderPath); + logger.LogDebug("Config folder created"); } - logger.LogDebug("Getting target folder path for preset {presetId}...", presetId); - var targetFolderPath = GetTargetFolderPath(appFolder, presetId); + logger.LogDebug("Getting target folder path for config {configId}...", configId); + var targetFolderPath = GetTargetFolderPath(appFolder, configId); logger.LogDebug("Creating target folder {targetFolderPath}...", targetFolderPath); Directory.CreateDirectory(targetFolderPath); - logger.LogInformation("Downloading preset {presetId}...", presetId); + logger.LogInformation("Downloading config {configId}...", configId); - var sampleFiles = await GetFilesToDownloadAsync(presetId, logger); + var sampleFiles = await GetFilesToDownloadAsync(configId, logger); + if (sampleFiles.Length == 0) + { + logger.LogError("Config {configId} not found in the samples repo", configId); + return; + } foreach (var sampleFile in sampleFiles) { - await DownloadFileAsync(sampleFile, targetFolderPath, presetId, logger); + await DownloadFileAsync(sampleFile, targetFolderPath, configId, logger); } - logger.LogInformation("Preset saved in {targetFolderPath}\r\n", targetFolderPath); - var presetInfo = GetPresetInfo(targetFolderPath, logger); - if (!presetInfo.ConfigFiles.Any() && !presetInfo.MockFiles.Any()) + logger.LogInformation("Config saved in {targetFolderPath}\r\n", targetFolderPath); + var configInfo = GetConfigInfo(targetFolderPath, logger); + if (!configInfo.ConfigFiles.Any() && !configInfo.MockFiles.Any()) { return; } - if (presetInfo.ConfigFiles.Any()) + if (configInfo.ConfigFiles.Any()) { - logger.LogInformation("To start Dev Proxy with the preset, run:"); - foreach (var configFile in presetInfo.ConfigFiles) + logger.LogInformation("To start Dev Proxy with the config, run:"); + foreach (var configFile in configInfo.ConfigFiles) { logger.LogInformation(" devproxy --config-file \"{configFile}\"", configFile.Replace(appFolder, "~appFolder")); } @@ -79,7 +84,7 @@ public static async Task DownloadPresetAsync(string presetId, ILogger logger) else { logger.LogInformation("To start Dev Proxy with the mock file, enable the MockResponsePlugin or GraphMockResponsePlugin and run:"); - foreach (var mockFile in presetInfo.MockFiles) + foreach (var mockFile in configInfo.MockFiles) { logger.LogInformation(" devproxy --mock-file \"{mockFile}\"", mockFile.Replace(appFolder, "~appFolder")); } @@ -87,12 +92,12 @@ public static async Task DownloadPresetAsync(string presetId, ILogger logger) } catch (Exception ex) { - logger.LogError(ex, "Error downloading presets"); + logger.LogError(ex, "Error downloading config"); } } /// - /// Returns the list of files that can be used as entry points for the preset + /// Returns the list of files that can be used as entry points for the config /// /// /// A sample in the gallery can have multiple entry points. It can @@ -104,18 +109,18 @@ public static async Task DownloadPresetAsync(string presetId, ILogger logger) /// an array of all the mock files. If there are no mocks, it'll return /// an empty array indicating that there's no entry point. /// - /// Full path to the folder with preset files + /// Full path to the folder with config files /// Array of files that can be used to start proxy with - private static ProxyPresetInfo GetPresetInfo(string presetFolder, ILogger logger) + private static ProxyConfigInfo GetConfigInfo(string configFolder, ILogger logger) { - var presetInfo = new ProxyPresetInfo(); + var configInfo = new ProxyConfigInfo(); - logger.LogDebug("Getting list of JSON files in {presetFolder}...", presetFolder); - var jsonFiles = Directory.GetFiles(presetFolder, "*.json"); + logger.LogDebug("Getting list of JSON files in {configFolder}...", configFolder); + var jsonFiles = Directory.GetFiles(configFolder, "*.json"); if (!jsonFiles.Any()) { logger.LogDebug("No JSON files found"); - return presetInfo; + return configInfo; } foreach (var jsonFile in jsonFiles) @@ -126,32 +131,32 @@ private static ProxyPresetInfo GetPresetInfo(string presetFolder, ILogger logger if (fileContents.Contains("\"plugins\":")) { logger.LogDebug("File {jsonFile} contains proxy config", jsonFile); - presetInfo.ConfigFiles.Add(jsonFile); + configInfo.ConfigFiles.Add(jsonFile); continue; } if (fileContents.Contains("\"responses\":")) { logger.LogDebug("File {jsonFile} contains mock data", jsonFile); - presetInfo.MockFiles.Add(jsonFile); + configInfo.MockFiles.Add(jsonFile); continue; } logger.LogDebug("File {jsonFile} is not a proxy config or mock data", jsonFile); } - if (presetInfo.ConfigFiles.Any()) + if (configInfo.ConfigFiles.Any()) { - logger.LogDebug("Found {configFilesCount} proxy config files. Clearing mocks...", presetInfo.ConfigFiles.Count); - presetInfo.MockFiles.Clear(); + logger.LogDebug("Found {configFilesCount} proxy config files. Clearing mocks...", configInfo.ConfigFiles.Count); + configInfo.MockFiles.Clear(); } - return presetInfo; + return configInfo; } - private static string GetTargetFolderPath(string appFolder, string presetId) + private static string GetTargetFolderPath(string appFolder, string configId) { - var baseFolder = Path.Combine(appFolder, "presets", presetId); + var baseFolder = Path.Combine(appFolder, "config", configId); var newFolder = baseFolder; var i = 1; while (Directory.Exists(newFolder)) @@ -199,7 +204,7 @@ private static async Task GetFilesToDownloadAsync(string sampleFolderN } } - private static async Task DownloadFileAsync(string filePath, string targetFolderPath, string presetId, ILogger logger) + private static async Task DownloadFileAsync(string filePath, string targetFolderPath, string configId, ILogger logger) { var url = $"https://raw.githubusercontent.com/pnp/proxy-samples/main/{filePath.Replace("#", "%23")}"; logger.LogDebug("Downloading file {filePath}...", filePath); @@ -210,7 +215,7 @@ private static async Task DownloadFileAsync(string filePath, string targetFolder if (response.IsSuccessStatusCode) { var contentStream = await response.Content.ReadAsStreamAsync(); - var filePathInsideSample = Path.GetRelativePath($"samples/{presetId}", filePath); + var filePathInsideSample = Path.GetRelativePath($"samples/{configId}", filePath); var directoryNameInsideSample = Path.GetDirectoryName(filePathInsideSample); if (directoryNameInsideSample is not null) { diff --git a/dev-proxy/ProxyHost.cs b/dev-proxy/ProxyHost.cs index b49772f1..0bf2af3b 100755 --- a/dev-proxy/ProxyHost.cs +++ b/dev-proxy/ProxyHost.cs @@ -323,18 +323,16 @@ public RootCommand GetRootCommand(ILogger logger) }; command.Add(msGraphDbCommand); - var presetCommand = new Command("preset", "Manage Dev Proxy presets"); + var configCommand = new Command("config", "Manage Dev Proxy configs"); - var presetGetCommand = new Command("get", "Download the specified preset from the Sample Solution Gallery"); - var presetIdArgument = new Argument("preset-id", "The ID of the preset to download"); - presetGetCommand.AddArgument(presetIdArgument); - presetGetCommand.SetHandler(async presetId => await PresetGetCommandHandler.DownloadPresetAsync(presetId, logger), presetIdArgument); - presetCommand.Add(presetGetCommand); + var configGetCommand = new Command("get", "Download the specified config from the Sample Solution Gallery"); + var configIdArgument = new Argument("config-id", "The ID of the config to download"); + configGetCommand.AddArgument(configIdArgument); + configGetCommand.SetHandler(async configId => await ConfigGetCommandHandler.DownloadConfigAsync(configId, logger), configIdArgument); + configCommand.Add(configGetCommand); - command.Add(presetCommand); - - var configCommand = new Command("config", "Open devproxyrc.json"); - configCommand.SetHandler(() => + var configOpenCommand = new Command("open", "Open devproxyrc.json"); + configOpenCommand.SetHandler(() => { var cfgPsi = new ProcessStartInfo(ConfigFile) { @@ -342,6 +340,8 @@ public RootCommand GetRootCommand(ILogger logger) }; Process.Start(cfgPsi); }); + configCommand.Add(configOpenCommand); + command.Add(configCommand); var outdatedCommand = new Command("outdated", "Check for new version"); diff --git a/dev-proxy/presets/m365-mocks.json b/dev-proxy/config/m365-mocks.json similarity index 100% rename from dev-proxy/presets/m365-mocks.json rename to dev-proxy/config/m365-mocks.json diff --git a/dev-proxy/presets/m365.json b/dev-proxy/config/m365.json similarity index 100% rename from dev-proxy/presets/m365.json rename to dev-proxy/config/m365.json diff --git a/dev-proxy/presets/microsoft-graph-rate-limiting.json b/dev-proxy/config/microsoft-graph-rate-limiting.json similarity index 100% rename from dev-proxy/presets/microsoft-graph-rate-limiting.json rename to dev-proxy/config/microsoft-graph-rate-limiting.json diff --git a/dev-proxy/presets/microsoft-graph.json b/dev-proxy/config/microsoft-graph.json similarity index 100% rename from dev-proxy/presets/microsoft-graph.json rename to dev-proxy/config/microsoft-graph.json diff --git a/dev-proxy/presets/picture.jpg b/dev-proxy/config/picture.jpg similarity index 100% rename from dev-proxy/presets/picture.jpg rename to dev-proxy/config/picture.jpg diff --git a/dev-proxy/presets/urls-to-watch.json b/dev-proxy/config/urls-to-watch.json similarity index 100% rename from dev-proxy/presets/urls-to-watch.json rename to dev-proxy/config/urls-to-watch.json diff --git a/dev-proxy/dev-proxy.csproj b/dev-proxy/dev-proxy.csproj index 50d55c16..941946e7 100644 --- a/dev-proxy/dev-proxy.csproj +++ b/dev-proxy/dev-proxy.csproj @@ -66,19 +66,19 @@ PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest