public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } if (String.IsNullOrWhiteSpace(rconPayload.Parameter[0])) { return(new OkObjectResult("Oops! You must provide a parameter to be executed e.g. `map de_dust2`.")); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); var mapList = await RconHelper.GetMaps(rconClient); var map = mapList.FirstOrDefault(x => x.Contains(rconPayload.Parameter[0].ToLower())); if (string.IsNullOrEmpty(map)) { return(new OkObjectResult($"Oops! Couldn't find map {rconPayload.Parameter[0]} on server. :flushed:")); } var result = await rconClient.ExecuteCommandAsync("changelevel " + rconPayload.Parameter[0]); return(new OkObjectResult(result)); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } if (String.IsNullOrWhiteSpace(rconPayload.Parameter[0])) { return(new OkObjectResult("Oops! You must provide a parameter to be executed e.g. `gravity pluto`.")); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); var result = "Oops! Allowed values for `gravity` are: " + string.Join(", ", Enum.GetNames(typeof(GravityTypes))) + "."; GravityTypes gravityType; if (Enum.TryParse(rconPayload.Parameter[0].ToLower(), true, out gravityType)) { result = await rconClient.ExecuteCommandAsync("sv_gravity " + (int)gravityType); } return(new OkObjectResult(result)); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } if (String.IsNullOrWhiteSpace(rconPayload.Parameter[0])) { return(new OkObjectResult("Oops! You must provide a parameter to be executed e.g. `headshotonly 1`.")); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); if (rconPayload.Parameter[0] == "0" || rconPayload.Parameter[0].ToLower() == "off" || rconPayload.Parameter[0].ToLower() == "false" || rconPayload.Parameter[0].ToLower() == "no") { return(new OkObjectResult(await rconClient.ExecuteCommandAsync("mp_damage_headshot_only 0"))); } return(new OkObjectResult(await rconClient.ExecuteCommandAsync("mp_damage_headshot_only 0"))); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } if (String.IsNullOrWhiteSpace(rconPayload.Parameter[0])) { return(new OkObjectResult("Oops! You must provide a parameter to be executed e.g. `pistolonly 1`.")); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); if (rconPayload.Parameter[0] == "0" || rconPayload.Parameter[0].ToLower() == "off" || rconPayload.Parameter[0].ToLower() == "false" || rconPayload.Parameter[0].ToLower() == "no") { return(new OkObjectResult(await rconClient.ExecuteCommandAsync("mp_maxmoney 16000;mp_startmoney 800;mp_afterroundmoney 0;mp_overtime_startmoney 10000; bot_pistols_only 0; mp_dm_bonus_length_max 30; sv_infinite_ammo 0; mp_weapons_allow_heavy -1; mp_weapons_allow_pistols -1; mp_weapons_allow_rifles -1; mp_weapons_allow_smgs -1;"))); } return(new OkObjectResult(await rconClient.ExecuteCommandAsync("mp_maxmoney 700; mp_startmoney 700; mp_afterroundmoney 700; mp_overtime_startmoney 700; bot_pistols_only 1; mp_dm_bonus_length_max 0; sv_infinite_ammo 2; mp_weapons_allow_heavy 0; mp_weapons_allow_pistols -1; mp_weapons_allow_rifles 0; mp_weapons_allow_smgs 0;"))); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } if (String.IsNullOrWhiteSpace(rconPayload.Parameter[0])) { return(new OkObjectResult("Oops! You must provide a parameter to be executed e.g. `rcon mp_restartgame 1;`.\nFor more details, please have a look here: https://totalcsgo.com/commands")); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); var rconCommand = string.Join(" ", rconPayload.Parameter); return(new OkObjectResult(await rconClient.ExecuteCommandAsync(rconCommand, true))); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }
public static async Task <IActionResult> Run3([HttpTrigger(AuthorizationLevel.Function, "delete", Route = "connect")] HttpRequest req, ILogger log) { var context = new CosmosDbContext(); var rconPayload = await new RequestParser(req).GetRconPayload(); // authorize var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } if (rconPayload.Parameter.Length > 0 && rconPayload.Parameter[0] == "all") { await context.DeleteConnections(rconPayload.AccessToken); } else { await context.DeleteConnection(connectionPayload); } return(new OkObjectResult("00,OK,00,00")); }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); var result = await rconClient.ExecuteCommandAsync("status"); return(new OkObjectResult(result)); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }
public static async Task <IActionResult> Run2([HttpTrigger(AuthorizationLevel.Function, "post", Route = "connect")] HttpRequest req, ILogger log) { var context = new CosmosDbContext(); var connectionPayload = await new RequestParser(req).GetConnectionPayload(); // check payload if (connectionPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!connectionPayload.IsValid.Value) { return(new BadRequestResult()); } if (!isAccessTokenValid(connectionPayload.AccessToken)) { return(new BadRequestResult()); } // upsert connection await context.SetConnection(connectionPayload); return(new OkObjectResult("00,OK,00,00")); }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = "connect")] HttpRequest req, ILogger log) { var context = new CosmosDbContext(); var rconPayload = await new RequestParser(req).GetRconPayload(); if (req.ContentType.ToLower() != "application/json") { return(new BadRequestResult()); } // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } // authorize var resultObject = await context.GetConnection(rconPayload); return(new OkObjectResult(resultObject)); }
public RconService(ConnectionPayload connection, CosmosDbContext context) { this.connection = connection; this.context = context; }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) { var rconPayload = await new RequestParser(req).GetRconPayload(); // check payload if (rconPayload.IsValid == null) { return(new UnauthorizedResult()); } if (!rconPayload.IsValid.Value) { return(new BadRequestResult()); } if (String.IsNullOrWhiteSpace(rconPayload.Parameter[0])) { return(new OkObjectResult("Oops! You must provide a parameter to be executed e.g. `mode wingman`.")); } // authorize var context = new CosmosDbContext(); var connectionPayload = await context.GetConnection(rconPayload); if (connectionPayload == null) { return(new UnauthorizedResult()); } // execute try { // instantiate client and execute command var rconClient = await new RconService(connectionPayload, context).GetClient(); var result = "Oops! Allowed game types are: " + string.Join(", ", Enum.GetNames(typeof(GameTypes))) + "."; GameTypes gameType; if (!Enum.TryParse(rconPayload.Parameter[0].ToLower(), true, out gameType)) { return(new OkObjectResult(result)); } // Get map pool from server var mapList = await RconHelper.GetMaps(rconClient); // Set random map that suits the given type or use parameter value(s) var currentMap = String.Empty; if (rconPayload.Parameter.Length < 2) { currentMap = getRandomMapByGameType(mapList, gameType); } else if (rconPayload.Parameter.Length > 1) { // exact match currentMap = mapList.FirstOrDefault(x => x == rconPayload.Parameter[1].ToLower()); // starts with if (string.IsNullOrEmpty(currentMap)) { currentMap = mapList.FirstOrDefault(x => x.StartsWith(rconPayload.Parameter[1].ToLower())); } // ends with if (string.IsNullOrEmpty(currentMap)) { currentMap = mapList.FirstOrDefault(x => x.EndsWith(rconPayload.Parameter[1].ToLower())); } // contains -> Warning: could also load de_dust2_se if de_dust2 is parameter if (string.IsNullOrEmpty(currentMap)) { currentMap = mapList.FirstOrDefault(x => x.Contains(rconPayload.Parameter[1].ToLower())); } // Todo: Fuzzy search? ... No, just kidding. ;-) } if (string.IsNullOrEmpty(currentMap)) { return(new OkObjectResult($"Oops! Couldn't find map on server... :flushed:")); } // Set mapgroup by parameter or match currentmap var currentMapGroup = rconPayload.Parameter.Length > 2 ? rconPayload.Parameter[2].ToLower() : "mg_" + (currentMap.Contains("workshop") ? currentMap.Split('/')[2] : currentMap); // switch game to chosen type and map if (gameType == GameTypes.casual) { var resp = await rconClient.ExecuteCommandAsync($"game_type 0; game_mode 0; exec gamemode_casual; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Casual'.\n{resp}")); } if (gameType == GameTypes.competitive) { var resp = await rconClient.ExecuteCommandAsync($"game_type 0; game_mode 1; exec gamemode_competitive; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Competitive'.\n{resp}")); } if (gameType == GameTypes.wingman) { var resp = await rconClient.ExecuteCommandAsync($"game_type 0; game_mode 2; exec gamemode_competitive2v2; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Wingman'.\n{resp}")); } if (gameType == GameTypes.dangerzone) { var resp = await rconClient.ExecuteCommandAsync($"game_type 6; game_mode 0; exec gamemode_survival; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Dangerzone'.\n{resp}")); } if (gameType == GameTypes.armsrace) { var resp = await rconClient.ExecuteCommandAsync($"game_type 1; game_mode 0; exec gamemode_armsrace; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Armsrace'.\n{resp}")); } if (gameType == GameTypes.deathmatch) { var resp = await rconClient.ExecuteCommandAsync($"game_type 1; game_mode 2; exec op08_bounty_hunter; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Deathmatch'.\n{resp}")); } if (gameType == GameTypes.teamdeathmatch) { var resp = await rconClient.ExecuteCommandAsync($"game_type 1; game_mode 2; exec gamemode_teamdeathmatch; map {currentMap}; mapgroup {currentMapGroup};"); return(new OkObjectResult($"Switched server to mode 'Team Deathmatch'.\n{resp}")); } return(new OkObjectResult("Oops! That didn't work... :flushed:")); } catch (System.Exception ex) { log.LogError(ex.Message); return(new OkObjectResult("Oops! Server did not respond. :flushed:")); } }