Skip to content

Commit 6207b1e

Browse files
authored
Merge pull request #88 from PandaTechAM/development
swagger headers bug fix
2 parents 8de72c3 + 8218d4b commit 6207b1e

File tree

2 files changed

+65
-25
lines changed

2 files changed

+65
-25
lines changed

src/SharedKernel/OpenApi/OpenApiOptionsExtensions.cs

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,42 +30,38 @@ internal OpenApiOptions AddDocument(Document doc, OpenApiConfig openApiConfig)
3030

3131
return options;
3232
}
33-
33+
3434
internal OpenApiOptions UseApiSecuritySchemes(OpenApiConfig? config)
3535
{
36-
if (config?.SecuritySchemes is not { Count: > 0 })
37-
{
38-
return options;
39-
}
36+
if (config?.SecuritySchemes is not { Count: > 0 }) { return options; }
4037

4138
options.AddDocumentTransformer((document, _, _) =>
4239
{
4340
document.Components ??= new OpenApiComponents();
44-
document.Components.SecuritySchemes ??= new Dictionary<string, IOpenApiSecurityScheme>(StringComparer.Ordinal);
41+
document.Components.SecuritySchemes ??=
42+
new Dictionary<string, IOpenApiSecurityScheme>(StringComparer.Ordinal);
43+
44+
document.Security ??= new List<OpenApiSecurityRequirement>();
45+
document.Security.Clear();
4546

46-
foreach (var scheme in config.SecuritySchemes)
47+
foreach (var s in config.SecuritySchemes)
4748
{
48-
document.Components.SecuritySchemes[scheme.HeaderName] = new OpenApiSecurityScheme
49+
// Strongly recommended: separate ID from header name.
50+
// If you can't change config now, keep s.HeaderName as the ID.
51+
var schemeId = s.HeaderName;
52+
53+
document.Components.SecuritySchemes[schemeId] = new OpenApiSecurityScheme
4954
{
5055
Type = SecuritySchemeType.ApiKey,
5156
In = ParameterLocation.Header,
52-
Name = scheme.HeaderName,
53-
Description = scheme.Description
57+
Name = s.HeaderName,
58+
Description = s.Description
5459
};
55-
}
56-
57-
return Task.CompletedTask;
58-
});
59-
60-
options.AddOperationTransformer((operation, _, _) =>
61-
{
62-
operation.Security ??= new List<OpenApiSecurityRequirement>();
6360

64-
foreach (var scheme in config.SecuritySchemes)
65-
{
66-
operation.Security.Add(new OpenApiSecurityRequirement
61+
// IMPORTANT: reference must be created with document context
62+
document.Security.Add(new OpenApiSecurityRequirement
6763
{
68-
[new OpenApiSecuritySchemeReference(scheme.HeaderName)] = []
64+
[new OpenApiSecuritySchemeReference(schemeId, document)] = []
6965
});
7066
}
7167

@@ -74,5 +70,49 @@ [new OpenApiSecuritySchemeReference(scheme.HeaderName)] = []
7470

7571
return options;
7672
}
73+
74+
// internal OpenApiOptions UseApiSecuritySchemes(OpenApiConfig? config)
75+
// {
76+
// if (config?.SecuritySchemes is not { Count: > 0 })
77+
// {
78+
// return options;
79+
// }
80+
//
81+
// options.AddDocumentTransformer((document, _, _) =>
82+
// {
83+
// document.Components ??= new OpenApiComponents();
84+
// document.Components.SecuritySchemes ??= new Dictionary<string, IOpenApiSecurityScheme>(StringComparer.Ordinal);
85+
//
86+
// foreach (var scheme in config.SecuritySchemes)
87+
// {
88+
// document.Components.SecuritySchemes[scheme.HeaderName] = new OpenApiSecurityScheme
89+
// {
90+
// Type = SecuritySchemeType.ApiKey,
91+
// In = ParameterLocation.Header,
92+
// Name = scheme.HeaderName,
93+
// Description = scheme.Description
94+
// };
95+
// }
96+
//
97+
// return Task.CompletedTask;
98+
// });
99+
//
100+
// options.AddOperationTransformer((operation, _, _) =>
101+
// {
102+
// operation.Security ??= new List<OpenApiSecurityRequirement>();
103+
//
104+
// foreach (var scheme in config.SecuritySchemes)
105+
// {
106+
// operation.Security.Add(new OpenApiSecurityRequirement
107+
// {
108+
// [new OpenApiSecuritySchemeReference(scheme.HeaderName)] = []
109+
// });
110+
// }
111+
//
112+
// return Task.CompletedTask;
113+
// });
114+
//
115+
// return options;
116+
// }
77117
}
78118
}

src/SharedKernel/SharedKernel.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
<PackageReadmeFile>Readme.md</PackageReadmeFile>
99
<Authors>Pandatech</Authors>
1010
<Copyright>MIT</Copyright>
11-
<Version>2.1.1</Version>
11+
<Version>2.1.2</Version>
1212
<PackageId>Pandatech.SharedKernel</PackageId>
1313
<Title>Pandatech Shared Kernel Library</Title>
1414
<PackageTags>Pandatech, shared kernel, library, OpenAPI, Swagger, utilities, scalar</PackageTags>
1515
<Description>Pandatech.SharedKernel provides centralized configurations, utilities, and extensions for ASP.NET Core projects. For more information refere to readme.md document.</Description>
1616
<RepositoryUrl>https://github.com/PandaTechAM/be-lib-sharedkernel</RepositoryUrl>
17-
<PackageReleaseNotes>request/response logging armenian support</PackageReleaseNotes>
17+
<PackageReleaseNotes>Swagger headers bug fix</PackageReleaseNotes>
1818

1919

2020
<!-- Never run analyzers as part of compilation (local, CI, dotnet build/test/publish) -->
@@ -65,7 +65,7 @@
6565
<PackageReference Include="Pandatech.FluentMinimalApiMapper" Version="3.0.1"/>
6666
<PackageReference Include="Pandatech.PandaVaultClient" Version="5.0.1"/>
6767
<PackageReference Include="Pandatech.ResponseCrafter" Version="6.0.1"/>
68-
<PackageReference Include="Scalar.AspNetCore" Version="2.12.18"/>
68+
<PackageReference Include="Scalar.AspNetCore" Version="2.12.24" />
6969
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0"/>
7070
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0"/>
7171
<PackageReference Include="Serilog.Sinks.Grafana.Loki" Version="8.3.2"/>

0 commit comments

Comments
 (0)