diff --git a/src/Tgstation.Server.Host/Controllers/ChatController.cs b/src/Tgstation.Server.Host/Controllers/ChatController.cs
index 20afd6691e..6cda73d094 100644
--- a/src/Tgstation.Server.Host/Controllers/ChatController.cs
+++ b/src/Tgstation.Server.Host/Controllers/ChatController.cs
@@ -121,13 +121,10 @@ namespace Tgstation.Server.Host.Controllers
///
[TgsAuthorize(ChatSettingsRights.Delete)]
- public override async Task Delete([FromBody] Api.Models.ChatSettings model, CancellationToken cancellationToken)
+ public override async Task Delete(long id, CancellationToken cancellationToken)
{
- if (model == null)
- throw new ArgumentNullException(nameof(model));
-
var instance = instanceManager.GetInstance(Instance);
- await Task.WhenAll(instance.Chat.DeleteConnection(model.Id, cancellationToken), DatabaseContext.ChatSettings.Where(x => x.Id == model.Id).DeleteAsync(cancellationToken)).ConfigureAwait(false);
+ await Task.WhenAll(instance.Chat.DeleteConnection(id, cancellationToken), DatabaseContext.ChatSettings.Where(x => x.Id == id).DeleteAsync(cancellationToken)).ConfigureAwait(false);
return Ok();
}
diff --git a/src/Tgstation.Server.Host/Controllers/DreamDaemonController.cs b/src/Tgstation.Server.Host/Controllers/DreamDaemonController.cs
index c1a4a6b673..b5574d49c7 100644
--- a/src/Tgstation.Server.Host/Controllers/DreamDaemonController.cs
+++ b/src/Tgstation.Server.Host/Controllers/DreamDaemonController.cs
@@ -49,6 +49,7 @@ namespace Tgstation.Server.Host.Controllers
[TgsAuthorize(DreamDaemonRights.Start)]
public override async Task Create([FromBody] DreamDaemon model, CancellationToken cancellationToken)
{
+ //alias for launching DD
var instance = instanceManager.GetInstance(Instance);
if (instance.Watchdog.Running)
@@ -113,8 +114,9 @@ namespace Tgstation.Server.Host.Controllers
///
[TgsAuthorize(DreamDaemonRights.Shutdown)]
- public override async Task Delete([FromBody] DreamDaemon model, CancellationToken cancellationToken)
+ public override async Task Delete(long id, CancellationToken cancellationToken)
{
+ //alias for stopping DD
var instance = instanceManager.GetInstance(Instance);
if (!instance.Watchdog.Running)
@@ -128,6 +130,7 @@ namespace Tgstation.Server.Host.Controllers
[TgsAuthorize(DreamDaemonRights.SetAutoStart | DreamDaemonRights.SetPorts | DreamDaemonRights.SetSecurity | DreamDaemonRights.SetWebClient | DreamDaemonRights.SoftRestart | DreamDaemonRights.SoftShutdown | DreamDaemonRights.Start | DreamDaemonRights.SetStartupTimeout)]
public override async Task Update([FromBody] DreamDaemon model, CancellationToken cancellationToken)
{
+ //alias for changing DD settings
var current = await DatabaseContext.Instances.Where(x => x.Id == Instance.Id).Select(x => x.DreamDaemonSettings).FirstAsync(cancellationToken).ConfigureAwait(false);
var userRights = (DreamDaemonRights)AuthenticationContext.GetRight(RightsType.DreamDaemon);
diff --git a/src/Tgstation.Server.Host/Controllers/DreamMakerController.cs b/src/Tgstation.Server.Host/Controllers/DreamMakerController.cs
index b936a07f87..3437886044 100644
--- a/src/Tgstation.Server.Host/Controllers/DreamMakerController.cs
+++ b/src/Tgstation.Server.Host/Controllers/DreamMakerController.cs
@@ -75,13 +75,20 @@ namespace Tgstation.Server.Host.Controllers
///
[TgsAuthorize(DreamMakerRights.CancelCompile)]
- public override async Task Delete([FromBody] Api.Models.DreamMaker model, CancellationToken cancellationToken)
+ public override async Task Delete(long id, CancellationToken cancellationToken)
{
//alias for cancelling the latest job
var job = await DatabaseContext.CompileJobs.OrderByDescending(x => x.Job.StartedAt).Select(x => new Job { Id = x.Job.Id, StoppedAt = x.Job.StoppedAt }).FirstAsync(cancellationToken).ConfigureAwait(false);
if (job.StoppedAt != null)
return StatusCode((int)HttpStatusCode.Gone);
- await jobManager.CancelJob(job, AuthenticationContext.User, cancellationToken).ConfigureAwait(false);
+ try
+ {
+ await jobManager.CancelJob(job, AuthenticationContext.User, cancellationToken).ConfigureAwait(false);
+ }
+ catch (InvalidOperationException) //job already stopped
+ {
+ return StatusCode((int)HttpStatusCode.Gone);
+ }
return Ok();
}
diff --git a/src/Tgstation.Server.Host/Controllers/InstanceUserController.cs b/src/Tgstation.Server.Host/Controllers/InstanceUserController.cs
index abe94e092c..9ddc1d43cc 100644
--- a/src/Tgstation.Server.Host/Controllers/InstanceUserController.cs
+++ b/src/Tgstation.Server.Host/Controllers/InstanceUserController.cs
@@ -140,7 +140,7 @@ namespace Tgstation.Server.Host.Controllers
public override async Task GetId(long id, CancellationToken cancellationToken)
{
//this functions as userId
- var user = await DatabaseContext.Instances.Where(x => x.Id == id).SelectMany(x => x.InstanceUsers).Where(x => x.UserId == id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);
+ var user = await DatabaseContext.Instances.Where(x => x.Id == Instance.Id).SelectMany(x => x.InstanceUsers).Where(x => x.UserId == id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);
if (user == default)
return NotFound();
return Json(user.ToApi());
@@ -148,13 +148,11 @@ namespace Tgstation.Server.Host.Controllers
///
[TgsAuthorize(AdministrationRights.EditUsers)]
- public override async Task Delete([FromBody] Api.Models.InstanceUser model, CancellationToken cancellationToken)
+ public override async Task Delete(long id, CancellationToken cancellationToken)
{
- var test = StandardModelChecks(model);
- if (test != null)
- return test;
+ //id is actually UserId
- await DatabaseContext.Instances.Where(x => x.Id == Instance.Id).SelectMany(x => x.InstanceUsers).Where(x => x.UserId == model.UserId).DeleteAsync(cancellationToken).ConfigureAwait(false);
+ await DatabaseContext.Instances.Where(x => x.Id == Instance.Id).SelectMany(x => x.InstanceUsers).Where(x => x.UserId == id).DeleteAsync(cancellationToken).ConfigureAwait(false);
return Ok();
}
}
diff --git a/src/Tgstation.Server.Host/Controllers/JobController.cs b/src/Tgstation.Server.Host/Controllers/JobController.cs
index cefec12234..8219125d29 100644
--- a/src/Tgstation.Server.Host/Controllers/JobController.cs
+++ b/src/Tgstation.Server.Host/Controllers/JobController.cs
@@ -53,10 +53,10 @@ namespace Tgstation.Server.Host.Controllers
///
[TgsAuthorize]
- public override async Task Delete([FromBody] Api.Models.Job model, CancellationToken cancellationToken)
+ public override async Task Delete(long id, CancellationToken cancellationToken)
{
//don't care if an instance post or not at this point
- var job = await DatabaseContext.Jobs.Where(x => x.Id == model.Id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);
+ var job = await DatabaseContext.Jobs.Where(x => x.Id == id).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);
if (job == default(Job))
return NotFound();
diff --git a/src/Tgstation.Server.Host/Controllers/ModelController.cs b/src/Tgstation.Server.Host/Controllers/ModelController.cs
index aec3cf3769..54ea395d7e 100644
--- a/src/Tgstation.Server.Host/Controllers/ModelController.cs
+++ b/src/Tgstation.Server.Host/Controllers/ModelController.cs
@@ -46,8 +46,8 @@ namespace Tgstation.Server.Host.Controllers
///
/// Attempt to get a specific a
///
- /// The for the operation
/// The ID of the model to get
+ /// The for the operation
/// A resulting in the of the operation
[HttpGet("/{0}")]
public virtual Task GetId(long id, CancellationToken cancellationToken) => Task.FromResult((IActionResult)NotFound());
@@ -62,13 +62,13 @@ namespace Tgstation.Server.Host.Controllers
public virtual Task Update([FromBody]TModel model, CancellationToken cancellationToken) => Task.FromResult((IActionResult)NotFound());
///
- /// Attempt to delete a
+ /// Attempt to delete a model with a particular
///
- /// The being deleted
+ /// The ID of the model to delete
/// The for the operation
/// A resulting in the of the operation
[HttpDelete]
- public virtual Task Delete([FromBody]TModel model, CancellationToken cancellationToken) => Task.FromResult((IActionResult)NotFound());
+ public virtual Task Delete(long id, CancellationToken cancellationToken) => Task.FromResult((IActionResult)NotFound());
///
/// Attempt to list entries of the
diff --git a/src/Tgstation.Server.Host/Core/JobManager.cs b/src/Tgstation.Server.Host/Core/JobManager.cs
index 03f12ef437..2f0dcc2a94 100644
--- a/src/Tgstation.Server.Host/Core/JobManager.cs
+++ b/src/Tgstation.Server.Host/Core/JobManager.cs
@@ -149,16 +149,19 @@ namespace Tgstation.Server.Host.Core
///
public async Task CancelJob(Job job, User user, CancellationToken cancellationToken)
{
- if (user != null)
- using (var scope = serviceProvider.CreateScope())
- {
- var databaseContext = scope.ServiceProvider.GetRequiredService();
- job = new Job { Id = job.Id };
- databaseContext.Jobs.Attach(job);
- job.CancelledBy = user;
- await databaseContext.Save(cancellationToken).ConfigureAwait(false);
- }
- CheckGetJob(job).Cancel();
+ if (job == null)
+ throw new ArgumentNullException(nameof(job));
+ if (user == null)
+ throw new ArgumentNullException(nameof(user));
+ CheckGetJob(job).Cancel(); //this will ensure the db update is only done once
+ using (var scope = serviceProvider.CreateScope())
+ {
+ var databaseContext = scope.ServiceProvider.GetRequiredService();
+ job = new Job { Id = job.Id };
+ databaseContext.Jobs.Attach(job);
+ job.CancelledBy = user;
+ await databaseContext.Save(cancellationToken).ConfigureAwait(false);
+ }
}
}
}