From 4ab01ee707da60d04451e780001c806cbf3e19ae Mon Sep 17 00:00:00 2001 From: EngincanV Date: Tue, 11 May 2021 14:33:16 +0300 Subject: [PATCH] CLI: Validate project name for template creation --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 7 +++++- .../Abp/Cli/Utils/ProjectNameValidator.cs | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 83cce36fce..d34420d50c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -61,6 +61,11 @@ namespace Volo.Abp.Cli.Commands ); } + if (ProjectNameValidator.IsContainsBannedProjectName(projectName) || ProjectNameValidator.IsContainsControlOrSurrogateCharacter(projectName)) + { + throw new CliUsageException("The project name is not valid! Please specify a different name."); + } + Logger.LogInformation("Creating your project..."); Logger.LogInformation("Project name: " + projectName); @@ -554,4 +559,4 @@ namespace Volo.Abp.Cli.Commands } } } -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs new file mode 100644 index 0000000000..99b3dca4a2 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ProjectNameValidator.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Volo.Abp.Cli.Utils +{ + public static class ProjectNameValidator + { + private static readonly List BannedProjectNames = new() + { + "MyCompanyName.MyProjectName", "MyProjectName", + "/", "?", ":", "&", "\\", "*", "\"", "<", ">", "|", "#", "%", + "CON", "AUX", "PRN", "COM1", "LPT2", ".." + }; + + public static bool IsContainsBannedProjectName(string projectName) + { + return BannedProjectNames.Contains(projectName); + } + + public static bool IsContainsControlOrSurrogateCharacter(string projectName) + { + return projectName.Any(chr => char.IsControl(chr) || char.IsSurrogate(chr)); + } + } +} \ No newline at end of file