Skip to content

Commit 16ec3b1

Browse files
committed
Fixed security requirement resolution
1 parent 47e5cfd commit 16ec3b1

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

src/Microsoft.OpenApi.Readers/Services/OpenApiReferenceResolver.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,24 @@ public override void Visit(OpenApiResponses responses)
8989
ResolveMap(responses);
9090
}
9191

92+
/// <summary>
93+
/// Resolve all references to SecuritySchemes
94+
/// </summary>
95+
/// <param name="securityRequirement"></param>
96+
public override void Visit(OpenApiSecurityRequirement securityRequirement)
97+
{
98+
foreach (var scheme in securityRequirement.Keys.ToList())
99+
{
100+
ResolveObject(scheme, (resolvedScheme) => {
101+
// If scheme was unresolved
102+
// copy Scopes and remove old unresolved scheme
103+
var scopes = securityRequirement[scheme];
104+
securityRequirement.Remove(scheme);
105+
securityRequirement.Add(resolvedScheme, scopes);
106+
});
107+
}
108+
}
109+
92110
/// <summary>
93111
/// Resolve all references to links
94112
/// </summary>

src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,13 @@ public virtual void Visit(IList<OpenApiTag> openApiTags)
279279
{
280280
}
281281

282+
/// <summary>
283+
/// Visits list of <see cref="OpenApiSecurityRequirement"/>
284+
/// </summary>
285+
public virtual void Visit(IList<OpenApiSecurityRequirement> openApiSecurityRequirements)
286+
{
287+
}
288+
282289
/// <summary>
283290
/// Visits <see cref="IOpenApiExtensible"/>
284291
/// </summary>

src/Microsoft.OpenApi/Services/OpenApiWalker.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,10 +470,32 @@ internal void Walk(OpenApiOperation operation)
470470
Walk(OpenApiConstants.Responses, () => Walk(operation.Responses));
471471
Walk(OpenApiConstants.Callbacks, () => Walk(operation.Callbacks));
472472
Walk(OpenApiConstants.Tags, () => Walk(operation.Tags));
473-
473+
Walk(OpenApiConstants.Security, () => Walk(operation.Security));
474474
Walk(operation as IOpenApiExtensible);
475475
}
476476

477+
/// <summary>
478+
/// Visits list of <see cref="OpenApiSecurityRequirement"/>
479+
/// </summary>
480+
internal void Walk(IList<OpenApiSecurityRequirement> securityRequirements)
481+
{
482+
if (securityRequirements == null)
483+
{
484+
return;
485+
}
486+
487+
_visitor.Visit(securityRequirements);
488+
489+
if (securityRequirements != null)
490+
{
491+
for (int i = 0; i < securityRequirements.Count; i++)
492+
{
493+
Walk(i.ToString(), () => Walk(securityRequirements[i]));
494+
}
495+
}
496+
}
497+
498+
477499
/// <summary>
478500
/// Visits list of <see cref="OpenApiParameter"/>
479501
/// </summary>

0 commit comments

Comments
 (0)