Skip to content

Commit 27b7623

Browse files
committed
Add logic to resolve a referenceable security scheme component
1 parent 415b77a commit 27b7623

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/Microsoft.OpenApi.Readers/V3/OpenApiSecuritySchemeDeserializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ internal static partial class OpenApiV3Deserializer
7676
public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node)
7777
{
7878
var mapNode = node.CheckMapNode("securityScheme");
79-
79+
var pointer = mapNode.GetReferencePointer();
80+
if (pointer != null)
81+
{
82+
return mapNode.GetReferencedObject<OpenApiSecurityScheme>(ReferenceType.SecurityScheme, pointer);
83+
}
8084
var securityScheme = new OpenApiSecurityScheme();
8185
foreach (var property in mapNode)
8286
{

src/Microsoft.OpenApi/Services/OpenApiWalker.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

44
using System;
@@ -116,7 +116,18 @@ internal void Walk(OpenApiComponents components)
116116
}
117117
}
118118
});
119-
119+
120+
Walk(OpenApiConstants.SecuritySchemes, () =>
121+
{
122+
if (components.SecuritySchemes != null)
123+
{
124+
foreach (var item in components.SecuritySchemes)
125+
{
126+
Walk(item.Key, () => Walk(item.Value, isComponent: true));
127+
}
128+
}
129+
});
130+
120131
Walk(OpenApiConstants.Callbacks, () =>
121132
{
122133
if (components.Callbacks != null)
@@ -996,9 +1007,9 @@ internal void Walk(OpenApiSecurityRequirement securityRequirement)
9961007
/// <summary>
9971008
/// Visits <see cref="OpenApiSecurityScheme"/> and child objects
9981009
/// </summary>
999-
internal void Walk(OpenApiSecurityScheme securityScheme)
1010+
internal void Walk(OpenApiSecurityScheme securityScheme, bool isComponent = false)
10001011
{
1001-
if (securityScheme == null || ProcessAsReference(securityScheme))
1012+
if (securityScheme == null || ProcessAsReference(securityScheme, isComponent))
10021013
{
10031014
return;
10041015
}

0 commit comments

Comments
 (0)