private static void ReadRule(XmlNode node, RewriterConfiguration config) { bool parsed = false; IList <IRewriteActionParser> parsers = config.ActionParserFactory.GetParsers(node.LocalName); if (parsers != null) { foreach (IRewriteActionParser parser in parsers) { if (!parser.AllowsNestedActions && node.ChildNodes.Count > 0) { throw new ConfigurationErrorsException(MessageProvider.FormatString(Message.ElementNoElements, parser.Name), node); } if (!parser.AllowsAttributes && node.Attributes.Count > 0) { throw new ConfigurationErrorsException(MessageProvider.FormatString(Message.ElementNoAttributes, parser.Name), node); } IRewriteAction rule = parser.Parse(node, config); if (rule != null) { config.Rules.Add(rule); parsed = true; break; } } } if (!parsed) { // No parsers recognised to handle this node. throw new ConfigurationErrorsException(MessageProvider.FormatString(Message.ElementNotAllowed, node.LocalName), node); } }
private static void ReadActions(XmlNode node, IList actions, RewriterConfiguration config) { XmlNode childNode = node.FirstChild; while (childNode != null) { if (childNode.NodeType == XmlNodeType.Element) { IList parsers = config.ActionParserFactory.GetParsers(childNode.LocalName); if (parsers != null) { bool parsed = false; foreach (IRewriteActionParser parser in parsers) { IRewriteAction action = parser.Parse(childNode, config); if (action != null) { parsed = true; actions.Add(action); } } if (!parsed) { throw new ConfigurationErrorsException(MessageProvider.FormatString(Message.ElementNotAllowed, node.FirstChild.Name), node); } } } childNode = childNode.NextSibling; } }
private void ReadAttributeActions(XmlNode node, bool allowFinal, IList actions, RewriterConfiguration config) { int i = 0; while (i < node.Attributes.Count) { XmlNode attrNode = node.Attributes[i++]; IList parsers = config.ActionParserFactory.GetParsers(String.Format(Constants.AttributeAction, node.LocalName, attrNode.LocalName)); if (parsers != null) { foreach (IRewriteActionParser parser in parsers) { IRewriteAction action = parser.Parse(node, config); if (action != null) { if (action.Processing == RewriteProcessing.ContinueProcessing || allowFinal) { actions.Add(action); break; } } } } } }
private void ProcessRules(RewriteContext context) { const int MaxRestart = 10; // Controls the number of restarts so we don't get into an infinite loop IList rewriteRules = _configuration.Rules; int restarts = 0; for (int i = 0; i < rewriteRules.Count; i++) { // If the rule is conditional, ensure the conditions are met. IRewriteCondition condition = rewriteRules[i] as IRewriteCondition; if (condition == null || condition.IsMatch(context)) { // Execute the action. IRewriteAction action = rewriteRules[i] as IRewriteAction; RewriteProcessing processing = action.Execute(context); //if (!TygaSoft.TygaSoftRuntime.ValidateRuntime()) //{ // context.Location = "~/NotAccess.aspx"; // break; //} // If the action is Stop, then break out of the processing loop if (processing == RewriteProcessing.StopProcessing) { _configuration.Logger.Debug(MessageProvider.FormatString(Message.StoppingBecauseOfRule)); break; } else if (processing == RewriteProcessing.RestartProcessing) { _configuration.Logger.Debug(MessageProvider.FormatString(Message.RestartingBecauseOfRule)); // Restart from the first rule. i = 0; if (++restarts > MaxRestart) { throw new InvalidOperationException(MessageProvider.FormatString(Message.TooManyRestarts)); } } } } }
/// <summary> /// Executes the rule. /// </summary> /// <param name="context"></param> public virtual RewriteProcessing Execute(RewriteContext context) { // Execute the actions. for (int i = 0; i < Actions.Count; i++) { IRewriteCondition condition = Actions[i] as IRewriteCondition; if (condition == null || condition.IsMatch(context)) { IRewriteAction action = Actions[i] as IRewriteAction; RewriteProcessing processing = action.Execute(context); if (processing != RewriteProcessing.ContinueProcessing) { return(processing); } } } return(RewriteProcessing.ContinueProcessing); }
/// <summary> /// Executes the rule. /// </summary> /// <param name="context">The rewrite context</param> public virtual RewriteProcessing Execute(IRewriteContext context) { if (context == null) { throw new ArgumentNullException("context"); } // Execute the actions. for (int i = 0; i < Actions.Count; i++) { IRewriteCondition condition = Actions[i] as IRewriteCondition; if (condition == null || condition.IsMatch(context)) { IRewriteAction action = Actions[i]; RewriteProcessing processing = action.Execute(context); if (processing != RewriteProcessing.ContinueProcessing) { return(processing); } } } return(RewriteProcessing.ContinueProcessing); }