diff --git a/Iceshrimp.Backend/Controllers/Web/VersionController.cs b/Iceshrimp.Backend/Controllers/Web/VersionController.cs new file mode 100644 index 00000000..fefba8f5 --- /dev/null +++ b/Iceshrimp.Backend/Controllers/Web/VersionController.cs @@ -0,0 +1,33 @@ +using System.Net; +using System.Net.Mime; +using Iceshrimp.Backend.Controllers.Shared.Attributes; +using Iceshrimp.Backend.Core.Middleware; +using Iceshrimp.Shared.Helpers; +using Iceshrimp.Shared.Schemas.Web; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.RateLimiting; + +namespace Iceshrimp.Backend.Controllers.Web; + +[ApiController] +[Authenticate] +[EnableRateLimiting("sliding")] +[Route("/api/iceshrimp/version")] +[Produces(MediaTypeNames.Application.Json)] +public class VersionController : ControllerBase +{ + [HttpGet] + [ProducesResults(HttpStatusCode.OK)] + public Task GetVersion() + { + var version = VersionHelpers.GetVersionInfo(); + return Task.FromResult(new VersionResponse + { + Codename = version.Codename, + CommitHash = version.CommitHash, + Edition = version.Edition, + Version = version.Version, + RawVersion = version.RawVersion + }); + } +} \ No newline at end of file diff --git a/Iceshrimp.Shared/Schemas/Web/VersionResponse.cs b/Iceshrimp.Shared/Schemas/Web/VersionResponse.cs new file mode 100644 index 00000000..ace415d2 --- /dev/null +++ b/Iceshrimp.Shared/Schemas/Web/VersionResponse.cs @@ -0,0 +1,10 @@ +namespace Iceshrimp.Shared.Schemas.Web; + +public class VersionResponse +{ + public required string Codename { get; set; } + public required string Edition { get; set; } + public required string? CommitHash { get; set; } + public required string RawVersion { get; set; } + public required string Version { get; set; } +} \ No newline at end of file