예제 #1
0
        // ----------------------------------------------------------------------------------------
        // Route: "/cmdline"
        public static ResponseContext Cmdline(RequestContext context)
        {
            // проверим доступ
            if (context.sessionManager.SessionGetKey(context.session, "user") == null)
            {
                // пользователь неавторизован - редирект на главную страницу
                return(new ResponseContext("", "/"));
            }

            // глобальные переменные в сессии
            TaggedProcess p   = (TaggedProcess)context.sessionManager.SessionGetKey(context.session, "process");
            string        cmd = (string)context.sessionManager.SessionGetKey(context.session, "cmd", "cmd.exe");

            if (context.Method == RequestMethod.GET)
            {
                // отобразим страницу
                context.templateVariables.Add("status", (p == null ? false : (!p.HasExited ? true : false)));
                context.templateVariables.Add("cmd", cmd);

                TemplateParser tp = new TemplateParser();
                return(new ResponseContext(tp.ParseFromResource("cmdline.html", context.templateVariables)));
            }
            else if (context.Method == RequestMethod.POST)
            {
                if (context.parameters.ContainsKey("btnRun"))
                {
                    // ЗАПРОС ЗАПУСКА КОМАНДЫ

                    p?.Kill(); // завершим процесс, если был открыт

                    cmd = context.GetParam("cmd", "cmd.exe");
                    context.sessionManager.SessionSetKey(ref context.session, "cmd", cmd);

                    // запустим процесс в скрытом окне, перенаправим потоки Stdin и Stdout в наш обработчик
                    p = new TaggedProcess(cmd);

                    try
                    {
                        p.Start();
                        p.BeginOutputReadLine();
                        p.BeginErrorReadLine();
                        p.StandardInput.WriteLine();
                    }
                    catch
                    {
                        p = null;
                    }

                    context.sessionManager.SessionSetKey(ref context.session, "process", p);
                    context.templateVariables.Add("status", (p == null ? false : (!p.HasExited ? true : false)));
                    context.templateVariables.Add("cmd", cmd);

                    TemplateParser tp = new TemplateParser();
                    return(new ResponseContext(tp.ParseFromResource("cmdline.html", context.templateVariables)));
                }
                else if (context.parameters.ContainsKey("btnStop"))
                {
                    // ЗАПРОС ОСТАНОВА КОМАНДЫ

                    p?.Kill();
                    p = null;

                    context.sessionManager.SessionSetKey(ref context.session, "process", p);
                    context.templateVariables.Add("status", (p == null ? false : (!p.HasExited ? true : false)));
                    context.templateVariables.Add("cmd", cmd);

                    TemplateParser tp = new TemplateParser();
                    return(new ResponseContext(tp.ParseFromResource("cmdline.html", context.templateVariables)));
                }
            }

            return(new ResponseContext("", ""));
        }