public RestRequestArgs(RestVerbs verbs, IParameterCollection param, IRequest request, SecureRest.TokenData tokenData, IHttpContext context) { Verbs = verbs; Parameters = param; Request = request; TokenData = tokenData; Context = context; }
private object GetInventory(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { List<TSPlayer> players = TShock.Utils.FindPlayer(verbs["user"]); if (players.Count > 1) { return new RestObject("400") {Response = "Found more than one match."}; } else if (players.Count < 1) { return new RestObject("400") {Response = "Found no matches."}; } string inventory = players[0].PlayerData.inventory.ToString(); return new RestObject{{"inventory", inventory}}; }
private object WorldRead(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { return new RestObject() { {"name", Main.worldName}, {"size", Main.maxTilesX + "*" + Main.maxTilesY}, {"time", Main.time}, {"daytime", Main.dayTime}, {"bloodmoon", Main.bloodMoon}, {"invasionsize", Main.invasionSize} }; }
private object WorldChangeSaveSettings(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { bool autoSave; if (!bool.TryParse(verbs["bool"], out autoSave)) return RestInvalidParam("state"); TShock.Config.AutoSave = autoSave; return RestResponse("AutoSave has been set to " + autoSave); }
private object WorldBloodmoon(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { bool bloodmoon; if (!bool.TryParse(verbs["bool"], out bloodmoon)) return RestInvalidParam("bloodmoon"); Main.bloodMoon = bloodmoon; return RestResponse("Blood Moon has been set to " + bloodmoon); }
private object UserListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { return new RestObject() { { "users", TShock.Users.GetUsers().Select(p => new Dictionary<string,object>(){ {"name", p.Name}, {"id", p.ID}, {"group", p.Group}, }) } }; }
private object UserDestroyV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = UserFind(parameters); if (ret is RestObject) return ret; try { TShock.Users.RemoveUser((User)ret); } catch (Exception e) { return RestError(e.Message); } return RestResponse("User deleted successfully"); }
private object UserActiveListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { return new RestObject() { { "activeusers", string.Join("\t", TShock.Players.Where(p => null != p && null != p.UserAccountName && p.Active).Select(p => p.UserAccountName)) } }; }
private object PlayerReadV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = PlayerFind(parameters); if (ret is RestObject) return ret; TSPlayer player = (TSPlayer)ret; var activeItems = player.TPlayer.inventory.Where(p => p.active).ToList(); return new RestObject() { {"nickname", player.Name}, {"username", null == player.UserAccountName ? "" : player.UserAccountName}, {"ip", player.IP}, {"group", player.Group.Name}, {"position", player.TileX + "," + player.TileY}, {"inventory", string.Join(", ", activeItems.Select(p => (p.name + ":" + p.stack)))}, {"buffs", string.Join(", ", player.TPlayer.buffType)} }; }
private object PlayerListV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var playerList = new ArrayList(); foreach (TSPlayer tsPlayer in TShock.Players.Where(p => null != p)) { var p = PlayerFilter(tsPlayer, parameters); if (null != p) playerList.Add(p); } return new RestObject() { { "players", playerList } }; }
private object PlayerList(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var activeplayers = Main.player.Where(p => null != p && p.active).ToList(); return new RestObject() { { "players", string.Join(", ", activeplayers.Select(p => p.name)) } }; }
private object PlayerKill(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = PlayerFind(parameters); if (ret is RestObject) return ret; TSPlayer player = (TSPlayer)ret; player.DamagePlayer(999999); var from = string.IsNullOrWhiteSpace(parameters["from"]) ? "Server Admin" : parameters["from"]; player.SendMessage(string.Format("{0} just killed you!", from)); return RestResponse("Player " + player.Name + " was killed"); }
private object PlayerKickV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = PlayerFind(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); return RestResponse("Player " + player.Name + " was kicked"); }
private object PlayerBanV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = PlayerFind(parameters); if (ret is RestObject) return ret; TSPlayer player = (TSPlayer)ret; var reason = null == parameters["reason"] ? "Banned via web" : 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 GroupUpdate(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = GroupFind(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"]; try { TShock.Groups.UpdateGroup(group.Name, parent, permissions, chatcolor, group.Suffix, group.Prefix); } catch (Exception e) { return RestError(e.Message); } return RestResponse("Group '" + group.Name + "' updated successfully"); }
private object ServerStatusV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = new RestObject() { {"name", TShock.Config.ServerName}, {"port", TShock.Config.ServerPort}, {"playercount", Main.player.Where(p => null != p && p.active).Count()}, {"maxplayers", TShock.Config.MaxSlots}, {"world", Main.worldName}, {"uptime", (DateTime.Now - System.Diagnostics.Process.GetCurrentProcess().StartTime).ToString(@"d'.'hh':'mm':'ss")}, {"serverpassword", !string.IsNullOrEmpty(TShock.Config.ServerPassword)} }; if (GetBool(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))); if (null != p) players.Add(p); } ret.Add("players", players); } if (GetBool(parameters["rules"], false)) { var rules = new Dictionary<string,object>(); rules.Add("AutoSave", TShock.Config.AutoSave); rules.Add("DisableBuild", TShock.Config.DisableBuild); rules.Add("DisableClownBombs", TShock.Config.DisableClownBombs); rules.Add("DisableDungeonGuardian", TShock.Config.DisableDungeonGuardian); rules.Add("DisableInvisPvP", TShock.Config.DisableInvisPvP); rules.Add("DisableSnowBalls", TShock.Config.DisableSnowBalls); rules.Add("DisableTombstones", TShock.Config.DisableTombstones); rules.Add("EnableWhitelist", TShock.Config.EnableWhitelist); rules.Add("HardcoreOnly", TShock.Config.HardcoreOnly); rules.Add("PvPMode", TShock.Config.PvPMode); rules.Add("SpawnProtection", TShock.Config.SpawnProtection); rules.Add("SpawnProtectionRadius", TShock.Config.SpawnProtectionRadius); rules.Add("ServerSideInventory", TShock.Config.ServerSideCharacter); ret.Add("rules", rules); } return ret; }
private object ServerTokenTest(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { return new RestObject() { {"response", "Token is valid and was passed through correctly."}, {"associateduser", tokenData.Username} }; }
private object PlayerUnMute(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { return PlayerSetMute(parameters, false); }
private object UserCreateV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var username = parameters["user"]; if (string.IsNullOrWhiteSpace(username)) return RestMissingParam("user"); var group = parameters["group"]; if (string.IsNullOrWhiteSpace(group)) group = TShock.Config.DefaultRegistrationGroupName; var password = parameters["password"]; if (string.IsNullOrWhiteSpace(password)) return RestMissingParam("password"); // NOTE: ip can be blank User user = new User(username, password, "", group, "", "", ""); try { TShock.Users.AddUser(user); } catch (Exception e) { return RestError(e.Message); } return RestResponse("User was successfully created"); }
private object ServerBroadcast(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var msg = parameters["msg"]; if (string.IsNullOrWhiteSpace(msg)) return RestMissingParam("msg"); TShock.Utils.Broadcast(msg); return RestResponse("The message was broadcasted successfully"); }
private object UserInfoV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = UserFind(parameters); if (ret is RestObject) return ret; User user = (User)ret; return new RestObject() { { "group", user.Group }, { "id", user.ID.ToString() }, { "name", user.Name } }; }
private object ServerCommandV3(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { if (string.IsNullOrWhiteSpace(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); else restPlayerGroup = new SuperAdminGroup(); TSRestPlayer tr = new TSRestPlayer(tokenData.Username, restPlayerGroup); Commands.HandleCommand(tr, parameters["cmd"]); return new RestObject() { {"response", tr.GetCommandOutput()} }; }
private object UserUpdateV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var ret = UserFind(parameters); if (ret is RestObject) return ret; var password = parameters["password"]; var group = parameters["group"]; if (string.IsNullOrWhiteSpace(group) && string.IsNullOrWhiteSpace(password)) return RestMissingParam("group", "password"); User user = (User)ret; var response = new RestObject(); if (!string.IsNullOrWhiteSpace(password)) { try { TShock.Users.SetUserPassword(user, password); response.Add("password-response", "Password updated successfully"); } catch (Exception e) { return RestError("Failed to update user password (" + e.Message + ")"); } } if (!string.IsNullOrWhiteSpace(group)) { try { TShock.Users.SetUserGroup(user, group); response.Add("group-response", "Group updated successfully"); } catch (Exception e) { return RestError("Failed to update user group (" + e.Message + ")"); } } return response; }
private object ServerReload(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { TShock.Utils.Reload(new TSRestPlayer(tokenData.Username, TShock.Groups.GetGroupByName(tokenData.UserGroupName))); return RestResponse("Configuration, permissions, and regions reload complete. Some changes may require a server restart."); }
private object WorldButcher(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { bool killFriendly; if (!bool.TryParse(parameters["killfriendly"], out killFriendly)) return RestInvalidParam("killfriendly"); if (killFriendly) killFriendly = !killFriendly; int killcount = 0; for (int i = 0; i < Main.npc.Length; i++) { if (Main.npc[i].active && Main.npc[i].type != 0 && !Main.npc[i].townNPC && (!Main.npc[i].friendly || killFriendly)) { TSPlayer.Server.StrikeNPC(i, 99999, 90f, 1); killcount++; } } return RestResponse(killcount + " NPCs have been killed"); }
private object ServerRestart(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { if (!GetBool(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); return RestResponse("The server is shutting down and will attempt to restart"); }
private object WorldMeteor(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { if (null == WorldGen.genRand) WorldGen.genRand = new Random(); WorldGen.dropMeteor(); return RestResponse("Meteor has been spawned"); }
private object ServerRules(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { string rulesFilePath = Path.Combine(TShock.SavePath, "rules.txt"); if (!File.Exists(rulesFilePath)) return this.RestError("The rules.txt was not found.", "500"); return new RestObject() { {"rules", File.ReadAllLines(rulesFilePath)} }; }
private object WorldSave(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { SaveManager.Instance.SaveWorld(); return RestResponse("World saved"); }
private object ServerStatus(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) { var activeplayers = Main.player.Where(p => null != p && p.active).ToList(); return new RestObject() { {"name", TShock.Config.ServerName}, {"port", Convert.ToString(Netplay.serverPort)}, {"playercount", Convert.ToString(activeplayers.Count())}, {"players", string.Join(", ", activeplayers.Select(p => p.name))}, }; }