diff --git a/src/Tgstation.Server.Host/Core/SetupWizard.cs b/src/Tgstation.Server.Host/Core/SetupWizard.cs index 6fa087c27a..05ff524563 100644 --- a/src/Tgstation.Server.Host/Core/SetupWizard.cs +++ b/src/Tgstation.Server.Host/Core/SetupWizard.cs @@ -273,6 +273,35 @@ namespace Tgstation.Server.Host.Core return databaseName; } + /// + /// Prompt the user for the . + /// + /// The for the operation. + /// A resulting in the input . + async Task PromptDatabaseType(CancellationToken cancellationToken) + { + do + { + await console.WriteAsync( + String.Format( + CultureInfo.InvariantCulture, + "Please enter one of {0}, {1}, {2}, or {3}: ", + DatabaseType.Sqlite, + DatabaseType.MariaDB, + DatabaseType.MySql, + DatabaseType.SqlServer), + false, + cancellationToken) + .ConfigureAwait(false); + var databaseTypeString = await console.ReadLineAsync(false, cancellationToken).ConfigureAwait(false); + if (Enum.TryParse(databaseTypeString, out var databaseType)) + return databaseType; + + await console.WriteAsync("Invalid database type!", true, cancellationToken).ConfigureAwait(false); + } + while (true); + } + /// /// Prompts the user to create a /// @@ -285,67 +314,39 @@ namespace Tgstation.Server.Host.Core await console.WriteAsync(null, true, cancellationToken).ConfigureAwait(false); await console.WriteAsync("What SQL database type will you be using?", true, cancellationToken).ConfigureAwait(false); - var databaseConfiguration = new DatabaseConfiguration(); - do + var databaseConfiguration = new DatabaseConfiguration { - await console.WriteAsync( - String.Format( - CultureInfo.InvariantCulture, - "Please enter one of {0}, {1}, {2}, or {3}: ", - DatabaseType.Sqlite, - DatabaseType.MariaDB, - DatabaseType.MySql, - DatabaseType.SqlServer), - false, - cancellationToken) - .ConfigureAwait(false); - var databaseTypeString = await console.ReadLineAsync(false, cancellationToken).ConfigureAwait(false); - if (Enum.TryParse(databaseTypeString, out var databaseType)) - { - databaseConfiguration.DatabaseType = databaseType; - break; - } + DatabaseType = await PromptDatabaseType(cancellationToken).ConfigureAwait(false) + }; - await console.WriteAsync("Invalid database type!", true, cancellationToken).ConfigureAwait(false); - } - while (true); - - string serverAddress; + string serverAddress = null; uint? mySQLServerPort = null; bool isSqliteDB = databaseConfiguration.DatabaseType == DatabaseType.Sqlite; - if (isSqliteDB) - serverAddress = null; - else + if (!isSqliteDB) do { await console.WriteAsync(null, true, cancellationToken).ConfigureAwait(false); await console.WriteAsync("Enter the server's address and port [: or ] (blank for local): ", false, cancellationToken).ConfigureAwait(false); serverAddress = await console.ReadLineAsync(false, cancellationToken).ConfigureAwait(false); - if (String.IsNullOrWhiteSpace(serverAddress)) + if (!String.IsNullOrWhiteSpace(serverAddress) && databaseConfiguration.DatabaseType == DatabaseType.SqlServer) { - serverAddress = null; - break; - } - else if (databaseConfiguration.DatabaseType == DatabaseType.SqlServer) - { - var m = Regex.Match(serverAddress, @"^(?.+):(?.+)$"); - if (m.Success) + var match = Regex.Match(serverAddress, @"^(?.+):(?.+)$"); + if (match.Success) { - serverAddress = m.Groups["server"].Value; - if (uint.TryParse(m.Groups["port"].Value, out uint port)) - { + serverAddress = match.Groups["server"].Value; + var portString = match.Groups["port"].Value; + if (uint.TryParse(portString, out uint port)) mySQLServerPort = port; - break; - } else { - await console.WriteAsync($@"Failed to parse port ""{m.Groups["port"].Value}"", please try again.", true, cancellationToken).ConfigureAwait(false); + await console.WriteAsync($"Failed to parse port \"{portString}\", please try again.", true, cancellationToken).ConfigureAwait(false); + continue; } } - else break; } - else break; + + break; } while (true); @@ -359,12 +360,14 @@ namespace Tgstation.Server.Host.Core databaseName = await console.ReadLineAsync(false, cancellationToken).ConfigureAwait(false); if (!String.IsNullOrWhiteSpace(databaseName)) { - dbExists = isSqliteDB - ? await ioManager.FileExists(databaseName, cancellationToken).ConfigureAwait(false) - : await PromptYesNo("Does this database already exist? (y/n): ", cancellationToken).ConfigureAwait(false); - - if (!dbExists && isSqliteDB) - databaseName = await ValidateNonExistantSqliteDBName(databaseName, cancellationToken).ConfigureAwait(false); + if (isSqliteDB) + { + dbExists = await ioManager.FileExists(databaseName, cancellationToken).ConfigureAwait(false); + if (!dbExists) + databaseName = await ValidateNonExistantSqliteDBName(databaseName, cancellationToken).ConfigureAwait(false); + } + else + await PromptYesNo("Does this database already exist? (y/n): ", cancellationToken).ConfigureAwait(false); } if (String.IsNullOrWhiteSpace(databaseName))