Example #1
0
        public bool Process(SorentoLib.Session Session)
        {
            //			Console.WriteLine(Session.Request.QueryJar.Get ("cmd.path").Value);
            string path = string.Empty;
            if (Session.Request.QueryJar.Exist("cmd.path"))
            {
                path = Session.Request.QueryJar.Get("cmd.path").Value + "/";
            }

            SorentoLib.Render.Template template = null;

            // TODO: this responder needs to work correctly.
            try
            {
                template = new SorentoLib.Render.Template (Session, path + Session.Request.QueryJar.Get ("cmd.page").Value);
            }
            catch
            {
                return false;
            }

            template.Render ();
            template = null;
            Session.Responder.Request.SendOutputText (Session.Page.Write (Session));

            return true;
        }
Example #2
0
        private void HTTP500(Session session)
        {
            SorentoLib.Render.Template template = new SorentoLib.Render.Template (session, SNDK.IO.ReadTextFile ("data/500.stpl"));
            session.Page.Clear ();
            template.Render ();
            template = null;

            session.Responder.Request.SendOutputText (session.Page.Write (session));
        }
Example #3
0
        public int Process()
        {
            Tools.Timer timer = new Tools.Timer ();
            timer.Start ();

            Session session = new Session (this._request.GetParameters (), this._request.InputData);
            session.Responder = this;

            try
            {
                switch (session.Request.QueryJar.Get ("cmd").Value.ToLower ())
                {
                    #region Page
                    case "page":
                    {
            //						Console.WriteLine (session.Request.QueryJar.Get ("cmd.page").Value.ToLower ());

                        foreach (SorentoLib.Addins.IPageResponder pageresponder in AddinManager.GetExtensionObjects (typeof(SorentoLib.Addins.IPageResponder)))
                        {
                            if (pageresponder.Process (session))
                            {
                                this._served = true;
                                break;
                            }
                        }

                        if (!this._served)
                        {
                            throw new SorentoLib.Exceptions.ResponderExceptionPageNotFound (string.Format (Strings.Exception.ResponderPageNotFound, session.Request.QueryJar.Get ("cmd.page").Value));
                        }

                        break;
                    }
                    #endregion

                    #region Media
                    case "media":
                    {
                        foreach (SorentoLib.Addins.IMediaResponder mediaresponder in AddinManager.GetExtensionObjects (typeof(SorentoLib.Addins.IMediaResponder)))
                        {
                            mediaresponder.Process (session);
                        }
                        break;
                    }
                    #endregion

                    #region Function
                    case "function":
                        foreach (SorentoLib.Addins.IFunctionResponder functionresponder in AddinManager.GetExtensionObjects (typeof(SorentoLib.Addins.IFunctionResponder)))
                        {
                            functionresponder.Process (session);
                        }
                        break;
                    #endregion

                    #region Ajax
                    case "ajax":
                        foreach (SorentoLib.Addins.IAjaxResponder ajaxresponder in AddinManager.GetExtensionObjects (typeof(SorentoLib.Addins.IAjaxResponder)))
                        {
                            ajaxresponder.Process (session);
                        }
                        break;
                    #endregion
                }
            }
            catch (SorentoLib.Exceptions.ResponderExceptionPageNotFound exception)
            {
                session.Error = new Error (exception.Message, string.Empty);

                if (Services.Config.Get<bool> (Enums.ConfigKey.core_showexceptions))
                {
                    SorentoLib.Render.Template template = new SorentoLib.Render.Template (session, SNDK.IO.ReadTextFile ("data/exception.stpl"));
                    session.Page.Clear ();
                    template.Render ();
                    template = null;

                    session.Responder.Request.SendOutputText (session.Page.Write (session));
                }
                else
                {
                    HTTP404 (session);
                }
            }
            catch (SorentoLib.Exceptions.RenderException exception)
            {
                if (Services.Config.Get<bool> (Enums.ConfigKey.core_showexceptions))
                {
                    session.Error = new Error (exception.Message, "in "+ exception.Filename +" line "+ exception.Line);

                    SorentoLib.Render.Template template = new SorentoLib.Render.Template (session, SNDK.IO.ReadTextFile ("data/exception.stpl"));
                    session.Page.Clear ();
                    template.Render ();
                    template = null;

                    session.Responder.Request.SendOutputText (session.Page.Write (session));
                }
                else
                {
                    HTTP500 (session);
                }
            }
            catch (Exception exception)
            {
                if (Services.Config.Get<bool> (Enums.ConfigKey.core_showexceptions))
                {
                    session.Error = new Error (exception);

                    SorentoLib.Render.Template template = new SorentoLib.Render.Template (session, SNDK.IO.ReadTextFile ("data/exception.stpl"));
                    session.Page.Clear ();
                    template.Render ();
                    template = null;

                    session.Responder.Request.SendOutputText (session.Page.Write (session));
                }
                else
                {
                    HTTP500 (session);
                }
            }

            timer.Stop ();

            //			FastCgi.Runtime.Test ();

            SorentoLib.Services.Logging.LogDebug("Request #"+ FastCgi.Runtime.requests +" served in: "+ timer.Duration.TotalSeconds +" seconds.");
            timer = null;

            return 0;
        }
