diff --git a/src/Tgstation.Server.Api/Models/Instance.cs b/src/Tgstation.Server.Api/Models/Instance.cs
index c1f198d30a..bde9f13522 100644
--- a/src/Tgstation.Server.Api/Models/Instance.cs
+++ b/src/Tgstation.Server.Api/Models/Instance.cs
@@ -23,7 +23,7 @@ namespace Tgstation.Server.Api.Models
public string Name { get; set; }
///
- /// The path to where the is located
+ /// The path to where the is located. Changing this will temporarily offline the while it moves
///
[Permissions(WriteRight = InstanceManagerRights.Relocate)]
[Required]
diff --git a/src/Tgstation.Server.Api/Models/Internal/Job.cs b/src/Tgstation.Server.Api/Models/Internal/Job.cs
index a3f38d806d..b8ebe63b70 100644
--- a/src/Tgstation.Server.Api/Models/Internal/Job.cs
+++ b/src/Tgstation.Server.Api/Models/Internal/Job.cs
@@ -6,7 +6,7 @@ namespace Tgstation.Server.Api.Models.Internal
///
/// Represents a long running job
///
- [Model]
+ [Model(RequiresInstance = true)]
public class Job
{
///
diff --git a/src/Tgstation.Server.Api/Models/Internal/User.cs b/src/Tgstation.Server.Api/Models/Internal/User.cs
index 2a62da30b2..e8c137c04a 100644
--- a/src/Tgstation.Server.Api/Models/Internal/User.cs
+++ b/src/Tgstation.Server.Api/Models/Internal/User.cs
@@ -16,6 +16,12 @@ namespace Tgstation.Server.Api.Models.Internal
[Permissions(DenyWrite = true)]
public long Id { get; set; }
+ ///
+ /// If the is enabled since users cannot be deleted. System users cannot be disabled
+ ///
+ [Permissions(WriteRight = AdministrationRights.EditUsers)]
+ public bool Enabled { get; set; }
+
///
/// When the was created
///
diff --git a/src/Tgstation.Server.Api/Models/User.cs b/src/Tgstation.Server.Api/Models/User.cs
index 78bdb3e934..83fac4e82f 100644
--- a/src/Tgstation.Server.Api/Models/User.cs
+++ b/src/Tgstation.Server.Api/Models/User.cs
@@ -4,9 +4,9 @@
public sealed class User : Internal.User
{
///
- /// If the is enabled since users cannot be deleted
+ /// The who created this
///
[Permissions(DenyWrite = true)]
- public bool Enabled { get; set; }
+ public User CreatedBy { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs b/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs
index ef28e52f8e..4afebe14a5 100644
--- a/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs
+++ b/src/Tgstation.Server.Host/Configuration/DatabaseConfiguration.cs
@@ -1,9 +1,23 @@
namespace Tgstation.Server.Host.Configuration
{
+ ///
+ /// Configuration options for the
+ ///
sealed class DatabaseConfiguration
{
+ ///
+ /// The key for the the resides in
+ ///
public const string Section = "Database";
+
+ ///
+ /// The to create
+ ///
public DatabaseType DatabaseType { get; set; }
+
+ ///
+ /// The connection string for the database
+ ///
public string ConnectionString { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Configuration/DatabaseType.cs b/src/Tgstation.Server.Host/Configuration/DatabaseType.cs
index 919c82ed47..bbc8be7798 100644
--- a/src/Tgstation.Server.Host/Configuration/DatabaseType.cs
+++ b/src/Tgstation.Server.Host/Configuration/DatabaseType.cs
@@ -1,9 +1,21 @@
namespace Tgstation.Server.Host.Configuration
{
+ ///
+ /// Type of database to user
+ ///
enum DatabaseType
{
+ ///
+ /// Use Microsoft SQL Server
+ ///
SqlServer,
+ ///
+ /// Use MySQL/MariaDB
+ ///
MySql,
+ ///
+ /// Use SQLite 3
+ ///
Sqlite
}
}
diff --git a/src/Tgstation.Server.Host/Core/Application.cs b/src/Tgstation.Server.Host/Core/Application.cs
index 9f8f436f50..146d764b45 100644
--- a/src/Tgstation.Server.Host/Core/Application.cs
+++ b/src/Tgstation.Server.Host/Core/Application.cs
@@ -6,7 +6,6 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
-using System.Collections.Generic;
using System.Globalization;
using Tgstation.Server.Host.Configuration;
using Tgstation.Server.Host.Models;
@@ -78,7 +77,7 @@ namespace Tgstation.Server.Host.Core
services.AddScoped(x => x.GetRequiredService());
break;
default:
- throw new InvalidOperationException("Invalid DatabaseType!");
+ throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Invalid {0}!", nameof(DatabaseType)));
}
services.AddSingleton();
@@ -100,11 +99,11 @@ namespace Tgstation.Server.Host.Core
applicationBuilder.UseAsyncInitialization(async (cancellationToken) =>
{
- using (var scop = applicationBuilder.ApplicationServices.CreateScope())
- await scop.ServiceProvider.GetRequiredService().Initialize(cancellationToken).ConfigureAwait(false);
+ using (var scope = applicationBuilder.ApplicationServices.CreateScope())
+ await scope.ServiceProvider.GetRequiredService().Initialize(cancellationToken).ConfigureAwait(false);
});
- applicationBuilder.UseSystemAuthentication();
+ applicationBuilder.UseAuthentication();
applicationBuilder.UseMvc();
}
diff --git a/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs b/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs
index a1714d6b5d..343053cdfd 100644
--- a/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs
+++ b/src/Tgstation.Server.Host/Core/ApplicationBuilderExtensions.cs
@@ -1,13 +1,18 @@
using Microsoft.AspNetCore.Builder;
-using System;
-using System.Collections.Generic;
-using System.Text;
namespace Tgstation.Server.Host.Core
{
+ ///
+ /// Extension methods for
+ ///
static class ApplicationBuilderExtensions
{
- public static IApplicationBuilder UseSystemAuthentication(this IApplicationBuilder applicationBuilder)
+ ///
+ /// Apply the middleware
+ ///
+ /// The to add the middleware for
+ ///
+ public static IApplicationBuilder UseAuthentication(this IApplicationBuilder applicationBuilder)
{
AuthenticationContext.AddToPipeline(applicationBuilder);
return applicationBuilder;
diff --git a/src/Tgstation.Server.Host/Core/AuthenticationContext.cs b/src/Tgstation.Server.Host/Core/AuthenticationContext.cs
index 9ba9cd4867..4737b0ad9b 100644
--- a/src/Tgstation.Server.Host/Core/AuthenticationContext.cs
+++ b/src/Tgstation.Server.Host/Core/AuthenticationContext.cs
@@ -7,6 +7,7 @@ using System.Threading;
using System.Threading.Tasks;
using Tgstation.Server.Api;
using Tgstation.Server.Host.Models;
+using Tgstation.Server.Api.Models;
namespace Tgstation.Server.Host.Core
{
@@ -55,7 +56,7 @@ namespace Tgstation.Server.Host.Core
{
if (headers.IsTokenAuthentication)
{
- var user = await tokenManager.GetUser(headers.Token, httpContext.RequestAborted).ConfigureAwait(false);
+ var user = await tokenManager.GetUser(new Token { Value = headers.Token }, httpContext.RequestAborted).ConfigureAwait(false);
systemIdentity = systemIdentityFactory.CreateSystemIdentity(user);
}
else
@@ -98,13 +99,13 @@ namespace Tgstation.Server.Host.Core
public void Dispose() => SystemIdentity.Dispose();
///
- public Task User(CancellationToken cancellationToken)
+ public Task User(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
///
- public Task InstanceUser(Instance instance, CancellationToken cancellationToken)
+ public Task InstanceUser(Models.Instance instance, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
diff --git a/src/Tgstation.Server.Host/Core/HttpContextExtensions.cs b/src/Tgstation.Server.Host/Core/HttpContextExtensions.cs
index 7bca0daf5b..f81085d310 100644
--- a/src/Tgstation.Server.Host/Core/HttpContextExtensions.cs
+++ b/src/Tgstation.Server.Host/Core/HttpContextExtensions.cs
@@ -1,12 +1,17 @@
using Microsoft.AspNetCore.Http;
-using System;
-using System.Collections.Generic;
-using System.Text;
namespace Tgstation.Server.Host.Core
{
+ ///
+ /// Extension methods for
+ ///
static class HttpContextExtensions
{
- public static IAuthenticationContext AuthenticationContext(this HttpContext httpContext) => Core.AuthenticationContext.Current(httpContext);
+ ///
+ /// Get the associated with the
+ ///
+ /// The containing the
+ /// The associated with the
+ public static IAuthenticationContext AuthenticationContext(this HttpContext httpContext) => Core.AuthenticationContext.Current(httpContext);
}
}
diff --git a/src/Tgstation.Server.Host/Core/IAuthenticationContext.cs b/src/Tgstation.Server.Host/Core/IAuthenticationContext.cs
index 1d2466bbaf..81dc20535f 100644
--- a/src/Tgstation.Server.Host/Core/IAuthenticationContext.cs
+++ b/src/Tgstation.Server.Host/Core/IAuthenticationContext.cs
@@ -25,9 +25,9 @@ namespace Tgstation.Server.Host.Core
///
/// The represented by and a given
///
- /// The of the
+ /// The of the
/// The for the operation
- /// A resulting in the represented by and a given
- Task InstanceUser(Instance instance, CancellationToken cancellationToken);
+ /// A resulting in the represented by and a given
+ Task InstanceUser(Instance instance, CancellationToken cancellationToken);
}
}
\ No newline at end of file
diff --git a/src/Tgstation.Server.Host/Core/IServerUpdateConsumer.cs b/src/Tgstation.Server.Host/Core/IServerUpdateConsumer.cs
index b22df996ed..9055b7206e 100644
--- a/src/Tgstation.Server.Host/Core/IServerUpdateConsumer.cs
+++ b/src/Tgstation.Server.Host/Core/IServerUpdateConsumer.cs
@@ -1,7 +1,14 @@
namespace Tgstation.Server.Host.Core
{
+ ///
+ /// Represents a service that may take an updated assembly and run it, stopping the current assembly in the process
+ ///
interface IServerUpdateConsumer
{
+ ///
+ /// Run a new assembly and stop the current one. This will likely trigger all active s
+ ///
+ /// The path to the new assembly
void ApplyUpdate(string updatePath);
}
}
diff --git a/src/Tgstation.Server.Host/Core/ISystemIdentity.cs b/src/Tgstation.Server.Host/Core/ISystemIdentity.cs
index 6f60a6bc99..8901917d98 100644
--- a/src/Tgstation.Server.Host/Core/ISystemIdentity.cs
+++ b/src/Tgstation.Server.Host/Core/ISystemIdentity.cs
@@ -3,12 +3,30 @@ using System.Collections.Generic;
namespace Tgstation.Server.Host.Core
{
+ ///
+ /// Represents a user on the current
+ ///
interface ISystemIdentity : IDisposable
{
+ ///
+ /// A unique identifier for the user
+ ///
string Uid { get; }
+
+ ///
+ /// The user's name
+ ///
string Username { get; }
+
+ ///
+ /// Groups the user is in
+ ///
IEnumerable Groups { get; }
+ ///
+ /// Clone the creating another copy that must have called on it
+ ///
+ /// A new mirroring the current one
ISystemIdentity Clone();
}
}
\ No newline at end of file
diff --git a/src/Tgstation.Server.Host/Core/ISystemIdentityFactory.cs b/src/Tgstation.Server.Host/Core/ISystemIdentityFactory.cs
index 05e03ea829..a0de1cda52 100644
--- a/src/Tgstation.Server.Host/Core/ISystemIdentityFactory.cs
+++ b/src/Tgstation.Server.Host/Core/ISystemIdentityFactory.cs
@@ -1,10 +1,25 @@
-using Tgstation.Server.Api.Models;
+using Tgstation.Server.Host.Models;
namespace Tgstation.Server.Host.Core
{
+ ///
+ /// Factory for s
+ ///
interface ISystemIdentityFactory
{
+ ///
+ /// Create a for a given
+ ///
+ /// The user to create a for
+ /// A new
ISystemIdentity CreateSystemIdentity(User user);
+
+ ///
+ /// Create a for a given username and password
+ ///
+ /// The username of the user
+ /// The password of the user
+ /// A new
ISystemIdentity CreateSystemIdentity(string username, string password);
}
}
diff --git a/src/Tgstation.Server.Host/Core/ITokenManager.cs b/src/Tgstation.Server.Host/Core/ITokenManager.cs
index e898760f51..d34def21a2 100644
--- a/src/Tgstation.Server.Host/Core/ITokenManager.cs
+++ b/src/Tgstation.Server.Host/Core/ITokenManager.cs
@@ -1,15 +1,27 @@
-using System.Collections.Generic;
-using System.Threading;
+using System.Threading;
using System.Threading.Tasks;
using Tgstation.Server.Api.Models;
namespace Tgstation.Server.Host.Core
{
+ ///
+ /// For creating and decoding JWTs
+ ///
interface ITokenManager
{
- Task GetUser(string token, CancellationToken cancellationToken);
- Task CreateToken(User user, CancellationToken cancellationToken);
- Task> UserTokens(User user, CancellationToken cancellationToken);
- Task> AllTokens(CancellationToken cancellationToken);
+ ///
+ /// Get the user associated with a
+ ///
+ /// The to get the user for
+ /// The for the operation
+ /// The associated with the
+ Task GetUser(Token token, CancellationToken cancellationToken);
+
+ ///
+ /// Create a for a given
+ ///
+ /// The to create the token for. Must have the and fields available
+ /// A new
+ Token CreateToken(Models.User user);
}
}
diff --git a/src/Tgstation.Server.Host/Models/ChatChannel.cs b/src/Tgstation.Server.Host/Models/ChatChannel.cs
index 8429585cdf..4e6878da32 100644
--- a/src/Tgstation.Server.Host/Models/ChatChannel.cs
+++ b/src/Tgstation.Server.Host/Models/ChatChannel.cs
@@ -1,9 +1,10 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class ChatChannel : Api.Models.ChatChannel
{
///
- /// The column ID
+ /// The row Id
///
public long Id { get; set; }
}
diff --git a/src/Tgstation.Server.Host/Models/ChatSettings.cs b/src/Tgstation.Server.Host/Models/ChatSettings.cs
index c62d8e23dd..8513dca245 100644
--- a/src/Tgstation.Server.Host/Models/ChatSettings.cs
+++ b/src/Tgstation.Server.Host/Models/ChatSettings.cs
@@ -3,17 +3,33 @@ using System.ComponentModel.DataAnnotations;
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class ChatSettings : Api.Models.Internal.ChatSettings
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
+ ///
+ /// The
+ ///
public long InstanceId { get; set; }
+ ///
+ /// The parent
+ ///
[Required]
public Instance Instance { get; set; }
+ ///
+ /// See
+ ///
public List AdminChannels { get; set; }
-
+
+ ///
+ /// See
+ ///
public List GeneralChannels { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/CompileJob.cs b/src/Tgstation.Server.Host/Models/CompileJob.cs
index 9e26c011e0..2b8404da46 100644
--- a/src/Tgstation.Server.Host/Models/CompileJob.cs
+++ b/src/Tgstation.Server.Host/Models/CompileJob.cs
@@ -2,11 +2,18 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class CompileJob : Api.Models.Internal.CompileJob
{
+ ///
+ /// See
+ ///
[Required]
public User TriggeredBy { get; set; }
+ ///
+ /// See
+ ///
[Required]
public RevisionInformation RevisionInformation { get; set; }
}
diff --git a/src/Tgstation.Server.Host/Models/DatabaseContext.cs b/src/Tgstation.Server.Host/Models/DatabaseContext.cs
index a429bf65eb..af4cd43664 100644
--- a/src/Tgstation.Server.Host/Models/DatabaseContext.cs
+++ b/src/Tgstation.Server.Host/Models/DatabaseContext.cs
@@ -26,15 +26,46 @@ namespace Tgstation.Server.Host.Models
/// The for s
///
public DbSet Logs { get; set; }
+
+ ///
+ /// The s in the
+ ///
public DbSet InstanceUsers { get; set; }
+ ///
+ /// The s in the
+ ///
public DbSet ChatChannels { get; set; }
+ ///
+ /// The s in the
+ ///
public DbSet ChatSettings { get; set; }
+ ///
+ /// The in the
+ ///
public DbSet DreamDaemonSettings { get; set; }
+ ///
+ /// The in the
+ ///
public DbSet DreamMakerSettings { get; set; }
+ ///
+ /// The s in the
+ ///
public DbSet CompileJobs { get; set; }
+ ///
+ /// The s in the
+ ///
public DbSet Jobs { get; set; }
+ ///
+ /// The s in the
+ ///
public DbSet TestMerges { get; set; }
+ ///
+ /// The s in the
+ ///
public DbSet RevisionInformations { get; set; }
+ ///
+ /// The in the
+ ///
public DbSet RepositorySettings { get; set; }
///
diff --git a/src/Tgstation.Server.Host/Models/DatabaseSeeder.cs b/src/Tgstation.Server.Host/Models/DatabaseSeeder.cs
index 6a2cd85c0d..fd9f0b93de 100644
--- a/src/Tgstation.Server.Host/Models/DatabaseSeeder.cs
+++ b/src/Tgstation.Server.Host/Models/DatabaseSeeder.cs
@@ -38,7 +38,8 @@ namespace Tgstation.Server.Host.Models
AdministrationRights = (AdministrationRights)~0,
CreatedAt = DateTimeOffset.Now,
InstanceManagerRights = (InstanceManagerRights)~0,
- Name = "Admin"
+ Name = "Admin",
+ Enabled = true,
};
cryptographySuite.RegenerateUserToken(admin);
cryptographySuite.SetUserPassword(admin, DefaultAdminPassword);
diff --git a/src/Tgstation.Server.Host/Models/DreamDaemonSettings.cs b/src/Tgstation.Server.Host/Models/DreamDaemonSettings.cs
index 2573093598..33d0246b77 100644
--- a/src/Tgstation.Server.Host/Models/DreamDaemonSettings.cs
+++ b/src/Tgstation.Server.Host/Models/DreamDaemonSettings.cs
@@ -2,19 +2,38 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class DreamDaemonSettings : Api.Models.Internal.DreamDaemonSettings
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
+ ///
+ /// The PID of a currently running DD instance
+ ///
public int? ProcessId { get; set; }
+ ///
+ /// The access token used for communication with DD
+ ///
public string AccessToken { get; set; }
-
+
+ ///
+ /// The
+ ///
public long InstanceId { get; set; }
+ ///
+ /// The parent
+ ///
[Required]
public Instance Instance { get; set; }
+ ///
+ /// See
+ ///
public CompileJob CompileJob { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/DreamMakerSettings.cs b/src/Tgstation.Server.Host/Models/DreamMakerSettings.cs
index fb79315315..c6621a07f4 100644
--- a/src/Tgstation.Server.Host/Models/DreamMakerSettings.cs
+++ b/src/Tgstation.Server.Host/Models/DreamMakerSettings.cs
@@ -2,15 +2,28 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class DreamMakerSettings : Api.Models.Internal.DreamMakerSettings
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
-
+
+ ///
+ /// The
+ ///
public long InstanceId { get; set; }
+ ///
+ /// The parent
+ ///
[Required]
public Instance Instance { get; set; }
- public CompileJob CompileJob { get; set; }
+ ///
+ ///
+ ///
+ public CompileJob LastJob { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/Instance.cs b/src/Tgstation.Server.Host/Models/Instance.cs
index 0ecb141755..1732bcd3c0 100644
--- a/src/Tgstation.Server.Host/Models/Instance.cs
+++ b/src/Tgstation.Server.Host/Models/Instance.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
-using Tgstation.Server.Api.Models;
namespace Tgstation.Server.Host.Models
{
@@ -21,9 +20,15 @@ namespace Tgstation.Server.Host.Models
[Required]
public DreamMakerSettings DreamMakerSettings { get; set; }
+ ///
+ /// The for the
+ ///
[Required]
public DreamDaemonSettings DreamDaemonSettings { get; set; }
+ ///
+ /// The for the
+ ///
[Required]
public RepositorySettings RepositorySettings { get; set; }
diff --git a/src/Tgstation.Server.Host/Models/InstanceUser.cs b/src/Tgstation.Server.Host/Models/InstanceUser.cs
index 7794b2d357..e2c343cbb1 100644
--- a/src/Tgstation.Server.Host/Models/InstanceUser.cs
+++ b/src/Tgstation.Server.Host/Models/InstanceUser.cs
@@ -1,7 +1,11 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class InstanceUser : Api.Models.InstanceUser
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/Job.cs b/src/Tgstation.Server.Host/Models/Job.cs
index e902cd9b96..005972d7d6 100644
--- a/src/Tgstation.Server.Host/Models/Job.cs
+++ b/src/Tgstation.Server.Host/Models/Job.cs
@@ -2,12 +2,13 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class Job : Api.Models.Internal.Job
{
+ ///
+ /// See
+ ///
[Required]
public User StartedBy { get; set; }
-
- [Required]
- public Instance Instance { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/RepositorySettings.cs b/src/Tgstation.Server.Host/Models/RepositorySettings.cs
index 782ef405db..5017df5343 100644
--- a/src/Tgstation.Server.Host/Models/RepositorySettings.cs
+++ b/src/Tgstation.Server.Host/Models/RepositorySettings.cs
@@ -2,15 +2,28 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class RepositorySettings : Api.Models.Internal.RepositorySettings
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
+ ///
+ /// The
+ ///
public long InstanceId { get; set; }
+ ///
+ /// The parent
+ ///
[Required]
public Instance Instance { get; set; }
-
+
+ ///
+ /// See
+ ///
public RevisionInformation RevisionInformation { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/RevisionInformation.cs b/src/Tgstation.Server.Host/Models/RevisionInformation.cs
index 5d5b9a4885..dddd11bb77 100644
--- a/src/Tgstation.Server.Host/Models/RevisionInformation.cs
+++ b/src/Tgstation.Server.Host/Models/RevisionInformation.cs
@@ -2,10 +2,17 @@
namespace Tgstation.Server.Host.Models
{
+ ///
sealed class RevisionInformation : Api.Models.Internal.RevisionInformation
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
-
+
+ ///
+ /// See
+ ///
public List TestMerges { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/ServerSettings.cs b/src/Tgstation.Server.Host/Models/ServerSettings.cs
index 8a84475dad..df05f75182 100644
--- a/src/Tgstation.Server.Host/Models/ServerSettings.cs
+++ b/src/Tgstation.Server.Host/Models/ServerSettings.cs
@@ -1,9 +1,11 @@
-using System.ComponentModel.DataAnnotations;
-
-namespace Tgstation.Server.Host.Models
+namespace Tgstation.Server.Host.Models
{
+ ///
sealed class ServerSettings : Api.Models.Internal.ServerSettings
{
+ ///
+ /// The row Id
+ ///
public long Id { get; set; }
}
}
diff --git a/src/Tgstation.Server.Host/Models/TestMerge.cs b/src/Tgstation.Server.Host/Models/TestMerge.cs
index b334c2b844..ad2eab8783 100644
--- a/src/Tgstation.Server.Host/Models/TestMerge.cs
+++ b/src/Tgstation.Server.Host/Models/TestMerge.cs
@@ -2,11 +2,12 @@
namespace Tgstation.Server.Host.Models
{
- ///
- /// Represent a merge of a live pull request
- ///
+ ///
sealed class TestMerge : Api.Models.Internal.TestMerge
{
+ ///
+ /// See
+ ///
[Required]
public User MergedBy { get; set; }
}
diff --git a/src/Tgstation.Server.Host/Models/User.cs b/src/Tgstation.Server.Host/Models/User.cs
index 139f940917..9977f81067 100644
--- a/src/Tgstation.Server.Host/Models/User.cs
+++ b/src/Tgstation.Server.Host/Models/User.cs
@@ -4,9 +4,7 @@ using Tgstation.Server.Host.Core;
namespace Tgstation.Server.Host.Models
{
- ///
- /// Represents a in the database
- ///
+ ///
sealed class User : Api.Models.Internal.User
{
///
@@ -20,6 +18,12 @@ namespace Tgstation.Server.Host.Models
[StringLength(CryptographySuite.SecureStringLength)]
public string TokenSecret { get; set; }
+ ///
+ /// See
+ ///
+ [Required]
+ public User CreatedBy { get; set; }
+
///
/// The s for the
///
diff --git a/src/Tgstation.Server.Host/ServerFactory.cs b/src/Tgstation.Server.Host/ServerFactory.cs
index f934789cf6..810ef924e2 100644
--- a/src/Tgstation.Server.Host/ServerFactory.cs
+++ b/src/Tgstation.Server.Host/ServerFactory.cs
@@ -1,5 +1,4 @@
using Microsoft.AspNetCore;
-using Microsoft.AspNetCore.Hosting;
using Tgstation.Server.Host.Startup;
namespace Tgstation.Server.Host