示例#1
0
        private void CreateTempRuleNotifyIcon(CustomRule newRule)
        {
            if (!tempRules_.Contains(newRule))
            {
                tempRules_.Add(newRule);
            }
            if (tempNotifyIcon_ is null)
            {
                void iconClick(object sender, EventArgs e)
                {
                    if (!RemoveTempRulesAndNotfyIcon())
                    {
                        WinForms::MessageBox.Show(Messages.MSG_RULE_RM_FAILED, Messages.MSG_DLG_ERR_TITLE, WinForms::MessageBoxButtons.OK, WinForms::MessageBoxIcon.Error);
                    }
                }

                // tray icon for temporary rule
                WinForms::NotifyIcon ni = new WinForms::NotifyIcon();
                ni.Click += new EventHandler(iconClick);
                // shown in message center on win10
                ni.BalloonTipIcon  = WinForms::ToolTipIcon.Info;
                ni.BalloonTipTitle = Common.Properties.Resources.RULE_TEMP_TITLE;
                ni.BalloonTipText  = Messages.RULE_TEMP_DESCRIPTION;
                // tooltip shown on tray icon
                ni.Text    = Messages.RULE_TEMP_DESCRIPTION_SHORT; // limit 64 chars on win10
                ni.Icon    = new Icon(SystemIcons.Shield, new System.Drawing.Size(16, 16));
                ni.Visible = true;
                ni.ShowBalloonTip(2000);
                ni.Visible = true;

                tempNotifyIcon_ = ni;
            }
        }
示例#2
0
        /// <summary>
        /// 绑定Grid
        /// </summary>
        public override void BindGrid()
        {
            CustomRule rule = new CustomRule();

            gridView1.GridControl.DataSource = rule.RShow(HTDataConditionStr, ProcessGrid.GetQueryField(gridView1));
            gridView1.GridControl.Show();
        }
示例#3
0
        private bool createAllowRule(CurrentConn activeConn, string[] services, bool createWithAdvancedOptions, bool createTempRule, string ruleName)
        {
            int    Profiles      = OptionsView.IsCurrentProfileChecked ? FirewallHelper.GetCurrentProfile() : FirewallHelper.GetGlobalProfile();
            string finalRuleName = createTempRule ? Messages.RULE_TEMP_PREFIX + ruleName : ruleName;
            var    newRule       = new CustomRule(finalRuleName,
                                                  createWithAdvancedOptions || OptionsView.IsPathChecked ? activeConn.Path : null,
                                                  !createWithAdvancedOptions && OptionsView.IsAppChecked ? activeConn.CurrentAppPkgId : null,
                                                  activeConn.CurrentLocalUserOwner,
                                                  services,
                                                  !createWithAdvancedOptions && OptionsView.IsProtocolChecked ? activeConn.RawProtocol : -1,
                                                  !createWithAdvancedOptions && OptionsView.IsTargetIPChecked ? activeConn.TargetIP : null,
                                                  !createWithAdvancedOptions && OptionsView.IsTargetPortChecked ? activeConn.TargetPort : null,
                                                  !createWithAdvancedOptions && OptionsView.IsLocalPortChecked ? activeConn.SourcePort : null,
                                                  Profiles,
                                                  CustomRule.CustomRuleAction.Allow);

            bool success = FirewallHelper.AddRule(newRule.GetPreparedRule(createTempRule)); // does not use RuleManager

            if (success && createTempRule)
            {
                CreateTempRuleNotifyIcon(newRule);
            }

            return(success);
        }
示例#4
0
        /// <summary>
        /// 删除
        /// </summary>
        public override void EntityDelete()
        {
            CustomRule rule   = new CustomRule();
            Custom     entity = EntityGet();

            rule.RDelete(entity);
        }
