Changed Status/UserList to use linq and RestObject instead.

This commit is contained in:
high 2011-09-05 21:52:41 -04:00
parent ddd7329fbf
commit bedfc060e2
3 changed files with 38 additions and 63 deletions

View file

@ -6,7 +6,8 @@ using HttpServer;
using Rests; using Rests;
using Terraria; using Terraria;
namespace TShockAPI { namespace TShockAPI
{
public class RestManager public class RestManager
{ {
@ -18,19 +19,19 @@ namespace TShockAPI {
public void RegisterRestfulCommands() public void RegisterRestfulCommands()
{ {
Rest.Register(new RestCommand("/status", Status) {RequiesToken = false}); Rest.Register(new RestCommand("/status", Status) { RequiesToken = false });
Rest.Register(new RestCommand("/tokentest", TokenTest) { RequiesToken = true }); Rest.Register(new RestCommand("/tokentest", TokenTest) { RequiesToken = true });
Rest.Register(new RestCommand("/users/read/{user}/info", UserInfo) {RequiesToken = true}); Rest.Register(new RestCommand("/users/read/{user}/info", UserInfo) { RequiesToken = true });
Rest.Register(new RestCommand("/users/destroy/{user}", UserDestroy) {RequiesToken = true}); Rest.Register(new RestCommand("/users/destroy/{user}", UserDestroy) { RequiesToken = true });
Rest.Register(new RestCommand("/users/update/{user}", UserUpdate) {RequiesToken = true}); Rest.Register(new RestCommand("/users/update/{user}", UserUpdate) { RequiesToken = true });
Rest.Register(new RestCommand("/bans/create", BanCreate) { RequiesToken = true }); Rest.Register(new RestCommand("/bans/create", BanCreate) { RequiesToken = true });
Rest.Register(new RestCommand("/bans/read/{user}/info", BanInfo) { RequiesToken = true }); Rest.Register(new RestCommand("/bans/read/{user}/info", BanInfo) { RequiesToken = true });
Rest.Register(new RestCommand("/bans/destroy/{user}", BanDestroy) { RequiesToken = true }); Rest.Register(new RestCommand("/bans/destroy/{user}", BanDestroy) { RequiesToken = true });
Rest.Register(new RestCommand("/lists/players", UserList) {RequiesToken = true});
Rest.Register(new RestCommand("/lists/players", UserList) { RequiesToken = true });
Rest.Register(new RestCommand("/world/read", WorldRead) { RequiesToken = true }); Rest.Register(new RestCommand("/world/read", WorldRead) { RequiesToken = true });
Rest.Register(new RestCommand("/world/meteor", WorldMeteor) { RequiesToken = true }); Rest.Register(new RestCommand("/world/meteor", WorldMeteor) { RequiesToken = true });
@ -47,63 +48,33 @@ namespace TShockAPI {
object Status(RestVerbs verbs, IParameterCollection parameters) object Status(RestVerbs verbs, IParameterCollection parameters)
{ {
var returnBlock = new Dictionary<string, string>();
if (TShock.Config.EnableTokenEndpointAuthentication)
{
returnBlock.Add("status", "403");
returnBlock.Add("error", "Server settings require a token for this API call.");
return returnBlock;
}
string currentPlayers = "";
int playerCount = 0;
for (int i = 0; i < Main.player.Length; i++)
{
if (Main.player[i].active)
{
if (i == 0)
{
currentPlayers += Main.player[i].name;
}
else
{
currentPlayers += ", " + Main.player[i].name;
}
playerCount++;
}
}
returnBlock.Add("status", "200");
returnBlock.Add("name", TShock.Config.ServerNickname);
returnBlock.Add("port", Convert.ToString(TShock.Config.ServerPort));
returnBlock.Add("playercount", Convert.ToString(playerCount));
returnBlock.Add("players", currentPlayers);
return returnBlock; if (TShock.Config.EnableTokenEndpointAuthentication)
return new RestObject("403") { Error = "Server settings require a token for this API call." };
var activeplayers = Main.player.Where(p => p != null && p.active).ToList();
string currentPlayers = string.Join(", ", activeplayers.Select(p => p.name));
var ret = new RestObject("200");
ret["name"] = TShock.Config.ServerNickname;
ret["port"] = Convert.ToString(TShock.Config.ServerPort);
ret["playercount"] = Convert.ToString(activeplayers.Count());
ret["players"] = currentPlayers;
return ret;
} }
#endregion #endregion
#region RestUserMethods #region RestUserMethods
object UserList(RestVerbs verbs, IParameterCollection parameters) object UserList(RestVerbs verbs, IParameterCollection parameters)
{ {
string players = ""; var activeplayers = Main.player.Where(p => p != null && p.active).ToList();
for (int i = 0; i < Main.player.Length; i++ ) string currentPlayers = string.Join(", ", activeplayers.Select(p => p.name));
{ var ret = new RestObject("200");
if (Main.player[i].active) ret["players"] = currentPlayers;
{ return ret;
if (i == 0)
{
players += Main.player[i].name;
} else
{
players += ", " + Main.player[i].name;
}
}
}
var returnBlock = new Dictionary<string, string>();
returnBlock.Add("status", "200");
returnBlock.Add("players", players);
return returnBlock;
} }
object UserUpdate(RestVerbs verbs, IParameterCollection parameters) object UserUpdate(RestVerbs verbs, IParameterCollection parameters)
@ -154,7 +125,8 @@ namespace TShockAPI {
try try
{ {
TShock.Users.RemoveUser(user); TShock.Users.RemoveUser(user);
} catch (Exception) }
catch (Exception)
{ {
returnBlock.Add("status", "400"); returnBlock.Add("status", "400");
returnBlock.Add("error", "The specified user was unable to be removed."); returnBlock.Add("error", "The specified user was unable to be removed.");
@ -170,8 +142,7 @@ namespace TShockAPI {
var user = TShock.Users.GetUserByName(verbs["user"]); var user = TShock.Users.GetUserByName(verbs["user"]);
if (user == null) if (user == null)
{ {
return new Dictionary<string, string> return new Dictionary<string, string> { { "status", "400" }, { "error", "The specified user account does not exist." } };
{{"status", "400"}, {"error", "The specified user account does not exist."}};
} }
var returnBlock = new Dictionary<string, string>(); var returnBlock = new Dictionary<string, string>();
@ -226,7 +197,7 @@ namespace TShockAPI {
} }
returnBlock.Add("status", "200"); returnBlock.Add("status", "200");
returnBlock.Add("response", "Ban created successfully."); returnBlock.Add("response", "Ban created successfully.");
return returnBlock; return returnBlock;
} }
object BanDestroy(RestVerbs verbs, IParameterCollection parameters) object BanDestroy(RestVerbs verbs, IParameterCollection parameters)
@ -253,7 +224,7 @@ namespace TShockAPI {
{ {
return new Dictionary<string, string> { { "status", "400" }, { "error", "The specified ban does not exist." } }; return new Dictionary<string, string> { { "status", "400" }, { "error", "The specified ban does not exist." } };
} }
try try
{ {
TShock.Bans.RemoveBan(ban.IP); TShock.Bans.RemoveBan(ban.IP);
@ -354,8 +325,8 @@ namespace TShockAPI {
public void RegisterExamples() public void RegisterExamples()
{ {
Rest.Register(new RestCommand("/HelloWorld/name/{username}", UserTest) {RequiesToken = false}); Rest.Register(new RestCommand("/HelloWorld/name/{username}", UserTest) { RequiesToken = false });
Rest.Register(new RestCommand("/wizard/{username}", Wizard) {RequiesToken = false}); Rest.Register(new RestCommand("/wizard/{username}", Wizard) { RequiesToken = false });
} }
//The Wizard example, for demonstrating the response convention: //The Wizard example, for demonstrating the response convention:

View file

@ -1,7 +1,9 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Rests namespace Rests
{ {
[Serializable]
public class RestObject : Dictionary<string, string> public class RestObject : Dictionary<string, string>
{ {
public string Status public string Status

View file

@ -1,7 +1,9 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Rests namespace Rests
{ {
[Serializable]
public class RestVerbs : Dictionary<string, string> public class RestVerbs : Dictionary<string, string>
{ {
/// <summary> /// <summary>