diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs index 304de298..82c67164 100644 --- a/TShockAPI/ConfigFile.cs +++ b/TShockAPI/ConfigFile.cs @@ -129,7 +129,7 @@ namespace TShockAPI [Description("This will announce a player's location on join")] public bool EnableGeoIP; - [Description("This will turn on a token requirement for the /status API endpoint.")] public bool + [Description("This will turn on token requirement for the public REST API endpoints.")] public bool EnableTokenEndpointAuthentication; [Description("Deprecated. Use ServerName instead.")] public string ServerNickname = "TShock Server"; diff --git a/TShockAPI/Rest/Rest.cs b/TShockAPI/Rest/Rest.cs index 2bed82d9..19b1bf0e 100644 --- a/TShockAPI/Rest/Rest.cs +++ b/TShockAPI/Rest/Rest.cs @@ -39,7 +39,7 @@ namespace Rests public delegate object RestCommandD(RestVerbs verbs, IParameterCollection parameters); /// - /// Secure Rest command delegate including a token. + /// Secure Rest command delegate including token data. /// /// Parameters in the url /// {x} in urltemplate diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index df2a810d..316d0cbb 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -17,7 +17,8 @@ along with this program. If not, see . */ using System; using System.Collections; -using System.Collections.Generic; +using System.Collections.Generic; +using System.IO; using System.Linq; using HttpServer; using Rests; @@ -37,25 +38,29 @@ namespace TShockAPI public void RegisterRestfulCommands() { - // Server Commands - Rest.Register(new SecureRestCommand("/v2/server/broadcast", ServerBroadcast)); - Rest.Register(new SecureRestCommand("/v2/server/off", ServerOff, Permissions.restmaintenance)); - Rest.Register(new SecureRestCommand("/v2/server/restart", ServerRestart, Permissions.restmaintenance)); - Rest.Register(new SecureRestCommand("/v2/server/reload", ServerReload, Permissions.restcfg)); - Rest.Register(new SecureRestCommand("/v2/server/rawcmd", ServerCommand, Permissions.restrawcommand)); - Rest.Register(new SecureRestCommand("/v3/server/rawcmd", ServerCommandV3, Permissions.restrawcommand)); - Rest.Register(new SecureRestCommand("/tokentest", ServerTokenTest)); - + // Server Commands if (TShock.Config.EnableTokenEndpointAuthentication) { Rest.Register(new SecureRestCommand("/v2/server/status", ServerStatusV2)); Rest.Register(new SecureRestCommand("/status", ServerStatus)); + Rest.Register(new SecureRestCommand("/v2/server/motd", ServerMotd)); + Rest.Register(new SecureRestCommand("/v2/server/rules", ServerRules)); } 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.ServerStatusV2(a, b, SecureRest.TokenData.None))); - } + Rest.Register(new RestCommand("/v2/server/motd", (a, b) => this.ServerMotd(a, b, SecureRest.TokenData.None))); + Rest.Register(new RestCommand("/v2/server/rules", (a, b) => this.ServerRules(a, b, SecureRest.TokenData.None))); + } + + Rest.Register(new SecureRestCommand("/v2/server/broadcast", ServerBroadcast)); + Rest.Register(new SecureRestCommand("/v2/server/reload", ServerReload, Permissions.restcfg)); + Rest.Register(new SecureRestCommand("/v2/server/off", ServerOff, Permissions.restmaintenance)); + Rest.Register(new SecureRestCommand("/v2/server/restart", ServerRestart, Permissions.restmaintenance)); + Rest.Register(new SecureRestCommand("/v2/server/rawcmd", ServerCommand, Permissions.restrawcommand)); + Rest.Register(new SecureRestCommand("/v3/server/rawcmd", ServerCommandV3, Permissions.restrawcommand)); + Rest.Register(new SecureRestCommand("/tokentest", ServerTokenTest)); // User Commands Rest.Register(new SecureRestCommand("/v2/users/activelist", UserActiveListV2, Permissions.restviewusers)); @@ -116,9 +121,8 @@ namespace TShockAPI TSRestPlayer tr = new TSRestPlayer(tokenData.Username, tokenData.UserGroup); Commands.HandleCommand(tr, parameters["cmd"]); - return new Dictionary + return new RestObject() { - {"status", "200"}, {"response", tr.GetCommandOutput()} }; } @@ -161,6 +165,30 @@ namespace TShockAPI return RestMissingParam("msg"); TShock.Utils.Broadcast(msg); return RestResponse("The message was broadcasted successfully"); + } + + private object ServerMotd(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) + { + string motdFilePath = Path.Combine(TShock.SavePath, "motd.txt"); + if (!File.Exists(motdFilePath)) + return this.RestError("The motd.txt was not found.", "500"); + + return new RestObject() + { + {"motd", File.ReadAllLines(motdFilePath)} + }; + } + + 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 ServerStatus(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData)