public void Handle()

in src/Core/Compiling/Policy/ValidateJwtCompiler.cs [18:72]


    public void Handle(ICompilationContext context, InvocationExpressionSyntax node)
    {
        if (!node.TryExtractingConfigParameter<ValidateJwtConfig>(context, "validate-jwt", out var values))
        {
            return;
        }

        var element = new XElement("validate-jwt");

        if (new[]
            {
                element.AddAttribute(values, nameof(ValidateJwtConfig.HeaderName), "header-name"),
                element.AddAttribute(values, nameof(ValidateJwtConfig.QueryParameterName), "query-parameter-name"),
                element.AddAttribute(values, nameof(ValidateJwtConfig.TokenValue), "token-value"),
            }.Count(b => b) != 1)
        {
            context.Report(Diagnostic.Create(
                CompilationErrors.OnlyOneOfTreeShouldBeDefined,
                node.ArgumentList.GetLocation(),
                "validate-jwt",
                nameof(ValidateJwtConfig.HeaderName),
                nameof(ValidateJwtConfig.QueryParameterName),
                nameof(ValidateJwtConfig.TokenValue)
            ));
            return;
        }

        element.AddAttribute(values, nameof(ValidateJwtConfig.FailedValidationHttpCode), "failed-validation-httpcode");
        element.AddAttribute(values, nameof(ValidateJwtConfig.FailedValidationErrorMessage),
            "failed-validation-error-message");
        element.AddAttribute(values, nameof(ValidateJwtConfig.RequireExpirationTime), "require-expiration-time");
        element.AddAttribute(values, nameof(ValidateJwtConfig.RequireScheme), "require-scheme");
        element.AddAttribute(values, nameof(ValidateJwtConfig.RequireSignedTokens), "require-signed-tokens");
        element.AddAttribute(values, nameof(ValidateJwtConfig.ClockSkew), "clock-skew");
        element.AddAttribute(values, nameof(ValidateJwtConfig.OutputTokenVariableName), "output-token-variable-name");

        if (values.TryGetValue(nameof(ValidateJwtConfig.OpenIdConfigs), out var openIdConfigs))
        {
            var openIdElements = HandleOpenIdConfigs(context, openIdConfigs);
            element.Add(openIdElements);
        }

        HandleKeys(context, element, values, nameof(ValidateJwtConfig.IssuerSigningKeys), "issuer-signing-keys");
        HandleKeys(context, element, values, nameof(ValidateJwtConfig.DescriptionKeys), "decryption-keys");
        GenericCompiler.HandleList(element, values, nameof(ValidateJwtConfig.Audiences), "audiences", "audience");
        GenericCompiler.HandleList(element, values, nameof(ValidateJwtConfig.Issuers), "issuers", "issuer");

        if (values.TryGetValue(nameof(ValidateJwtConfig.RequiredClaims), out var requiredClaims))
        {
            XElement claimsElement = ClaimsConfigCompiler.HandleRequiredClaims(context, requiredClaims);
            element.Add(claimsElement);
        }

        context.AddPolicy(element);
    }