private async Task <bool> CheckPremiumAccess(HasAccessToScriptQuery request, ScriptDto script)
        {
            if (!request.UserId.HasValue)
            {
                return(false);
            }

            var date = DateTimeOffset.UtcNow;

            var count = await _db.ScriptAccess
                        .Where(w => w.ScriptId == script.Id && w.UserId == request.UserId && w.Expiration.HasValue &&
                               w.Expiration.Value > date).Select(w => w.Instances.GetValueOrDefault(1)).SumAsync();

            if (!script.Instances.HasValue)
            {
                return(count > 0);
            }

            var clients = await _mediator.Send(new GetRunningClientsQuery { UserId = request.UserId.Value });

            var dic = clients.GroupBy(w => w.Tag)
                      .ToDictionary(w => w.Key, c => c.OrderByDescending(w => w.LastUpdate).ToList());

            var realCount = dic.Count(w => w.Value.First().ScriptName == script.Name);

            return(count > realCount);
        }
Beispiel #2
0
        private void RunScript(List <ScriptDto> listScript)
        {
            try
            {
                if (String.IsNullOrWhiteSpace(appArgs.ScriptId) || !listScript.Any(r => r.Id.Equals(appArgs.ScriptId)))
                {
                    log.Error("Identifiant du script absent ou non reconnu ('{0}' : {1})", appArgs.ScriptId,
                              String.Join(", ", listScript.Select(r => r.Id)));
                    appExitCode = EnumExitCode.NoScriptOrNotKnown;

                    return;
                }

                ScriptDto scriptDto = listScript.FirstOrDefault(r => r.Id.Equals(appArgs.ScriptId));
                log.Info("Script à lancer (id: {0}, script: {1})", scriptDto.Id, scriptDto.Path);

                ScriptRunner sRun = new ScriptRunner(scriptDto);
                _handler += new EventHandler(sRun.HandleUnusalExit);
                SetConsoleCtrlHandler(_handler, true);
                sRun.Run(appArgs.ScriptArgsInput);
            }
            catch (Exception e)
            {
                log.Error("Erreur inattendue : {0}", e.Message);
                ExceptionHandlingUtils.LogAndHideException(e, isWarnMsgAndDebugStack: true);
                appExitCode = EnumExitCode.ErrorScriptRunner;

                return;
            }
        }
Beispiel #3
0
        public async Task <ScriptHeaderDto> Create(ScriptDto script, int userId, CancellationToken cancellationToken)
        {
            try
            {
                var owner = await _database.Users.FirstOrDefaultAsync(x => x.Id == userId, cancellationToken);

                Script dbScript = new Script
                {
                    Name        = script.Name,
                    Instruction = script.Instruction,
                    Owner       = owner
                };

                var result = await _database.Scripts.AddAsync(dbScript, cancellationToken);

                await _database.SaveChangesAsync(cancellationToken);

                return(result.Adapt <ScriptHeaderDto>());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error during script creation.");
                throw;
            }
        }
