REST resolves the user's group on each request now.
This commit is contained in:
parent
125884cc4d
commit
d9ff9a6ac5
3 changed files with 22 additions and 7 deletions
|
|
@ -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.");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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":
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue