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)