diff --git a/TShockAPI/Rest/Rest.cs b/TShockAPI/Rest/Rest.cs index c8229644..ac1d1563 100644 --- a/TShockAPI/Rest/Rest.cs +++ b/TShockAPI/Rest/Rest.cs @@ -116,8 +116,8 @@ namespace Rests if (obj == null) throw new NullReferenceException("obj"); - //if (OnRestRequestCall(e)) - // return; + if (OnRestRequestCall(e)) + return; var str = JsonConvert.SerializeObject(obj, Formatting.Indented); e.Response.Connection.Type = ConnectionType.Close; diff --git a/TShockAPI/Rest/SecureRest.cs b/TShockAPI/Rest/SecureRest.cs index 6af31523..bf41e2cd 100644 --- a/TShockAPI/Rest/SecureRest.cs +++ b/TShockAPI/Rest/SecureRest.cs @@ -41,6 +41,7 @@ namespace Rests { Tokens = new Dictionary(); Register(new RestCommand("/token/create/{username}/{password}", NewToken) {RequiresToken = false}); + Register(new RestCommand("/v2/token/create/{password}", NewTokenV2) { RequiresToken = false }); Register(new RestCommand("/token/destroy/{token}", DestroyToken) {RequiresToken = true}); } @@ -60,6 +61,36 @@ namespace Rests {{"status", "200"}, {"response", "Requested token was successfully destroyed."}}; } + private object NewTokenV2(RestVerbs verbs, IParameterCollection parameters) + { + var user = parameters["username"]; + var pass = verbs["password"]; + + RestObject obj = null; + if (Verify != null) + obj = Verify(user, pass); + + if (obj == null) + obj = new RestObject("401") { Error = "Invalid username/password combination provided. Please re-submit your query with a correct pair." }; + + if (obj.Error != null) + return obj; + + string hash; + var rand = new Random(); + var randbytes = new byte[32]; + do + { + rand.NextBytes(randbytes); + hash = randbytes.Aggregate("", (s, b) => s + b.ToString("X2")); + } while (Tokens.ContainsKey(hash)); + + Tokens.Add(hash, user); + + obj["token"] = hash; + return obj; + } + private object NewToken(RestVerbs verbs, IParameterCollection parameters) { var user = verbs["username"]; @@ -88,6 +119,7 @@ namespace Rests Tokens.Add(hash, user); obj["token"] = hash; + obj["deprecated"] = "This method will be removed from TShock in 3.6."; return obj; }