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; }
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)); }
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; }
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)); }
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)); }
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; }