diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSecurityScheme.cs
new file mode 100644
index 000000000..620ad185c
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSecurityScheme.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.OpenApi.Interfaces;
+
+namespace Microsoft.OpenApi.Models.Interfaces;
+
+///
+/// Defines the base properties for the security scheme object.
+/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
+///
+public interface IOpenApiSecurityScheme : IOpenApiDescribedElement, IOpenApiSerializable, IOpenApiReadOnlyExtensible
+{
+ ///
+ /// REQUIRED. The type of the security scheme. Valid values are "apiKey", "http", "oauth2", "openIdConnect".
+ ///
+ public SecuritySchemeType? Type { get; }
+
+ ///
+ /// REQUIRED. The name of the header, query or cookie parameter to be used.
+ ///
+ public string Name { get; }
+
+ ///
+ /// REQUIRED. The location of the API key. Valid values are "query", "header" or "cookie".
+ ///
+ public ParameterLocation? In { get; }
+
+ ///
+ /// REQUIRED. The name of the HTTP Authorization scheme to be used
+ /// in the Authorization header as defined in RFC7235.
+ ///
+ public string Scheme { get; }
+
+ ///
+ /// A hint to the client to identify how the bearer token is formatted.
+ /// Bearer tokens are usually generated by an authorization server,
+ /// so this information is primarily for documentation purposes.
+ ///
+ public string BearerFormat { get; }
+
+ ///
+ /// REQUIRED. An object containing configuration information for the flow types supported.
+ ///
+ public OpenApiOAuthFlows Flows { get; }
+
+ ///
+ /// REQUIRED. OpenId Connect URL to discover OAuth2 configuration values.
+ ///
+ public Uri OpenIdConnectUrl { get; }
+}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
index 6b735087e..250254212 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
@@ -50,10 +50,10 @@ public class OpenApiComponents : IOpenApiSerializable, IOpenApiExtensible
public IDictionary? Headers { get; set; } = new Dictionary();
///
- /// An object to hold reusable Objects.
+ /// An object to hold reusable Objects.
///
- public IDictionary? SecuritySchemes { get; set; } =
- new Dictionary();
+ public IDictionary? SecuritySchemes { get; set; } =
+ new Dictionary();
///
/// An object to hold reusable Objects.
@@ -91,7 +91,7 @@ public OpenApiComponents(OpenApiComponents? components)
Examples = components?.Examples != null ? new Dictionary(components.Examples) : null;
RequestBodies = components?.RequestBodies != null ? new Dictionary(components.RequestBodies) : null;
Headers = components?.Headers != null ? new Dictionary(components.Headers) : null;
- SecuritySchemes = components?.SecuritySchemes != null ? new Dictionary(components.SecuritySchemes) : null;
+ SecuritySchemes = components?.SecuritySchemes != null ? new Dictionary(components.SecuritySchemes) : null;
Links = components?.Links != null ? new Dictionary(components.Links) : null;
Callbacks = components?.Callbacks != null ? new Dictionary(components.Callbacks) : null;
PathItems = components?.PathItems != null ? new Dictionary(components.PathItems) : null;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
index eaf436793..72fb875ef 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
@@ -624,7 +624,7 @@ public bool AddComponent(string id, T componentToRegister)
Components.Headers.Add(id, openApiHeader);
break;
case OpenApiSecurityScheme openApiSecurityScheme:
- Components.SecuritySchemes ??= new Dictionary();
+ Components.SecuritySchemes ??= new Dictionary();
Components.SecuritySchemes.Add(id, openApiSecurityScheme);
break;
default:
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs
index 428d0649e..193d648df 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs
@@ -3,7 +3,10 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using Microsoft.OpenApi.Interfaces;
+using Microsoft.OpenApi.Models.Interfaces;
+using Microsoft.OpenApi.Models.References;
using Microsoft.OpenApi.Writers;
namespace Microsoft.OpenApi.Models
@@ -16,7 +19,7 @@ namespace Microsoft.OpenApi.Models
/// then the value is a list of scope names required for the execution.
/// For other security scheme types, the array MUST be empty.
///
- public class OpenApiSecurityRequirement : Dictionary>,
+ public class OpenApiSecurityRequirement : Dictionary>,
IOpenApiSerializable
{
///
@@ -34,7 +37,7 @@ public OpenApiSecurityRequirement()
///
public void SerializeAsV31(IOpenApiWriter writer)
{
- SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer));
+ SerializeInternal(writer, (w, s) => w.WritePropertyName(s.Reference.ReferenceV3));
}
///
@@ -42,32 +45,28 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
public void SerializeAsV3(IOpenApiWriter writer)
{
- SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer));
+ SerializeInternal(writer, (w, s) => w.WritePropertyName(s.Reference.ReferenceV3));
}
///
/// Serialize
///
- private void SerializeInternal(IOpenApiWriter writer, Action callback)
+ private void SerializeInternal(IOpenApiWriter writer, Action callback)
{
- Utils.CheckArgumentNull(writer);;
+ Utils.CheckArgumentNull(writer);
writer.WriteStartObject();
- foreach (var securitySchemeAndScopesValuePair in this)
+ // Reaching this point means the reference to a specific OpenApiSecurityScheme fails.
+ // We are not able to serialize this SecurityScheme/Scopes key value pair since we do not know what
+ // string to output.
+
+ foreach (var securitySchemeAndScopesValuePair in this.Where(static p => p.Key?.Target is not null))
{
var securityScheme = securitySchemeAndScopesValuePair.Key;
var scopes = securitySchemeAndScopesValuePair.Value;
- if (securityScheme.Reference == null)
- {
- // Reaching this point means the reference to a specific OpenApiSecurityScheme fails.
- // We are not able to serialize this SecurityScheme/Scopes key value pair since we do not know what
- // string to output.
- continue;
- }
-
- writer.WritePropertyName(securityScheme.Reference.ReferenceV3);
+ callback(writer, securityScheme);
writer.WriteStartArray();
@@ -87,48 +86,19 @@ private void SerializeInternal(IOpenApiWriter writer, Action
public void SerializeAsV2(IOpenApiWriter writer)
{
- Utils.CheckArgumentNull(writer);;
-
- writer.WriteStartObject();
-
- foreach (var securitySchemeAndScopesValuePair in this)
- {
- var securityScheme = securitySchemeAndScopesValuePair.Key;
- var scopes = securitySchemeAndScopesValuePair.Value;
-
- if (securityScheme.Reference == null)
- {
- // Reaching this point means the reference to a specific OpenApiSecurityScheme fails.
- // We are not able to serialize this SecurityScheme/Scopes key value pair since we do not know what
- // string to output.
- continue;
- }
-
- securityScheme.SerializeAsV2(writer);
-
- writer.WriteStartArray();
-
- foreach (var scope in scopes)
- {
- writer.WriteValue(scope);
- }
-
- writer.WriteEndArray();
- }
-
- writer.WriteEndObject();
+ SerializeInternal(writer, (w, s) => s.SerializeAsV2(w));
}
///
/// Comparer for OpenApiSecurityScheme that only considers the Id in the Reference
/// (i.e. the string that will actually be displayed in the written document)
///
- private class OpenApiSecuritySchemeReferenceEqualityComparer : IEqualityComparer
+ private sealed class OpenApiSecuritySchemeReferenceEqualityComparer : IEqualityComparer
{
///
/// Determines whether the specified objects are equal.
///
- public bool Equals(OpenApiSecurityScheme x, OpenApiSecurityScheme y)
+ public bool Equals(OpenApiSecuritySchemeReference x, OpenApiSecuritySchemeReference y)
{
if (x == null && y == null)
{
@@ -140,20 +110,19 @@ public bool Equals(OpenApiSecurityScheme x, OpenApiSecurityScheme y)
return false;
}
- if (x.Reference == null || y.Reference == null)
- {
- return false;
- }
-
- return x.Reference.Id == y.Reference.Id;
+ return GetHashCode(x) == GetHashCode(y);
}
///
/// Returns a hash code for the specified object.
///
- public int GetHashCode(OpenApiSecurityScheme obj)
+ public int GetHashCode(OpenApiSecuritySchemeReference obj)
{
- return obj?.Reference?.Id == null ? 0 : obj.Reference.Id.GetHashCode();
+ if (obj is null)
+ {
+ return 0;
+ }
+ return string.IsNullOrEmpty(obj?.Reference?.Id) ? 0 : obj.Reference.Id.GetHashCode();
}
}
}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
index d9227be25..3d9e0e636 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using Microsoft.OpenApi.Extensions;
using Microsoft.OpenApi.Interfaces;
+using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Writers;
namespace Microsoft.OpenApi.Models
@@ -12,65 +13,34 @@ namespace Microsoft.OpenApi.Models
///
/// Security Scheme Object.
///
- public class OpenApiSecurityScheme : IOpenApiReferenceable, IOpenApiExtensible
+ public class OpenApiSecurityScheme : IOpenApiExtensible, IOpenApiReferenceable, IOpenApiSecurityScheme
{
- ///
- /// REQUIRED. The type of the security scheme. Valid values are "apiKey", "http", "oauth2", "openIdConnect".
- ///
- public virtual SecuritySchemeType? Type { get; set; }
-
- ///
- /// A short description for security scheme. CommonMark syntax MAY be used for rich text representation.
- ///
- public virtual string Description { get; set; }
-
- ///
- /// REQUIRED. The name of the header, query or cookie parameter to be used.
- ///
- public virtual string Name { get; set; }
+ ///
+ public SecuritySchemeType? Type { get; set; }
- ///
- /// REQUIRED. The location of the API key. Valid values are "query", "header" or "cookie".
- ///
- public virtual ParameterLocation? In { get; set; }
+ ///
+ public string Description { get; set; }
- ///
- /// REQUIRED. The name of the HTTP Authorization scheme to be used
- /// in the Authorization header as defined in RFC7235.
- ///
- public virtual string Scheme { get; set; }
+ ///
+ public string Name { get; set; }
- ///
- /// A hint to the client to identify how the bearer token is formatted.
- /// Bearer tokens are usually generated by an authorization server,
- /// so this information is primarily for documentation purposes.
- ///
- public virtual string BearerFormat { get; set; }
+ ///
+ public ParameterLocation? In { get; set; }
- ///
- /// REQUIRED. An object containing configuration information for the flow types supported.
- ///
- public virtual OpenApiOAuthFlows Flows { get; set; }
+ ///
+ public string Scheme { get; set; }
- ///
- /// REQUIRED. OpenId Connect URL to discover OAuth2 configuration values.
- ///
- public virtual Uri OpenIdConnectUrl { get; set; }
+ ///
+ public string BearerFormat { get; set; }
- ///
- /// Specification Extensions.
- ///
- public virtual IDictionary Extensions { get; set; } = new Dictionary();
+ ///
+ public OpenApiOAuthFlows Flows { get; set; }
- ///
- /// Indicates if object is populated with data or is just a reference to the data
- ///
- public bool UnresolvedReference { get; set; }
+ ///
+ public Uri OpenIdConnectUrl { get; set; }
- ///
- /// Reference object.
- ///
- public OpenApiReference Reference { get; set; }
+ ///
+ public IDictionary Extensions { get; set; } = new Dictionary();
///
/// Parameterless constructor
@@ -78,10 +48,11 @@ public class OpenApiSecurityScheme : IOpenApiReferenceable, IOpenApiExtensible
public OpenApiSecurityScheme() { }
///
- /// Initializes a copy of object
+ /// Initializes a copy of object
///
- public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme)
+ public OpenApiSecurityScheme(IOpenApiSecurityScheme securityScheme)
{
+ Utils.CheckArgumentNull(securityScheme);
Type = securityScheme?.Type;
Description = securityScheme?.Description ?? Description;
Name = securityScheme?.Name ?? Name;
@@ -91,14 +62,12 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme)
Flows = securityScheme?.Flows != null ? new(securityScheme?.Flows) : null;
OpenIdConnectUrl = securityScheme?.OpenIdConnectUrl != null ? new Uri(securityScheme.OpenIdConnectUrl.OriginalString, UriKind.RelativeOrAbsolute) : null;
Extensions = securityScheme?.Extensions != null ? new Dictionary(securityScheme.Extensions) : null;
- UnresolvedReference = securityScheme?.UnresolvedReference ?? UnresolvedReference;
- Reference = securityScheme?.Reference != null ? new(securityScheme?.Reference) : null;
}
///
/// Serialize to Open Api v3.1
///
- public virtual void SerializeAsV31(IOpenApiWriter writer)
+ public void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer));
}
@@ -106,12 +75,12 @@ public virtual void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public virtual void SerializeAsV3(IOpenApiWriter writer)
+ public void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- internal virtual void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
+ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
Utils.CheckArgumentNull(writer);
@@ -161,7 +130,7 @@ internal virtual void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersio
///
/// Serialize to Open Api v2.0
///
- public virtual void SerializeAsV2(IOpenApiWriter writer)
+ public void SerializeAsV2(IOpenApiWriter writer)
{
Utils.CheckArgumentNull(writer);
diff --git a/src/Microsoft.OpenApi/Models/References/BaseOpenApiReferenceHolder.cs b/src/Microsoft.OpenApi/Models/References/BaseOpenApiReferenceHolder.cs
index 9b8c1be28..56d694d0a 100644
--- a/src/Microsoft.OpenApi/Models/References/BaseOpenApiReferenceHolder.cs
+++ b/src/Microsoft.OpenApi/Models/References/BaseOpenApiReferenceHolder.cs
@@ -16,7 +16,7 @@ public T Target
{
get
{
- _target ??= Reference.HostDocument.ResolveReferenceTo(Reference);
+ _target ??= Reference.HostDocument?.ResolveReferenceTo(Reference);
return _target;
}
}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs
index c1dafa80f..a05070472 100644
--- a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs
@@ -4,147 +4,69 @@
using System;
using System.Collections.Generic;
using Microsoft.OpenApi.Interfaces;
-using Microsoft.OpenApi.Writers;
+using Microsoft.OpenApi.Models.Interfaces;
namespace Microsoft.OpenApi.Models.References
{
///
/// Security Scheme Object Reference.
///
- public class OpenApiSecuritySchemeReference : OpenApiSecurityScheme, IOpenApiReferenceHolder
+ public class OpenApiSecuritySchemeReference : BaseOpenApiReferenceHolder, IOpenApiSecurityScheme
{
- internal OpenApiSecurityScheme _target;
- private readonly OpenApiReference _reference;
- private string _description;
-
- ///
- /// Gets the target security scheme.
- ///
- ///
- /// If the reference is not resolved, this will return null.
- ///
- public OpenApiSecurityScheme Target
- {
- get
- {
- _target ??= Reference.HostDocument.ResolveReferenceTo(_reference);
- OpenApiSecurityScheme resolved = new OpenApiSecurityScheme(_target);
- if (!string.IsNullOrEmpty(_description)) resolved.Description = _description;
- return resolved;
- }
- }
-
///
/// Constructor initializing the reference object.
///
/// The reference Id.
/// The host OpenAPI document.
/// The externally referenced file.
- public OpenApiSecuritySchemeReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ public OpenApiSecuritySchemeReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null):base(referenceId, hostDocument, ReferenceType.SecurityScheme, externalResource)
{
- Utils.CheckArgumentNullOrEmpty(referenceId);
-
- _reference = new OpenApiReference()
- {
- Id = referenceId,
- HostDocument = hostDocument,
- Type = ReferenceType.SecurityScheme,
- ExternalResource = externalResource
- };
-
- Reference = _reference;
}
-
- internal OpenApiSecuritySchemeReference(string referenceId, OpenApiSecurityScheme target)
+ internal OpenApiSecuritySchemeReference(OpenApiSecurityScheme target, string referenceId):base(target, referenceId, ReferenceType.SecurityScheme)
{
- _target = target;
-
- _reference = new OpenApiReference()
- {
- Id = referenceId,
- Type = ReferenceType.SecurityScheme,
- };
}
///
- public override string Description
+ public string Description
{
- get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
- set => _description = value;
+ get => string.IsNullOrEmpty(Reference?.Description) ? Target?.Description : Reference.Description;
+ set
+ {
+ if (Reference is not null)
+ {
+ Reference.Description = value;
+ }
+ }
}
///
- public override string Name { get => Target.Name; set => Target.Name = value; }
-
- ///
- public override ParameterLocation? In { get => Target.In; set => Target.In = value; }
+ public string Name { get => Target?.Name; }
///
- public override string Scheme { get => Target.Scheme; set => Target.Scheme = value; }
+ public ParameterLocation? In { get => Target?.In; }
///
- public override string BearerFormat { get => Target.BearerFormat; set => Target.BearerFormat = value; }
+ public string Scheme { get => Target?.Scheme; }
///
- public override OpenApiOAuthFlows Flows { get => Target.Flows; set => Target.Flows = value; }
+ public string BearerFormat { get => Target?.BearerFormat; }
///
- public override Uri OpenIdConnectUrl { get => Target.OpenIdConnectUrl; set => Target.OpenIdConnectUrl = value; }
+ public OpenApiOAuthFlows Flows { get => Target?.Flows; }
///
- public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+ public Uri OpenIdConnectUrl { get => Target?.OpenIdConnectUrl; }
///
- public override SecuritySchemeType? Type { get => Target.Type; set => Target.Type = value; }
-
- ///
- public override void SerializeAsV3(IOpenApiWriter writer)
- {
- if (!writer.GetSettings().ShouldInlineReference(_reference))
- {
- _reference.SerializeAsV3(writer);
- return;
- }
- else
- {
- SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer));
- }
- }
-
- ///
- public override void SerializeAsV31(IOpenApiWriter writer)
- {
- if (!writer.GetSettings().ShouldInlineReference(_reference))
- {
- _reference.SerializeAsV31(writer);
- return;
- }
- else
- {
- SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer));
- }
- }
+ public IDictionary Extensions { get => Target?.Extensions; }
///
- public override void SerializeAsV2(IOpenApiWriter writer)
- {
- if (!writer.GetSettings().ShouldInlineReference(_reference))
- {
- _reference.SerializeAsV2(writer);
- return;
- }
- else
- {
- SerializeInternal(writer, (writer, element) => element.SerializeAsV2(writer));
- }
- }
+ public SecuritySchemeType? Type { get => Target?.Type; }
///
- private void SerializeInternal(IOpenApiWriter writer,
- Action action)
+ public override IOpenApiSecurityScheme CopyReferenceAsTargetElementWithOverrides(IOpenApiSecurityScheme source)
{
- Utils.CheckArgumentNull(writer);;
- action(writer, Target);
+ return source is OpenApiSecurityScheme ? new OpenApiSecurityScheme(this) : source;
}
}
}
diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs
index 4dfdbba16..7b47ff6c5 100644
--- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs
@@ -2,6 +2,8 @@
// Licensed under the MIT license.
using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.Interfaces;
+using Microsoft.OpenApi.Models.References;
using Microsoft.OpenApi.Reader.ParseNodes;
namespace Microsoft.OpenApi.Reader.V2
@@ -21,7 +23,7 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node,
foreach (var property in mapNode)
{
var scheme = LoadSecuritySchemeByReference(
- mapNode.Context,
+ hostDocument,
property.Name);
var scopes = property.Value.CreateSimpleList((n2, p) => n2.GetScalarValue(), hostDocument);
@@ -41,21 +43,11 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node,
return securityRequirement;
}
- private static OpenApiSecurityScheme LoadSecuritySchemeByReference(
- ParsingContext context,
+ private static OpenApiSecuritySchemeReference LoadSecuritySchemeByReference(
+ OpenApiDocument openApiDocument,
string schemeName)
{
- var securitySchemeObject = new OpenApiSecurityScheme
- {
- UnresolvedReference = true,
- Reference = new()
- {
- Id = schemeName,
- Type = ReferenceType.SecurityScheme
- }
- };
-
- return securitySchemeObject;
+ return new OpenApiSecuritySchemeReference(schemeName, openApiDocument);
}
}
}
diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs
index 43151c15a..0b49b5e9d 100644
--- a/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiSecuritySchemeDeserializer.cs
@@ -4,6 +4,7 @@
using System;
using Microsoft.OpenApi.Extensions;
using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Reader.ParseNodes;
namespace Microsoft.OpenApi.Reader.V2
@@ -77,10 +78,10 @@ internal static partial class OpenApiV2Deserializer
private static readonly PatternFieldMap _securitySchemePatternFields =
new()
{
- {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))}
+ {s => s.StartsWith("x-", StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p, n))}
};
- public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)
+ public static IOpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)
{
// Reset the local variables every time this method is called.
// TODO: Change _flow to a tempStorage variable to make the deserializer thread-safe.
diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs
index 73610713c..030f2ef34 100644
--- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Models.References;
using Microsoft.OpenApi.Reader.ParseNodes;
@@ -21,7 +22,7 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node,
foreach (var property in mapNode)
{
- var scheme = LoadSecuritySchemeByReference(mapNode.Context, property.Name);
+ var scheme = LoadSecuritySchemeByReference(hostDocument, property.Name);
var scopes = property.Value.CreateSimpleList((value, p) => value.GetScalarValue(), hostDocument);
@@ -39,12 +40,11 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node,
return securityRequirement;
}
- private static OpenApiSecurityScheme LoadSecuritySchemeByReference(
- ParsingContext context,
+ private static OpenApiSecuritySchemeReference LoadSecuritySchemeByReference(
+ OpenApiDocument openApiDocument,
string schemeName)
{
- var securitySchemeObject = new OpenApiSecuritySchemeReference(schemeName, hostDocument: null);
- return securitySchemeObject;
+ return new OpenApiSecuritySchemeReference(schemeName, openApiDocument);
}
}
}
diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs
index 18c4eae28..cd696ddfb 100644
--- a/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiSecuritySchemeDeserializer.cs
@@ -4,6 +4,7 @@
using System;
using Microsoft.OpenApi.Extensions;
using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Models.References;
using Microsoft.OpenApi.Reader.ParseNodes;
@@ -69,10 +70,10 @@ internal static partial class OpenApiV3Deserializer
private static readonly PatternFieldMap _securitySchemePatternFields =
new()
{
- {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}
+ {s => s.StartsWith("x-", StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}
};
- public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)
+ public static IOpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)
{
var mapNode = node.CheckMapNode("securityScheme");
var pointer = mapNode.GetReferencePointer();
diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs
index b204c83d4..cddb97699 100644
--- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Models.References;
using Microsoft.OpenApi.Reader.ParseNodes;
@@ -39,10 +40,9 @@ public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node,
return securityRequirement;
}
- private static OpenApiSecurityScheme LoadSecuritySchemeByReference(string schemeName, OpenApiDocument hostDocument)
+ private static OpenApiSecuritySchemeReference LoadSecuritySchemeByReference(string schemeName, OpenApiDocument hostDocument)
{
- var securitySchemeObject = new OpenApiSecuritySchemeReference(schemeName, hostDocument);
- return securitySchemeObject;
+ return new OpenApiSecuritySchemeReference(schemeName, hostDocument);
}
}
}
diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs
index b56352c22..5a2667cda 100644
--- a/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs
+++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs
@@ -4,6 +4,7 @@
using System;
using Microsoft.OpenApi.Extensions;
using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.Interfaces;
using Microsoft.OpenApi.Models.References;
using Microsoft.OpenApi.Reader.ParseNodes;
@@ -79,10 +80,10 @@ internal static partial class OpenApiV31Deserializer
private static readonly PatternFieldMap _securitySchemePatternFields =
new()
{
- {s => s.StartsWith("x-"), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}
+ {s => s.StartsWith("x-", StringComparison.OrdinalIgnoreCase), (o, p, n, _) => o.AddExtension(p, LoadExtension(p,n))}
};
- public static OpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)
+ public static IOpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiDocument hostDocument)
{
var mapNode = node.CheckMapNode("securityScheme");
diff --git a/src/Microsoft.OpenApi/Services/CopyReferences.cs b/src/Microsoft.OpenApi/Services/CopyReferences.cs
index 490c7cff8..980aafb56 100644
--- a/src/Microsoft.OpenApi/Services/CopyReferences.cs
+++ b/src/Microsoft.OpenApi/Services/CopyReferences.cs
@@ -172,9 +172,9 @@ private void AddSecuritySchemeToComponents(OpenApiSecurityScheme securityScheme,
{
EnsureComponentsExist();
EnsureSecuritySchemesExist();
- if (!Components.SecuritySchemes.ContainsKey(referenceId ?? securityScheme.Reference.Id))
+ if (!Components.SecuritySchemes.ContainsKey(referenceId))
{
- Components.SecuritySchemes.Add(referenceId ?? securityScheme.Reference.Id, securityScheme);
+ Components.SecuritySchemes.Add(referenceId, securityScheme);
}
}
@@ -236,7 +236,7 @@ private void EnsureLinksExist()
private void EnsureSecuritySchemesExist()
{
- _target.Components.SecuritySchemes ??= new Dictionary();
+ _target.Components.SecuritySchemes ??= new Dictionary();
}
private void EnsurePathItemsExist()
{
diff --git a/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs b/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs
index 2b79864d8..254528b41 100644
--- a/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs
+++ b/src/Microsoft.OpenApi/Services/OpenApiVisitorBase.cs
@@ -293,9 +293,9 @@ public virtual void Visit(OpenApiSecurityRequirement securityRequirement)
}
///
- /// Visits
+ /// Visits
///
- public virtual void Visit(OpenApiSecurityScheme securityScheme)
+ public virtual void Visit(IOpenApiSecurityScheme securityScheme)
{
}
diff --git a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs
index 8d634834a..ae4430067 100644
--- a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs
+++ b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs
@@ -1146,9 +1146,9 @@ internal void Walk(OpenApiSecurityRequirement securityRequirement)
}
///
- /// Visits and child objects
+ /// Visits and child objects
///
- internal void Walk(OpenApiSecurityScheme securityScheme, bool isComponent = false)
+ internal void Walk(IOpenApiSecurityScheme securityScheme, bool isComponent = false)
{
if (securityScheme == null)
{
diff --git a/src/Microsoft.OpenApi/Validations/OpenApiValidator.cs b/src/Microsoft.OpenApi/Validations/OpenApiValidator.cs
index a8669fce0..784f06172 100644
--- a/src/Microsoft.OpenApi/Validations/OpenApiValidator.cs
+++ b/src/Microsoft.OpenApi/Validations/OpenApiValidator.cs
@@ -135,7 +135,7 @@ public void AddWarning(OpenApiValidatorWarning warning)
public override void Visit(OpenApiServerVariable serverVariable) => Validate(serverVariable);
///
- public override void Visit(OpenApiSecurityScheme securityScheme) => Validate(securityScheme);
+ public override void Visit(IOpenApiSecurityScheme securityScheme) => Validate(securityScheme);
///
public override void Visit(OpenApiSecurityRequirement securityRequirement) => Validate(securityRequirement);
diff --git a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs
index 98cc4ed78..9d1400de6 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs
@@ -56,13 +56,13 @@ public async Task LoadSecuritySchemeReference()
var reference = new OpenApiSecuritySchemeReference("api_key_sample", result.Document);
// Assert
- reference.Should().BeEquivalentTo(
+ Assert.Equivalent(
new OpenApiSecurityScheme
{
Type = SecuritySchemeType.ApiKey,
Name = "api_key",
In = ParameterLocation.Header
- }, options => options.Excluding(x => x.Reference)
+ }, reference
);
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.ParseDocumentWith31PropertiesWorks.verified.txt b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.ParseDocumentWith31PropertiesWorks.verified.txt
index 3392a4bb8..fa7dd54e4 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.ParseDocumentWith31PropertiesWorks.verified.txt
+++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.ParseDocumentWith31PropertiesWorks.verified.txt
@@ -5,7 +5,6 @@ info:
description: A sample API demonstrating OpenAPI 3.1 features
license:
name: Apache 2.0
- url: https://www.apache.org/licenses/LICENSE-2.0.html
identifier: Apache-2.0
version: 2.0.0
summary: Sample OpenAPI 3.1 API with the latest features
@@ -93,6 +92,11 @@ components:
- 'null'
- object
description: Dynamic attributes for the pet
+ securitySchemes:
+ api_key:
+ type: apiKey
+ name: api_key
+ in: header
security:
- api_key: [ ]
webhooks:
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/documentWith31Properties.yaml b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/documentWith31Properties.yaml
index 35e5ccf80..e3d1b6cf5 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/documentWith31Properties.yaml
+++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/documentWith31Properties.yaml
@@ -7,7 +7,6 @@ info:
license:
name: Apache 2.0
identifier: Apache-2.0 # SPDX license identifier, a new 3.1 feature to define an API's SPDX license expression
- url: https://www.apache.org/licenses/LICENSE-2.0.html
# JSON Schema 2020-12 feature
jsonSchemaDialect: "https://json-schema.org/draft/2020-12/schema"
@@ -89,6 +88,11 @@ paths:
- name
$dynamicAnchor: "addressDef"
components:
+ securitySchemes:
+ api_key:
+ type: apiKey
+ name: api_key
+ in: header
schemas:
Pet:
$id: 'https://example.com/schemas/pet.json'
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs
index 32c27b3b1..c59aec6fb 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs
@@ -664,7 +664,7 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
}
},
},
- SecuritySchemes = new Dictionary
+ SecuritySchemes = new Dictionary
{
["securitySchemeName1"] = new OpenApiSecurityScheme
{
@@ -700,21 +700,11 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
var tagReference2 = new OpenApiTagReference("tagName2", null);
- var securityScheme1 = await CloneSecuritySchemeAsync(components.SecuritySchemes["securitySchemeName1"]);
+ var securityScheme1Cast = Assert.IsType(components.SecuritySchemes["securitySchemeName1"]);
+ var securityScheme1 = await CloneSecuritySchemeAsync(securityScheme1Cast);
- securityScheme1.Reference = new OpenApiReference
- {
- Id = "securitySchemeName1",
- Type = ReferenceType.SecurityScheme
- };
-
- var securityScheme2 = await CloneSecuritySchemeAsync(components.SecuritySchemes["securitySchemeName2"]);
-
- securityScheme2.Reference = new OpenApiReference
- {
- Id = "securitySchemeName2",
- Type = ReferenceType.SecurityScheme
- };
+ var securityScheme2Cast = Assert.IsType(components.SecuritySchemes["securitySchemeName2"]);
+ var securityScheme2 = await CloneSecuritySchemeAsync(securityScheme2Cast);
var expected = new OpenApiDocument
{
@@ -899,8 +889,8 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
{
new OpenApiSecurityRequirement
{
- [securityScheme1] = new List(),
- [securityScheme2] = new List
+ [new OpenApiSecuritySchemeReference(securityScheme1, "securitySchemeName1")] = new List(),
+ [new OpenApiSecuritySchemeReference(securityScheme2, "securitySchemeName2")] = new List
{
"scope1",
"scope2"
@@ -1045,8 +1035,8 @@ public async Task ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
{
new OpenApiSecurityRequirement
{
- [securityScheme1] = new List(),
- [securityScheme2] = new List
+ [new OpenApiSecuritySchemeReference(securityScheme1, "securitySchemeName1")] = new List(),
+ [new OpenApiSecuritySchemeReference(securityScheme2, "securitySchemeName2")] = new List
{
"scope1",
"scope2",
@@ -1098,8 +1088,7 @@ public async Task GlobalSecurityRequirementShouldReferenceSecurityScheme()
var securityRequirement = result.Document.SecurityRequirements[0];
- securityRequirement.Keys.First().Should().BeEquivalentTo(result.Document.Components.SecuritySchemes.First().Value,
- options => options.Excluding(x => x.Reference));
+ Assert.Equivalent(result.Document.Components.SecuritySchemes.First().Value, securityRequirement.Keys.First());
}
[Fact]
@@ -1176,7 +1165,6 @@ public async Task ParseDocumentWithReferencedSecuritySchemeWorks()
var securityScheme = result.Document.Components.SecuritySchemes["OAuth2"];
// Assert
- Assert.False(securityScheme.UnresolvedReference);
Assert.NotNull(securityScheme.Flows);
}
diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs
index 3d629a23b..1dd24a128 100644
--- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs
+++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs
@@ -27,8 +27,7 @@ public async Task OperationWithSecurityRequirementShouldReferenceSecurityScheme(
var result = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, "securedOperation.yaml"));
var securityScheme = result.Document.Paths["/"].Operations[OperationType.Get].Security[0].Keys.First();
- securityScheme.Should().BeEquivalentTo(result.Document.Components.SecuritySchemes.First().Value,
- options => options.Excluding(x => x.Reference));
+ Assert.Equivalent(result.Document.Components.SecuritySchemes.First().Value, securityScheme);
}
[Fact]
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs
index 45c3dc1fc..379dc0c4f 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs
@@ -34,9 +34,9 @@ public class OpenApiComponentsTests
}
}
},
- SecuritySchemes = new Dictionary
+ SecuritySchemes = new Dictionary
{
- ["securityScheme1"] = new()
+ ["securityScheme1"] = new OpenApiSecurityScheme()
{
Description = "description1",
Type = SecuritySchemeType.OAuth2,
@@ -53,7 +53,7 @@ public class OpenApiComponentsTests
}
}
},
- ["securityScheme2"] = new()
+ ["securityScheme2"] = new OpenApiSecurityScheme()
{
Description = "description1",
Type = SecuritySchemeType.OpenIdConnect,
@@ -89,9 +89,9 @@ public class OpenApiComponentsTests
}
},
},
- SecuritySchemes = new Dictionary
+ SecuritySchemes = new Dictionary
{
- ["securityScheme1"] = new()
+ ["securityScheme1"] = new OpenApiSecurityScheme()
{
Description = "description1",
Type = SecuritySchemeType.OAuth2,
@@ -107,23 +107,13 @@ public class OpenApiComponentsTests
AuthorizationUrl = new("https://example.com/api/oauth")
}
},
- Reference = new()
- {
- Type = ReferenceType.SecurityScheme,
- Id = "securityScheme1"
- }
},
- ["securityScheme2"] = new()
+ ["securityScheme2"] = new OpenApiSecurityScheme()
{
Description = "description1",
Type = SecuritySchemeType.OpenIdConnect,
Scheme = OpenApiConstants.Bearer,
OpenIdConnectUrl = new("https://example.com/openIdConnect"),
- Reference = new()
- {
- Type = ReferenceType.SecurityScheme,
- Id = "securityScheme2"
- }
}
}
};
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs
index 499477616..138888d71 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs
@@ -181,8 +181,8 @@ public class OpenApiOperationTests
{
new()
{
- [new OpenApiSecuritySchemeReference("securitySchemeId1", hostDocument: null)] = new List(),
- [new OpenApiSecuritySchemeReference("securitySchemeId2", hostDocument: null)] = new List
+ [new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "securitySchemeId1")] = new List(),
+ [new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "securitySchemeId2")] = new List
{
"scopeName1",
"scopeName2"
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs
index af0343f57..19900f215 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs
@@ -25,7 +25,7 @@ public class OpenApiSecurityRequirementTests
new()
{
[
- new OpenApiSecuritySchemeReference("scheme1", hostDocument: null)
+ new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "scheme1")
] = new List
{
"scope1",
@@ -33,14 +33,14 @@ public class OpenApiSecurityRequirementTests
"scope3",
},
[
- new OpenApiSecuritySchemeReference("scheme2", hostDocument: null)
+ new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "scheme2")
] = new List
{
"scope4",
"scope5",
},
[
- new OpenApiSecuritySchemeReference("scheme3", hostDocument: null)
+ new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "scheme3")
] = new List()
};
@@ -48,7 +48,7 @@ public class OpenApiSecurityRequirementTests
new()
{
[
- new OpenApiSecuritySchemeReference("scheme1", hostDocument: null)
+ new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "scheme1")
] = new List
{
"scope1",
@@ -56,18 +56,14 @@ public class OpenApiSecurityRequirementTests
"scope3",
},
[
- new()
- {
- // This security scheme is unreferenced, so this key value pair cannot be serialized.
- Name = "brokenUnreferencedScheme"
- }
+ new OpenApiSecuritySchemeReference("brokenUnreferencedScheme", hostDocument: null)
] = new List
{
"scope4",
"scope5",
},
[
- new OpenApiSecuritySchemeReference("scheme3", hostDocument: null)
+ new OpenApiSecuritySchemeReference(new OpenApiSecurityScheme(), "scheme3")
] = new List()
};
@@ -223,22 +219,12 @@ public void SchemesShouldConsiderOnlyReferenceIdForEquality()
Type = SecuritySchemeType.ApiKey,
Name = "apiKeyName1",
In = ParameterLocation.Header,
- Reference = new()
- {
- Id = "securityScheme1",
- Type = ReferenceType.SecurityScheme
- }
};
var securityScheme2 = new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OpenIdConnect,
OpenIdConnectUrl = new("http://example.com"),
- Reference = new()
- {
- Id = "securityScheme2",
- Type = ReferenceType.SecurityScheme
- }
};
var securityScheme1Duplicate = new OpenApiSecurityScheme
@@ -246,11 +232,6 @@ public void SchemesShouldConsiderOnlyReferenceIdForEquality()
Type = SecuritySchemeType.ApiKey,
Name = "apiKeyName1",
In = ParameterLocation.Header,
- Reference = new()
- {
- Id = "securityScheme1",
- Type = ReferenceType.SecurityScheme
- }
};
var securityScheme1WithDifferentProperties = new OpenApiSecurityScheme
@@ -258,21 +239,16 @@ public void SchemesShouldConsiderOnlyReferenceIdForEquality()
Type = SecuritySchemeType.ApiKey,
Name = "apiKeyName2",
In = ParameterLocation.Query,
- Reference = new()
- {
- Id = "securityScheme1",
- Type = ReferenceType.SecurityScheme
- }
};
// Act
- securityRequirement.Add(securityScheme1, new List());
- securityRequirement.Add(securityScheme2, new List { "scope1", "scope2" });
+ securityRequirement.Add(new OpenApiSecuritySchemeReference(securityScheme1, "securityScheme1"), new List());
+ securityRequirement.Add(new OpenApiSecuritySchemeReference(securityScheme2, "securityScheme2"), new List { "scope1", "scope2" });
var addSecurityScheme1Duplicate = () =>
- securityRequirement.Add(securityScheme1Duplicate, new List());
+ securityRequirement.Add(new OpenApiSecuritySchemeReference(securityScheme1Duplicate, "securityScheme1"), new List());
var addSecurityScheme1WithDifferentProperties = () =>
- securityRequirement.Add(securityScheme1WithDifferentProperties, new List());
+ securityRequirement.Add(new OpenApiSecuritySchemeReference(securityScheme1WithDifferentProperties, "securityScheme1"), new List());
// Assert
// Only the first two should be added successfully since the latter two are duplicates of securityScheme1.
@@ -287,8 +263,8 @@ public void SchemesShouldConsiderOnlyReferenceIdForEquality()
{
// This should work with any security scheme object
// as long as Reference.Id os securityScheme1
- [securityScheme1WithDifferentProperties] = new List(),
- [securityScheme2] = new List { "scope1", "scope2" },
+ [new OpenApiSecuritySchemeReference(securityScheme1WithDifferentProperties, "securityScheme1")] = new List(),
+ [new OpenApiSecuritySchemeReference(securityScheme2, "securityScheme2")] = new List { "scope1", "scope2" },
});
}
}
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
index 9c59ca4bd..780b2116a 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs
@@ -104,7 +104,7 @@ public class OpenApiSecuritySchemeTests
OpenIdConnectUrl = new("https://example.com/openIdConnect")
};
- public static OpenApiSecuritySchemeReference OpenApiSecuritySchemeReference = new(target: ReferencedSecurityScheme, referenceId: "sampleSecurityScheme");
+ public static OpenApiSecuritySchemeReference OpenApiSecuritySchemeReference = new(ReferencedSecurityScheme, "sampleSecurityScheme");
public static OpenApiSecurityScheme ReferencedSecurityScheme = new()
{
Description = "description1",
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False_inlineLocalReferences=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False_inlineLocalReferences=False.verified.txt
new file mode 100644
index 000000000..a73e7078d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False_inlineLocalReferences=False.verified.txt
@@ -0,0 +1,3 @@
+{
+ "$ref": "mySecurityScheme"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False_inlineLocalReferences=True.verified.txt
similarity index 100%
rename from test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
rename to test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False_inlineLocalReferences=True.verified.txt
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True_inlineLocalReferences=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True_inlineLocalReferences=False.verified.txt
new file mode 100644
index 000000000..5c70082e7
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True_inlineLocalReferences=False.verified.txt
@@ -0,0 +1 @@
+{"$ref":"mySecurityScheme"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True_inlineLocalReferences=True.verified.txt
similarity index 100%
rename from test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
rename to test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True_inlineLocalReferences=True.verified.txt
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False_inlineLocalReferences=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False_inlineLocalReferences=False.verified.txt
new file mode 100644
index 000000000..a73e7078d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False_inlineLocalReferences=False.verified.txt
@@ -0,0 +1,3 @@
+{
+ "$ref": "mySecurityScheme"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False_inlineLocalReferences=True.verified.txt
similarity index 100%
rename from test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
rename to test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False_inlineLocalReferences=True.verified.txt
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True_inlineLocalReferences=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True_inlineLocalReferences=False.verified.txt
new file mode 100644
index 000000000..5c70082e7
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True_inlineLocalReferences=False.verified.txt
@@ -0,0 +1 @@
+{"$ref":"mySecurityScheme"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True_inlineLocalReferences=True.verified.txt
similarity index 100%
rename from test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
rename to test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True_inlineLocalReferences=True.verified.txt
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
index d13d63c9a..56b7e6d07 100644
--- a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
@@ -57,37 +57,41 @@ public void SecuritySchemeResolutionWorks()
}
[Theory]
- [InlineData(true)]
- [InlineData(false)]
- public async Task SerializeSecuritySchemeReferenceAsV3JsonWorks(bool produceTerseOutput)
+ [InlineData(true, false)]
+ [InlineData(false, false)]
+ [InlineData(true, true)]
+ [InlineData(false, true)]
+ public async Task SerializeSecuritySchemeReferenceAsV3JsonWorks(bool produceTerseOutput, bool inlineLocalReferences)
{
// Arrange
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
- var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true });
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = inlineLocalReferences });
// Act
_openApiSecuritySchemeReference.SerializeAsV3(writer);
await writer.FlushAsync();
// Assert
- await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput, inlineLocalReferences);
}
[Theory]
- [InlineData(true)]
- [InlineData(false)]
- public async Task SerializeSecuritySchemeReferenceAsV31JsonWorks(bool produceTerseOutput)
+ [InlineData(true, false)]
+ [InlineData(false, false)]
+ [InlineData(true, true)]
+ [InlineData(false, true)]
+ public async Task SerializeSecuritySchemeReferenceAsV31JsonWorks(bool produceTerseOutput, bool inlineLocalReferences)
{
// Arrange
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
- var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true });
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = inlineLocalReferences });
// Act
_openApiSecuritySchemeReference.SerializeAsV31(writer);
await writer.FlushAsync();
// Assert
- await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput, inlineLocalReferences);
}
}
}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index 11020cee0..98029f874 100644
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -459,6 +459,16 @@ namespace Microsoft.OpenApi.Models.Interfaces
bool WriteOnly { get; }
Microsoft.OpenApi.Models.OpenApiXml Xml { get; }
}
+ public interface IOpenApiSecurityScheme : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement
+ {
+ string BearerFormat { get; }
+ Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; }
+ Microsoft.OpenApi.Models.ParameterLocation? In { get; }
+ string Name { get; }
+ System.Uri OpenIdConnectUrl { get; }
+ string Scheme { get; }
+ Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; }
+ }
public interface IOpenApiSummarizedElement : Microsoft.OpenApi.Interfaces.IOpenApiElement
{
string Summary { get; set; }
@@ -502,7 +512,7 @@ namespace Microsoft.OpenApi.Models
public System.Collections.Generic.IDictionary? RequestBodies { get; set; }
public System.Collections.Generic.IDictionary? Responses { get; set; }
public System.Collections.Generic.IDictionary? Schemas { get; set; }
- public System.Collections.Generic.IDictionary? SecuritySchemes { get; set; }
+ public System.Collections.Generic.IDictionary? SecuritySchemes { get; set; }
public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
@@ -1051,31 +1061,29 @@ namespace Microsoft.OpenApi.Models
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
- public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
+ public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
public OpenApiSecurityRequirement() { }
public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
- public class OpenApiSecurityScheme : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
+ public class OpenApiSecurityScheme : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme
{
public OpenApiSecurityScheme() { }
- public OpenApiSecurityScheme(Microsoft.OpenApi.Models.OpenApiSecurityScheme securityScheme) { }
- public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public bool UnresolvedReference { get; set; }
- public virtual string BearerFormat { get; set; }
- public virtual string Description { get; set; }
- public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
- public virtual Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; }
- public virtual Microsoft.OpenApi.Models.ParameterLocation? In { get; set; }
- public virtual string Name { get; set; }
- public virtual System.Uri OpenIdConnectUrl { get; set; }
- public virtual string Scheme { get; set; }
- public virtual Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; set; }
- public virtual void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public OpenApiSecurityScheme(Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme securityScheme) { }
+ public string BearerFormat { get; set; }
+ public string Description { get; set; }
+ public System.Collections.Generic.IDictionary Extensions { get; set; }
+ public Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; }
+ public Microsoft.OpenApi.Models.ParameterLocation? In { get; set; }
+ public string Name { get; set; }
+ public System.Uri OpenIdConnectUrl { get; set; }
+ public string Scheme { get; set; }
+ public Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; set; }
+ public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiServer : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
@@ -1404,22 +1412,19 @@ namespace Microsoft.OpenApi.Models.References
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
- public class OpenApiSecuritySchemeReference : Microsoft.OpenApi.Models.OpenApiSecurityScheme, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceHolder, Microsoft.OpenApi.Interfaces.IOpenApiReferenceHolder, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
+ public class OpenApiSecuritySchemeReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme
{
public OpenApiSecuritySchemeReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
- public Microsoft.OpenApi.Models.OpenApiSecurityScheme Target { get; }
- public override string BearerFormat { get; set; }
- public override string Description { get; set; }
- public override System.Collections.Generic.IDictionary Extensions { get; set; }
- public override Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; }
- public override Microsoft.OpenApi.Models.ParameterLocation? In { get; set; }
- public override string Name { get; set; }
- public override System.Uri OpenIdConnectUrl { get; set; }
- public override string Scheme { get; set; }
- public override Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; set; }
- public override void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public string BearerFormat { get; }
+ public string Description { get; set; }
+ public System.Collections.Generic.IDictionary Extensions { get; }
+ public Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; }
+ public Microsoft.OpenApi.Models.ParameterLocation? In { get; }
+ public string Name { get; }
+ public System.Uri OpenIdConnectUrl { get; }
+ public string Scheme { get; }
+ public Microsoft.OpenApi.Models.SecuritySchemeType? Type { get; }
+ public override Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme source) { }
}
public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceHolder, Microsoft.OpenApi.Interfaces.IOpenApiReferenceHolder, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
@@ -1622,6 +1627,7 @@ namespace Microsoft.OpenApi.Services
public virtual void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiRequestBody requestBody) { }
public virtual void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiResponse response) { }
public virtual void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiSchema schema) { }
+ public virtual void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme securityScheme) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiComponents components) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiContact contact) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiDocument doc) { }
@@ -1635,7 +1641,6 @@ namespace Microsoft.OpenApi.Services
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiPaths paths) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiResponses response) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiSecurityRequirement securityRequirement) { }
- public virtual void Visit(Microsoft.OpenApi.Models.OpenApiSecurityScheme securityScheme) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiServer server) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiServerVariable serverVariable) { }
public virtual void Visit(Microsoft.OpenApi.Models.OpenApiTag tag) { }
@@ -1721,6 +1726,7 @@ namespace Microsoft.OpenApi.Validations
public override void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiRequestBody requestBody) { }
public override void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiResponse response) { }
public override void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiSchema schema) { }
+ public override void Visit(Microsoft.OpenApi.Models.Interfaces.IOpenApiSecurityScheme securityScheme) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiComponents components) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiContact contact) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiDocument doc) { }
@@ -1734,7 +1740,6 @@ namespace Microsoft.OpenApi.Validations
public override void Visit(Microsoft.OpenApi.Models.OpenApiPaths paths) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiResponses response) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiSecurityRequirement securityRequirement) { }
- public override void Visit(Microsoft.OpenApi.Models.OpenApiSecurityScheme securityScheme) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiServer server) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiServerVariable serverVariable) { }
public override void Visit(Microsoft.OpenApi.Models.OpenApiTag tag) { }
diff --git a/test/Microsoft.OpenApi.Tests/Visitors/InheritanceTests.cs b/test/Microsoft.OpenApi.Tests/Visitors/InheritanceTests.cs
index a11d64599..581f2998a 100644
--- a/test/Microsoft.OpenApi.Tests/Visitors/InheritanceTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Visitors/InheritanceTests.cs
@@ -51,7 +51,7 @@ public void ExpectedVirtualsInvolved()
visitor.Visit(default(IOpenApiHeader));
visitor.Visit(default(OpenApiOAuthFlow));
visitor.Visit(default(OpenApiSecurityRequirement));
- visitor.Visit(default(OpenApiSecurityScheme));
+ visitor.Visit(default(IOpenApiSecurityScheme));
visitor.Visit(default(IOpenApiExample));
visitor.Visit(default(IList));
visitor.Visit(default(IList));
@@ -280,7 +280,7 @@ public override void Visit(OpenApiSecurityRequirement securityRequirement)
base.Visit(securityRequirement);
}
- public override void Visit(OpenApiSecurityScheme securityScheme)
+ public override void Visit(IOpenApiSecurityScheme securityScheme)
{
EncodeCall();
base.Visit(securityScheme);
diff --git a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs
index fa5b901dc..663328b78 100644
--- a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs
@@ -216,7 +216,7 @@ public void LocateReferences()
{
["test-header"] = testHeader
},
- SecuritySchemes = new Dictionary
+ SecuritySchemes = new Dictionary
{
["test-secScheme"] = new OpenApiSecuritySchemeReference("reference-to-scheme", null, null)
}