Beispiel #4
0
        public ActionResult SaveScript(ScriptDto newScript, HttpPostedFileBase file)
        {
            if (!ModelState.IsValid)             /* Server side validation */
            {
                TempData["MessageType"] = WebMessageType.Failure;
                TempData["Message"]     = "Failed to save script due to invalid data";
                return(RedirectToAction("Add"));
            }

            try
            {
                if (Request.Files.Count > 0)
                {
                    var fileName = Path.GetFileName(file.FileName);

                    if (fileName != null)
                    {
                        Guid newFileName = Guid.NewGuid();                         //to rename document
                        //file path location comes from the Web.config file
                        try
                        {
                            var path = Path.Combine(ConfigHelper.GetScriptPath(), newFileName + ".ps1");
                            file.SaveAs(Server.MapPath(path));                             /*create new doc and upload it */
                            newScript = new ScriptDto()
                            {
                                Id          = newScript.Id,
                                Name        = newScript.Name,
                                Description = newScript.Description,
                                Version     = newScript.Version,
                                MimeType    = file.ContentType,
                                ScriptFile  = newFileName,
                                UploadDate  = DateTime.Now,
                            };

                            _scriptFileController.ModifyScript(UserId, newScript, newScript.Id <= 0 ? EntityModification.Create : EntityModification.Update);
                        }
                        catch (Exception e)
                        {
                            TempData["MessageType"] = WebMessageType.Failure;
                            TempData["Message"]     = $"Failed to upload document, error: {e.Message}";
                        }
                    }
                }

                TempData["MessageType"] = WebMessageType.Success;
                TempData["Message"]     = $"New script {newScript.Name} saved successfully";
            }
            catch (Exception e)
            {
                TempData["MessageType"] = WebMessageType.Failure;
                TempData["Message"]     = $"Failed to save script {newScript.Name}, error: {e}";
                return(RedirectToAction("Add"));
            }

            //return to index
            return(RedirectToAction("Index"));
        }
        private string GenerateMain(InputDto inputDto, TemplateDto templateDto, ScriptDto scriptDto)
        {
            string mainScript = string.Format(
                templateDto.MainTemplate,
                inputDto.Verb,
                scriptDto.WeekRange,
                //scriptDto.EventsScript,
                scriptDto.NewsScript,
                inputDto.Youtube,
                inputDto.YoutubeText);

            return(mainScript);
        }
        public ScriptAccessDto(ScriptAccess access)
        {
            Id         = access.Id;
            UserId     = access.UserId;
            Script     = new ScriptDto(access.Script);
            OrderId    = access.OrderId ?? 0;
            Timestamp  = access.Timestamp;
            Expiration = access.Expiration;
            Instances  = access.Instances;
            Recurring  = access.Recurring;
            var now = DateTimeOffset.UtcNow;

            IsExpired = Expiration.HasValue && Expiration.Value < now;
        }
Beispiel #7
0
        /// <summary>
        /// GET: Script/UpdateScript/id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult UpdateScript(int id)
        {
            var model = new ScriptDto();

            if (id == 0)
            {
                // new script
                return(View("Add", model));
            }

            // update script
            model = (ScriptDto)_scriptFileController.GetScript(UserId, id);
            return(View("Add", model));
        }
        public static string GetScriptArgsTpl(ScriptDto scriptDto)
        {
            StringBuilder    str = new StringBuilder("-ExecutionPolicy RemoteSigned ");
            PowershellParams p   = scriptDto.PowershellParams;

            str.AppendFormat("{0}", p.NoProfile ? "-NoProfile " : "");
            str.AppendFormat("{0}", p.NoExit ? "-NoExit " : "");
            str.AppendFormat("{0}", p.NoLogo ? "-NoLogo " : "");
            str.AppendFormat("{0}", p.WindowStyle != null ? "-WindowStyle " + p.WindowStyle + " " : "");

            str.AppendFormat("-File \"{0}\" {1}", scriptDto.Path, scriptDto.Args);

            return(str.ToString());
        }
Beispiel #9
0
        internal List <ScriptDto> GetListScripts()
        {
            List <ScriptDto> retList = new List <ScriptDto>();

            XmlNodeList list = XmlUtils.GetElementsXpath(xmlFile.Root, ".//script");

            foreach (XmlElement xmlElement in list)
            {
                if (!xmlElement.HasAttribute("id"))
                {
                    Console.WriteLine("Balise script detectée sans attribut id. Ignorée.");
                    continue;
                }

                ScriptDto s = new ScriptDto()
                {
                    Id   = xmlElement.Attributes["id"].Value,
                    Path = XmlUtils.GetElementXpath(xmlElement, "./path/text()")?.Value,
                    Wd   = XmlUtils.GetElementXpath(xmlElement, "./wd/text()")?.Value,
                    Args = XmlUtils.GetElementXpath(xmlElement, "./args/text()")?.Value,
                };


                if (retList.Any(r => r.Id.Equals(s.Id)))
                {
                    Console.WriteLine("Balise script detectée sans attribut id. Ignorée.");
                    continue;
                }

                XmlNode psParams = XmlUtils.GetElementXpath(xmlElement, "./powershellParams");
                if (psParams != null)
                {
                    XmlSerializer    serializer = new XmlSerializer(typeof(PowershellParams));
                    PowershellParams p          = null;
                    using (XmlNodeReader reader = new XmlNodeReader(psParams))
                    {
                        p = (PowershellParams)serializer.Deserialize(reader);
                    }

                    s.PowershellParams = p;
                }



                retList.Add(s);
            }

            return(retList);
        }
