/// <summary>
        /// update an existing IP filter
        /// </summary>
        /// <param name="ipFilter">filter details</param>
        public void UpdateIPFilter(IPFilterInfo ipFilter)
        {
            Requires.NotNull("ipFilter", ipFilter);
            AssertValidIPFilter(ipFilter);

            DataProvider.Instance().UpdateIPFilter(ipFilter.IPFilterID, ipFilter.IPAddress, ipFilter.SubnetMask, ipFilter.RuleType, UserController.Instance.GetCurrentUserInfo().UserID);
        }
        /// <summary>
        /// add a new IP filter
        /// </summary>
        /// <param name="ipFilter">filter details</param>
        /// <returns>filter id</returns>
        public int AddIPFilter(IPFilterInfo ipFilter)
        {
            Requires.NotNull("ipFilter", ipFilter);
            int id = DataProvider.Instance().AddIPFilter(ipFilter.IPAddress, ipFilter.SubnetMask, ipFilter.RuleType, UserController.Instance.GetCurrentUserInfo().UserID);

            return(id);
        }
        /// <summary>
        /// Check if a new rule would block the existing IP address
        /// </summary>
        /// <param name="currentIP">current IP address</param>
        /// <param name="ipFilter">new propose rule</param>
        /// <returns>true if rule would not block current IP, false otherwise</returns>
        public bool IsAllowableDeny(string currentIP, IPFilterInfo ipFilter)
        {
            if (ipFilter.RuleType == (int)FilterType.Allow)
            {
                return(true);
            }

            if (NetworkUtils.IsIPInRange(currentIP, ipFilter.IPAddress, ipFilter.SubnetMask))
            {
                return(false);
            }
            return(true);
        }
        private static void AssertValidIPFilter(IPFilterInfo ipFilter)
        {
            IPAddress parsed;

            if (IPAddress.TryParse(ipFilter.IPAddress, out parsed) == false)
            {
                throw new ArgumentException(Localization.GetExceptionMessage("IPAddressIncorrect", "IP address is not in correct format"));
            }

            bool isIPRange = string.IsNullOrEmpty(ipFilter.SubnetMask) == false;

            if (isIPRange && IPAddress.TryParse(ipFilter.SubnetMask, out parsed) == false)
            {
                throw new ArgumentException(Localization.GetExceptionMessage("SubnetMaskIncorrect", "Subnet mask is not in correct format"));
            }
        }
 public void DeleteIPFilter(IPFilterInfo ipFilter)
 {
     Requires.PropertyNotNegative("ipFilter", "ipFilter.IPFilterID", ipFilter.IPFilterID);
     DataProvider.Instance().DeleteIPFilter(ipFilter.IPFilterID);
 }
        protected void DeleteFilter(object sender, EventArgs e)
        {
            //Get the index of the row to delete
            var btnDel = ((LinkButton) (sender));
            int removedIpf = Convert.ToInt32(btnDel.CommandArgument);

            IList<IPFilterInfo> currentRules = IPFilterController.Instance.GetIPFilters();

            List<IPFilterInfo> currentWithDeleteRemoved = (from p in currentRules where p.IPFilterID != removedIpf select p).ToList();

            if (IPFilterController.Instance.CanIPStillAccess(Request.UserHostAddress, currentWithDeleteRemoved) == false)
            {
                Skin.AddModuleMessage(this, Localization.GetString("CannotDelete.Text", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError);
            }
            else
            {
                var ipf = new IPFilterInfo();
                ipf.IPFilterID = removedIpf;
                IPFilterController.Instance.DeleteIPFilter(ipf);
                BindFilters();
            }
        }
        private void OnSaveFilterClick(object sender, EventArgs e)
        {
            var ipf = new IPFilterInfo();
            ipf.IPAddress = txtFirstIP.Text;
            ipf.SubnetMask = txtSubnet.Text;
            ipf.RuleType = Convert.ToInt32(cboType.SelectedValue);

            if ((ipf.IPAddress == "127.0.0.1" || ipf.IPAddress == "localhost" || ipf.IPAddress == "::1" || ipf.IPAddress=="*" ) && ipf.RuleType == 2)
            {
                Skin.AddModuleMessage(this, Localization.GetString("CannotDeleteLocalhost.Text", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError);
                return;
            }

            if (IPFilterController.Instance.IsAllowableDeny(Request.UserHostAddress, ipf) == false)
            {
                Skin.AddModuleMessage(this, Localization.GetString("CannotDeleteIPInUse.Text", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError);
                return;
            }

            if (!String.IsNullOrEmpty(Request.QueryString["IPFilterID"]))
            {
                ipf.IPFilterID = Convert.ToInt32(Request.QueryString["IPFilterID"]);
                IPFilterController.Instance.UpdateIPFilter(ipf);
            }
            else
            {
                IPFilterController.Instance.AddIPFilter(ipf);
            }
            Response.Redirect(Globals.NavigateURL(TabId), true);
        }