Refactor project name validator #9853

pull/9948/head
Alper Ebicoglu 4 years ago
parent b09787078e
commit fe7fc54095

@ -47,20 +47,12 @@ namespace Volo.Abp.Cli.Commands
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
var projectName = NamespaceHelper.NormalizeNamespace(commandLineArgs.Target);
if (projectName == null)
if (string.IsNullOrWhiteSpace(projectName))
{
throw new CliUsageException(
"Project name is missing!" +
Environment.NewLine + Environment.NewLine +
GetUsageInfo()
);
throw new CliUsageException("Project name is missing!" + Environment.NewLine + Environment.NewLine + GetUsageInfo());
}
if (!ProjectNameValidator.IsValid(projectName))
{
throw new CliUsageException("The project name is invalid! Please specify a different name.");
}
ProjectNameValidator.Validate(projectName);
Logger.LogInformation("Creating your project...");
Logger.LogInformation("Project name: " + projectName);

@ -22,70 +22,50 @@ namespace Volo.Abp.Cli.Utils
"Blazor"
};
private static bool HasParentDirectoryString(string projectName)
private static void ValidateParentDirectoryString(string projectName)
{
return projectName.Contains("..");
if (projectName.Contains(".."))
{
throw new CliUsageException("Project name cannot contain \"..\"! Specify a different name.");
}
}
private static bool HasSurrogateOrControlChar(string projectName)
private static void ValidateSurrogateOrControlChar(string projectName)
{
return projectName.Any(chr => char.IsControl(chr) || char.IsSurrogate(chr));
if (projectName.Any(chr => char.IsControl(chr) || char.IsSurrogate(chr)))
{
throw new CliUsageException("Project name cannot contain surrogate or control characters! Specify a different name.");
}
}
private static bool IsIllegalProjectName(string projectName)
private static void ValidateIllegalProjectName(string projectName)
{
foreach (var illegalProjectName in IllegalProjectNames)
{
if (projectName.Equals(illegalProjectName, StringComparison.OrdinalIgnoreCase))
{
return true;
throw new CliUsageException("Project name cannot be \"" + illegalProjectName + "\"! Specify a different name.");
}
}
return false;
}
private static bool HasIllegalKeywords(string projectName)
private static void ValidateIllegalKeywords(string projectName)
{
foreach (var illegalKeyword in IllegalKeywords)
{
if (projectName.Equals(illegalKeyword, StringComparison.OrdinalIgnoreCase))
if (projectName.Contains(illegalKeyword))
{
return true;
throw new CliUsageException("Project name cannot contain the word \"" + illegalKeyword + "\". Specify a different name.");
}
}
return false;
}
public static bool IsValid(string projectName)
public static void Validate(string projectName)
{
if (projectName == null)
{
throw new CliUsageException("Project name cannot be empty!");
}
if (HasSurrogateOrControlChar(projectName))
{
return false;
}
if (HasParentDirectoryString(projectName))
{
return false;
}
if (IsIllegalProjectName(projectName))
{
return false;
}
if (HasIllegalKeywords(projectName))
{
return false;
}
return true;
ValidateSurrogateOrControlChar(projectName);
ValidateParentDirectoryString(projectName);
ValidateIllegalProjectName(projectName);
ValidateIllegalKeywords(projectName);
}
}
}

@ -18,7 +18,7 @@ namespace Volo.Abp.Cli
}
[Fact]
public async Task IllegalProjectName_Test()
public async Task Illegal_ProjectName_Test()
{
var illegalProjectNames = new[]
{
@ -39,16 +39,15 @@ namespace Volo.Abp.Cli
}
[Fact]
public async Task ParentDirectoryContain_Test()
public async Task Parent_Directory_Char_Contains_Test()
{
var args = new CommandLineArgs("new", "Test..Test");
await _newCommand.ExecuteAsync(args).ShouldThrowAsync<CliUsageException>();
}
[Fact]
public async Task Has_Illegel_Keyword_Test()
public async Task Contains_Illegal_Keyword_Test()
{
var illegalKeywords = new[]
{

Loading…
Cancel
Save