Example #4
0
        public void Process(SorentoLib.Session Session)
        {
            // TODO: fix all this.
            string resulttemplate = string.Empty;

            SorentoLib.Tools.ParseTypeName typename = new SorentoLib.Tools.ParseTypeName (Session.Request.QueryJar.Get ("cmd.function").Value);

            // Find Addin to handle resolve.
            foreach (SorentoLib.Addins.IFunction function in AddinManager.GetExtensionObjects (typeof(SorentoLib.Addins.IFunction)))
            {
                if (function.IsProvided (typename.Namspace))
                {
                    if (function.Process (Session, typename.Fullname, typename.Method))
                    {
                        if (Session.Request.QueryJar.Exist ("cmd.onsuccess"))
                        {
                            resulttemplate = Session.Request.QueryJar.Get ("cmd.onsuccess").Value;
                        }
                        else
                        {
                            resulttemplate = "";
                        }
                    }
                    else
                    {

                        if (Session.Request.QueryJar.Exist ("cmd.onerror"))
                        {
                            resulttemplate = Session.Request.QueryJar.Get ("cmd.onerror").Value;
                        }
                        else
                        {
                            resulttemplate = "";
                        }
                    }
                    break;
                }
            }

            if (Session.Request.QueryJar.Exist ("cmd.redirect"))
            {
                if (Session.Request.QueryJar.Get ("cmd.redirect").Value.ToLower () == "true")
                {
                    Session.Page.Clear ();
                    Session.Page.Redirect = resulttemplate;
            //					Session.Page.Lines.Add(@"<meta HTTP-EQUIV=""REFRESH"" content=""0; url="+ resulttemplate +@""">");
                    Session.Responder.Request.SendOutputText (Session.Page.Write (Session));
                    return;
                }
            }

            SorentoLib.Render.Template template = new SorentoLib.Render.Template (Session, resulttemplate);
            template.Render ();
            template = null;

            Session.Responder.Request.SendOutputText (Session.Page.Write (Session));
        }
Example #5
0
        public void Process(SorentoLib.Session Session)
        {
            // True if function returns successfully.
            bool success = false;

            // TODO: fix all this.
            string resulttemplate = string.Empty;

            // Find Addin to handle resolve.
            SorentoLib.Tools.ParseTypeName typename = new SorentoLib.Tools.ParseTypeName (Session.Request.QueryJar.Get ("cmd.function").Value);
            foreach (SorentoLib.Addins.IFunction function in AddinManager.GetExtensionObjects (typeof(SorentoLib.Addins.IFunction)))
            {
                if (function.IsProvided (typename.Namspace))
                {
                    success = function.Process (Session, typename.Fullname, typename.Method);
                    break;
                }
            }

            // If function returned successfully we need to show the success page, if it has been specified.
            if (success)
            {
                if (Session.Request.QueryJar.Exist ("cmd.onsuccess"))
                {
                    resulttemplate = Session.Request.QueryJar.Get ("cmd.onsuccess").Value;
                }
            }
            // If function returned unsuccessfull we should show the error page, if it has been specified.
            else
            {
                if (Session.Request.QueryJar.Exist ("cmd.onerror"))
                {
                    resulttemplate = Session.Request.QueryJar.Get ("cmd.onerror").Value;
                }
            }

            // If redirect has been specfied lets do that. This is good for hiding POST urls.
            if (Session.Request.QueryJar.Exist ("cmd.redirect"))
            {
                if (Session.Request.QueryJar.Get ("cmd.redirect").Value.ToLower () == "true")
                {
                    Session.Page.Clear ();
                    Session.Page.Redirect = resulttemplate;
            //					Session.Page.Lines.Add(@"<meta HTTP-EQUIV=""REFRESH"" content=""0; url="+ resulttemplate +@""">");
                    Session.Responder.Request.SendOutputText (Session.Page.Write (Session));
                    return;
                }
            }

            if (resulttemplate != string.Empty)
            {
                SorentoLib.Render.Template template = new SorentoLib.Render.Template (Session, resulttemplate);
                template.Render ();
                template = null;
            }

            Session.Responder.Request.SendOutputText (Session.Page.Write (Session));
        }
