REST resolves the user's group on each request now.

This commit is contained in:
CoderCow 2013-07-27 20:01:48 +02:00
parent 125884cc4d
commit d9ff9a6ac5
3 changed files with 22 additions and 7 deletions

View file

@ -109,7 +109,7 @@ namespace TShockAPI
if (string.IsNullOrWhiteSpace(parameters["cmd"])) if (string.IsNullOrWhiteSpace(parameters["cmd"]))
return RestMissingParam("cmd"); return RestMissingParam("cmd");
TSRestPlayer tr = new TSRestPlayer(tokenData.Username, tokenData.UserGroup); TSRestPlayer tr = new TSRestPlayer(tokenData.Username, TShock.Groups.GetGroupByName(tokenData.UserGroupName));
Commands.HandleCommand(tr, parameters["cmd"]); Commands.HandleCommand(tr, parameters["cmd"]);
return RestResponse(string.Join("\n", tr.GetCommandOutput())); return RestResponse(string.Join("\n", tr.GetCommandOutput()));
} }
@ -119,7 +119,7 @@ namespace TShockAPI
if (string.IsNullOrWhiteSpace(parameters["cmd"])) if (string.IsNullOrWhiteSpace(parameters["cmd"]))
return RestMissingParam("cmd"); return RestMissingParam("cmd");
TSRestPlayer tr = new TSRestPlayer(tokenData.Username, tokenData.UserGroup); TSRestPlayer tr = new TSRestPlayer(tokenData.Username, TShock.Groups.GetGroupByName(tokenData.UserGroupName));
Commands.HandleCommand(tr, parameters["cmd"]); Commands.HandleCommand(tr, parameters["cmd"]);
return new RestObject() return new RestObject()
{ {
@ -153,7 +153,7 @@ namespace TShockAPI
private object ServerReload(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData) private object ServerReload(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData)
{ {
TShock.Utils.Reload(new TSRestPlayer(tokenData.Username, tokenData.UserGroup)); 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."); return RestResponse("Configuration, permissions, and regions reload complete. Some changes may require a server restart.");
} }

View file

@ -33,7 +33,7 @@ namespace Rests
public static readonly TokenData None = default(TokenData); public static readonly TokenData None = default(TokenData);
public string Username { get; set; } public string Username { get; set; }
public Group UserGroup { get; set; } public string UserGroupName { get; set; }
} }
public Dictionary<string,TokenData> Tokens { get; protected set; } public Dictionary<string,TokenData> Tokens { get; protected set; }
@ -112,7 +112,7 @@ namespace Rests
tokenHash = randbytes.Aggregate("", (s, b) => s + b.ToString("X2")); tokenHash = randbytes.Aggregate("", (s, b) => s + b.ToString("X2"));
} while (Tokens.ContainsKey(tokenHash)); } while (Tokens.ContainsKey(tokenHash));
Tokens.Add(tokenHash, new TokenData { Username = userAccount.Name, UserGroup = userGroup }); Tokens.Add(tokenHash, new TokenData { Username = userAccount.Name, UserGroupName = userGroup.Name });
RestObject response = new RestObject("200") { Response = "Successful login" }; RestObject response = new RestObject("200") { Response = "Successful login" };
response["token"] = tokenHash; response["token"] = tokenHash;
@ -141,7 +141,22 @@ namespace Rests
} }
}; };
if (secureCmd.Permissions.Length > 0 && secureCmd.Permissions.All(perm => !tokenData.UserGroup.HasPermission(perm))) Group userGroup = TShock.Groups.GetGroupByName(tokenData.UserGroupName);
if (userGroup == null)
{
Tokens.Remove(token);
return new Dictionary<string, string>
{
{"status", "403"},
{
"error",
"Not authorized. The provided token became invalid due to group changes, please create a new token."
}
};
}
if (secureCmd.Permissions.Length > 0 && secureCmd.Permissions.All(perm => !userGroup.HasPermission(perm)))
{ {
return new Dictionary<string, string> return new Dictionary<string, string>
{ {

View file

@ -479,7 +479,7 @@ namespace TShockAPI
break; break;
case "-rest-token": case "-rest-token":
string token = Convert.ToString(parms[++i]); string token = Convert.ToString(parms[++i]);
RESTStartupTokens.Add(token, new SecureRest.TokenData { Username = "null", UserGroup = new SuperAdminGroup() }); RESTStartupTokens.Add(token, new SecureRest.TokenData { Username = "null", UserGroupName = "superadmin" });
Console.WriteLine("Startup parameter overrode REST token."); Console.WriteLine("Startup parameter overrode REST token.");
break; break;
case "-rest-enabled": case "-rest-enabled":