Beispiel #10
0
        private void RunScriptInteractive(List <ScriptDto> listScript)
        {
            while (true)
            {
                int           nbEltParLigne = 3;
                StringBuilder strShow       = new StringBuilder();

                String tpl = "[{0:" + new String(' ', 2) + "}] {1,-25}";
                tpl = "[{0}] {1,-25}";

                int i = 0;
                for (; i < listScript.Count; i++)
                {
                    ScriptDto scriptDto = listScript[i];

                    strShow.AppendFormat(tpl, i, scriptDto.Id);

                    if ((i + 1) % nbEltParLigne == 0)
                    {
                        strShow.AppendLine();
                    }
                }


                strShow.AppendFormat(tpl, i, "Quitter");



                Console.WriteLine(strShow.ToString());
                Console.WriteLine();
                Console.Write("Faites votre choix : ");
                String choiceStr = Console.ReadLine();

                int choice = -1;
                if ((choice = MiscAppUtils.IntParse(choiceStr)) >= 0)
                {
                    if (choice == i)
                    {
                        break;
                    }

                    if (RunScriptInteractiveSub(listScript[choice]))
                    {
                        return;
                    }
                    Console.Clear();
                }
            }
        }
        public ScriptDto ScriptGeneration(InputDto inputDto)
        {
            var templateDto = templateRetriever.ReadingTemplates();

            var scriptDto = new ScriptDto();

            scriptDto.WeekRange = weekRangeCalculator.CalculateWeekRange();

            //scriptDto.EventsScript = GenerateEvents(inputDto, templateDto);

            scriptDto.NewsScript = GenerateNews(inputDto, templateDto);

            scriptDto.MainScript = GenerateMain(inputDto, templateDto, scriptDto);

            return(scriptDto);
        }
Beispiel #12
0
        public ScriptDto ScriptGeneration(InputDto inputDto)
        {
            var templateDto = templateRetriever.ReadingTemplates();

            var scriptDto = new ScriptDto();

            ReadingLongGeneration(inputDto, templateDto, scriptDto);

            ReadingShortGeneration(inputDto, templateDto, scriptDto);

            ListeningLongGeneration(inputDto, templateDto, scriptDto);

            ListeningShortGeneration(inputDto, templateDto, scriptDto);

            return(scriptDto);
        }
Beispiel #13
0
        public ActionResult ConfirmDeleteScript(int id)
        {
            ScriptDto model = new ScriptDto()
            {
                Id = id
            };

            try
            {
                model.Name = _scriptFileController.GetScript(UserId, id).Name;                 //complete model details
            }
            catch (Exception exception)
            {
                TempData["MessageType"] = WebMessageType.Failure;
                TempData["Message"]     = $"Failed to retrieve script, error: {exception.Message}";
            }

            return(View("ConfirmDeleteScript", model));
        }
Beispiel #14
0
        public async Task <ActionResult <string> > PostAsync([FromForm] ScriptDto dto)
        {
            var insertDto = await _scriptAppService.InsertAsync(dto);

            return(Ok(insertDto.Id));
        }
Beispiel #15
0
 public Task <ScriptValidationDto> ValidateScript(ScriptDto script)
 {
     return(Post <ScriptValidationDto, ScriptDto>(
                $"{BaseUri}/{RouteConstants.PREFIX}/{RouteConstants.POST_SCRIPT_VALIDATION}", script));
 }
Beispiel #16
0
        public async Task <IActionResult> CreateScript(ScriptDto script, CancellationToken cancellationToken)
        {
            var created = await _service.Create(script, HttpContext.GetCurrentUserId(), cancellationToken);

            return(Created(string.Empty, created));
        }
Beispiel #17
0
 public async Task <IActionResult> UpdateScript(ScriptDto script, CancellationToken cancellationToken)
 {
     return(Ok(await _service.Update(script, HttpContext.GetCurrentUserId(), cancellationToken)));
 }
Beispiel #18
0
 public async Task <ScriptHeaderDto> Update(ScriptDto script, int userId, CancellationToken cancellationToken)
 {
     throw new NotImplementedException();
 }
