Beispiel #1
0
        public async Task <IActionResult> SendCommandMulti(int server, string command, string[] players, string value = "")
        {
            var singleServer = await _pavlovServerService.FindOne(server);

            var servers = await GiveServerWhichTheUserHasRightsTo();

            LiteDbUser user;

            user = await _userservice.getUserFromCp(HttpContext.User);

            if (!servers.Select(x => x.Id).Contains(singleServer.Id))
            {
                return(Forbid());
            }
            var isMod = await RightsHandler.IsModOnTheServer(_serverSelectedModsService, singleServer, user.Id);

            var commands = await RightsHandler.GetAllowCommands(new RconViewModel(), HttpContext.User, _userservice, isMod, singleServer, user);



            var contains = false;

            foreach (var singleCommand in commands)
            {
                if (command.Contains(singleCommand))
                {
                    contains = true;
                }
            }
            if (contains != true)
            {
                return(Forbid());
            }

            if (command.StartsWith("GodMode"))
            {
                command = "Slap";
                value   = "-2147000000";
            }
            if (command.StartsWith("CustomPlayer") || command.StartsWith("Custom"))
            {
                if (command.StartsWith("CustomPlayer"))
                {
                    var count = value.Count(x => x == ' ');
                    if (count == 1)
                    {
                        var pieces = value.Split(new[] { ' ' }, 2);
                        command = pieces[0];
                        value   = pieces[1];
                    }
                }
                else
                {
                    command = command.Substring(7);
                }
            }


            var responses = Array.Empty <string>();

            try
            {
                var commandsList = new List <string>();
                foreach (var player in players)
                {
                    if (value == null)
                    {
                        commandsList.Add(command + " " + player);
                    }
                    else
                    {
                        commandsList.Add(command + " " + player + " " + value);
                    }
                }
                responses = await RconStatic.SShTunnelMultipleCommands(singleServer, commandsList.ToArray(), _toastifyService);
            }
            catch (CommandException e)
            {
                return(BadRequest(e.Message));
            }
            if (string.IsNullOrEmpty(string.Join(";", responses)))
            {
                return(BadRequest("The response was empty!"));
            }

            var commandsResulsts = new List <string>();

            try
            {
                foreach (var response in responses)
                {
                    var tmp = JsonConvert.DeserializeObject <MinimumRconResultObject>(response, new JsonSerializerSettings {
                        CheckAdditionalContent = false
                    });
                    var o      = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(response);
                    var value3 = o.Property("")?.Value;
                    var value2 = o.Property(tmp.Command)?.Value;
                    if (tmp != null && (value3 is { HasValues: false } || value2 is { HasValues: false }))