in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/DocumentFilters/SecurityToSecurityRequirementDocumentFilter.cs [32:97]
public IList<GenerationError> Apply(
OpenApiDocument openApiDocument,
IList<XDocument> xmlDocuments,
DocumentFilterSettings settings,
OpenApiDocumentGenerationSettings openApiDocumentGenerationSettings)
{
var generationErrors = new List<GenerationError>();
try
{
if (openApiDocument == null)
{
throw new ArgumentNullException(nameof(openApiDocument));
}
if (settings == null)
{
throw new ArgumentNullException(nameof(settings));
}
if (xmlDocuments == null)
{
throw new ArgumentNullException(nameof(xmlDocuments));
}
var securityElements = new List<XElement>();
foreach (var xmlDocument in xmlDocuments)
{
securityElements.AddRange(xmlDocument.XPathSelectElements("//doc/members/member")
.Where(
m => m.Attribute(KnownXmlStrings.Name) != null &&
m.Attribute(KnownXmlStrings.Name).Value.StartsWith("T:"))
.Elements()
.Where(p => p.Name == KnownXmlStrings.Security));
}
if (!securityElements.Any())
{
return generationErrors;
}
var openApiSecurityRequirement = new OpenApiSecurityRequirement();
var securitySchemeRegistry = settings.ReferenceRegistryManager.SecuritySchemeReferenceRegistry;
foreach (var securityElement in securityElements)
{
var securityScheme = securitySchemeRegistry.FindOrAddReference(securityElement);
openApiSecurityRequirement.Add(securityScheme, securitySchemeRegistry.Scopes);
}
openApiDocument.SecurityRequirements.Add(openApiSecurityRequirement);
}
catch(Exception ex)
{
generationErrors.Add(
new GenerationError
{
Message = ex.Message,
ExceptionType = ex.GetType().Name
});
}
return generationErrors;
}