/
aprogrammer
/
reverse-proxy-ms-yarp
Обзор
Документация
Войти
/
aprogrammer
/
reverse-proxy-ms-yarp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/ReverseProxy/Configuration/RouteValidators/RateLimitPolicyValidator.cs
59 строк
2 KB
Lars Johansen
Refactor ConfigValidator (#2293)
23 ноя 2023, 01:16
Не верифицирован
23 ноя 2023, 01:16
4e32b6b
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Yarp.ReverseProxy.Configuration.RouteValidators; internal sealed class RateLimitPolicyValidator : IRouteValidator { #if NET7_0_OR_GREATER private readonly IYarpRateLimiterPolicyProvider _rateLimiterPolicyProvider; public RateLimitPolicyValidator(IYarpRateLimiterPolicyProvider rateLimiterPolicyProvider) { _rateLimiterPolicyProvider = rateLimiterPolicyProvider; } public async ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exception> errors) { var rateLimiterPolicyName = routeConfig.RateLimiterPolicy; if (string.IsNullOrEmpty(rateLimiterPolicyName)) { return; } if (string.Equals(RateLimitingConstants.Default, rateLimiterPolicyName, StringComparison.OrdinalIgnoreCase) || string.Equals(RateLimitingConstants.Disable, rateLimiterPolicyName, StringComparison.OrdinalIgnoreCase)) { var policy = await _rateLimiterPolicyProvider.GetPolicyAsync(rateLimiterPolicyName); if (policy is not null) { // We weren't expecting to find a policy with these names. errors.Add(new ArgumentException( $"The application has registered a RateLimiter policy named '{rateLimiterPolicyName}' that conflicts with the reserved RateLimiter policy name used on this route. The registered policy name needs to be changed for this route to function.")); } return; } try { var policy = await _rateLimiterPolicyProvider.GetPolicyAsync(rateLimiterPolicyName); if (policy is null) { errors.Add(new ArgumentException( $"RateLimiter policy '{rateLimiterPolicyName}' not found for route '{routeConfig.RouteId}'.")); } } catch (Exception ex) { errors.Add(new ArgumentException( $"Unable to retrieve the RateLimiter policy '{rateLimiterPolicyName}' for route '{routeConfig.RouteId}'.", ex)); } } #else public ValueTask ValidateAsync(RouteConfig routeConfig, IList<Exception> errors) => ValueTask.CompletedTask; #endif }