Beispiel #19
0
        private bool RunScriptInteractiveSub(ScriptDto scriptDto)
        {
            Console.WriteLine();



            bool isDoReturn = SubA();

            return(isDoReturn);

            bool SubA()
            {
                while (true)
                {
                    String msgPresentScript = $"Script {scriptDto.Id} :";
                    Console.WriteLine(new String('=', msgPresentScript.Length + 2));
                    Console.WriteLine($" {msgPresentScript}");
                    Console.WriteLine(new String('=', msgPresentScript.Length + 2));

                    Console.WriteLine("[0] Lancer le script");
                    Console.WriteLine("[1] Revenir en arrière");

                    Console.WriteLine();
                    Console.Write("Faites votre choix : ");
                    String choiceStr = Console.ReadLine();

                    int choice = -1;
                    if ((choice = MiscAppUtils.IntParse(choiceStr)) >= 0)
                    {
                        if (choice == 1)
                        {
                            break;
                        }
                        else
                        {
                            if (SubB())
                            {
                                return(true);
                            }
                            Console.Clear();
                        }
                    }
                }

                return(false);
            }

            bool SubB()
            {
                while (true)
                {
                    Console.WriteLine();

                    string argScript    = ScriptRunner.GetScriptArgsTpl(scriptDto);
                    int    nbArgsScript = ScriptRunner.ExtractNbArgs(argScript);

                    if (nbArgsScript == 0)
                    {
                        Console.WriteLine("Aucun argument à fournir pour ce script");
                    }
                    else
                    {
                        Console.WriteLine("Paramètres de lancement :");
                        Console.WriteLine(argScript);
                        Console.WriteLine();

                        List <String> listArgs = new List <string>(nbArgsScript);

                        for (int i = 0; i < nbArgsScript; i++)
                        {
                            Console.Write("Valorisez %1: ");
                            listArgs.Insert(i, Console.ReadLine());
                        }
                        listArgs.Insert(0, String.Join(" ", listArgs));

                        Console.WriteLine();
                        string argScriptRepl = ScriptRunner.ReplaceArgsInTpl(argScript, listArgs);
                        Console.WriteLine("Le script sera lancé avec ces paramètres :");
                        Console.WriteLine(argScriptRepl);
                        Console.WriteLine();

                        Console.WriteLine();
                        Console.Write("Voulez-vous continuer ? [o/n/a] : ");
                        String choiceStr = Console.ReadLine();

                        if (choiceStr == null || choiceStr.Equals("n", StringComparison.CurrentCultureIgnoreCase))
                        {
                            continue;
                        }
                        else if (choiceStr.Equals("a", StringComparison.CurrentCultureIgnoreCase))
                        {
                            return(false);
                        }


                        appArgs.ScriptArgsInput = listArgs;
                    }

                    try
                    {
                        ScriptRunner sRun = new ScriptRunner(scriptDto);
                        _handler += new EventHandler(sRun.HandleUnusalExit);
                        SetConsoleCtrlHandler(_handler, true);
                        sRun.Run(appArgs.ScriptArgsInput);
                    }
                    catch (Exception e)
                    {
                        Thread.Sleep(5000);
                        return(false);
                    }

                    break;
                }

                return(true);
            }
        }
 public ScriptRunner(ScriptDto scriptDto)
 {
     this.scriptDto = scriptDto;
 }
        public async Task <IActionResult> ValidateScript([FromBody] ScriptDto script)
        {
            ScriptValidationDto scriptValidation = await BotScript.ValidateScript(script.Script);

            return(Ok(scriptValidation));
        }
Beispiel #22
0
 public void ListeningShortGeneration(InputDto inputDto, TemplateDto templateDto, ScriptDto scriptDto)
 {
     scriptDto.ListeningShort = string.Format(
         templateDto.ListeningShortTemplate,
         inputDto.Title,
         inputDto.Lecture,
         inputDto.Textus,
         inputDto.FileName,
         inputDto.PreachDate.Day.ToString());
 }
Beispiel #23
0
 public void ListeningLongGeneration(InputDto inputDto, TemplateDto templateDto, ScriptDto scriptDto)
 {
     scriptDto.ListeningLong = string.Format(
         templateDto.ListeningLongTemplate,
         inputDto.PreachDate.ToString("yyyy.MM.dd"),
         inputDto.Lecture,
         inputDto.Textus,
         inputDto.FileName,
         inputDto.Title,
         inputDto.Preacher);
 }