예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="IPBanningModule" /> class.
        /// </summary>
        /// <param name="baseRoute">The base route.</param>
        /// <param name="whitelist">A collection of valid IPs that never will be banned.</param>
        /// <param name="banMinutes">Minutes that an IP will remain banned.</param>
        public IPBanningModule(string baseRoute = "/",
                               IEnumerable <string>?whitelist = null,
                               int banMinutes = DefaultBanMinutes)
            : base(baseRoute)
        {
            Configuration = IPBanningExecutor.RetrieveInstance(baseRoute, banMinutes);

            AddToWhitelist(whitelist);
        }
예제 #2
0
        /// <summary>
        /// Tries to ban an IP explicitly.
        /// </summary>
        /// <param name="address">The IP address to ban.</param>
        /// <param name="banUntil">A <see cref="DateTime" /> specifying the expiration time of the ban.</param>
        /// <param name="baseRoute">The base route.</param>
        /// <param name="isExplicit"><c>true</c> if the IP was explicitly banned.</param>
        /// <returns>
        ///   <c>true</c> if the IP was added to the blacklist; otherwise, <c>false</c>.
        /// </returns>
        /// <exception cref="ArgumentException">baseRoute</exception>
        public static bool TryBanIP(IPAddress address, DateTime banUntil, string baseRoute = "/", bool isExplicit = true)
        {
            if (!IPBanningExecutor.TryGetInstance(baseRoute, out var instance))
            {
                throw new ArgumentException(NoConfigurationFound, nameof(baseRoute));
            }

            return(instance.TryBanIP(address, isExplicit, banUntil));
        }
예제 #3
0
        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }
            if (disposing)
            {
                IPBanningExecutor.TryRemoveInstance(BaseRoute);
                Configuration.Dispose();
            }

            _disposed = true;
        }
예제 #4
0
 /// <summary>
 /// Gets the list of current banned IPs.
 /// </summary>
 /// <param name="baseRoute">The base route.</param>
 /// <returns>
 /// A collection of <see cref="BanInfo" /> in the blacklist.
 /// </returns>
 /// <exception cref="ArgumentException">baseRoute</exception>
 public static IEnumerable <BanInfo> GetBannedIPs(string baseRoute = "/")
 => IPBanningExecutor.TryGetInstance(baseRoute, out var instance)
         ? instance.BlackList
         : throw new ArgumentException(NoConfigurationFound, nameof(baseRoute));
예제 #5
0
 /// <summary>
 /// Tries to unban an IP explicitly.
 /// </summary>
 /// <param name="address">The IP address.</param>
 /// <param name="baseRoute">The base route.</param>
 /// <returns>
 ///   <c>true</c> if the IP was removed from the blacklist; otherwise, <c>false</c>.
 /// </returns>
 /// <exception cref="ArgumentException">baseRoute</exception>
 public static bool TryUnbanIP(IPAddress address, string baseRoute = "/")
 => IPBanningExecutor.TryGetInstance(baseRoute, out var instance)
         ? instance.TryRemoveBlackList(address)
         : throw new ArgumentException(NoConfigurationFound, nameof(baseRoute));