using System; using System.Net; using JetBrains.Annotations; using Webserver; using Webserver.WebAPI; using WebCommandResult = AllocsFixes.Web.WebCommandResult; namespace AllocsFixes.WebAPIs { [UsedImplicitly] public class ExecuteConsoleCommand : AbsWebAPI { public override void HandleRequest (RequestContext _context) { if (string.IsNullOrEmpty (_context.Request.QueryString ["command"])) { WebUtils.WriteText (_context.Response, "No command given", HttpStatusCode.BadRequest); return; } WebCommandResult.ResultType responseType = _context.Request.QueryString ["raw"] != null ? WebCommandResult.ResultType.Raw : _context.Request.QueryString ["simple"] != null ? WebCommandResult.ResultType.ResultOnly : WebCommandResult.ResultType.Full; string commandline = _context.Request.QueryString ["command"]; string commandPart = commandline.Split (' ') [0]; string argumentsPart = commandline.Substring (Math.Min (commandline.Length, commandPart.Length + 1)); IConsoleCommand command = SdtdConsole.Instance.GetCommand (commandline); if (command == null) { WebUtils.WriteText (_context.Response, "Unknown command", HttpStatusCode.NotFound); return; } int commandPermissionLevel = GameManager.Instance.adminTools.Commands.GetCommandPermissionLevel (command.GetCommands ()); if (_context.PermissionLevel > commandPermissionLevel) { WebUtils.WriteText (_context.Response, "You are not allowed to execute this command", HttpStatusCode.Forbidden); return; } _context.Response.SendChunked = true; WebCommandResult wcr = new WebCommandResult (commandPart, argumentsPart, responseType, _context); SdtdConsole.Instance.ExecuteAsync (commandline, wcr); } public override int DefaultPermissionLevel () { return 2000; } } }