diff --git a/TShockAPI/Rest/Rest.cs b/TShockAPI/Rest/Rest.cs index 87357186..740f9bde 100644 --- a/TShockAPI/Rest/Rest.cs +++ b/TShockAPI/Rest/Rest.cs @@ -37,17 +37,31 @@ namespace Rests /// Parameters in the url /// {x} in urltemplate /// Response object or null to not handle request - public delegate object RestCommandD(RestVerbs verbs, IParameterCollection parameters); + public delegate object RestCommandD(RestRequestArgs args); - /// - /// Secure Rest command delegate including token data. - /// - /// Parameters in the url - /// {x} in urltemplate - /// The data of stored for the provided token. - /// Response object or null to not handle request - public delegate object SecureRestCommandD(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData); + public class RestRequestArgs + { + public RestVerbs Verbs { get; private set; } + public IParameterCollection Parameters { get; private set; } + public IRequest Request { get; private set; } + public SecureRest.TokenData TokenData { get; private set; } + public RestRequestArgs(RestVerbs verbs, IParameterCollection param, IRequest request) + { + Verbs = verbs; + Parameters = param; + Request = request; + TokenData = SecureRest.TokenData.None; + } + + public RestRequestArgs(RestVerbs verbs, IParameterCollection param, IRequest request, SecureRest.TokenData tokenData) + { + Verbs = verbs; + Parameters = param; + Request = request; + TokenData = tokenData; + } + } public class Rest : IDisposable { private readonly List commands = new List(); @@ -173,7 +187,7 @@ namespace Rests continue; } - var obj = ExecuteCommand(com, verbs, e.Request.Parameters); + var obj = ExecuteCommand(com, verbs, e.Request.Parameters, e.Request); if (obj != null) return obj; } @@ -193,9 +207,9 @@ namespace Rests }; } - protected virtual object ExecuteCommand(RestCommand cmd, RestVerbs verbs, IParameterCollection parms) + protected virtual object ExecuteCommand(RestCommand cmd, RestVerbs verbs, IParameterCollection parms, IRequest request) { - object result = cmd.Execute(verbs, parms); + object result = cmd.Execute(verbs, parms, request); if (cmd.DoLog && TShock.Config.LogRest) { Log.ConsoleInfo("Anonymous requested REST endpoint: " + BuildRequestUri(cmd, verbs, parms, false)); diff --git a/TShockAPI/Rest/RestCommand.cs b/TShockAPI/Rest/RestCommand.cs index 5fa4a429..d08616cb 100644 --- a/TShockAPI/Rest/RestCommand.cs +++ b/TShockAPI/Rest/RestCommand.cs @@ -65,9 +65,9 @@ namespace Rests get { return UriVerbs.Length > 0; } } - public virtual object Execute(RestVerbs verbs, IParameterCollection parameters) + public virtual object Execute(RestVerbs verbs, IParameterCollection parameters, IRequest request) { - return callback(verbs, parameters); + return callback(new RestRequestArgs(verbs, parameters, request)); } } @@ -76,31 +76,31 @@ namespace Rests public override bool RequiresToken { get { return true; } } public string[] Permissions { get; set; } - private SecureRestCommandD callback; + private RestCommandD callback; - public SecureRestCommand(string name, string uritemplate, SecureRestCommandD callback, params string[] permissions) + public SecureRestCommand(string name, string uritemplate, RestCommandD callback, params string[] permissions) : base(name, uritemplate, null) { this.callback = callback; Permissions = permissions; } - public SecureRestCommand(string uritemplate, SecureRestCommandD callback, params string[] permissions) + public SecureRestCommand(string uritemplate, RestCommandD callback, params string[] permissions) : this(string.Empty, uritemplate, callback, permissions) { } - public override object Execute(RestVerbs verbs, IParameterCollection parameters) + public override object Execute(RestVerbs verbs, IParameterCollection parameters, IRequest request) { return new RestObject("401") { Error = "Not authorized. The specified API endpoint requires a token." }; } - public object Execute(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + public object Execute(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData, IRequest request) { if (tokenData.Equals(SecureRest.TokenData.None)) return new RestObject("401") { Error = "Not authorized. The specified API endpoint requires a token." }; - return callback(verbs, parameters, tokenData); + return callback(new RestRequestArgs(verbs, parameters, request, tokenData)); } } } \ No newline at end of file diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index 2956d576..2bcdcbc5 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -49,10 +49,10 @@ namespace TShockAPI } else { - Rest.Register(new RestCommand("/v2/server/status", (a, b) => this.ServerStatusV2(a, b, SecureRest.TokenData.None))); - Rest.Register(new RestCommand("/status", (a, b) => this.ServerStatus(a, b, SecureRest.TokenData.None))); - Rest.Register(new RestCommand("/v3/server/motd", (a, b) => this.ServerMotd(a, b, SecureRest.TokenData.None))); - Rest.Register(new RestCommand("/v3/server/rules", (a, b) => this.ServerRules(a, b, SecureRest.TokenData.None))); + Rest.Register(new RestCommand("/v2/server/status", (a) => this.ServerStatusV2(new RestRequestArgs(a.Verbs, a.Parameters, a.Request, SecureRest.TokenData.None)))); + Rest.Register(new RestCommand("/status", (a) => this.ServerStatus(new RestRequestArgs(a.Verbs, a.Parameters, a.Request, SecureRest.TokenData.None)))); + Rest.Register(new RestCommand("/v3/server/motd", (a) => this.ServerMotd(new RestRequestArgs(a.Verbs, a.Parameters, a.Request, SecureRest.TokenData.None)))); + Rest.Register(new RestCommand("/v3/server/rules", (a) => this.ServerRules(new RestRequestArgs(a.Verbs, a.Parameters, a.Request, SecureRest.TokenData.None)))); } Rest.Register(new SecureRestCommand("/v2/server/broadcast", ServerBroadcast)); @@ -105,84 +105,84 @@ namespace TShockAPI #region RestServerMethods - private object ServerCommand(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerCommand(RestRequestArgs args) { - if (string.IsNullOrWhiteSpace(parameters["cmd"])) + if (string.IsNullOrWhiteSpace(args.Parameters["cmd"])) return RestMissingParam("cmd"); Group restPlayerGroup; // TODO: Get rid of this when the old REST permission model is removed. if (TShock.Config.RestUseNewPermissionModel) - restPlayerGroup = TShock.Groups.GetGroupByName(tokenData.UserGroupName); + restPlayerGroup = TShock.Groups.GetGroupByName(args.TokenData.UserGroupName); else restPlayerGroup = new SuperAdminGroup(); - TSRestPlayer tr = new TSRestPlayer(tokenData.Username, restPlayerGroup); - Commands.HandleCommand(tr, parameters["cmd"]); + TSRestPlayer tr = new TSRestPlayer(args.TokenData.Username, restPlayerGroup); + Commands.HandleCommand(tr, args.Parameters["cmd"]); return RestResponse(string.Join("\n", tr.GetCommandOutput())); } - private object ServerCommandV3(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerCommandV3(RestRequestArgs args) { - if (string.IsNullOrWhiteSpace(parameters["cmd"])) + if (string.IsNullOrWhiteSpace(args.Parameters["cmd"])) return RestMissingParam("cmd"); Group restPlayerGroup; // TODO: Get rid of this when the old REST permission model is removed. if (TShock.Config.RestUseNewPermissionModel) - restPlayerGroup = TShock.Groups.GetGroupByName(tokenData.UserGroupName); + restPlayerGroup = TShock.Groups.GetGroupByName(args.TokenData.UserGroupName); else restPlayerGroup = new SuperAdminGroup(); - TSRestPlayer tr = new TSRestPlayer(tokenData.Username, restPlayerGroup); - Commands.HandleCommand(tr, parameters["cmd"]); + TSRestPlayer tr = new TSRestPlayer(args.TokenData.Username, restPlayerGroup); + Commands.HandleCommand(tr, args.Parameters["cmd"]); return new RestObject() { {"response", tr.GetCommandOutput()} }; } - private object ServerOff(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerOff(RestRequestArgs args) { - if (!GetBool(parameters["confirm"], false)) + if (!GetBool(args.Parameters["confirm"], false)) return RestInvalidParam("confirm"); // Inform players the server is shutting down - var reason = string.IsNullOrWhiteSpace(parameters["message"]) ? "Server is shutting down" : parameters["message"]; - TShock.Utils.StopServer(!GetBool(parameters["nosave"], false), reason); + var reason = string.IsNullOrWhiteSpace(args.Parameters["message"]) ? "Server is shutting down" : args.Parameters["message"]; + TShock.Utils.StopServer(!GetBool(args.Parameters["nosave"], false), reason); return RestResponse("The server is shutting down"); } - private object ServerRestart(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerRestart(RestRequestArgs args) { - if (!GetBool(parameters["confirm"], false)) + if (!GetBool(args.Parameters["confirm"], false)) return RestInvalidParam("confirm"); // Inform players the server is shutting down - var reason = string.IsNullOrWhiteSpace(parameters["message"]) ? "Server is restarting" : parameters["message"]; - TShock.Utils.RestartServer(!GetBool(parameters["nosave"], false), reason); + var reason = string.IsNullOrWhiteSpace(args.Parameters["message"]) ? "Server is restarting" : args.Parameters["message"]; + TShock.Utils.RestartServer(!GetBool(args.Parameters["nosave"], false), reason); return RestResponse("The server is shutting down and will attempt to restart"); } - private object ServerReload(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerReload(RestRequestArgs args) { - TShock.Utils.Reload(new TSRestPlayer(tokenData.Username, TShock.Groups.GetGroupByName(tokenData.UserGroupName))); + TShock.Utils.Reload(new TSRestPlayer(args.TokenData.Username, TShock.Groups.GetGroupByName(args.TokenData.UserGroupName))); return RestResponse("Configuration, permissions, and regions reload complete. Some changes may require a server restart."); } - private object ServerBroadcast(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerBroadcast(RestRequestArgs args) { - var msg = parameters["msg"]; + var msg = args.Parameters["msg"]; if (string.IsNullOrWhiteSpace(msg)) return RestMissingParam("msg"); TShock.Utils.Broadcast(msg); return RestResponse("The message was broadcasted successfully"); } - private object ServerMotd(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerMotd(RestRequestArgs args) { string motdFilePath = Path.Combine(TShock.SavePath, "motd.txt"); if (!File.Exists(motdFilePath)) @@ -194,7 +194,7 @@ namespace TShockAPI }; } - private object ServerRules(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerRules(RestRequestArgs args) { string rulesFilePath = Path.Combine(TShock.SavePath, "rules.txt"); if (!File.Exists(rulesFilePath)) @@ -206,7 +206,7 @@ namespace TShockAPI }; } - private object ServerStatus(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerStatus(RestRequestArgs args) { var activeplayers = Main.player.Where(p => null != p && p.active).ToList(); return new RestObject() @@ -218,7 +218,7 @@ namespace TShockAPI }; } - private object ServerStatusV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerStatusV2(RestRequestArgs args) { var ret = new RestObject() { @@ -233,19 +233,19 @@ namespace TShockAPI {"serverpassword", !string.IsNullOrEmpty(TShock.Config.ServerPassword)} }; - if (GetBool(parameters["players"], false)) + if (GetBool(args.Parameters["players"], false)) { var players = new ArrayList(); foreach (TSPlayer tsPlayer in TShock.Players.Where(p => null != p)) { - var p = PlayerFilter(tsPlayer, parameters, ((tokenData.UserGroupName) != "" && TShock.Utils.GetGroup(tokenData.UserGroupName).HasPermission(RestPermissions.viewips))); + var p = PlayerFilter(tsPlayer, args.Parameters, ((args.TokenData.UserGroupName) != "" && TShock.Utils.GetGroup(args.TokenData.UserGroupName).HasPermission(RestPermissions.viewips))); if (null != p) players.Add(p); } ret.Add("players", players); } - if (GetBool(parameters["rules"], false)) + if (GetBool(args.Parameters["rules"], false)) { var rules = new Dictionary(); rules.Add("AutoSave", TShock.Config.AutoSave); @@ -267,12 +267,12 @@ namespace TShockAPI return ret; } - private object ServerTokenTest(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object ServerTokenTest(RestRequestArgs args) { return new RestObject() { {"response", "Token is valid and was passed through correctly."}, - {"associateduser", tokenData.Username} + {"associateduser", args.TokenData.Username} }; } @@ -280,12 +280,12 @@ namespace TShockAPI #region RestUserMethods - private object UserActiveListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object UserActiveListV2(RestRequestArgs args) { return new RestObject() { { "activeusers", string.Join("\t", TShock.Players.Where(p => null != p && null != p.UserAccountName && p.Active).Select(p => p.UserAccountName)) } }; } - private object UserListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object UserListV2(RestRequestArgs args) { return new RestObject() { { "users", TShock.Users.GetUsers().Select(p => new Dictionary(){ {"name", p.Name}, @@ -294,17 +294,17 @@ namespace TShockAPI }) } }; } - private object UserCreateV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object UserCreateV2(RestRequestArgs args) { - var username = parameters["user"]; + var username = args.Parameters["user"]; if (string.IsNullOrWhiteSpace(username)) return RestMissingParam("user"); - var group = parameters["group"]; + var group = args.Parameters["group"]; if (string.IsNullOrWhiteSpace(group)) group = TShock.Config.DefaultRegistrationGroupName; - var password = parameters["password"]; + var password = args.Parameters["password"]; if (string.IsNullOrWhiteSpace(password)) return RestMissingParam("password"); @@ -322,14 +322,14 @@ namespace TShockAPI return RestResponse("User was successfully created"); } - private object UserUpdateV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object UserUpdateV2(RestRequestArgs args) { - var ret = UserFind(parameters); + var ret = UserFind(args.Parameters); if (ret is RestObject) return ret; - var password = parameters["password"]; - var group = parameters["group"]; + var password = args.Parameters["password"]; + var group = args.Parameters["group"]; if (string.IsNullOrWhiteSpace(group) && string.IsNullOrWhiteSpace(password)) return RestMissingParam("group", "password"); @@ -364,9 +364,9 @@ namespace TShockAPI return response; } - private object UserDestroyV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object UserDestroyV2(RestRequestArgs args) { - var ret = UserFind(parameters); + var ret = UserFind(args.Parameters); if (ret is RestObject) return ret; @@ -382,9 +382,9 @@ namespace TShockAPI return RestResponse("User deleted successfully"); } - private object UserInfoV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object UserInfoV2(RestRequestArgs args) { - var ret = UserFind(parameters); + var ret = UserFind(args.Parameters); if (ret is RestObject) return ret; @@ -396,17 +396,17 @@ namespace TShockAPI #region RestBanMethods - private object BanCreate(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object BanCreate(RestRequestArgs args) { - var ip = parameters["ip"]; - var name = parameters["name"]; + var ip = args.Parameters["ip"]; + var name = args.Parameters["name"]; if (string.IsNullOrWhiteSpace(ip) && string.IsNullOrWhiteSpace(name)) return RestMissingParam("ip", "name"); try { - TShock.Bans.AddBan(ip, name, "", parameters["reason"], true, tokenData.Username); + TShock.Bans.AddBan(ip, name, "", args.Parameters["reason"], true, args.TokenData.Username); } catch (Exception e) { @@ -415,27 +415,27 @@ namespace TShockAPI return RestResponse("Ban created successfully"); } - private object BanDestroyV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object BanDestroyV2(RestRequestArgs args) { - var ret = BanFind(parameters); + var ret = BanFind(args.Parameters); if (ret is RestObject) return ret; try { Ban ban = (Ban)ret; - switch (parameters["type"]) + switch (args.Parameters["type"]) { case "ip": if (!TShock.Bans.RemoveBan(ban.IP, false, false, true)) return RestResponse("Failed to delete ban (already deleted?)"); break; case "name": - if (!TShock.Bans.RemoveBan(ban.Name, true, GetBool(parameters["caseinsensitive"], true))) + if (!TShock.Bans.RemoveBan(ban.Name, true, GetBool(args.Parameters["caseinsensitive"], true))) return RestResponse("Failed to delete ban (already deleted?)"); break; default: - return RestError("Invalid Type: '" + parameters["type"] + "'"); + return RestError("Invalid Type: '" + args.Parameters["type"] + "'"); } } @@ -447,9 +447,9 @@ namespace TShockAPI return RestResponse("Ban deleted successfully"); } - private object BanInfoV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object BanInfoV2(RestRequestArgs args) { - var ret = BanFind(parameters); + var ret = BanFind(args.Parameters); if (ret is RestObject) return ret; @@ -461,7 +461,7 @@ namespace TShockAPI }; } - private object BanListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object BanListV2(RestRequestArgs args) { var banList = new ArrayList(); foreach (var ban in TShock.Bans.GetBans()) @@ -483,27 +483,27 @@ namespace TShockAPI #region RestWorldMethods - private object WorldChangeSaveSettings(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object WorldChangeSaveSettings(RestRequestArgs args) { bool autoSave; - if (!bool.TryParse(verbs["bool"], out autoSave)) + if (!bool.TryParse(args.Verbs["bool"], out autoSave)) return RestInvalidParam("state"); TShock.Config.AutoSave = autoSave; return RestResponse("AutoSave has been set to " + autoSave); } - private object WorldSave(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object WorldSave(RestRequestArgs args) { SaveManager.Instance.SaveWorld(); return RestResponse("World saved"); } - private object WorldButcher(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object WorldButcher(RestRequestArgs args) { bool killFriendly; - if (!bool.TryParse(parameters["killfriendly"], out killFriendly)) + if (!bool.TryParse(args.Parameters["killfriendly"], out killFriendly)) return RestInvalidParam("killfriendly"); int killcount = 0; @@ -519,7 +519,7 @@ namespace TShockAPI return RestResponse(killcount + " NPCs have been killed"); } - private object WorldRead(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object WorldRead(RestRequestArgs args) { return new RestObject() { @@ -532,7 +532,7 @@ namespace TShockAPI }; } - private object WorldMeteor(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object WorldMeteor(RestRequestArgs args) { if (null == WorldGen.genRand) WorldGen.genRand = new Random(); @@ -540,10 +540,10 @@ namespace TShockAPI return RestResponse("Meteor has been spawned"); } - private object WorldBloodmoon(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object WorldBloodmoon(RestRequestArgs args) { bool bloodmoon; - if (!bool.TryParse(verbs["bool"], out bloodmoon)) + if (!bool.TryParse(args.Verbs["bool"], out bloodmoon)) return RestInvalidParam("bloodmoon"); Main.bloodMoon = bloodmoon; @@ -554,37 +554,37 @@ namespace TShockAPI #region RestPlayerMethods - private object PlayerUnMute(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerUnMute(RestRequestArgs args) { - return PlayerSetMute(parameters, false); + return PlayerSetMute(args.Parameters, false); } - private object PlayerMute(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerMute(RestRequestArgs args) { - return PlayerSetMute(parameters, true); + return PlayerSetMute(args.Parameters, true); } - private object PlayerList(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerList(RestRequestArgs args) { var activeplayers = Main.player.Where(p => null != p && p.active).ToList(); return new RestObject() { { "players", string.Join(", ", activeplayers.Select(p => p.name)) } }; } - private object PlayerListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerListV2(RestRequestArgs args) { var playerList = new ArrayList(); foreach (TSPlayer tsPlayer in TShock.Players.Where(p => null != p)) { - var p = PlayerFilter(tsPlayer, parameters); + var p = PlayerFilter(tsPlayer, args.Parameters); if (null != p) playerList.Add(p); } return new RestObject() { { "players", playerList } }; } - private object PlayerReadV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerReadV2(RestRequestArgs args) { - var ret = PlayerFind(parameters); + var ret = PlayerFind(args.Parameters); if (ret is RestObject) return ret; @@ -602,39 +602,39 @@ namespace TShockAPI }; } - private object PlayerKickV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerKickV2(RestRequestArgs args) { - var ret = PlayerFind(parameters); + var ret = PlayerFind(args.Parameters); if (ret is RestObject) return ret; TSPlayer player = (TSPlayer)ret; - TShock.Utils.ForceKick(player, null == parameters["reason"] ? "Kicked via web" : parameters["reason"], false, true); + TShock.Utils.ForceKick(player, null == args.Parameters["reason"] ? "Kicked via web" : args.Parameters["reason"], false, true); return RestResponse("Player " + player.Name + " was kicked"); } - private object PlayerBanV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerBanV2(RestRequestArgs args) { - var ret = PlayerFind(parameters); + var ret = PlayerFind(args.Parameters); if (ret is RestObject) return ret; TSPlayer player = (TSPlayer)ret; - var reason = null == parameters["reason"] ? "Banned via web" : parameters["reason"]; + var reason = null == args.Parameters["reason"] ? "Banned via web" : args.Parameters["reason"]; TShock.Bans.AddBan(player.IP, player.Name, "", reason); TShock.Utils.ForceKick(player, reason, false, true); return RestResponse("Player " + player.Name + " was banned"); } - private object PlayerKill(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object PlayerKill(RestRequestArgs args) { - var ret = PlayerFind(parameters); + var ret = PlayerFind(args.Parameters); if (ret is RestObject) return ret; TSPlayer player = (TSPlayer)ret; player.DamagePlayer(999999); - var from = string.IsNullOrWhiteSpace(parameters["from"]) ? "Server Admin" : parameters["from"]; + var from = string.IsNullOrWhiteSpace(args.Parameters["from"]) ? "Server Admin" : args.Parameters["from"]; player.SendMessage(string.Format("{0} just killed you!", from)); return RestResponse("Player " + player.Name + " was killed"); } @@ -643,7 +643,7 @@ namespace TShockAPI #region RestGroupMethods - private object GroupList(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object GroupList(RestRequestArgs args) { var groups = new ArrayList(); foreach (Group group in TShock.Groups) @@ -653,9 +653,9 @@ namespace TShockAPI return new RestObject() { { "groups", groups } }; } - private object GroupInfo(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object GroupInfo(RestRequestArgs args) { - var ret = GroupFind(parameters); + var ret = GroupFind(args.Parameters); if (ret is RestObject) return ret; @@ -670,9 +670,9 @@ namespace TShockAPI }; } - private object GroupDestroy(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object GroupDestroy(RestRequestArgs args) { - var ret = GroupFind(parameters); + var ret = GroupFind(args.Parameters); if (ret is RestObject) return ret; @@ -689,14 +689,14 @@ namespace TShockAPI return RestResponse("Group '" + group.Name + "' deleted successfully"); } - private object GroupCreate(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object GroupCreate(RestRequestArgs args) { - var name = parameters["group"]; + var name = args.Parameters["group"]; if (string.IsNullOrWhiteSpace(name)) return RestMissingParam("group"); try { - TShock.Groups.AddGroup(name, parameters["parent"], parameters["permissions"], parameters["chatcolor"], true); + TShock.Groups.AddGroup(name, args.Parameters["parent"], args.Parameters["permissions"], args.Parameters["chatcolor"], true); } catch (Exception e) { @@ -706,16 +706,16 @@ namespace TShockAPI return RestResponse("Group '" + name + "' created successfully"); } - private object GroupUpdate(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object GroupUpdate(RestRequestArgs args) { - var ret = GroupFind(parameters); + var ret = GroupFind(args.Parameters); if (ret is RestObject) return ret; Group group = (Group)ret; - var parent = (null == parameters["parent"]) ? group.ParentName : parameters["parent"]; - var chatcolor = (null == parameters["chatcolor"]) ? string.Format("{0}.{1}.{2}", group.R, group.G, group.B) : parameters["chatcolor"]; - var permissions = (null == parameters["permissions"]) ? group.Permissions : parameters["permissions"]; + var parent = (null == args.Parameters["parent"]) ? group.ParentName : args.Parameters["parent"]; + var chatcolor = (null == args.Parameters["chatcolor"]) ? string.Format("{0}.{1}.{2}", group.R, group.G, group.B) : args.Parameters["chatcolor"]; + var permissions = (null == args.Parameters["permissions"]) ? group.Permissions : args.Parameters["permissions"]; try { TShock.Groups.UpdateGroup(group.Name, parent, permissions, chatcolor, group.Suffix, group.Prefix); diff --git a/TShockAPI/Rest/SecureRest.cs b/TShockAPI/Rest/SecureRest.cs index 4771f28a..9845bc08 100644 --- a/TShockAPI/Rest/SecureRest.cs +++ b/TShockAPI/Rest/SecureRest.cs @@ -84,9 +84,9 @@ namespace Rests } } - private object DestroyToken(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object DestroyToken(RestRequestArgs args) { - var token = verbs["token"]; + var token = args.Verbs["token"]; try { Tokens.Remove(token); @@ -100,7 +100,7 @@ namespace Rests { Response = "Requested token was successfully destroyed." }; } - private object DestroyAllTokens(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + private object DestroyAllTokens(RestRequestArgs args) { Tokens.Clear(); @@ -108,18 +108,18 @@ namespace Rests { Response = "All tokens were successfully destroyed." }; } - private object NewTokenV2(RestVerbs verbs, IParameterCollection parameters) + private object NewTokenV2(RestRequestArgs args) { - var user = parameters["username"]; - var pass = verbs["password"]; + var user = args.Parameters["username"]; + var pass = args.Verbs["password"]; return this.NewTokenInternal(user, pass); } - private object NewToken(RestVerbs verbs, IParameterCollection parameters) + private object NewToken(RestRequestArgs args) { - var user = verbs["username"]; - var pass = verbs["password"]; + var user = args.Verbs["username"]; + var pass = args.Verbs["password"]; RestObject response = this.NewTokenInternal(user, pass); response["deprecated"] = "This endpoint is depracted and will be removed in the future."; @@ -157,10 +157,10 @@ namespace Rests return response; } - protected override object ExecuteCommand(RestCommand cmd, RestVerbs verbs, IParameterCollection parms) + protected override object ExecuteCommand(RestCommand cmd, RestVerbs verbs, IParameterCollection parms, IRequest request) { if (!cmd.RequiresToken) - return base.ExecuteCommand(cmd, verbs, parms); + return base.ExecuteCommand(cmd, verbs, parms, request); var token = parms["token"]; if (token == null) @@ -191,7 +191,7 @@ namespace Rests } } - object result = secureCmd.Execute(verbs, parms, tokenData); + object result = secureCmd.Execute(verbs, parms, tokenData, request); if (cmd.DoLog && TShock.Config.LogRest) TShock.Utils.SendLogs(string.Format( "\"{0}\" requested REST endpoint: {1}", tokenData.Username, this.BuildRequestUri(cmd, verbs, parms, false)),