コード例 #1
0
ファイル: IpRateLimitProcessor.cs プロジェクト: Poepon/JK
        public override bool IsWhitelisted(ClientRequestIdentity requestIdentity)
        {
            if (_options.IpWhitelist != null && IpParser.ContainsIp(_options.IpWhitelist, requestIdentity.ClientIp))
            {
                return(true);
            }

            return(base.IsWhitelisted(requestIdentity));
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: yjqGitHub/RateLimit
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine("delete:/api/values".IsMatch("*:/api/values"));
            Console.WriteLine("delete:/api/values".IsMatch("*:/api/?"));
            Console.WriteLine("delete:/api/values".IsMatch("*:/api/*"));

            Console.WriteLine(IpParser.ContainsIp("127.0.0.0/10", "127.0.0.1"));
            Console.WriteLine(IpParser.ContainsIp("127.0.0.1/10", "127.0.0.1"));
            Console.WriteLine(IpParser.ContainsIp("127.0.1.0/10", "127.0.0.1"));
            Console.WriteLine(IpParser.ContainsIp("::1/10", "::9"));
            Console.WriteLine(IpParser.ContainsIp("::1/10", "127.0.0.1"));
            Console.ReadLine();
        }
コード例 #3
0
ファイル: IpRateLimitProcessor.cs プロジェクト: Poepon/JK
        public async Task <IEnumerable <RateLimitRule> > GetMatchingRulesAsync(ClientRequestIdentity identity, CancellationToken cancellationToken = default)
        {
            var policies = await _cacheManager.GetCache(nameof(IpRateLimitPolicies))
                           .GetOrDefaultAsync <string, IpRateLimitPolicies>($"{IpRateLimitOptions.IpPolicyPrefix}");

            var rules = new List <RateLimitRule>();

            if (policies?.IpRules?.Any() == true)
            {
                // search for rules with IP intervals containing client IP
                var matchPolicies = policies.IpRules.Where(r => IpParser.ContainsIp(r.Ip, identity.ClientIp));

                foreach (var item in matchPolicies)
                {
                    rules.AddRange(item.Rules);
                }
            }

            return(GetMatchingRules(identity, rules));
        }