예제 #1
0
        public void runScript(Session s)
        {
            PDLogger.Log($"STARTING SCRIPT RUN:: {s.getParameter("script")}.cs", 5);
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters param    = new CompilerParameters {
                GenerateExecutable = false, GenerateInMemory = true
            };

            param.ReferencedAssemblies.Add("Peridot.dll");
            param.ReferencedAssemblies.Add("System.dll");
            foreach (string file in Directory.GetFiles(appFolder))
            {
                FileInfo f = new FileInfo(file);
                if (f.Name.Contains(".dll"))
                {
                    param.ReferencedAssemblies.Add(f.Name);
                }
            }
            PDLogger.Log($"Loaded internal librarys", 5);
            string          scriptToExecute = s.getParameter("script") + ".cs";
            string          src             = File.ReadAllText(appFolder + "/" + scriptToExecute);
            CompilerResults results         = provider.CompileAssemblyFromSource(param, src);

            if (results.Errors.Count != 0)
            {
                PDLogger.Log($"Failed to load script: {scriptToExecute} (Compiler errors)", 1);
                foreach (CompilerError error in results.Errors)
                {
                    PDLogger.Log($"{error.ErrorText} in line {error.Line} ({error.ErrorNumber})", 1);
                }
                return;
            }
            PDLogger.Log($"COMPILED SCRIPT:: {s.getParameter("script")}.cs", 5);
            try
            {
                object     o   = results.CompiledAssembly.CreateInstance("PeridotApp." + s.getParameter("script"));
                MethodInfo mi  = o.GetType().GetMethod("main");
                AppSession asa = new AppSession();
                asa.session = s;
                asa.appUser = getAppUser(s.GetCookie("PERIDOT_APP_TOKEN"));
                asa.appAPI  = this;
                if (asa.appUser != null)
                {
                    string returns = (string)mi.Invoke(o, new object[] { asa });
                    s.GenerateHTMLOutput(returns);
                    PDLogger.Log($"EXECUTED SCRIPT:: {s.getParameter("script")}.cs", 5);
                }
                else
                {
                    PDLogger.Log($"Got a null APPUSER request which violates app policy. (Internal Sources Only)", 4);
                }
            }
            catch (Exception ex)
            {
                PDLogger.Log($"Failed to run script: {scriptToExecute} ({ex.Message})", 1);
            }
        }
예제 #2
0
        public void assets(Session s)
        {
            HttpListenerContext context = s.PageContext;
            string _rootDirectory       = appFolder + "/assets";
            string filename             = context.Request.Url.AbsolutePath;

            filename = filename.Substring(1);
            //filename = Path.Combine(_rootDirectory, filename);
            if (filename.Contains(".") == false)
            {
                PDLogger.Log($"Resolving URL to {filename}/index.html", 4);
                filename += "/index.html";
            }
            PDLogger.Log($"LOADING APP ASSET {filename}", 5);
            if (File.Exists(filename))
            {
                try
                {
                    Stream input = new FileStream(filename, FileMode.Open);

                    //Adding permanent http response headers
                    string mime;
                    context.Response.ContentType     = PDServer._mimeTypeMappings.TryGetValue(Path.GetExtension(filename), out mime) ? mime : "application/octet-stream";
                    context.Response.ContentLength64 = input.Length;
                    context.Response.AddHeader("Date", DateTime.Now.ToString("r"));
                    context.Response.AddHeader("Last-Modified", System.IO.File.GetLastWriteTime(filename).ToString("r"));
                    context.Response.AddHeader("Cache-Control", "no-cache");
                    byte[] buffer = new byte[1024 * 16];
                    int    nbytes;
                    while ((nbytes = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        context.Response.OutputStream.Write(buffer, 0, nbytes);
                    }
                    input.Close();

                    context.Response.StatusCode = (int)HttpStatusCode.OK;
                    context.Response.OutputStream.Flush();
                }
                catch (Exception ex)
                {
                    PDLogger.Log($"Internal Server Error:: {ex.Message} in PERIDOT_HTTP_FEEDBACK_SENDER", 1);

                    // context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                }
            }
            else
            {
                PDLogger.Log($"Error 404 on request {context.Request.Url}", 4);
                s.setStatusCode(HttpStatusCode.NotFound);
                // context.Response.StatusCode = (int)HttpStatusCode.NotFound;
            }
        }
예제 #3
0
        private static string loadInternalFile(string url)
        {
            PDLogger.Log($"LOADING ERROR PAGE: {url}", 5);
            var assembly     = Assembly.GetExecutingAssembly();
            var resourceName = url;

            try
            {
                using (Stream stream = assembly.GetManifestResourceStream(resourceName))
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string result = reader.ReadToEnd();
                        PDLogger.Log($"LOADED {url}", 5);
                        return(result);
                    }
            }
            catch (Exception ex) {
                PDLogger.Log($"Failed to load error page '{url}' {ex.Message}", 1, ex.StackTrace);
                return("");
            }
        }
예제 #4
0
        private static string loadInternalFile(string url)
        {
            PDLogger.Log($"LOADING INTERNAL FILE {url}", 5);
            var assembly     = Assembly.GetExecutingAssembly();
            var resourceName = url;

            try
            {
                using (Stream stream = assembly.GetManifestResourceStream(resourceName))
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        PDLogger.Log($"LOADED INTERNAL FILE {url}", 5);
                        string result = reader.ReadToEnd();
                        return(result);
                    }
            }
            catch (Exception ex)
            {
                PDLogger.Log($"Error on loading internal file {url}", 2);
                return("");
            }
        }