예제 #1
0
        /// <summary>
        /// Load an HTML file, taking into account missing extensions and a file-less IP/domain, which should default to index.html.
        /// </summary>
        protected ResponsePacket PageLoader(Route routeHandler, Session session, Dictionary<string, object> kvParams, string fullPath, string ext, ExtensionInfo extInfo)
        {
            ResponsePacket ret;

            if (fullPath == WebsitePath)		// If nothing follows the domain name or IP, then default to loading index.html.
            {
                ret = Route(session, GET, "/index.html", null);
            }
            else
            {
                if (String.IsNullOrEmpty(ext))
                {
                    // No extension, so we make it ".html"
                    fullPath = fullPath + ".html";
                }

                // Inject the "Pages" folder into the path
                // fullPath = WebsitePath +"\\Pages" + fullPath.RightOf(WebsitePath);

                // Custom, for page not found error.
                if (!File.Exists(fullPath))
                {
                    ret = new ResponsePacket() { Error = Server.ServerError.PageNotFound };
                    Console.WriteLine("!!! File not found: " + fullPath);
                }
                else
                {
                    string text = File.ReadAllText(fullPath);

                    // TODO: We put the route custom post process last because of how content is merged in the application's process,
                    // but this might cause problems if the route post processor adds something that the app's post processor needs to replace.
                    // How do we handle this?  A before/after process?  CSRF tokens are a great example!

                    // Do the application global post process replacement.
                    text = server.PostProcess(session, fullPath, text);

                    // If a custom post process callback exists, call it.
                    routeHandler.IfNotNull((r) => r.PostProcess.IfNotNull((p) => text = p(session, kvParams, text)));

                    // Do our default post process to catch any final CSRF stuff in the fully merged document.
                    text = server.DefaultPostProcess(session, fullPath, text);

                    ret = new ResponsePacket() { Data = Encoding.UTF8.GetBytes(text), ContentType = extInfo.ContentType, Encoding = Encoding.UTF8 };
                }
            }

            return ret;
        }
예제 #2
0
        /// <summary>
        /// Read in an image file and returns a ResponsePacket with the raw data.
        /// </summary>
        protected ResponsePacket ImageLoader(Route routeHandler, Session session, Dictionary<string, object> kvParams, string fullPath, string ext, ExtensionInfo extInfo)
        {
            ResponsePacket ret;

            if (!File.Exists(fullPath))
            {
                ret = new ResponsePacket() { Error = Server.ServerError.FileNotFound };
                Console.WriteLine("!!! File not found: " + fullPath);
            }
            else
            {
                FileStream fStream = new FileStream(fullPath, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fStream);
                ret = new ResponsePacket() { Data = br.ReadBytes((int)fStream.Length), ContentType = extInfo.ContentType };
                br.Close();
                fStream.Close();
            }

            return ret;
        }
예제 #3
0
 public void AddRoute(Route route)
 {
     routes.Add(route);
 }
예제 #4
0
        /// <summary>
        /// Read in what is basically a text file and return a ResponsePacket with the text UTF8 encoded.
        /// </summary>
        protected ResponsePacket FileLoader(Route routeHandler, Session session, Dictionary<string, object> kvParams, string fullPath, string ext, ExtensionInfo extInfo)
        {
            ResponsePacket ret;

            if (!File.Exists(fullPath))
            {
                ret = new ResponsePacket() { Error = Server.ServerError.FileNotFound };
                Console.WriteLine("!!! File not found: " + fullPath);
            }
            else
            {
                string text = File.ReadAllText(fullPath);
                ret = new ResponsePacket() { Data = Encoding.UTF8.GetBytes(text), ContentType = extInfo.ContentType, Encoding = Encoding.UTF8 };
            }

            return ret;
        }
예제 #5
0
		public void AddRoute(Route route)
		{
			router.AddRoute(route);
		}