73 lines
1.8 KiB
C#
73 lines
1.8 KiB
C#
using System.Net;
|
|
using AVSCartonShipmentVerifier.Configuration;
|
|
using AVSCartonShipmentVerifier.Hosting;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace AVSCartonShipmentVerifier.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/desktop")]
|
|
public sealed class DesktopController : ControllerBase
|
|
{
|
|
private readonly DesktopShutdownService _shutdown;
|
|
private readonly IOptions<DesktopHostOptions> _options;
|
|
|
|
public DesktopController(DesktopShutdownService shutdown, IOptions<DesktopHostOptions> options)
|
|
{
|
|
_shutdown = shutdown;
|
|
_options = options;
|
|
}
|
|
|
|
[HttpPost("register-session")]
|
|
public IActionResult RegisterSession()
|
|
{
|
|
if (!IsShutdownEnabled() || !IsLocalRequest())
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
_shutdown.MarkDashboardSessionActive();
|
|
_shutdown.CancelScheduledShutdown();
|
|
return Ok();
|
|
}
|
|
|
|
[HttpPost("schedule-shutdown")]
|
|
public IActionResult ScheduleShutdown()
|
|
{
|
|
if (!IsShutdownEnabled() || !IsLocalRequest())
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
if (!_shutdown.IsLifecycleShutdownAllowed)
|
|
{
|
|
return Ok();
|
|
}
|
|
|
|
var delay = TimeSpan.FromSeconds(Math.Max(1, _options.Value.BrowserShutdownDelaySeconds));
|
|
_shutdown.ScheduleShutdown(delay);
|
|
return Ok();
|
|
}
|
|
|
|
[HttpPost("cancel-shutdown")]
|
|
public IActionResult CancelShutdown()
|
|
{
|
|
if (!IsShutdownEnabled() || !IsLocalRequest())
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
_shutdown.CancelScheduledShutdown();
|
|
return Ok();
|
|
}
|
|
|
|
private bool IsShutdownEnabled() => _options.Value.ExitWhenBrowserCloses;
|
|
|
|
private bool IsLocalRequest()
|
|
{
|
|
var remote = HttpContext.Connection.RemoteIpAddress;
|
|
return remote is null || IPAddress.IsLoopback(remote);
|
|
}
|
|
}
|