From 94dcaf2ea24e428f2957674ac46b864625782194 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Wed, 18 Feb 2026 22:39:49 +0100 Subject: Upgrade Swashbuckle to v10 --- .../Filters/SecuritySchemeReferenceFixupFilter.cs | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Jellyfin.Server/Filters/SecuritySchemeReferenceFixupFilter.cs (limited to 'Jellyfin.Server/Filters/SecuritySchemeReferenceFixupFilter.cs') diff --git a/Jellyfin.Server/Filters/SecuritySchemeReferenceFixupFilter.cs b/Jellyfin.Server/Filters/SecuritySchemeReferenceFixupFilter.cs new file mode 100644 index 0000000000..e4eb5be2b9 --- /dev/null +++ b/Jellyfin.Server/Filters/SecuritySchemeReferenceFixupFilter.cs @@ -0,0 +1,56 @@ +using Microsoft.OpenApi; +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace Jellyfin.Server.Filters; + +/// +/// Document filter that fixes security scheme references after document generation. +/// +/// +/// In Microsoft.OpenApi v2, requires a resolved +/// Target to serialize correctly. References created without a host document (as in +/// operation filters) serialize as empty objects. This filter re-creates all security scheme +/// references with the document context so they resolve properly during serialization. +/// +internal class SecuritySchemeReferenceFixupFilter : IDocumentFilter +{ + /// + public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) + { + swaggerDoc.RegisterComponents(); + + if (swaggerDoc.Paths is null) + { + return; + } + + foreach (var pathItem in swaggerDoc.Paths.Values) + { + if (pathItem.Operations is null) + { + continue; + } + + foreach (var operation in pathItem.Operations.Values) + { + if (operation.Security is null) + { + continue; + } + + for (int i = 0; i < operation.Security.Count; i++) + { + var oldReq = operation.Security[i]; + var newReq = new OpenApiSecurityRequirement(); + foreach (var kvp in oldReq) + { + var fixedRef = new OpenApiSecuritySchemeReference(kvp.Key.Reference.Id!, swaggerDoc); + newReq[fixedRef] = kvp.Value; + } + + operation.Security[i] = newReq; + } + } + } + } +} -- cgit v1.2.3