in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/ReferenceRegistries/SecuritySchemeReferenceRegistry.cs [32:93]
internal override OpenApiSecurityScheme FindOrAddReference(XElement securityElement)
{
var type = securityElement.Attribute(KnownXmlStrings.Type)?.Value.Trim();
var key = GetKey(securityElement);
Scopes = new List<string>();
if (References.ContainsKey(key))
{
return new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Id = key,
Type = ReferenceType.SecurityScheme
}
};
}
var securityScheme = new OpenApiSecurityScheme();
switch (type)
{
case KnownXmlStrings.ApiKey:
securityScheme = securityElement.ToApiKeySecurityScheme();
break;
case KnownXmlStrings.Http:
securityScheme = securityElement.ToHttpSecurityScheme();
break;
case KnownXmlStrings.OAuth2:
IList<string> oAuthScopes;
securityScheme = securityElement.ToOAuth2SecurityScheme(out oAuthScopes);
Scopes.AddRange(oAuthScopes);
break;
case KnownXmlStrings.OpenIdConnect:
IList<string> scopes;
securityScheme = securityElement.ToOpenIdConnectSecurityScheme(out scopes);
Scopes.AddRange(scopes);
break;
default:
throw new InvalidSecurityTagException(string.Format(
SpecificationGenerationMessages.NotSupportedTypeAttributeValue,
type,
KnownXmlStrings.Security,
string.Join(", ", KnownXmlStrings.AllowedSecurityTypeValues)));
}
References.Add(key, securityScheme);
return new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Id = key,
Type = ReferenceType.SecurityScheme
}
};
}