From b06ec57819db8e3d5a32d0d705622143f051e0a5 Mon Sep 17 00:00:00 2001 From: high Date: Thu, 18 Aug 2011 21:10:39 -0400 Subject: [PATCH] Permission magic strings removed --- TShockAPI/Commands.cs | 122 +++++++++++++-------------- TShockAPI/DB/RegionManager.cs | 2 +- TShockAPI/GetDataHandlers.cs | 30 +++---- TShockAPI/Permissions.cs | 153 ++++++++++++++++++++++++++++++++++ TShockAPI/TShock.cs | 8 +- TShockAPI/TShockAPI.csproj | 3 +- TShockAPI/Tools.cs | 12 +-- TShockAPI/UpdateManager.cs | 2 +- 8 files changed, 243 insertions(+), 89 deletions(-) create mode 100644 TShockAPI/Permissions.cs diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 24652af5..816f0acb 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -110,75 +110,75 @@ namespace TShockAPI public static void InitCommands() { //When adding new perm in here, add new perm to CommandList in DBEditor - ChatCommands.Add(new Command("kick", Kick, "kick")); - ChatCommands.Add(new Command("ban", Ban, "ban")); - ChatCommands.Add(new Command("ban", BanIP, "banip")); - ChatCommands.Add(new Command("unban", UnBan, "unban")); - ChatCommands.Add(new Command("unban", UnBanIP, "unbanip")); - ChatCommands.Add(new Command("maintenance", ClearBans, "clearbans")); - ChatCommands.Add(new Command("whitelist", Whitelist, "whitelist")); - ChatCommands.Add(new Command("maintenance", Off, "off")); - ChatCommands.Add(new Command("maintenance", OffNoSave, "off-nosave")); - ChatCommands.Add(new Command("maintenance", CheckUpdates, "checkupdates")); - ChatCommands.Add(new Command("causeevents", DropMeteor, "dropmeteor")); - ChatCommands.Add(new Command("causeevents", Star, "star")); - ChatCommands.Add(new Command("causeevents", Bloodmoon, "bloodmoon")); - ChatCommands.Add(new Command("causeevents", Invade, "invade")); - ChatCommands.Add(new Command("spawnboss", Eater, "eater")); - ChatCommands.Add(new Command("spawnboss", Eye, "eye")); - ChatCommands.Add(new Command("spawnboss", King, "king")); - ChatCommands.Add(new Command("spawnboss", Skeletron, "skeletron")); - ChatCommands.Add(new Command("spawnboss", Hardcore, "hardcore")); - ChatCommands.Add(new Command("spawnmob", SpawnMob, "spawnmob", "sm")); - ChatCommands.Add(new Command("tp", Home, "home")); - ChatCommands.Add(new Command("tp", Spawn, "spawn")); - ChatCommands.Add(new Command("tp", TP, "tp")); - ChatCommands.Add(new Command("tphere", TPHere, "tphere")); - ChatCommands.Add(new Command("warp", UseWarp, "warp")); - ChatCommands.Add(new Command("managewarp", SetWarp, "setwarp")); - ChatCommands.Add(new Command("managewarp", DeleteWarp, "delwarp")); - ChatCommands.Add(new Command("managewarp", HideWarp, "hidewarp")); - ChatCommands.Add(new Command("managegroup", AddGroup, "addgroup")); - ChatCommands.Add(new Command("managegroup", DeleteGroup, "delgroup")); - ChatCommands.Add(new Command("managegroup", ModifyGroup, "modgroup")); - ChatCommands.Add(new Command("manageitem", AddItem, "additem")); - ChatCommands.Add(new Command("manageitem", DeleteItem, "delitem")); - ChatCommands.Add(new Command("cfg", SetSpawn, "setspawn")); - ChatCommands.Add(new Command("cfg", Reload, "reload")); - ChatCommands.Add(new Command("cfg", ShowConfiguration, "showconfig")); - ChatCommands.Add(new Command("cfg", ServerPassword, "serverpassword")); - ChatCommands.Add(new Command("cfg", Save, "save")); - ChatCommands.Add(new Command("cfg", MaxSpawns, "maxspawns")); - ChatCommands.Add(new Command("cfg", SpawnRate, "spawnrate")); - ChatCommands.Add(new Command("time", Time, "time")); - ChatCommands.Add(new Command("pvpfun", Slap, "slap")); - ChatCommands.Add(new Command("editspawn", ToggleAntiBuild, "antibuild")); - ChatCommands.Add(new Command("editspawn", ProtectSpawn, "protectspawn")); - ChatCommands.Add(new Command("manageregion", Region, "region")); - ChatCommands.Add(new Command("editspawn", DebugRegions, "debugreg")); + ChatCommands.Add(new Command( Permissions.kick, Kick, "kick")); + ChatCommands.Add(new Command(Permissions.ban, Ban, "ban")); + ChatCommands.Add(new Command(Permissions.ban, BanIP, "banip")); + ChatCommands.Add(new Command(Permissions.ban, UnBan, "unban")); + ChatCommands.Add(new Command(Permissions.ban, UnBanIP, "unbanip")); + ChatCommands.Add(new Command(Permissions.maintenance, ClearBans, "clearbans")); + ChatCommands.Add(new Command(Permissions.whitelist, Whitelist, "whitelist")); + ChatCommands.Add(new Command(Permissions.maintenance, Off, "off")); + ChatCommands.Add(new Command(Permissions.maintenance, OffNoSave, "off-nosave")); + ChatCommands.Add(new Command(Permissions.maintenance, CheckUpdates, "checkupdates")); + ChatCommands.Add(new Command(Permissions.causeevents, DropMeteor, "dropmeteor")); + ChatCommands.Add(new Command(Permissions.causeevents, Star, "star")); + ChatCommands.Add(new Command(Permissions.causeevents, Bloodmoon, "bloodmoon")); + ChatCommands.Add(new Command(Permissions.causeevents, Invade, "invade")); + ChatCommands.Add(new Command(Permissions.spawnboss, Eater, "eater")); + ChatCommands.Add(new Command(Permissions.spawnboss, Eye, "eye")); + ChatCommands.Add(new Command(Permissions.spawnboss, King, "king")); + ChatCommands.Add(new Command(Permissions.spawnboss, Skeletron, "skeletron")); + ChatCommands.Add(new Command(Permissions.spawnboss, Hardcore, "hardcore")); + ChatCommands.Add(new Command(Permissions.spawnmob, SpawnMob, "spawnmob", "sm")); + ChatCommands.Add(new Command(Permissions.tp, Home, "home")); + ChatCommands.Add(new Command(Permissions.tp, Spawn, "spawn")); + ChatCommands.Add(new Command(Permissions.tp, TP, "tp")); + ChatCommands.Add(new Command(Permissions.tphere, TPHere, "tphere")); + ChatCommands.Add(new Command(Permissions.warp, UseWarp, "warp")); + ChatCommands.Add(new Command(Permissions.managewarp, SetWarp, "setwarp")); + ChatCommands.Add(new Command(Permissions.managewarp, DeleteWarp, "delwarp")); + ChatCommands.Add(new Command(Permissions.managewarp, HideWarp, "hidewarp")); + ChatCommands.Add(new Command(Permissions.managewarp, AddGroup, "addgroup")); + ChatCommands.Add(new Command(Permissions.managewarp, DeleteGroup, "delgroup")); + ChatCommands.Add(new Command(Permissions.managewarp, ModifyGroup, "modgroup")); + ChatCommands.Add(new Command(Permissions.manageitem, AddItem, "additem")); + ChatCommands.Add(new Command(Permissions.manageitem, DeleteItem, "delitem")); + ChatCommands.Add(new Command(Permissions.cfg, SetSpawn, "setspawn")); + ChatCommands.Add(new Command(Permissions.cfg, Reload, "reload")); + ChatCommands.Add(new Command(Permissions.cfg, ShowConfiguration, "showconfig")); + ChatCommands.Add(new Command(Permissions.cfg, ServerPassword, "serverpassword")); + ChatCommands.Add(new Command(Permissions.cfg, Save, "save")); + ChatCommands.Add(new Command(Permissions.cfg, MaxSpawns, "maxspawns")); + ChatCommands.Add(new Command(Permissions.cfg, SpawnRate, "spawnrate")); + ChatCommands.Add(new Command(Permissions.time, Time, "time")); + ChatCommands.Add(new Command(Permissions.pvpfun, Slap, "slap")); + ChatCommands.Add(new Command(Permissions.editspawn, ToggleAntiBuild, "antibuild")); + ChatCommands.Add(new Command(Permissions.editspawn, ProtectSpawn, "protectspawn")); + ChatCommands.Add(new Command(Permissions.manageregion, Region, "region")); + ChatCommands.Add(new Command(Permissions.editspawn, DebugRegions, "debugreg")); ChatCommands.Add(new Command(Help, "help")); ChatCommands.Add(new Command(Playing, "playing", "online", "who")); ChatCommands.Add(new Command(AuthToken, "auth")); ChatCommands.Add(new Command(ThirdPerson, "me")); ChatCommands.Add(new Command(PartyChat, "p")); ChatCommands.Add(new Command(Rules, "rules")); - ChatCommands.Add(new Command("logs", DisplayLogs, "displaylogs")); + ChatCommands.Add(new Command(Permissions.logs, DisplayLogs, "displaylogs")); ChatCommands.Add(new Command(PasswordUser, "password") { DoLog = false }); ChatCommands.Add(new Command(RegisterUser, "register") { DoLog = false }); - ChatCommands.Add(new Command("root-only", ManageUsers, "user") { DoLog = false }); - ChatCommands.Add(new Command("root-only", GrabUserUserInfo, "userinfo", "ui")); - ChatCommands.Add(new Command("root-only", AuthVerify, "auth-verify")); + ChatCommands.Add(new Command(Permissions.rootonly, ManageUsers, "user") { DoLog = false }); + ChatCommands.Add(new Command(Permissions.rootonly, GrabUserUserInfo, "userinfo", "ui")); + ChatCommands.Add(new Command(Permissions.rootonly, AuthVerify, "auth-verify")); ChatCommands.Add(new Command(AttemptLogin, "login") { DoLog = false }); - ChatCommands.Add(new Command("cfg", Broadcast, "broadcast", "bc")); - ChatCommands.Add(new Command("whisper", Whisper, "whisper", "w", "tell")); - ChatCommands.Add(new Command("whisper", Reply, "reply", "r")); - ChatCommands.Add(new Command("annoy", Annoy, "annoy")); - ChatCommands.Add(new Command("cfg", ConvertWaR, "convert")); - ChatCommands.Add(new Command("kill", Kill, "kill")); - ChatCommands.Add(new Command("butcher", Butcher, "butcher")); - ChatCommands.Add(new Command("item", Item, "item", "i")); - ChatCommands.Add(new Command("item", Give, "give")); - ChatCommands.Add(new Command("heal", Heal, "heal")); + ChatCommands.Add(new Command(Permissions.cfg, Broadcast, "broadcast", "bc")); + ChatCommands.Add(new Command(Permissions.whisper, Whisper, "whisper", "w", "tell")); + ChatCommands.Add(new Command(Permissions.whisper, Reply, "reply", "r")); + ChatCommands.Add(new Command(Permissions.annoy, Annoy, "annoy")); + ChatCommands.Add(new Command(Permissions.cfg, ConvertWaR, "convert")); + ChatCommands.Add(new Command(Permissions.kill, Kill, "kill")); + ChatCommands.Add(new Command(Permissions.butcher, Butcher, "butcher")); + ChatCommands.Add(new Command(Permissions.item, Item, "item", "i")); + ChatCommands.Add(new Command(Permissions.item, Give, "give")); + ChatCommands.Add(new Command(Permissions.heal, Heal, "heal")); } public static bool HandleCommand(TSPlayer player, string text) @@ -1627,7 +1627,7 @@ namespace TShockAPI { int.TryParse(args.Parameters[1], out damage); } - if (!args.Player.Group.HasPermission("kill")) + if (!args.Player.Group.HasPermission(Permissions.kill)) { damage = Tools.Clamp(damage, 15, 0); } diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index 20f092aa..07a159b4 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -316,7 +316,7 @@ namespace TShockAPI.DB public bool CanBuild(int x, int y, TSPlayer ply) { - if (!ply.Group.HasPermission("canbuild")) + if (!ply.Group.HasPermission(Permissions.canbuild)) { return false; } diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 33dcab37..081de8f7 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -150,7 +150,7 @@ namespace TShockAPI { string itemname = Encoding.ASCII.GetString(args.Data.ReadBytes(namelength)); - if (!args.Player.Group.HasPermission("usebanneditem") && TShock.Itembans.ItemIsBanned(itemname)) + if (!args.Player.Group.HasPermission(Permissions.usebanneditem) && TShock.Itembans.ItemIsBanned(itemname)) { args.Player.Disconnect("Using banned item: " + itemname + ", remove it and rejoin"); } @@ -299,7 +299,7 @@ namespace TShockAPI return true; } - if (!args.Player.Group.HasPermission("canbuild")) + if (!args.Player.Group.HasPermission(Permissions.canbuild)) { if (!args.Player.HasBeenSpammedWithBuildMessage) { @@ -330,7 +330,7 @@ namespace TShockAPI return Tools.HandleGriefer(args.Player, TShock.Config.RangeCheckBanReason); } } - if (tiletype == 48 && !args.Player.Group.HasPermission("canspike")) + if (tiletype == 48 && !args.Player.Group.HasPermission(Permissions.canspike)) { args.Player.SendMessage("You do not have permission to place spikes.", Color.Red); Tools.SendLogs(string.Format("{0} tried to place spikes", args.Player.Name), Color.Red); @@ -338,7 +338,7 @@ namespace TShockAPI return true; } } - if (!args.Player.Group.HasPermission("editspawn") && !TShock.Regions.CanBuild(x, y, args.Player) && TShock.Regions.InArea(x, y)) + if (!args.Player.Group.HasPermission(Permissions.editspawn) && !TShock.Regions.CanBuild(x, y, args.Player) && TShock.Regions.InArea(x, y)) { if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000) { @@ -350,7 +350,7 @@ namespace TShockAPI } if (TShock.Config.DisableBuild) { - if (!args.Player.Group.HasPermission("editspawn")) + if (!args.Player.Group.HasPermission(Permissions.editspawn)) { if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000) { @@ -363,7 +363,7 @@ namespace TShockAPI } if (TShock.Config.SpawnProtection) { - if (!args.Player.Group.HasPermission("editspawn")) + if (!args.Player.Group.HasPermission(Permissions.editspawn)) { var flag = TShock.CheckSpawn(x, y); if (flag) @@ -477,7 +477,7 @@ namespace TShockAPI if (type == 29 || type == 28 || type == 37) { Log.Debug(string.Format("Explosive(PlyXY:{0}_{1}, Type:{2})", args.Player.TileX, args.Player.TileY, type)); - if (TShock.Config.DisableExplosives && (!args.Player.Group.HasPermission("useexplosives") || !args.Player.Group.HasPermission("ignoregriefdetection"))) + if (TShock.Config.DisableExplosives && (!args.Player.Group.HasPermission(Permissions.useexplosives) || !args.Player.Group.HasPermission(Permissions.ignoregriefdetection))) { Main.projectile[ident].type = 0; args.Player.SendData(PacketTypes.ProjectileNew, "", ident); @@ -536,21 +536,21 @@ namespace TShockAPI } } - if (!args.Player.Group.HasPermission("canbuild")) + if (!args.Player.Group.HasPermission(Permissions.canbuild)) { args.Player.SendMessage("You do not have permission to build!", Color.Red); args.Player.SendTileSquare(x, y); return true; } - if (lava && !args.Player.Group.HasPermission("canlava")) + if (lava && !args.Player.Group.HasPermission(Permissions.canlava)) { args.Player.SendMessage("You do not have permission to use lava", Color.Red); Tools.SendLogs(string.Format("{0} tried using lava", args.Player.Name), Color.Red); args.Player.SendTileSquare(x, y); return true; } - if (!lava && !args.Player.Group.HasPermission("canwater")) + if (!lava && !args.Player.Group.HasPermission(Permissions.canwater)) { args.Player.SendMessage("You do not have permission to use water", Color.Red); Tools.SendLogs(string.Format("{0} tried using water", args.Player.Name), Color.Red); @@ -574,7 +574,7 @@ namespace TShockAPI if (TShock.Config.SpawnProtection) { - if (!args.Player.Group.HasPermission("editspawn")) + if (!args.Player.Group.HasPermission(Permissions.editspawn)) { var flag = TShock.CheckSpawn(x, y); if (flag) @@ -602,13 +602,13 @@ namespace TShockAPI Tools.ForceKick(args.Player, string.Format(TShock.Config.TileKillAbuseReason, Main.tile[tilex, tiley].type)); return true; } - if (!args.Player.Group.HasPermission("canbuild")) + if (!args.Player.Group.HasPermission(Permissions.canbuild)) { args.Player.SendMessage("You do not have permission to build!", Color.Red); args.Player.SendTileSquare(tilex, tiley); return true; } - if (!args.Player.Group.HasPermission("editspawn") && !TShock.Regions.CanBuild(tilex, tiley, args.Player) && TShock.Regions.InArea(tilex, tiley)) + if (!args.Player.Group.HasPermission(Permissions.editspawn) && !TShock.Regions.CanBuild(tilex, tiley, args.Player) && TShock.Regions.InArea(tilex, tiley)) { args.Player.SendMessage("Region protected from changes.", Color.Red); args.Player.SendTileSquare(tilex, tiley); @@ -616,7 +616,7 @@ namespace TShockAPI } if (TShock.Config.DisableBuild) { - if (!args.Player.Group.HasPermission("editspawn")) + if (!args.Player.Group.HasPermission(Permissions.editspawn)) { args.Player.SendMessage("World protected from changes.", Color.Red); args.Player.SendTileSquare(tilex, tiley); @@ -625,7 +625,7 @@ namespace TShockAPI } if (TShock.Config.SpawnProtection) { - if (!args.Player.Group.HasPermission("editspawn")) + if (!args.Player.Group.HasPermission(Permissions.editspawn)) { var flag = TShock.CheckSpawn(tilex, tiley); if (flag) diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs new file mode 100644 index 00000000..b1c592cc --- /dev/null +++ b/TShockAPI/Permissions.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; + +namespace TShockAPI +{ + public static class Permissions + { + //Permissions with blank descriptions basically means its described by the commands it gives access to. + + [Description("")] + public static readonly string causeevents; + + [Description("Required to be able to build (modify tiles and liquid)")] + public static readonly string canbuild; + + [Description("")] + public static readonly string kill; + + [Description("Allows you to use banned items")] + public static readonly string usebanneditem; + + [Description("Required to be able to place spikes")] + public static readonly string canspike; + + [Description("Required to be able to place/pickup water")] + public static readonly string canwater; + + [Description("Required to be able to place/pickup lava")] + public static readonly string canlava; + + [Description("Allows you to edit the spawn")] + public static readonly string editspawn; + + [Description("Prevents you from being kicked")] + public static readonly string immunetokick; + + [Description("Prevents you from being banned")] + public static readonly string immunetoban; + + [Description("Prevents you from being kicked/banned by TShocks grief detections")] + public static readonly string ignoregriefdetection; + + [Description("Prevents you from being kicked/banned by TShocks cheat detections")] + public static readonly string ignorecheatdetection; + + [Description("Allows you to use explosives even when they are disabled")] + public static readonly string useexplosives; + + [Description("Specific log messages are sent to users with this permission")] + public static readonly string logs; + + [Description("User gets the admin prefix/color in chat")] + public static readonly string adminchat; + + [Todo] + [Description("Not currently working")] + public static readonly string reservedslot; + + [Description("User is notified when an update is available")] + public static readonly string maintenance; + + [Description("User can kick others")] + public static readonly string kick; + + [Description("User can ban others")] + public static readonly string ban; + + [Description("User can modify the whitelist")] + public static readonly string whitelist; + + [Description("User can spawn bosses")] + public static readonly string spawnboss; + + [Description("User can spawn npcs")] + public static readonly string spawnmob; + + [Description("User can teleport")] + public static readonly string tp; + + [Description("User can teleport people to them")] + public static readonly string tphere; + + [Description("User can use warps")] + public static readonly string warp; + + [Description("User can manage warps")] + public static readonly string managewarp; + + [Description("User can manage item bans")] + public static readonly string manageitem; + + [Description("User can edit sevrer configurations")] + public static readonly string cfg; + + [Description("")] + public static readonly string time; + + [Description("")] + public static readonly string pvpfun; + + [Description("User can edit regions")] + public static readonly string manageregion; + + [Description("Meant for super admins only")] + public static readonly string rootonly; + + [Description("User can whisper to others")] + public static readonly string whisper; + + [Description("")] + public static readonly string annoy; + + [Description("User can kill all enemy npcs")] + public static readonly string butcher; + + [Description("User can spawn items")] + public static readonly string item; + + [Description("")] + public static readonly string heal; + + + + + static Permissions() + { + foreach (var field in typeof(Permissions).GetFields()) + { + field.SetValue(null, field.Name); + } + } + } + + [AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)] + public sealed class TodoAttribute : Attribute + { + public string Info { get; private set; } + + public TodoAttribute(string info) + { + Info = info; + + } + public TodoAttribute() + { + } + + } + +} diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index d246f98b..6693aaa9 100644 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -400,7 +400,7 @@ namespace TShockAPI player.Group = Users.GetGroupForIP(player.IP); } - if (Tools.ActivePlayers() + 1 > Config.MaxSlots && !player.Group.HasPermission("reservedslot")) + if (Tools.ActivePlayers() + 1 > Config.MaxSlots && !player.Group.HasPermission(Permissions.reservedslot)) { Tools.ForceKick(player, Config.ServerFullReason); handler.Handled = true; @@ -466,7 +466,7 @@ namespace TShockAPI return; } - if (tsplr.Group.HasPermission("adminchat") && !text.StartsWith("/") && Config.AdminChatEnabled) + if (tsplr.Group.HasPermission(Permissions.adminchat) && !text.StartsWith("/") && Config.AdminChatEnabled) { Tools.Broadcast(Config.AdminChatPrefix + "<" + tsplr.Name + "> " + text, tsplr.Group.R, tsplr.Group.G, @@ -579,7 +579,7 @@ namespace TShockAPI // Stop accepting updates from player as this player is going to be kicked/banned during OnUpdate (different thread so can produce race conditions) if ((Config.BanKillTileAbusers || Config.KickKillTileAbusers) && - player.TileThreshold >= Config.TileThreshold && !player.Group.HasPermission("ignoregriefdetection")) + player.TileThreshold >= Config.TileThreshold && !player.Group.HasPermission(Permissions.ignoregriefdetection)) { Log.Debug("Rejecting " + type + " from " + player.Name + " as this player is about to be kicked"); e.Handled = true; @@ -627,7 +627,7 @@ namespace TShockAPI "PvP is forced! Enable PvP else you can't deal damage to other people. (People can kill you)", Color.Red); } - if (player.Group.HasPermission("causeevents") && Config.InfiniteInvasion) + if (player.Group.HasPermission(Permissions.causeevents) && Config.InfiniteInvasion) { StartInvasion(); } diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index 9f680956..16c5480d 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -118,6 +118,7 @@ + @@ -181,7 +182,7 @@ - +