internal override OpenApiSecurityScheme FindOrAddReference()

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
                }
            };
        }