From bcd3eb1e2e36349191eb5657fdf65c4996553778 Mon Sep 17 00:00:00 2001 From: Daniel Stolt Date: Wed, 15 Jul 2015 13:09:33 +0100 Subject: [PATCH] Cleaned up tenant management commands code. Added validation of the DataProvider parameter. --- .../Commands/TenantCommand.cs | 80 ++++++++----------- 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs index bab1323d4..890236e7d 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs @@ -8,6 +8,7 @@ using Orchard.MultiTenancy.Services; namespace Orchard.MultiTenancy.Commands { public class TenantCommand : DefaultOrchardCommandHandler { private readonly ITenantService _tenantService; + private readonly string[] _validDataProviderNames = new[] { "SqlCe", "SqlServer", "MySql", "PostgreSql" }; public TenantCommand(ITenantService tenantService) { _tenantService = tenantService; @@ -58,38 +59,37 @@ namespace Orchard.MultiTenancy.Commands { [CommandHelp("tenant info \r\n\t" + "Display the current settings for a tenant.")] [CommandName("tenant info")] public void Info(string tenantName) { - ShellSettings tenant = _tenantService.GetTenants().Where(x => x.Name == tenantName).FirstOrDefault(); - + var tenant = _tenantService.GetTenants().FirstOrDefault(x => x.Name == tenantName); if (tenant == null) { - Context.Output.Write(T("Tenant: ") + tenantName + T(" was not found")); - } - else { - Context.Output.WriteLine(T("Tenant settings:")); - Context.Output.WriteLine(T("---------------------------")); - Context.Output.WriteLine(T("Name: ") + tenant.Name); - Context.Output.WriteLine(T("State: ") + tenant.State.ToString()); - Context.Output.WriteLine(T("Data provider: ") + tenant.DataProvider); - Context.Output.WriteLine(T("Connection string: ") + tenant.DataConnectionString); - Context.Output.WriteLine(T("Data table prefix: ") + tenant.DataTablePrefix); - Context.Output.WriteLine(T("Request URL host: ") + tenant.RequestUrlHost); - Context.Output.WriteLine(T("Request URL prefix: ") + tenant.RequestUrlPrefix); - Context.Output.WriteLine(T("Encryption algorithm: ") + tenant.EncryptionAlgorithm); - Context.Output.WriteLine(T("Encryption key: ") + tenant.EncryptionKey); - Context.Output.WriteLine(T("Hash algorithm: ") + tenant.HashAlgorithm); - Context.Output.WriteLine(T("Hash key: ") + tenant.HashKey); - Context.Output.WriteLine(T("Themes: ") + String.Join(";", tenant.Themes)); - Context.Output.WriteLine(T("Modules: ") + String.Join(";", tenant.Modules)); - Context.Output.WriteLine(T("---------------------------")); + Context.Output.WriteLine(T("Could not read tenant '{0}'. No tenant with that name exists.", tenantName)); + return; } + + Context.Output.WriteLine(T("Tenant settings:")); + Context.Output.WriteLine(T("---------------------------")); + Context.Output.WriteLine(T("Name: ") + tenant.Name); + Context.Output.WriteLine(T("State: ") + tenant.State.ToString()); + Context.Output.WriteLine(T("Data provider: ") + tenant.DataProvider); + Context.Output.WriteLine(T("Connection string: ") + tenant.DataConnectionString); + Context.Output.WriteLine(T("Data table prefix: ") + tenant.DataTablePrefix); + Context.Output.WriteLine(T("Request URL host: ") + tenant.RequestUrlHost); + Context.Output.WriteLine(T("Request URL prefix: ") + tenant.RequestUrlPrefix); + Context.Output.WriteLine(T("Encryption algorithm: ") + tenant.EncryptionAlgorithm); + Context.Output.WriteLine(T("Encryption key: ") + tenant.EncryptionKey); + Context.Output.WriteLine(T("Hash algorithm: ") + tenant.HashAlgorithm); + Context.Output.WriteLine(T("Hash key: ") + tenant.HashKey); + Context.Output.WriteLine(T("Themes: ") + String.Join(";", tenant.Themes)); + Context.Output.WriteLine(T("Modules: ") + String.Join(";", tenant.Modules)); + Context.Output.WriteLine(T("---------------------------")); } - [CommandHelp("tenant add /DataProvider: /DataConnectionString: /DataTablePrefix: /UrlHost: /UrlPrefix: /Themes: /Modules:\r\n\t" + "Create a new tenant named on the site.")] + [CommandHelp("tenant add /DataProvider: /DataConnectionString: /DataTablePrefix: /UrlHost: /UrlPrefix: /Themes: /Modules:\r\n\t" + "Create a new tenant named on the site.\r\n" + "The and parameters should be semicolon-separated lists of module names.")] [CommandName("tenant add")] [OrchardSwitches("DataProvider,DataConnectionString,DataTablePrefix,UrlHost,UrlPrefix,Themes,Modules")] public void Create(string tenantName) { Context.Output.WriteLine(T("Creating tenant '{0}'...", tenantName)); - if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) { + if (String.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) { Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces.")); return; } @@ -98,6 +98,11 @@ namespace Orchard.MultiTenancy.Commands { return; } + if (DataProvider != null && !_validDataProviderNames.Contains(DataProvider)) { + Context.Output.WriteLine(T("Invalid value '{0}' for parameter DataProvider. Expect one of the following: {1}", DataProvider, String.Join(", ", _validDataProviderNames))); + return; + } + _tenantService.CreateTenant( new ShellSettings { Name = tenantName, @@ -112,23 +117,23 @@ namespace Orchard.MultiTenancy.Commands { }); } - [CommandHelp("tenant update /DataProvider: /DataConnectionString: /DataTablePrefix: /UrlHost: /UrlPrefix: /Themes: /Modules:\r\n\t" + "Update the settings of the existing tenant .")] + [CommandHelp("tenant update /DataProvider: /DataConnectionString: /DataTablePrefix: /UrlHost: /UrlPrefix: /Themes: /Modules:\r\n\t" + "Update the settings of the existing tenant .\r\n" + "The and parameters should be semicolon-separated lists of module names.")] [CommandName("tenant update")] [OrchardSwitches("DataProvider,DataConnectionString,DataTablePrefix,UrlHost,UrlPrefix,Themes,Modules")] public void Edit(string tenantName) { Context.Output.WriteLine(T("Updating tenant '{0}'...", tenantName)); - if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) { - Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces.")); - return; - } - var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase)); if (tenant == null) { Context.Output.WriteLine(T("Could not update tenant '{0}'. No tenant with that name exists.", tenantName)); return; } + if (DataProvider != null && !_validDataProviderNames.Contains(DataProvider)) { + Context.Output.WriteLine(T("Invalid value '{0}' for parameter DataProvider. Expect one of the following: {1}", DataProvider, String.Join(", ", _validDataProviderNames))); + return; + } + _tenantService.UpdateTenant( new ShellSettings { Name = tenant.Name, @@ -148,11 +153,6 @@ namespace Orchard.MultiTenancy.Commands { public void Disable(string tenantName) { Context.Output.WriteLine(T("Disabling tenant '{0}'...", tenantName)); - if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) { - Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces.")); - return; - } - var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase)); if (tenant == null) { Context.Output.WriteLine(T("Could not disable tenant '{0}'. No tenant with that name exists.", tenantName)); @@ -168,11 +168,6 @@ namespace Orchard.MultiTenancy.Commands { public void Enable(string tenantName) { Context.Output.WriteLine(T("Enabling tenant '{0}'...", tenantName)); - if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) { - Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces.")); - return; - } - var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase)); if (tenant == null) { Context.Output.WriteLine(T("Could not enable tenant '{0}'. No tenant with that name exists.", tenantName)); @@ -183,17 +178,12 @@ namespace Orchard.MultiTenancy.Commands { _tenantService.UpdateTenant(tenant); } - [CommandHelp("tenant reset /DropDatabaseTables:\r\n\t" + "Reset the tenant , optionally dropping its tables from the database.")] + [CommandHelp("tenant reset /DropDatabaseTables:\r\n\t" + "Reset the tenant to its uninitialized, optionally dropping its tables from the database.")] [CommandName("tenant reset")] [OrchardSwitches("DropDatabaseTables")] public void Reset(string tenantName) { Context.Output.WriteLine(T("Resetting tenant '{0}'...", tenantName)); - if (string.IsNullOrWhiteSpace(tenantName) || !Regex.IsMatch(tenantName, @"^\w+$")) { - Context.Output.WriteLine(T("Invalid tenant name. Must contain characters only and no spaces.")); - return; - } - var tenant = _tenantService.GetTenants().FirstOrDefault(t => String.Equals(t.Name, tenantName, StringComparison.OrdinalIgnoreCase)); if (tenant == null) { Context.Output.WriteLine(T("Could not reset tenant '{0}'. No tenant with that name exists.", tenantName));