insight/src/Api/Insight.Api/Controllers/UpdateController.cs
2023-09-21 18:58:32 +02:00

93 lines
No EOL
3.1 KiB
C#

using Insight.Api;
using Insight.Domain.Models;
using Microsoft.AspNetCore.Mvc;
namespace Insight.Server.Controllers
{
[ApiController, Route("api/update")]
public class UpdateController : ControllerBase
{
private readonly ILogger<UpdateController> _logger;
public UpdateController(ILogger<UpdateController> logger)
{
_logger = logger;
}
[HttpGet("updater/windows")]
public IActionResult UpdaterWindows()
{
_logger.LogInformation("[{method}] {route} => {ep}", Request.Method, Request.HttpContext.Request.Path, Request.HttpContext.Connection.RemoteIpAddress);
var updateDir = new DirectoryInfo($"{Locations.UpdatesPath}/updater/windows");
if (updateDir.Exists is false)
{
return NotFound();
}
var updateLock = new FileInfo($"{updateDir.FullName}/.lock");
if (updateLock.Exists)
{
return NotFound("locked");
}
var versions = updateDir.GetFiles("*.zip", SearchOption.TopDirectoryOnly);
if (versions is null || versions.Any() is false) return NotFound();
var latest = versions.OrderBy(x => x.Name).FirstOrDefault();
if (latest is null) return NotFound();
var relPath = $"{Path.GetRelativePath($"{Domain.Constants.Configuration.AppDirectory?.FullName}", latest.FullName)}";
if (Version.TryParse(Path.GetFileNameWithoutExtension(latest.Name), out var fileversion) is false) return NotFound();
return Ok(new UpdateResponse
{
Version = fileversion,
Uri = new Uri($"{Request.Scheme}://{Request.Host}/api/{relPath}")
});
}
[HttpGet("agent/windows")]
public IActionResult AgentWindows()
{
_logger.LogInformation("[{method}] {route} => {ep}", Request.Method, Request.HttpContext.Request.Path, Request.HttpContext.Connection.RemoteIpAddress);
var updateDir = new DirectoryInfo($"{Locations.UpdatesPath}/agent/windows");
if (updateDir.Exists is false)
{
return NotFound();
}
var updateLock = new FileInfo($"{updateDir.FullName}/.lock");
if (updateLock.Exists)
{
return NotFound("locked");
}
var versions = updateDir.GetFiles("*.zip", SearchOption.TopDirectoryOnly);
if (versions is null || versions.Any() is false) return NotFound();
var latest = versions.OrderBy(x => x.Name).FirstOrDefault();
if (latest is null) return NotFound();
var relPath = $"{Path.GetRelativePath($"{Domain.Constants.Configuration.AppDirectory?.FullName}", latest.FullName)}";
if (Version.TryParse(Path.GetFileNameWithoutExtension(latest.Name), out var fileversion) is false) return NotFound();
return Ok(new UpdateResponse
{
Version = fileversion,
Uri = new Uri($"{Request.Scheme}://{Request.Host}/api/{relPath}")
});
}
}
}