示例#5
0
        private void CreateTempRuleNotifyIcon(CustomRule newRule)
        {
            if (!tempRules_.Contains(newRule))
            {
                tempRules_.Add(newRule);
            }
            if (tempNotifyIcon_ is null)
            {
                // tray icon for temporary rule
                WinForms::NotifyIcon ni = new WinForms::NotifyIcon();
                ni.Click += iconClick;
                // shown in message center on win10
                ni.BalloonTipIcon  = WinForms::ToolTipIcon.Info;
                ni.BalloonTipTitle = Common.Properties.Resources.RULE_TEMP_TITLE;
                ni.BalloonTipText  = Messages.RULE_TEMP_DESCRIPTION;
                // tooltip shown on tray icon
                ni.Text    = Messages.RULE_TEMP_DESCRIPTION_SHORT; // limit 64 chars on win10
                ni.Icon    = new Icon(SystemIcons.Shield, new System.Drawing.Size(16, 16));
                ni.Visible = true;
                ni.ShowBalloonTip(2000);
                ni.Visible = true;

                tempNotifyIcon_ = ni;
            }
        }
        public void CreateExpression_DateOutsideOfWindowAndIsMonday_ReverseExpression_BuildsExpression(int year, int month, int day, bool validates, int numberOfErrorMsg)
        {
            // Test: (DateTime d) => d.DayOfWeek == DayOfWeek.Monday & (d < floorDate | d > ceilingDate)
            var floorDate   = new DateTime(2010, 2, 1);
            var ceilingDate = new DateTime(2010, 3, 1);
            var testDate    = new DateTime(year, month, day);

            // build rules / rule nodes for "d < floorDate | d > ceilingDate" and put in a group
            var rangeRuleNode = new RuleNode(new LessThan <CalendarEvent, DateTime>(floorDate));

            rangeRuleNode.OrChild(new RuleNode(new GreaterThan <CalendarEvent, DateTime>(ceilingDate)));
            var groupNode = new GroupNode(rangeRuleNode);

            // build rule / rule node for "d.DayOfWeek == DayOfWeek.Monday
            var dateOneMondayRule = new CustomRule <CalendarEvent, DateTime>((c, d) => d.DayOfWeek == DayOfWeek.Monday);

            dateOneMondayRule.Message = "Date does not fall on a Monday.";
            var dateOneMondayRuleNode = new RuleNode(dateOneMondayRule);

            // add the rangeRuleNode as an And child of dateOneMondayRuleNode
            dateOneMondayRuleNode.AndChild(groupNode);

            var tree = new RuleTree <CalendarEvent, DateTime>(dateOneMondayRuleNode);

            Assert.That(tree.LambdaExpression, Is.Not.Null);

            var context      = BuildContextForCalendarEventStartDate(testDate);
            var notification = new ValidationNotification();
            var isValid      = tree.LambdaExpression(context, null, notification);

            Assert.That(isValid, Is.EqualTo(validates));
        }
        public void CreateExpression_DateOutsideOfWindowAndIsMonday_BuildsExpression(int year, int month, int day, bool validates, int numberOfErrorMsg)
        {
            // Test: (DateTime d) => (d < floorDate | d > ceilingDate) & d.DayOfWeek == DayOfWeek.Monday
            var floorDate = new DateTime(2010, 2, 1);
            var ceilingDate = new DateTime(2010, 3, 1);
            var testDate = new DateTime(year, month, day);

            // build rule / rule node for "d.DayOfWeek == DayOfWeek.Monday
            var dateOneMondayRule = new CustomRule<CalendarEvent, DateTime>((c, d) => d.DayOfWeek == DayOfWeek.Monday);
            dateOneMondayRule.Message = "Date does not fall on a Monday.";
            var dateOneMondayRuleNode = new RuleNode(dateOneMondayRule);

            // build rules / rule nodes for "d < floorDate | d > ceilingDate"
            var rangeRuleNode = new RuleNode(new LessThan<CalendarEvent, DateTime>(floorDate));
            rangeRuleNode.OrChild(new RuleNode(new GreaterThan<CalendarEvent, DateTime>(ceilingDate)));

            // put the rules / rule nodes together using a group to enforce the "or" precidence over the "and"
            var groupNode = new GroupNode(rangeRuleNode);
            groupNode.AndChild(dateOneMondayRuleNode);

            var tree = new RuleTree<CalendarEvent, DateTime>(groupNode);

            Assert.That(tree.LambdaExpression, Is.Not.Null);

            var context = BuildContextForCalendarEventStartDate(testDate);
            var notification = new ValidationNotification();
            var isValid = tree.LambdaExpression(context, null, notification);

            Assert.That(isValid, Is.EqualTo(validates));
        }
示例#8
0
        public void CreateCustomRuleThrowsError()
        {
            var client = CommonMethods.GetClientByRoute(TargetProcessRoutes.Route.CustomRules);

            var customRule = new CustomRule
            {
            };
        }
        public void GivenValidatingCustomRule_WhenValueIsValid_ValidationIsSuccesful()
        {
            var value             = "My String";
            var validationMessage = "The value should match 'Some Other String'";

            var rule   = new CustomRule <string>(x => x.Equals(value), validationMessage);
            var result = rule.Validate(0, 0, string.Empty, string.Empty, value);

            result.IsSuccess.Should().BeTrue();
        }
示例#10
0
        public bool CustomRule_WithExpression_IsValid(string propertyValue)
        {
            //Create Validator
            var validator = new CustomRule<Contact, string>((c, name) => name.ToUpper() == "ISVALIDNAME");
            validator.Message = "Invalid Name";
            RuleValidatorContext<Contact, string> context = BuildContextForName(propertyValue);

            //Validate the validator only, return true of no error returned
            return validator.Validate(context, null) == null;
        }
