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;
            }
        }
Exemple #3
0
        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);
        }