diff --git a/src/Tgstation.Server.Host.Console/Program.cs b/src/Tgstation.Server.Host.Console/Program.cs
index 88dddf9abe..54cdad151b 100644
--- a/src/Tgstation.Server.Host.Console/Program.cs
+++ b/src/Tgstation.Server.Host.Console/Program.cs
@@ -24,13 +24,16 @@ namespace Tgstation.Server.Host.Console
/// A representing the running operation
internal static async Task Main(string[] args)
{
- using (var loggerFactory = LoggerFactory.Create(
- builder => builder.AddConsole()))
+ using (var loggerFactory = new LoggerFactory())
{
var arguments = new List(args);
var trace = arguments.Remove("--trace-host-watchdog");
var debug = arguments.Remove("--debug-host-watchdog");
+#pragma warning disable CS0618 // Type or member is obsolete
+ loggerFactory.AddConsole(trace ? LogLevel.Trace : debug ? LogLevel.Debug : LogLevel.Information, true);
+#pragma warning restore CS0618 // Type or member is obsolete
+
if (trace && debug)
{
loggerFactory.CreateLogger(nameof(Program)).LogCritical("Please specify only 1 of --trace-host-watchdog or --debug-host-watchdog!");
diff --git a/src/Tgstation.Server.Host.Console/Tgstation.Server.Host.Console.csproj b/src/Tgstation.Server.Host.Console/Tgstation.Server.Host.Console.csproj
index 2af9fc7bd2..86cbf78c30 100644
--- a/src/Tgstation.Server.Host.Console/Tgstation.Server.Host.Console.csproj
+++ b/src/Tgstation.Server.Host.Console/Tgstation.Server.Host.Console.csproj
@@ -27,7 +27,7 @@
all
compile; build; native; contentfiles; analyzers
-
+
all
runtime; build; native; contentfiles; analyzers
diff --git a/src/Tgstation.Server.Host.Service/Program.cs b/src/Tgstation.Server.Host.Service/Program.cs
index 4d9b81d8cc..1ec0f9eae2 100644
--- a/src/Tgstation.Server.Host.Service/Program.cs
+++ b/src/Tgstation.Server.Host.Service/Program.cs
@@ -108,18 +108,7 @@ namespace Tgstation.Server.Host.Service
}
}
- bool serviceWillRun = !Configure && !Install && !Uninstall;
- ServerService service = null;
- ILoggerFactory loggerFactory = null;
- using (loggerFactory = LoggerFactory.Create(builder =>
- {
- if (serviceWillRun)
- {
- LogLevel logLevel = Trace ? LogLevel.Trace : Debug ? LogLevel.Debug : LogLevel.Information;
- service = new ServerService(WatchdogFactory, builder, () => loggerFactory, logLevel);
- }
- }))
- using(service)
+ using (var loggerFactory = new LoggerFactory())
{
if (Configure)
await WatchdogFactory.CreateWatchdog(loggerFactory).RunAsync(true, Array.Empty(), default).ConfigureAwait(false);
@@ -153,7 +142,8 @@ namespace Tgstation.Server.Host.Service
installer.ServiceName = ServerService.Name;
installer.Uninstall(null);
}
- else if (serviceWillRun)
+ else if (!Configure)
+ using (var service = new ServerService(WatchdogFactory, loggerFactory, Trace ? LogLevel.Trace : Debug ? LogLevel.Debug : LogLevel.Information))
ServiceBase.Run(service);
}
}
diff --git a/src/Tgstation.Server.Host.Service/ServerService.cs b/src/Tgstation.Server.Host.Service/ServerService.cs
index 42bb08041f..f94ed5fdcb 100644
--- a/src/Tgstation.Server.Host.Service/ServerService.cs
+++ b/src/Tgstation.Server.Host.Service/ServerService.cs
@@ -21,17 +21,12 @@ namespace Tgstation.Server.Host.Service
public const string Name = "tgstation-server-4";
///
- /// The for the
+ /// The for the
///
- readonly IWatchdogFactory watchdogFactory;
+ readonly IWatchdog watchdog;
///
- /// The used to retrieve a configured .
- ///
- readonly Func getLoggerFactory;
-
- ///
- /// The recieved from .
+ /// The recieved from of
///
Task watchdogTask;
@@ -43,39 +38,39 @@ namespace Tgstation.Server.Host.Service
///
/// Construct a
///
- /// The value of .
- /// The to configure.
- /// The used to retrieve a based on the configuration.
+ /// The to create with
+ /// The for
/// The minimum to record in the event log
- public ServerService(IWatchdogFactory watchdogFactory, ILoggingBuilder loggingBuilder, Func getLoggerFactory, LogLevel minumumLogLevel)
+ public ServerService(IWatchdogFactory watchdogFactory, ILoggerFactory loggerFactory, LogLevel minumumLogLevel)
{
- this.watchdogFactory = watchdogFactory ?? throw new ArgumentNullException(nameof(watchdogFactory));
- if (loggingBuilder == null)
- throw new ArgumentNullException(nameof(loggingBuilder));
- this.getLoggerFactory = getLoggerFactory ?? throw new ArgumentNullException(nameof(getLoggerFactory));
+ if (watchdogFactory == null)
+ throw new ArgumentNullException(nameof(watchdogFactory));
+ if (loggerFactory == null)
+ throw new ArgumentNullException(nameof(loggerFactory));
- ServiceName = Name;
-
- loggingBuilder.AddEventLog(new EventLogSettings
+#pragma warning disable CS0618 // Type or member is obsolete
+ loggerFactory.AddEventLog(new EventLogSettings
{
LogName = EventLog.Log,
MachineName = EventLog.MachineName,
SourceName = EventLog.Source,
Filter = (message, logLevel) => logLevel >= minumumLogLevel
});
+#pragma warning restore CS0618 // Type or member is obsolete
+
+ ServiceName = Name;
+ watchdog = watchdogFactory.CreateWatchdog(loggerFactory);
}
///
- /// Creates and executes the watchdog stopping the service if it exits
+ /// Executes the , stopping the service if it exits
///
- /// The arguments for the watchdog.
+ /// The arguments for the
/// The for the operation
/// A representing the running operation
async Task RunWatchdog(string[] args, CancellationToken cancellationToken)
{
- var watchdog = watchdogFactory.CreateWatchdog(getLoggerFactory());
-
- await watchdog.RunAsync(false, args, cancellationToken).ConfigureAwait(false);
+ await watchdog.RunAsync(false, args, cancellationTokenSource.Token).ConfigureAwait(false);
void StopServiceAsync()
{
diff --git a/src/Tgstation.Server.Host.Service/Tgstation.Server.Host.Service.csproj b/src/Tgstation.Server.Host.Service/Tgstation.Server.Host.Service.csproj
index 626248bcdf..479e6d6b87 100644
--- a/src/Tgstation.Server.Host.Service/Tgstation.Server.Host.Service.csproj
+++ b/src/Tgstation.Server.Host.Service/Tgstation.Server.Host.Service.csproj
@@ -28,7 +28,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers
diff --git a/src/Tgstation.Server.Host.Watchdog/Tgstation.Server.Host.Watchdog.csproj b/src/Tgstation.Server.Host.Watchdog/Tgstation.Server.Host.Watchdog.csproj
index 38cce74426..b25f01246a 100644
--- a/src/Tgstation.Server.Host.Watchdog/Tgstation.Server.Host.Watchdog.csproj
+++ b/src/Tgstation.Server.Host.Watchdog/Tgstation.Server.Host.Watchdog.csproj
@@ -27,7 +27,7 @@
all
compile; build; native; contentfiles; analyzers
-
+
all
runtime; build; native; contentfiles; analyzers
diff --git a/src/Tgstation.Server.Host/Controllers/ApiController.cs b/src/Tgstation.Server.Host/Controllers/ApiController.cs
index f937018e41..9565072343 100644
--- a/src/Tgstation.Server.Host/Controllers/ApiController.cs
+++ b/src/Tgstation.Server.Host/Controllers/ApiController.cs
@@ -18,7 +18,6 @@ namespace Tgstation.Server.Host.Controllers
/// A for API functions
///
[Produces(ApiHeaders.ApplicationJson)]
- [Consumes(ApiHeaders.ApplicationJson)]
public abstract class ApiController : Controller
{
///
diff --git a/src/Tgstation.Server.Host/Core/Application.cs b/src/Tgstation.Server.Host/Core/Application.cs
index fa37e32823..4f5438ca5f 100644
--- a/src/Tgstation.Server.Host/Core/Application.cs
+++ b/src/Tgstation.Server.Host/Core/Application.cs
@@ -104,6 +104,9 @@ namespace Tgstation.Server.Host.Core
// enable options which give us config reloading
services.AddOptions();
+ // this is needful for the setup wizard
+ services.AddLogging();
+
// other stuff needed for for setup wizard and configuration
services.AddSingleton();
services.AddSingleton();
@@ -231,9 +234,8 @@ namespace Tgstation.Server.Host.Core
// enable browser detection
services.AddDetectionCore().AddBrowser();
- // enable CORS if necessary
- if (controlPanelConfiguration.AllowAnyOrigin || controlPanelConfiguration.AllowedOrigins?.Count > 0)
- services.AddCors();
+ // CORS conditionally enabled later
+ services.AddCors();
void AddTypedContext() where TContext : DatabaseContext
{
@@ -369,12 +371,13 @@ namespace Tgstation.Server.Host.Core
corsBuilder = builder => builder.WithOrigins(controlPanelConfiguration.AllowedOrigins.ToArray());
}
- if (corsBuilder != null)
+ var originalBuilder = corsBuilder;
+ corsBuilder = builder =>
{
- var originalBuilder = corsBuilder;
- corsBuilder = builder => originalBuilder(builder.AllowAnyHeader().AllowAnyMethod());
- applicationBuilder.UseCors(corsBuilder);
- }
+ builder.AllowAnyHeader().AllowAnyMethod();
+ originalBuilder?.Invoke(builder);
+ };
+ applicationBuilder.UseCors(corsBuilder);
// Do not service requests until Ready is called, this will return 503 until that point
applicationBuilder.UseAsyncInitialization(async cancellationToken =>
diff --git a/src/Tgstation.Server.Host/Core/SetupWizard.cs b/src/Tgstation.Server.Host/Core/SetupWizard.cs
index ed782260ff..b7ef8aa1db 100644
--- a/src/Tgstation.Server.Host/Core/SetupWizard.cs
+++ b/src/Tgstation.Server.Host/Core/SetupWizard.cs
@@ -274,8 +274,10 @@ namespace Tgstation.Server.Host.Core
await console.WriteAsync("Testing create DB permission...", true, cancellationToken).ConfigureAwait(false);
using (var command = testConnection.CreateCommand())
{
- command.CommandText = "CREATE DATABASE ?";
- command.Parameters.Add(databaseName);
+ // I really don't care about user sanitization here, they want to fuck their own DB? so be it
+#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
+ command.CommandText = $"CREATE DATABASE {databaseName}";
+#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities
await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
}
@@ -283,8 +285,9 @@ namespace Tgstation.Server.Host.Core
await console.WriteAsync("Dropping test database...", true, cancellationToken).ConfigureAwait(false);
using (var command = testConnection.CreateCommand())
{
- command.CommandText = "DROP DATABASE ?";
- command.Parameters.Add(databaseName);
+#pragma warning disable CA2100 // Review SQL queries for security vulnerabilities
+ command.CommandText = $"DROP DATABASE {databaseName}";
+#pragma warning restore CA2100 // Review SQL queries for security vulnerabilities
try
{
await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
diff --git a/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs b/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs
index 8bc131c39b..45cbec1e27 100644
--- a/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs
+++ b/src/Tgstation.Server.Host/Models/Migrations/MySqlDesignTimeDbContextFactory.cs
@@ -12,7 +12,7 @@ namespace Tgstation.Server.Host.Models.Migrations
///
public MySqlDatabaseContext CreateDbContext(string[] args)
{
- using (var loggerFactory = LoggerFactory.Create(builder => { }))
+ using (var loggerFactory = new LoggerFactory())
{
return new MySqlDatabaseContext(new DbContextOptions(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher())), loggerFactory.CreateLogger());
}
diff --git a/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs b/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs
index 4ae89b26f1..413bfbc5aa 100644
--- a/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs
+++ b/src/Tgstation.Server.Host/Models/Migrations/SqlServerDesignTimeDbContextFactory.cs
@@ -12,7 +12,7 @@ namespace Tgstation.Server.Host.Models.Migrations
///
public SqlServerDatabaseContext CreateDbContext(string[] args)
{
- using (var loggerFactory = LoggerFactory.Create(builder => { }))
+ using (var loggerFactory = new LoggerFactory())
{
return new SqlServerDatabaseContext(new DbContextOptions(), DesignTimeDbContextFactoryHelpers.GetDbContextOptions(), new DatabaseSeeder(new CryptographySuite(new PasswordHasher())), loggerFactory.CreateLogger());
}
diff --git a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj
index f42cd119c1..10e2edcd18 100644
--- a/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj
+++ b/src/Tgstation.Server.Host/Tgstation.Server.Host.csproj
@@ -56,7 +56,7 @@
-
+
@@ -64,16 +64,16 @@
all
runtime; build; native; contentfiles; analyzers
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers
-
+
@@ -85,7 +85,7 @@
-
+
diff --git a/tests/Tgstation.Server.Api.Tests/Tgstation.Server.Api.Tests.csproj b/tests/Tgstation.Server.Api.Tests/Tgstation.Server.Api.Tests.csproj
index 96f5271bd2..437b828ee5 100644
--- a/tests/Tgstation.Server.Api.Tests/Tgstation.Server.Api.Tests.csproj
+++ b/tests/Tgstation.Server.Api.Tests/Tgstation.Server.Api.Tests.csproj
@@ -1,4 +1,4 @@
-
+
netcoreapp2.1
@@ -10,7 +10,7 @@
-
+
diff --git a/tests/Tgstation.Server.Client.Tests/Tgstation.Server.Client.Tests.csproj b/tests/Tgstation.Server.Client.Tests/Tgstation.Server.Client.Tests.csproj
index 630454e342..aea9a97479 100644
--- a/tests/Tgstation.Server.Client.Tests/Tgstation.Server.Client.Tests.csproj
+++ b/tests/Tgstation.Server.Client.Tests/Tgstation.Server.Client.Tests.csproj
@@ -1,4 +1,4 @@
-
+
netcoreapp2.1
@@ -9,7 +9,7 @@
-
+
diff --git a/tests/Tgstation.Server.Host.Console.Tests/Tgstation.Server.Host.Console.Tests.csproj b/tests/Tgstation.Server.Host.Console.Tests/Tgstation.Server.Host.Console.Tests.csproj
index f4b36fb2ca..0164631270 100644
--- a/tests/Tgstation.Server.Host.Console.Tests/Tgstation.Server.Host.Console.Tests.csproj
+++ b/tests/Tgstation.Server.Host.Console.Tests/Tgstation.Server.Host.Console.Tests.csproj
@@ -1,4 +1,4 @@
-
+
netcoreapp2.1
@@ -9,7 +9,7 @@
-
+
diff --git a/tests/Tgstation.Server.Host.Service.Tests/TestServerService.cs b/tests/Tgstation.Server.Host.Service.Tests/TestServerService.cs
index ce4f7fc2c0..4cbfc16d8e 100644
--- a/tests/Tgstation.Server.Host.Service.Tests/TestServerService.cs
+++ b/tests/Tgstation.Server.Host.Service.Tests/TestServerService.cs
@@ -18,11 +18,11 @@ namespace Tgstation.Server.Host.Service.Tests
[TestMethod]
public void TestConstructionAndDisposal()
{
- Assert.ThrowsException(() => new ServerService(null, null, null, default));
+ Assert.ThrowsException(() => new ServerService(null, null, default));
var mockWatchdogFactory = new Mock();
- Assert.ThrowsException(() => new ServerService(mockWatchdogFactory.Object, null, null, default));
- LoggerFactory.Create(builder => Assert.ThrowsException(() => new ServerService(mockWatchdogFactory.Object, builder, null, default)));
- LoggerFactory.Create(builder => { new ServerService(mockWatchdogFactory.Object, builder, () => null, default).Dispose(); });
+ Assert.ThrowsException(() => new ServerService(mockWatchdogFactory.Object, null, default));
+ var mockLoggerFactory = new LoggerFactory();
+ new ServerService(mockWatchdogFactory.Object, mockLoggerFactory, default).Dispose();
}
[TestMethod]
@@ -34,32 +34,23 @@ namespace Tgstation.Server.Host.Service.Tests
var mockWatchdog = new Mock();
var args = Array.Empty();
- CancellationToken cancellationToken, originalToken;
- using(var cts = new CancellationTokenSource())
- {
- originalToken = cts.Token;
- cancellationToken = originalToken;
- }
- var cancelled = false;
-
- mockWatchdog.Setup(x => x.RunAsync(false, args, It.IsAny())).Callback((bool x, string[] _, CancellationToken token) => token.Register(() => cancelled = true)).Returns(Task.CompletedTask).Verifiable();
+ CancellationToken cancellationToken;
+ mockWatchdog.Setup(x => x.RunAsync(false, args, It.IsAny())).Callback((bool x, string[] _, CancellationToken token) => cancellationToken = token).Returns(Task.CompletedTask).Verifiable();
var mockWatchdogFactory = new Mock();
+ var mockLoggerFactory = new LoggerFactory();
+ mockWatchdogFactory.Setup(x => x.CreateWatchdog(mockLoggerFactory)).Returns(mockWatchdog.Object).Verifiable();
- ServerService service = null;
- ILoggerFactory loggerFactory = null;
- using (loggerFactory = LoggerFactory.Create(builder => service = new ServerService(mockWatchdogFactory.Object, builder, () => loggerFactory, default)))
- using (service)
+ using (var service = new ServerService(mockWatchdogFactory.Object, mockLoggerFactory, default))
{
- mockWatchdogFactory.Setup(x => x.CreateWatchdog(loggerFactory)).Returns(mockWatchdog.Object).Verifiable();
- Assert.IsFalse(cancelled);
onStart.Invoke(service, new object[] { args });
- mockWatchdog.VerifyAll();
- Assert.AreNotSame(cancellationToken, originalToken);
+ Assert.IsFalse(cancellationToken.IsCancellationRequested);
onStop.Invoke(service, Array.Empty
-
+
diff --git a/tests/Tgstation.Server.Host.Watchdog.Tests/Tgstation.Server.Host.Watchdog.Tests.csproj b/tests/Tgstation.Server.Host.Watchdog.Tests/Tgstation.Server.Host.Watchdog.Tests.csproj
index 9ea94c013c..8eec7201d2 100644
--- a/tests/Tgstation.Server.Host.Watchdog.Tests/Tgstation.Server.Host.Watchdog.Tests.csproj
+++ b/tests/Tgstation.Server.Host.Watchdog.Tests/Tgstation.Server.Host.Watchdog.Tests.csproj
@@ -1,4 +1,4 @@
-
+
netcoreapp2.1
@@ -15,7 +15,7 @@
-
+
diff --git a/tests/Tgstation.Server.Tests/IntegrationTest.cs b/tests/Tgstation.Server.Tests/IntegrationTest.cs
index a77962acd1..d5b1fe13ef 100644
--- a/tests/Tgstation.Server.Tests/IntegrationTest.cs
+++ b/tests/Tgstation.Server.Tests/IntegrationTest.cs
@@ -117,7 +117,7 @@ namespace Tgstation.Server.Tests
}
catch (ServiceUnavailableException)
{
- //migrating, to be expected
+ // migrating, to be expected
if (DateTimeOffset.Now > giveUpAt)
throw;
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
diff --git a/tests/Tgstation.Server.Tests/Tgstation.Server.Tests.csproj b/tests/Tgstation.Server.Tests/Tgstation.Server.Tests.csproj
index 1e79b7ab42..2b58b04e27 100644
--- a/tests/Tgstation.Server.Tests/Tgstation.Server.Tests.csproj
+++ b/tests/Tgstation.Server.Tests/Tgstation.Server.Tests.csproj
@@ -1,4 +1,4 @@
-
+
netcoreapp2.1
@@ -9,7 +9,7 @@
-
+