示例#11
0
        public bool CustomRule_WithDelegate_IsValid(string propertyValue)
        {
            //Create Validator
            var validator = new CustomRule<Contact, string>(IsValidName);
            validator.Message = "Invalid Name";
            RuleValidatorContext<Contact, string> context = BuildContextForName(propertyValue);

            //Validate the validator only, return true of no error returned
            return validator.Validate(context, null) == null;
        }
示例#12
0
 public void CustomRuleThrowsError()
 {
     var client = new TargetProcessClient
     {
         ApiSiteInfo = new ApiSiteInfo(TargetProcessRoutes.Route.CustomRules)
     };
     var customRule = new CustomRule
     {
     };
 }
示例#13
0
        private static bool CreateDefaultRules()
        {
            bool ret   = true;
            var  rules = FirewallHelper.GetRules();

            using (ServiceController sc = new ServiceController())
            {
                string rname;

                // Windows 8 or higher
                if (Environment.OSVersion.Version >= new System.Version(6, 2))
                {
                    rname = String.Format(Resources.RULE_NAME_FORMAT, "Windows Applications (auto)");
                    if (rules.All(r => r.Name != rname))
                    {
                        CustomRule newRule = new CustomRule(rname, Environment.SystemDirectory + "\\wwahost.exe", null, null, (string)null, Protocol.ANY, null, null, null, FirewallHelper.GetGlobalProfile(), CustomRule.CustomRuleAction.Allow);
                        ret = ret && FirewallHelper.AddRule(newRule.GetPreparedRule(false));
                    }
                }

                sc.ServiceName = "wuauserv";
                rname          = String.Format(Resources.RULE_NAME_FORMAT, sc.DisplayName + " (auto)");
                if (rules.All(r => r.Name != rname + " [R:80,443]"))
                {
                    CustomRule newRule = new CustomRule(rname, Environment.SystemDirectory + "\\svchost.exe", null, null, "wuauserv", Protocol.TCP, null, "80,443", null, FirewallHelper.GetGlobalProfile(), CustomRule.CustomRuleAction.Allow);
                    ret = ret && FirewallHelper.AddRule(newRule.GetPreparedRule(false));
                }

                sc.ServiceName = "bits";
                rname          = String.Format(Resources.RULE_NAME_FORMAT, sc.DisplayName + "(auto)");
                if (rules.All(r => r.Name != rname + " [R:80,443]"))
                {
                    CustomRule newRule = new CustomRule(rname, Environment.SystemDirectory + "\\svchost.exe", null, null, "bits", Protocol.TCP, null, "80,443", null, FirewallHelper.GetGlobalProfile(), CustomRule.CustomRuleAction.Allow);
                    ret = ret && FirewallHelper.AddRule(newRule.GetPreparedRule(false));
                }

                sc.ServiceName = "cryptsvc";
                rname          = String.Format(Resources.RULE_NAME_FORMAT, sc.DisplayName + "(auto)");
                if (rules.All(r => r.Name != rname + " [R:80]"))
                {
                    CustomRule newRule = new CustomRule(rname, Environment.SystemDirectory + "\\svchost.exe", null, null, "cryptsvc", Protocol.TCP, null, "80", null, FirewallHelper.GetGlobalProfile(), CustomRule.CustomRuleAction.Allow);
                    ret = ret && FirewallHelper.AddRule(newRule.GetPreparedRule(false));
                }

                //sc.ServiceName = "aelookupsvc";
                //rname = String.Format(Resources.RULE_NAME_FORMAT, sc.DisplayName + "(auto)");
                //if (rules.All(r => r.Name != rname + " [R:80]"))
                //{
                //    CustomRule newRule = new CustomRule(rname, Environment.SystemDirectory + "\\svchost.exe", null, null,"aelookupsvc", (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP, null, "80", null, FirewallHelper.GetGlobalProfile(), "A");
                //    ret = ret && FirewallHelper.AddRule(newRule.GetPreparedRule(false));
                //}
            }

            return(ret);
        }
示例#14
0
        public List <Rule> ValidateEmployee(Employee employee)
        {
            var rule = new CustomRule <Employee>(e => e.LoginId, LoginIdShouldBeUnique)
            {
                PropertyName = "LoginId",
                ScreenName   = "Login Id"
            };


            return(employee.ValidateRules(rule));
        }
        public void GivenValidatingCustomRule_WhenValueIsInvalid_ValidationFails()
        {
            var value             = "My String";
            var validationMessage = "The value should match 'Some Other String'";

            var rule   = new CustomRule <string>(x => x.Equals("Some Other String"), validationMessage);
            var result = rule.Validate(0, 0, string.Empty, string.Empty, value);

            result.IsSuccess.Should().BeFalse();
            result.Error.ErrorMessage.Should().Be(validationMessage);
        }
示例#16
0
        public List<Rule> ValidateEmployee(Employee  employee)
        {

            var rule = new CustomRule<Employee>(e=>e.LoginId, LoginIdShouldBeUnique)
                {
                    PropertyName = "LoginId",
                    ScreenName = "Login Id"
                };


            return employee.ValidateRules(rule);
        }