Example #6
0
        private System.String Parser(string Line, string Token)
        {
            string result = string.Empty;

            //			Console.WriteLine (Token);

            Match statement = Template.ExpStatement.Match (Token);
            if (statement.Success)
            {
                switch (statement.Groups["head"].Value.ToLower ())
                {
                    #region If
                    case "if":
                        if (!this.CurrentBlock.InLoop)
                        {
                            // Since If was triggered, we need a new Block.
                            SorentoLib.Render.Block block = new SorentoLib.Render.Block ();

                            // If parent Block is not being rendered then this Block wont be rendered either.
                            if (!this.CurrentBlock.Render)
                            {
                                block.Render = false;
                            }

                            // Render Block if needed.
                            if (block.Render)
                            {
                                if (Condition.Evaluate (this._session, statement.Groups["body"].Value))
                                {
                                    block.LastIfStatementWasTrue = true;
                                }
                                else
                                {
                                    block.Render = false;
                                }
                            }

                            this._blocks.Add (block);
                        }
                        break;
                    #endregion

                    #region ElseIf
                    case "elseif":
                        if (!this.CurrentBlock.InLoop)
                        {
                            // If inital If or previous ElseIf was true, than we dont need dont need to render.
                            if (this.CurrentBlock.LastIfStatementWasTrue)
                            {
                                this.CurrentBlock.Render = false;
                            }

                            else
                            {
                                if (Condition.Evaluate (this._session, statement.Groups["body"].Value))
                                {
                                    this.CurrentBlock.Render = true;
                                    this.CurrentBlock.LastIfStatementWasTrue = true;
                                }
                            }
                        }
                        break;
                    #endregion

                    #region Else
                    case "else":
                        if (!this.CurrentBlock.InLoop)
                        {
                            // If inital If or ElseIf was true, do not render.
                            if (this.ParentBlock.Render)
                            {
                                if (this.CurrentBlock.LastIfStatementWasTrue)
                                {
                                    this.CurrentBlock.Render = false;
                                }

                                else
                                {
                                    this.CurrentBlock.Render = true;
                                }
                            }
                        }
                        break;
                    #endregion

                    #region Endif
                    case "endif":
                        if (!this.CurrentBlock.InLoop)
                        {
                            this.RemoveBlock ();
                        }

                        break;
                        #endregion

                    #region Foreach
                    case "foreach":
                        if ((this.CurrentBlock.BeginLoop ()) && (this.CurrentBlock.Render))
                        {
                            this.AddBlock ();
                            this.CurrentBlock.Loop = new SorentoLib.Render.Foreach (statement.Groups["body"].Value);
                            // TODO: this should probally be dealt with.
                            Line = string.Empty;
                        }
                        break;
                    #endregion

                    #region EndForeach
                    case "endforeach":
                        if ((this.CurrentBlock.EndLoop (Enums.LoopType.Foreach)) && (this.CurrentBlock.Render))
                        {
                            SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);
                            resolver.Parse(((Foreach)this.CurrentBlock.Loop).Source);

            //							Console.WriteLine (resolver.Result.GetType ().IsArray);
            //							Console.WriteLine (resolver.Result.GetType ().Name);

                            switch (resolver.Result.GetType ().Name.ToLower ())
                            {
                                #region List
                                case "list`1":
                                    MethodInfo methodInfo = typeof(SorentoLib.Render.Variables).GetMethod("ConvertToListObjectNew", System.Reflection.BindingFlags.Static | BindingFlags.Public);
                                    MethodInfo genericMethodInfo = methodInfo.MakeGenericMethod(new Type[] { resolver.Result.GetType ().GetGenericArguments()[0] });
                                    List<object> returnvalue = (List<object>)genericMethodInfo.Invoke(null, new object[] { resolver.Result });

                                    foreach (System.Object item in (System.Collections.Generic.List<System.Object>)returnvalue)
                                    {
                                        this._session.Page.Variables.Add (((SorentoLib.Render.Foreach)this.CurrentBlock.Loop).Destination, item);
                                        Template loop = new Template (this._session, this.CurrentBlock.Loop.Content);
                                        loop.Render ();
                                    }

                                    break;

                                case "string[]":
                                    foreach (string item in (string[])resolver.Result)
                                    {
                                        this._session.Page.Variables.Add (((SorentoLib.Render.Foreach)this.CurrentBlock.Loop).Destination, item);
                                        Template loop = new Template (this._session, this.CurrentBlock.Loop.Content);
                                        loop.Render ();
                                    }
                                    break;
                                #endregion
                            }

                            this.RemoveBlock ();

                            resolver = null;
                        }
                        break;
                    #endregion

                    #region Write
                    case "write":
                        // TODO: This probally needs to be done differently.
            //						try
            //						{
                            if ((!this.CurrentBlock.InLoop) && (this.CurrentBlock.Render))
                            {

                                SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);
                                resolver.Parse (statement.Groups["body"].Value);

                            if (resolver.Result.GetType () == typeof (bool))
                            {
                                result = resolver.Result.ToString ().ToLower ();
                            }
                            else
                            {
                                result = resolver.Result.ToString ();
                            }

                            }
            //						}
            //						catch
            //						{}
                        break;
                    #endregion

                    #region Include
                    case "include":
                        if ((!this.CurrentBlock.InLoop) && (this.CurrentBlock.Render))
                        {
                            SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);
                            resolver.Parse (statement.Groups["body"].Value);

                            SorentoLib.Render.Template include;
                            include = new SorentoLib.Render.Template (this._session, (string)resolver.Result);
            //							if (((string)resolver.Result).Substring(0, 2) == "./")
            //							{
            //								include = new SorentoLib.Render.Template (this._session, ((string)resolver.Result).Substring (2, ((string)resolver.Result).Length-2));
            //							}
            //							else
            //							{
            //								include = new SorentoLib.Render.Template (this._session, Path.GetDirectoryName (this._session.Request.Environment.RequestUri) + "/" + (string)resolver.Result);
            //							}

                            include.Render ();

                            resolver = null;
                            include = null;
                        }
                        break;
                    #endregion

                    #region Render
                    case "render":
                        if ((!this.CurrentBlock.InLoop) && (this.CurrentBlock.Render))
                        {
                            SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);
                            resolver.Parse (statement.Groups["body"].Value);

                            this._session.Page.Clear();
                            Template redirect = new Template(this._session, (string)resolver.Result);
                            redirect.Render ();

                            this._endrender = true;

                            resolver = null;
                        }
                        break;
                    #endregion

                    #region Redirect
                    case "redirect":
                        if ((!this.CurrentBlock.InLoop) && (this.CurrentBlock.Render))
                        {

                            SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);
                            resolver.Parse (statement.Groups["body"].Value);

                            // TODO: This probally needs to be fixed.
            //							this._session.Page.Clear();

                            this._session.Page.Redirect = (string)resolver.Result;

            //							Console.WriteLine ("dczdf");

                            this._session.Page.Lines.Add(@"<meta HTTP-EQUIV=""REFRESH"" content=""0; url="+ (string)resolver.Result +@""">");

            //							HTTP/1.1 301 Moved Permanently" );
            //Header( "Location: http://www.new-url.com

                            this._endrender = true;

                            resolver = null;
                        }
                        break;
                    #endregion

                    #region Default
                    default:
                        if ((!this.CurrentBlock.InLoop) && (this.CurrentBlock.Render == true))
                        {
                            if (statement.Groups["set"].Success)
                            {
            //								Console.WriteLine (statement.Groups["value"].Value);
                                SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);
                                resolver.Parse(statement.Groups["value"].Value);

                                this._session.Page.Variables.Add (statement.Groups["head"].Value, resolver.Result);
                                resolver = null;
                            }
                            else
                            {
                                SorentoLib.Render.Resolver resolver = new SorentoLib.Render.Resolver (this._session);

                                resolver.Parse(Token);

                                resolver = null;
                            }
                        }
                        break;
                    #endregion
                }
            }

            // Escaping problem characters.
            Token = Regex.Replace (Token, "\\\\", "\\\\", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\(", "\\(", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\$", "\\$", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\)", "\\)", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\|", "\\|", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\+", "\\+", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\[", "\\[", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\]", "\\]", RegexOptions.Compiled);
            Token = Regex.Replace (Token, "\\*", "\\*", RegexOptions.Compiled);

            // Render Token.
            if ((!this.CurrentBlock.InLoop) && (this.CurrentBlock.Render))
            {
                Line = Regex.Replace (Line, "<%"+ Token +"%>", result);
            }

            statement = null;

            return Line;
        }