mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-01 05:13:14 +00:00
57 lines
2.1 KiB
C#
57 lines
2.1 KiB
C#
using Api.SeaHavenIndustries.Options;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace Api.SeaHavenIndustries.Middleware
|
|
{
|
|
/// <summary>Adds Sunset/Deprecation headers to legacy WorkOrder REST routes.</summary>
|
|
public class LegacyDeprecationMiddleware
|
|
{
|
|
private static readonly HashSet<string> LegacyPathSegments = new(StringComparer.OrdinalIgnoreCase)
|
|
{
|
|
"GetWorkOrderList",
|
|
"AddWorkorder",
|
|
"EditWorkorder",
|
|
"ChangeStatus",
|
|
"ChangeAssignment",
|
|
"DeleteWorkorder",
|
|
"GetWorkorderById"
|
|
};
|
|
|
|
private readonly RequestDelegate _next;
|
|
private readonly LegacyEndpointOptions _options;
|
|
|
|
public LegacyDeprecationMiddleware(RequestDelegate next, IOptions<LegacyEndpointOptions> options)
|
|
{
|
|
_next = next;
|
|
_options = options.Value;
|
|
}
|
|
|
|
public async Task InvokeAsync(HttpContext context)
|
|
{
|
|
if (_options.DeprecationEnabled)
|
|
{
|
|
var path = context.Request.Path.Value ?? "";
|
|
var isLegacyWo = (path.Contains("/WorkOrder", StringComparison.OrdinalIgnoreCase)
|
|
|| path.Contains("/workorders", StringComparison.OrdinalIgnoreCase))
|
|
&& LegacyPathSegments.Any(seg => path.Contains(seg, StringComparison.OrdinalIgnoreCase));
|
|
|
|
if (isLegacyWo)
|
|
{
|
|
context.Response.OnStarting(() =>
|
|
{
|
|
context.Response.Headers["Deprecation"] = "true";
|
|
if (!string.IsNullOrWhiteSpace(_options.SunsetDate)
|
|
&& DateTimeOffset.TryParse(_options.SunsetDate, out var sunset))
|
|
{
|
|
context.Response.Headers["Sunset"] = sunset.UtcDateTime.ToString("r");
|
|
}
|
|
context.Response.Headers["Link"] = "</api/workorders/board>; rel=\"successor-version\"";
|
|
return Task.CompletedTask;
|
|
});
|
|
}
|
|
}
|
|
|
|
await _next(context);
|
|
}
|
|
}
|
|
}
|