示例#17
0
        public bool CustomRule_WithDelegate_IsValid(string propertyValue)
        {
            //Create Validator
            var validator = new CustomRule <Contact, string>(IsValidName);

            validator.Message = "Invalid Name";
            RuleValidatorContext <Contact, string> context = BuildContextForName(propertyValue);

            var notification = new ValidationNotification();

            //Validate the validator only, return true of no error returned
            return(validator.Validate(context, null, notification));
        }
示例#18
0
        public bool CustomRule_WithExpression_IsValid(string propertyValue)
        {
            //Create Validator
            var validator = new CustomRule <Contact, string>((c, name) => name.ToUpper() == "ISVALIDNAME");

            validator.Message = "Invalid Name";
            RuleValidatorContext <Contact, string> context = BuildContextForName(propertyValue);

            var notification = new ValidationNotification();

            //Validate the validator only, return true of no error returned
            return(validator.Validate(context, null, notification));
        }
示例#19
0
        private bool createBlockRule(CurrentConn activeConn, string[] services, bool createWithAdvancedOptions, bool createTempRule, string ruleName)
        {
            bool success;

            if (Settings.Default.UseBlockRules)
            {
                int    Profiles      = OptionsView.IsCurrentProfileChecked ? FirewallHelper.GetCurrentProfile() : FirewallHelper.GetGlobalProfile();
                string finalRuleName = (createTempRule) ? Messages.RULE_TEMP_PREFIX + ruleName : ruleName;
                var    newRule       = new CustomRule(finalRuleName,
                                                      createWithAdvancedOptions || OptionsView.IsPathChecked ? activeConn.Path : null,
                                                      !createWithAdvancedOptions && OptionsView.IsAppChecked ? activeConn.CurrentAppPkgId : null,
                                                      activeConn.CurrentLocalUserOwner,
                                                      services,
                                                      !createWithAdvancedOptions && OptionsView.IsProtocolChecked ? activeConn.RawProtocol : -1,
                                                      !createWithAdvancedOptions && OptionsView.IsTargetIPChecked ? activeConn.TargetIP : null,
                                                      !createWithAdvancedOptions && OptionsView.IsTargetPortChecked ? activeConn.TargetPort : null,
                                                      !createWithAdvancedOptions && OptionsView.IsLocalPortChecked ? activeConn.SourcePort : null,
                                                      Profiles,
                                                      CustomRule.CustomRuleAction.Block);
                success = FirewallHelper.AddRule(newRule.GetPreparedRule(createTempRule)); // does not use RuleManager
                if (success && createTempRule)
                {
                    CreateTempRuleNotifyIcon(newRule);
                }
                if (!success)
                {
                    MessageBox.Show(Messages.MSG_RULE_FAILED, Messages.MSG_DLG_ERR_TITLE, MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            else
            {
                // FIXME: Remove and always use Global Rules?
                throw new ArgumentException("Only global block rules can be used - check options");

                string entry = (!OptionsView.IsServiceRuleChecked || String.IsNullOrEmpty(activeConn.CurrentService) ? activeConn.Path : activeConn.CurrentService) +
                               (OptionsView.IsLocalPortChecked ? ";" + activeConn.SourcePort : ";") +
                               (OptionsView.IsTargetIPChecked ? ";" + activeConn.TargetIP : ";") +
                               (OptionsView.IsTargetPortChecked ? ";" + activeConn.TargetPort : ";"); //FIXME: Need to add more?
                using (StreamWriter sw = new StreamWriter(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "exclusions.set"), true))
                {
                    sw.WriteLine(entry);
                }

                success = true;
            }

            return(success);
        }
示例#20
0
        private bool createAllowRule(CurrentConn activeConn, string[] services, bool isTemp)
        {
            int        Profiles = OptionsView.IsCurrentProfileChecked ? FirewallHelper.GetCurrentProfile() : FirewallHelper.GetGlobalProfile();
            string     ruleName = isTemp ? Messages.RULE_TEMP_PREFIX + activeConn.RuleName : activeConn.RuleName;
            CustomRule newRule  = new CustomRule(ruleName, activeConn.CurrentPath, OptionsView.IsAppChecked ? activeConn.CurrentAppPkgId : null
                                                 , activeConn.CurrentLocalUserOwner, services, OptionsView.IsProtocolChecked ? activeConn.Protocol : -1, OptionsView.IsTargetIPChecked ? activeConn.Target : null
                                                 , OptionsView.IsTargetPortChecked ? activeConn.TargetPort : null, OptionsView.IsLocalPortChecked ? activeConn.LocalPort : null, Profiles
                                                 , CustomRule.CustomRuleAction.A);

            bool success = FirewallHelper.AddRule(newRule.GetPreparedRule(isTemp)); // does not use RuleManager

            if (success && isTemp)
            {
                CreateTempRuleNotifyIcon(newRule);
            }

            return(success);
        }
示例#21
0
        // Public methods
        public FeatureSelection Execute(CustomRule targetCustomRule)
        {
            // Get the expression
            string expr = targetCustomRule.Expression; // OBS: an example for syntax: ">root.TotalScore=SumOf(>root.>descendants.ScoreValue)";

            if (expr == null || expr == "")
            {
                return(null);
            }

            // Parse the expression
            AntlrInputStream  inputToParse  = new AntlrInputStream(expr);
            GrammarLexer      lexer         = new GrammarLexer(inputToParse);
            CommonTokenStream tokens        = new CommonTokenStream(lexer);
            GrammarParser     grammarParser = new GrammarParser(tokens);
            IParseTree        tree          = grammarParser.prog();
            Visitor           visitor       = new Visitor(configInstance);

            // Execute it and return the parent FeatureSelection of the modified AttributeValue (left side of the expression)
            var result = visitor.Visit(tree);

            return(result as FeatureSelection);
        }
示例#22
0
 public IApiResponse <CustomRule> CreateCustomRule(CustomRule customRule) => CreateData <CustomRule>(customRule);
示例#23
0
 private static CustomRule AddArgs(this CustomRule rule, IEnumerable <RuleArgument> args)
 {
     rule.Parameters = args.Select(a => $"{a.Parameter} : {a.Value}").ToList();
     return(rule);
 }
示例#24
0
 /// <summary>
 /// Adds a custom rule.
 /// </summary>
 /// <param name="className">Name of the class.</param>
 /// <param name="violationMessage">The violation message.</param>
 /// <param name="rule">The rule.</param>
 public void AddCustomRule(string className, string violationMessage, string rule)
 {
     rules[className] = new CustomRule(className, rule, violationMessage);
 }
        public void WAFCRUDTest()
        {
            var handler1 = new RecordedDelegatingHandler {
                StatusCodeToReturn = HttpStatusCode.OK
            };
            var handler2 = new RecordedDelegatingHandler {
                StatusCodeToReturn = HttpStatusCode.OK
            };

            using (MockContext context = MockContext.Start(this.GetType()))
            {
                // Create clients
                var frontDoorMgmtClient = FrontDoorTestUtilities.GetFrontDoorManagementClient(context, handler1);
                var resourcesClient     = FrontDoorTestUtilities.GetResourceManagementClient(context, handler2);

                // Create resource group
                var resourceGroupName = FrontDoorTestUtilities.CreateResourceGroup(resourcesClient);

                // Create a frontDoor WAF policy
                string policyName = TestUtilities.GenerateName("policy");

                WebApplicationFirewallPolicy createParameters = new WebApplicationFirewallPolicy
                {
                    Location = "global",
                    Tags     = new Dictionary <string, string>
                    {
                        { "key1", "value1" },
                        { "key2", "value2" }
                    },
                    PolicySettings = new PolicySettings
                    {
                        EnabledState                  = "Enabled",
                        Mode                          = "Prevention",
                        CustomBlockResponseBody       = "PGh0bWw+SGVsbG88L2h0bWw+",
                        CustomBlockResponseStatusCode = 403,
                        RedirectUrl                   = "http://www.bing.com"
                    },
                    CustomRules = new CustomRuleList(
                        new List <CustomRule>
                    {
                        new CustomRule
                        {
                            Name               = "rule1",
                            EnabledState       = "Enabled",
                            Priority           = 1,
                            RuleType           = "RateLimitRule",
                            RateLimitThreshold = 1000,
                            MatchConditions    = new List <MatchCondition>
                            {
                                new MatchCondition
                                {
                                    MatchVariable    = "RemoteAddr",
                                    OperatorProperty = "IPMatch",
                                    MatchValue       = new List <string>
                                    {
                                        "192.168.1.0/24",
                                        "10.0.0.0/24"
                                    }
                                }
                            },
                            Action = "Block"
                        }
                    }
                        ),
                    ManagedRules = new ManagedRuleSetList(
                        new List <ManagedRuleSet> {
                        new ManagedRuleSet
                        {
                            RuleSetType    = "DefaultRuleSet",
                            RuleSetVersion = "1.0",
                            Exclusions     = new List <ManagedRuleExclusion>
                            {
                                new ManagedRuleExclusion
                                {
                                    MatchVariable         = ManagedRuleExclusionMatchVariable.RequestBodyPostArgNames,
                                    SelectorMatchOperator = ManagedRuleExclusionSelectorMatchOperator.Contains,
                                    Selector = "query"
                                }
                            },
                            RuleGroupOverrides = new List <ManagedRuleGroupOverride>
                            {
                                new ManagedRuleGroupOverride
                                {
                                    RuleGroupName = "SQLI",
                                    Exclusions    = new List <ManagedRuleExclusion>
                                    {
                                        new ManagedRuleExclusion
                                        {
                                            MatchVariable         = ManagedRuleExclusionMatchVariable.RequestHeaderNames,
                                            SelectorMatchOperator = ManagedRuleExclusionSelectorMatchOperator.Equals,
                                            Selector = "User-Agent"
                                        }
                                    },
                                    Rules = new List <ManagedRuleOverride>
                                    {
                                        new ManagedRuleOverride
                                        {
                                            RuleId       = "942100",
                                            Action       = "Redirect",
                                            EnabledState = "Disabled",
                                            Exclusions   = new List <ManagedRuleExclusion>
                                            {
                                                new ManagedRuleExclusion
                                                {
                                                    MatchVariable         = ManagedRuleExclusionMatchVariable.QueryStringArgNames,
                                                    SelectorMatchOperator = ManagedRuleExclusionSelectorMatchOperator.Equals,
                                                    Selector = "search"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    })
                };

                var policy = frontDoorMgmtClient.Policies.CreateOrUpdate(resourceGroupName, policyName, createParameters);

                // validate the created policy
                VerifyPolicy(policy, createParameters);

                // Retrieve policy
                var retrievedPolicy = frontDoorMgmtClient.Policies.Get(resourceGroupName, policyName);

                // validate that correct policy is retrieved
                VerifyPolicy(retrievedPolicy, createParameters);

                // update Policy
                CustomRule geoFilter = new CustomRule
                {
                    Name            = "rule2",
                    Priority        = 2,
                    RuleType        = "MatchRule",
                    MatchConditions = new List <MatchCondition>
                    {
                        new MatchCondition
                        {
                            MatchVariable    = "RemoteAddr",
                            OperatorProperty = "GeoMatch",
                            MatchValue       = new List <string>
                            {
                                "US"
                            }
                        }
                    },
                    Action = "Allow"
                };
                retrievedPolicy.CustomRules.Rules.Add(geoFilter);


                var updatedPolicy = frontDoorMgmtClient.Policies.CreateOrUpdate(resourceGroupName, policyName, retrievedPolicy);

                // validate that Policy is correctly updated
                VerifyPolicy(updatedPolicy, retrievedPolicy);

                // Delete Policy
                frontDoorMgmtClient.Policies.Delete(resourceGroupName, policyName);

                // Verify that Policy is deleted
                Assert.ThrowsAny <ErrorResponseException>(() =>
                {
                    frontDoorMgmtClient.Policies.Get(resourceGroupName, policyName);
                });

                FrontDoorTestUtilities.DeleteResourceGroup(resourcesClient, resourceGroupName);
            }
        }
示例#26
0
			/// <summary>
			/// Adds a custom rule.
			/// </summary>
			/// <param name="name">The name of the rule.</param>
			/// <param name="violationMessage">The violation message.</param>
			/// <param name="rule">
			/// The rule: must be an anonymous method declaration or the validation 
			/// function reference (the function's name without parenthesis).
			/// </param>
			/// <example>
			/// This example adds a custom rule by passing an anonymous method:
			/// <code>
			/// AddCustomRule( 
			///		"maxWords", 
			///		"Please enter {0} words or less.", 
			///		"function(value, element, params) { return this.optional(element) || value.match(/\b\w+\b/g).length &lt; params; }" );
			/// </code>
			/// This example adds a custom rule by passing a method reference, assuming that a 
			/// referenced javascript file contains the <c>validateMaxWords</c> function.
			/// <code>
			/// AddCustomRule( 
			///		"maxWords", 
			///		"Please enter {0} words or less.", 
			///		"validateMaxWords" );
			/// </code>
			/// </example>
			public void AddCustomRule(string name, string violationMessage, string rule)
			{
				_customRules[name] = new CustomRule(name, rule, violationMessage);
			}
示例#27
0
        public void WAFCRUDTest()
        {
            var handler1 = new RecordedDelegatingHandler {
                StatusCodeToReturn = HttpStatusCode.OK
            };
            var handler2 = new RecordedDelegatingHandler {
                StatusCodeToReturn = HttpStatusCode.OK
            };

            using (MockContext context = MockContext.Start(this.GetType().FullName))
            {
                // Create clients
                var frontDoorMgmtClient = FrontDoorTestUtilities.GetFrontDoorManagementClient(context, handler1);
                var resourcesClient     = FrontDoorTestUtilities.GetResourceManagementClient(context, handler2);

                // Create resource group
                var resourceGroupName = FrontDoorTestUtilities.CreateResourceGroup(resourcesClient);

                // Create a frontDoor
                string policyName = TestUtilities.GenerateName("policy");

                WebApplicationFirewallPolicy1 createParameters = new WebApplicationFirewallPolicy1
                {
                    Location = "global",
                    Tags     = new Dictionary <string, string>
                    {
                        { "key1", "value1" },
                        { "key2", "value2" }
                    },
                    PolicySettings = new PolicySettings
                    {
                        EnabledState = "Enabled",
                        Mode         = "Prevention"
                    },
                    CustomRules = new CustomRules(
                        new List <CustomRule>
                    {
                        new CustomRule
                        {
                            Name               = "rule1",
                            Priority           = 1,
                            RuleType           = "RateLimitRule",
                            RateLimitThreshold = 1000,
                            MatchConditions    = new List <MatchCondition1>
                            {
                                new MatchCondition1
                                {
                                    MatchVariable    = "RemoteAddr",
                                    OperatorProperty = "IPMatch",
                                    MatchValue       = new List <string>
                                    {
                                        "192.168.1.0/24",
                                        "10.0.0.0/24"
                                    }
                                }
                            },
                            Action = "Block"
                        }
                    }
                        ),
                    ManagedRules = new ManagedRuleSets(
                        new List <ManagedRuleSet> {
                        new AzureManagedRuleSet
                        {
                            Priority           = 1,
                            RuleGroupOverrides = new List <AzureManagedOverrideRuleGroup>
                            {
                                new AzureManagedOverrideRuleGroup
                                {
                                    RuleGroupOverride = "SqlInjection",
                                    Action            = "Block"
                                },
                            }
                        }
                    })
                };

                var policy = frontDoorMgmtClient.Policies.CreateOrUpdate(resourceGroupName, policyName, createParameters);

                // validate the created policy
                VerifyPolicy(policy, createParameters);

                // Retrieve policy
                var retrievedPolicy = frontDoorMgmtClient.Policies.Get(resourceGroupName, policyName);

                // validate that correct policy is retrieved
                VerifyPolicy(retrievedPolicy, createParameters);

                // update Policy
                CustomRule geoFilter = new CustomRule
                {
                    Name            = "rule2",
                    Priority        = 2,
                    RuleType        = "MatchRule",
                    MatchConditions = new List <MatchCondition1>
                    {
                        new MatchCondition1
                        {
                            MatchVariable    = "RemoteAddr",
                            OperatorProperty = "GeoMatch",
                            MatchValue       = new List <string>
                            {
                                "US"
                            }
                        }
                    },
                    Action = "Allow"
                };
                retrievedPolicy.CustomRules.Rules.Add(geoFilter);


                var updatedPolicy = frontDoorMgmtClient.Policies.CreateOrUpdate(resourceGroupName, policyName, retrievedPolicy);

                // validate that Policy is correctly updated
                VerifyPolicy(updatedPolicy, retrievedPolicy);

                // Delete Policy
                frontDoorMgmtClient.Policies.Delete(resourceGroupName, policyName);

                // Verify that Policy is deleted
                Assert.ThrowsAny <ErrorResponseException>(() =>
                {
                    frontDoorMgmtClient.Policies.Get(resourceGroupName, policyName);
                });

                FrontDoorTestUtilities.DeleteResourceGroup(resourcesClient, resourceGroupName);
            }
        }
 /// <summary>
 /// Adds a custom rule.
 /// </summary>
 /// <param name="className">Name of the class.</param>
 /// <param name="violationMessage">The violation message.</param>
 /// <param name="rule">The rule.</param>
 public void AddCustomRule(string className, string violationMessage, string rule)
 {
     rules[className] = new CustomRule(className, rule, violationMessage);
 }
示例#29
0
 public RuleBinding(string path, CustomRule rule)
     : this(path)
 {
     Rule = rule;
 }
示例#30
0
        public void DataAnnotationTest()
        {
            var idRule       = new CustomRule(obj => Convert.ToInt32(obj) >= 0, "ID不能小于0");
            var requiredRule = FltConfigValidationRules.NotNullOrEmpty;
            var cityRule     = FltConfigValidationRules.City;
            var ageRule      = new RangeRule(1, 99, "年龄范围1-99");
            var dateRule     = new RangeRule(new DateTime(1995, 1, 1), new DateTime(2000, 12, 31), "日期范围错误");

            var validator = new FltConfigValidator <DataAnnotationEntity>();
            DataAnnotationEntity entity = null;

            #region null

            var result = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);

            #endregion

            #region ok

            entity = DataAnnotationEntity.Create();
            result = validator.Validate(entity);
            Assert.IsTrue(result.IsValid);
            Assert.IsTrue(String.IsNullOrWhiteSpace(result.ErrorMessage));

            #endregion

            #region ID

            entity    = DataAnnotationEntity.Create();
            entity.ID = -1;
            result    = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("ID", result.MemberName);
            Assert.AreEqual(idRule.ErrorMessage, result.ErrorMessage);

            entity    = DataAnnotationEntity.Create();
            entity.ID = 0;
            result    = validator.Validate(entity);
            Assert.IsTrue(result.IsValid);
            Assert.IsTrue(String.IsNullOrWhiteSpace(result.ErrorMessage));

            #endregion

            #region City

            entity      = DataAnnotationEntity.Create();
            entity.City = null;
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("City", result.MemberName);
            Assert.AreEqual(requiredRule.ErrorMessage, result.ErrorMessage);

            entity      = DataAnnotationEntity.Create();
            entity.City = String.Empty;
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("City", result.MemberName);
            Assert.AreEqual(requiredRule.ErrorMessage, result.ErrorMessage);

            entity      = DataAnnotationEntity.Create();
            entity.City = "   ";
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("City", result.MemberName);
            Assert.AreEqual(requiredRule.ErrorMessage, result.ErrorMessage);

            entity      = DataAnnotationEntity.Create();
            entity.City = "ABC1";
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("City", result.MemberName);
            Assert.AreEqual(cityRule.ErrorMessage, result.ErrorMessage);

            #endregion

            #region Age

            entity     = DataAnnotationEntity.Create();
            entity.Age = Convert.ToInt32(ageRule.Minimum) - 1;
            result     = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Age", result.MemberName);
            Assert.AreEqual(ageRule.ErrorMessage, result.ErrorMessage);

            entity     = DataAnnotationEntity.Create();
            entity.Age = Convert.ToInt32(ageRule.Minimum);
            result     = validator.Validate(entity);
            Assert.IsTrue(result.IsValid);
            Assert.IsTrue(String.IsNullOrWhiteSpace(result.ErrorMessage));

            entity     = DataAnnotationEntity.Create();
            entity.Age = Convert.ToInt32(ageRule.Maximum);
            result     = validator.Validate(entity);
            Assert.IsTrue(result.IsValid);
            Assert.IsTrue(String.IsNullOrWhiteSpace(result.ErrorMessage));

            entity     = DataAnnotationEntity.Create();
            entity.Age = Convert.ToInt32(ageRule.Maximum) + 1;
            result     = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Age", result.MemberName);
            Assert.AreEqual(ageRule.ErrorMessage, result.ErrorMessage);

            #endregion

            #region Date

            entity      = DataAnnotationEntity.Create();
            entity.Date = null;
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Date", result.MemberName);
            Assert.AreEqual(requiredRule.ErrorMessage, result.ErrorMessage);

            entity      = DataAnnotationEntity.Create();
            entity.Date = Convert.ToDateTime(dateRule.Minimum).AddMinutes(-1);
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Date", result.MemberName);
            Assert.AreEqual(dateRule.ErrorMessage, result.ErrorMessage);

            entity      = DataAnnotationEntity.Create();
            entity.Date = Convert.ToDateTime(dateRule.Minimum);
            result      = validator.Validate(entity);
            Assert.IsTrue(result.IsValid);
            Assert.IsTrue(String.IsNullOrWhiteSpace(result.ErrorMessage));

            entity      = DataAnnotationEntity.Create();
            entity.Date = Convert.ToDateTime(dateRule.Maximum);
            result      = validator.Validate(entity);
            Assert.IsTrue(result.IsValid);
            Assert.IsTrue(String.IsNullOrWhiteSpace(result.ErrorMessage));

            entity      = DataAnnotationEntity.Create();
            entity.Date = Convert.ToDateTime(dateRule.Maximum).AddMinutes(1);
            result      = validator.Validate(entity);
            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Date", result.MemberName);
            Assert.AreEqual(dateRule.ErrorMessage, result.ErrorMessage);

            #endregion
        }
示例#31
0
 /// <summary>
 /// Adds a custom rule.
 /// </summary>
 /// <param name="name">The name of the rule.</param>
 /// <param name="violationMessage">The violation message.</param>
 /// <param name="rule">
 /// The rule: must be an anonymous method declaration or the validation
 /// function reference (the function's name without parenthesis).
 /// </param>
 /// <example>
 /// This example adds a custom rule by passing an anonymous method:
 /// <code>
 /// AddCustomRule(
 ///		"maxWords",
 ///		"Please enter {0} words or less.",
 ///		"function(value, element, params) { return this.optional(element) || value.match(/\b\w+\b/g).length &lt; params; }" );
 /// </code>
 /// This example adds a custom rule by passing a method reference, assuming that a
 /// referenced javascript file contains the <c>validateMaxWords</c> function.
 /// <code>
 /// AddCustomRule(
 ///		"maxWords",
 ///		"Please enter {0} words or less.",
 ///		"validateMaxWords" );
 /// </code>
 /// </example>
 public void AddCustomRule(string name, string violationMessage, string rule)
 {
     _customRules[name] = new CustomRule(name, rule, violationMessage);
 }
示例#32
0
 public Task <IApiResponse <CustomRule> > CreateCustomRuleAsync(CustomRule customRule) => CreateDataAsync <CustomRule>(customRule);