oqtane.framework/Oqtane.Client/Modules/Admin/Tenants/Add.razor
Pavel Vesely 940cdcb349 Database Manager
done:
+ master.sql as resource
+ implemented incremental database changes also for Master
+ dbUp sql script variables implemented
+ improved database handling and creation code
+ simpified database creation
+ almost all Database and Tenant creation moved to DatabaseManager.cs (rest code marked with TODO)
+ Unattended install of master can be performed by settings in appsettings.json
+ Improved IsInstalled checking
+ Removed DBSchema field from Tenant
+ Default database and site creation moved to Program.Main
2020-03-29 14:45:02 +02:00

155 lines
5.0 KiB
Plaintext

@namespace Oqtane.Modules.Admin.Tenants
@inherits ModuleBase
@inject NavigationManager NavigationManager
@inject ITenantService TenantService
@inject IInstallationService InstallationService
<table class="table table-borderless">
<tr>
<td>
<label class="control-label">Name: </label>
</td>
<td>
<input class="form-control" @bind="@name" />
</td>
</tr>
<tr>
<td>
<label for="Title" class="control-label">Database Type: </label>
</td>
<td>
<select class="custom-select" @bind="@type">
<option value="LocalDB">Local Database</option>
<option value="SQLServer">SQL Server</option>
</select>
</td>
</tr>
<tr>
<td>
<label for="Title" class="control-label">Server: </label>
</td>
<td>
<input type="text" class="form-control" @bind="@server" />
</td>
</tr>
<tr>
<td>
<label for="Title" class="control-label">Database: </label>
</td>
<td>
<input type="text" class="form-control" @bind="@database" />
</td>
</tr>
<tr>
<td>
<label for="Title" class="control-label">Integrated Security: </label>
</td>
<td>
<select class="custom-select" @onchange="SetIntegratedSecurity">
<option value="true" selected>True</option>
<option value="false">False</option>
</select>
</td>
</tr>
<tr style="@integratedsecurity">
<td>
<label for="Title" class="control-label">Username: </label>
</td>
<td>
<input type="text" class="form-control" @bind="@username" />
</td>
</tr>
<tr style="@integratedsecurity">
<td>
<label for="Title" class="control-label">Password: </label>
</td>
<td>
<input type="password" class="form-control" @bind="@password" />
</td>
</tr>
</table>
<button type="button" class="btn btn-success" @onclick="SaveTenant">Save</button>
<NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink>
@code {
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
string name = "";
string type = "LocalDB";
string server = "(LocalDb)\\MSSQLLocalDB";
string database = "Oqtane-" + DateTime.UtcNow.ToString("yyyyMMddHHmm");
string username = "";
string password = "";
string integratedsecurity = "display: none;";
private void SetIntegratedSecurity(ChangeEventArgs e)
{
if (Convert.ToBoolean((string)e.Value))
{
integratedsecurity = "display: none;";
}
else
{
integratedsecurity = "";
}
}
private async Task SaveTenant()
{
if (!string.IsNullOrEmpty(name))
{
ShowProgressIndicator();
string connectionString = "";
if (type == "LocalDB")
{
connectionString = "Data Source=" + server + ";AttachDbFilename=|DataDirectory|\\" + database + ".mdf;Initial Catalog=" + database + ";Integrated Security=SSPI;";
}
else
{
connectionString = "Data Source=" + server + ";Initial Catalog=" + database + ";";
if (integratedsecurity == "display: none;")
{
connectionString += "Integrated Security=SSPI;";
}
else
{
connectionString += "User ID=" + username + ";Password=" + password;
}
}
var config = new InstallConfig
{
IsMaster = false,
ConnectionString = connectionString,
};
Installation installation = await InstallationService.Install(config);
if (installation.Success)
{
//TODO : Move to Database Manager
Tenant tenant = new Tenant
{
Name = name,
DBConnectionString = connectionString,
IsInitialized = false
};
await TenantService.AddTenantAsync(tenant);
await logger.LogInformation("Tenant Created {Tenant}", tenant);
NavigationManager.NavigateTo(NavigateUrl());
}
else
{
await logger.LogError("Error Creating Tenant {Error}", installation.Message);
AddModuleMessage(installation.Message, MessageType.Error);
}
}
else
{
AddModuleMessage("You Must Provide A Name For The Tenant", MessageType.Warning);
}
}
}