Ejemplo n.º 1
0
        private object PlayerKills(RestRequestArgs args)
        {
            var Name = args.Parameters["name"];

            // Checks if parameters exists
            if (string.IsNullOrWhiteSpace(Name))
            {
                return(RestMissingParam("name"));
            }

            // Gets and checks if result (kills) are not empty
            var Kills = DB.GetKills(Name);

            if (Kills == null)
            {
                return(RestError("Invalid name"));
            }

            var Result = new RestObject();

            foreach (var Row in Kills)
            {
                Result.Add(Row.Key, Row.Value);
            }

            return(Result);
        }
Ejemplo n.º 2
0
        private object PlayerStats(RestRequestArgs args)
        {
            var Name = args.Parameters["name"];

            // Checks if parameters exists
            if (string.IsNullOrWhiteSpace(Name))
            {
                return(RestMissingParam("name"));
            }

            // Gets and checks if result (stats) are not empty
            var Stats = DB.GetStats(Name);

            if (Stats == null)
            {
                return(RestError("Invalid name"));
            }

            var Result = new RestObject()
            {
                { "tiles_destroyed", Stats[0] },
                { "tiles_placed", Stats[1] },
                { "deaths", Stats[2] }
            };

            return(Result);
        }
Ejemplo n.º 3
0
        private object Butcher(RestVerbs verbs, IParameterCollection parameters)
        {
            bool killFriendly;

            if (!bool.TryParse(parameters["killfriendly"], out killFriendly))
            {
                RestObject fail = new RestObject("400");
                fail["response"] = "The given value for killfriendly wasn't a boolean value.";
                return(fail);
            }
            if (killFriendly)
            {
                killFriendly = !killFriendly;
            }

            int killcount = 0;

            for (int i = 0; i < Main.npc.Length; i++)
            {
                if (Main.npc[i].active && Main.npc[i].type != 0 && !Main.npc[i].townNPC && (!Main.npc[i].friendly || killFriendly))
                {
                    TSPlayer.Server.StrikeNPC(i, 99999, 90f, 1);
                    killcount++;
                }
            }

            RestObject rj = new RestObject("200");

            rj["response"] = killcount + " NPCs have been killed.";
            return(rj);
        }
Ejemplo n.º 4
0
        private object Off(RestVerbs verbs, IParameterCollection parameters)
        {
            bool confirm;

            bool.TryParse(parameters["confirm"], out confirm);
            bool nosave;

            bool.TryParse(parameters["nosave"], out nosave);

            if (confirm == true)
            {
                if (!nosave)
                {
                    WorldGen.saveWorld();
                }
                Netplay.disconnect = true;
                RestObject reply = new RestObject("200");
                reply["response"] = "The server is shutting down.";
                return(reply);
            }
            RestObject fail = new RestObject("400");

            fail["response"] = "Invalid/missing confirm switch, and/or missing nosave switch.";
            return(fail);
        }
Ejemplo n.º 5
0
        private object PlayerList(RestVerbs verbs, IParameterCollection parameters)
        {
            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["players"] = currentPlayers;
            return(ret);
        }
Ejemplo n.º 6
0
        private object ServerStatusV2(RestRequestArgs args)
        {
            var ret = new RestObject()
            {
                { "name", TShock.Config.ServerName },
                { "serverversion", Main.versionNumber },
                { "tshockversion", TShock.VersionNum },
                { "port", TShock.Config.ServerPort },
                { "playercount", Main.player.Where(p => null != p && p.active).Count() },
                { "maxplayers", TShock.Config.MaxSlots },
                { "world", Main.worldName },
                { "uptime", (DateTime.Now - System.Diagnostics.Process.GetCurrentProcess().StartTime).ToString(@"d'.'hh':'mm':'ss") },
                { "serverpassword", !string.IsNullOrEmpty(TShock.Config.ServerPassword) }
            };

            if (GetBool(args.Parameters["players"], false))
            {
                var players = new ArrayList();
                foreach (TSPlayer tsPlayer in TShock.Players.Where(p => null != p))
                {
                    var p = PlayerFilter(tsPlayer, args.Parameters, ((args.TokenData.UserGroupName) != "" && TShock.Utils.GetGroup(args.TokenData.UserGroupName).HasPermission(RestPermissions.viewips)));
                    if (null != p)
                    {
                        players.Add(p);
                    }
                }
                ret.Add("players", players);
            }

            if (GetBool(args.Parameters["rules"], false))
            {
                var rules = new Dictionary <string, object>();
                rules.Add("AutoSave", TShock.Config.AutoSave);
                rules.Add("DisableBuild", TShock.Config.DisableBuild);
                rules.Add("DisableClownBombs", TShock.Config.DisableClownBombs);
                rules.Add("DisableDungeonGuardian", TShock.Config.DisableDungeonGuardian);
                rules.Add("DisableInvisPvP", TShock.Config.DisableInvisPvP);
                rules.Add("DisableSnowBalls", TShock.Config.DisableSnowBalls);
                rules.Add("DisableTombstones", TShock.Config.DisableTombstones);
                rules.Add("EnableWhitelist", TShock.Config.EnableWhitelist);
                rules.Add("HardcoreOnly", TShock.Config.HardcoreOnly);
                rules.Add("PvPMode", TShock.Config.PvPMode);
                rules.Add("SpawnProtection", TShock.Config.SpawnProtection);
                rules.Add("SpawnProtectionRadius", TShock.Config.SpawnProtectionRadius);
                rules.Add("ServerSideInventory", Main.ServerSideCharacter);

                ret.Add("rules", rules);
            }
            return(ret);
        }
Ejemplo n.º 7
0
        private object ServerStatusV2(RestVerbs verbs, IParameterCollection parameters)
        {
            if (TShock.Config.EnableTokenEndpointAuthentication)
            {
                return(RestError("Server settings require a token for this API call"));
            }

            var ret = new RestObject()
            {
                { "name", TShock.Config.ServerName },
                { "port", TShock.Config.ServerPort },
                { "playercount", Main.player.Where(p => null != p && p.active).Count() },
                { "maxplayers", TShock.Config.MaxSlots },
                { "world", Main.worldName }
            };

            if (GetBool(parameters["players"], false))
            {
                var players = new ArrayList();
                foreach (TSPlayer tsPlayer in TShock.Players.Where(p => null != p))
                {
                    var p = PlayerFilter(tsPlayer, parameters);
                    if (null != p)
                    {
                        players.Add(p);
                    }
                }
                ret.Add("players", players);
            }

            if (GetBool(parameters["rules"], false))
            {
                var rules = new Dictionary <string, object>();
                rules.Add("AutoSave", TShock.Config.AutoSave);
                rules.Add("DisableBuild", TShock.Config.DisableBuild);
                rules.Add("DisableClownBombs", TShock.Config.DisableClownBombs);
                rules.Add("DisableDungeonGuardian", TShock.Config.DisableDungeonGuardian);
                rules.Add("DisableInvisPvP", TShock.Config.DisableInvisPvP);
                rules.Add("DisableSnowBalls", TShock.Config.DisableSnowBalls);
                rules.Add("DisableTombstones", TShock.Config.DisableTombstones);
                rules.Add("EnableWhitelist", TShock.Config.EnableWhitelist);
                rules.Add("HardcoreOnly", TShock.Config.HardcoreOnly);
                rules.Add("PvPMode", TShock.Config.PvPMode);
                rules.Add("SpawnProtection", TShock.Config.SpawnProtection);
                rules.Add("SpawnProtectionRadius", TShock.Config.SpawnProtectionRadius);

                ret.Add("rules", rules);
            }
            return(ret);
        }
Ejemplo n.º 8
0
        private object Broadcast(RestVerbs verbs, IParameterCollection parameters)
        {
            if (parameters["msg"] != null && parameters["msg"].Trim() != "")
            {
                TShock.Utils.Broadcast(parameters["msg"]);
                RestObject reply = new RestObject("200");
                reply["response"] = "The message was broadcasted successfully.";
                return(reply);
            }
            RestObject fail = new RestObject("400");

            fail["response"] = "Broadcast failed.";
            return(fail);
        }
Ejemplo n.º 9
0
        private object UserUpdateV2(RestVerbs verbs, IParameterCollection parameters)
        {
            var ret = UserFind(parameters);

            if (ret is RestObject)
            {
                return(ret);
            }

            var password = parameters["password"];
            var group    = parameters["group"];

            if (string.IsNullOrWhiteSpace(group) && string.IsNullOrWhiteSpace(password))
            {
                return(RestMissingParam("group", "password"));
            }

            User user     = (User)ret;
            var  response = new RestObject();

            if (!string.IsNullOrWhiteSpace(password))
            {
                try
                {
                    TShock.Users.SetUserPassword(user, password);
                    response.Add("password-response", "Password updated successfully");
                }
                catch (Exception e)
                {
                    return(RestError("Failed to update user password (" + e.Message + ")"));
                }
            }

            if (!string.IsNullOrWhiteSpace(group))
            {
                try
                {
                    TShock.Users.SetUserGroup(user, group);
                    response.Add("group-response", "Group updated successfully");
                }
                catch (Exception e)
                {
                    return(RestError("Failed to update user group (" + e.Message + ")"));
                }
            }

            return(response);
        }
Ejemplo n.º 10
0
        private object AllPlayersKills(RestRequestArgs args)
        {
            // Gets and checks if result (kills) are not empty
            var AllKills = DB.GetAllKills();
            if (AllKills == null)
            {
                return RestError("Empty database");
            }

            var Result = new RestObject();
            foreach (var Row in AllKills)
            {
                Result.Add(Row.Key, Row.Value);
            }
            return Result;
        }
Ejemplo n.º 11
0
        private object AllPlayersKills(RestRequestArgs args)
        {
            // Gets and checks if result (kills) are not empty
            var AllKills = DB.GetAllKills();

            if (AllKills == null)
            {
                return(RestError("Empty database"));
            }

            var Result = new RestObject();

            foreach (var Row in AllKills)
            {
                Result.Add(Row.Key, Row.Value);
            }
            return(Result);
        }
Ejemplo n.º 12
0
        private object ServerCommand(RestVerbs verbs, IParameterCollection parameters)
        {
            if (parameters["cmd"] != null && parameters["cmd"].Trim() != "")
            {
                TSRestPlayer tr = new TSRestPlayer();
                RestObject   ro = new RestObject("200");
                Commands.HandleCommand(tr, parameters["cmd"]);
                foreach (string s in tr.GetCommandOutput())
                {
                    ro.Add("response", s);
                }
                return(ro);
            }
            RestObject fail = new RestObject("400");

            fail["response"] = "Missing or blank cmd parameter.";
            return(fail);
        }
Ejemplo n.º 13
0
        private List <RestRequest> DeserializedMultiRequest(MultirequestController multirequestController, JObject jObject)
        {
            List <RestRequest> requests = new List <RestRequest>();

            int index = 1;

            while (jObject[index.ToString()] != null)
            {
                JObject     jRequest = (JObject)jObject[index.ToString()];
                RestRequest request  = new RestRequest();
                request.Service   = jRequest["service"].ToString();
                request.Action    = jRequest["action"].ToString();
                request.Arguments = new Dictionary <string, object>();

                MethodInfo methodInfo = multirequestController.GetMethodInfo(request.Service, request.Action);
                foreach (ParameterInfo parameterInfo in methodInfo.GetParameters())
                {
                    string name = parameterInfo.Name;

                    JToken jToken = jRequest[name];
                    if (jToken == null || jToken.Type == JTokenType.Null)
                    {
                        if (!parameterInfo.IsOptional)
                        {
                            throw new RestRequestException(RestRequestException.MISSING_PARAMETER, name);
                        }
                    }
                    else if (jToken.Type == JTokenType.String && MultirequestController.MultirequestRegex.IsMatch((string)jToken))
                    {
                        request.Arguments.Add(name, (string)jToken);
                    }
                    else
                    {
                        request.Arguments.Add(name, RestObject.FromJson(parameterInfo.ParameterType, jToken));
                    }
                }

                requests.Add(request);
                index++;
            }

            return(requests);
        }
Ejemplo n.º 14
0
        private object UserList(RestVerbs verbs, IParameterCollection parameters)
        {
            var    ret        = new RestObject("200");
            string playerlist = "";

            foreach (var TSPlayer in TShock.Players)
            {
                if (playerlist == "")
                {
                    playerlist += TSPlayer.UserAccountName;
                }
                else
                {
                    playerlist += ", " + TSPlayer.UserAccountName;
                }
            }
            ret["activeuesrs"] = playerlist;
            return(ret);
        }
        public void TestRequestAndResponseWithNulls()
        {
            //Just to make it more readable
            var quote = "\"";
            var openBracket = "{";
            var closeBracket = "}";
            var comma = ",";
            var colon = ":";
            var crlf = "";
            var json = TestRESTRequestResponse.CreateString(openBracket, crlf,
                                    quote, "TestStringValue", quote, colon, quote, TestRESTObject.TEST_STRING, quote, comma, crlf,
                                    quote, "TestBoolValue", quote, colon, TestRESTObject.TEST_BOOL.ToString().ToLower(), comma, crlf,
                                    quote, "TestIntValue", quote, colon, TestRESTObject.TEST_INT.ToString(), comma, crlf,
                                    quote, "TestLongValue", quote, colon, TestRESTObject.TEST_LONG.ToString(), comma, crlf,
                                    quote, "TestByteValue", quote, colon, TestRESTObject.TEST_BYTE.ToString(), comma, crlf,
                                    quote, "TestUnsignedIntValue", quote, colon, TestRESTObject.TEST_UINT.ToString(), comma, crlf,
                                    quote, "TestFloatValue", quote, colon, TestRESTObject.TEST_FLOAT.ToString("R"), comma, crlf,
                                    quote, "TestDoubleValue", quote, colon, TestRESTObject.TEST_DOUBLE.ToString("R"), comma, crlf,
                                    quote, "TestCharValue", quote, colon, quote, TestRESTObject.TEST_CHAR.ToString(), quote, comma, crlf,
                                    quote, "TestDateTimeValue", quote, colon, TestRESTObject.TEST_DATETIME.Subtract(TestRESTRequestResponse.UNIX_EPOCH).TotalSeconds.ToString(), comma, crlf,
                                    quote, "ChildArray", quote, colon, "null", comma, crlf,
                                    quote, "ChildList", quote, colon, "null", crlf,
                                    closeBracket
                                   );

            Assert.IsTrue(json != null);
            // {"TestStringValue":"Test","TestBoolValue":true,"TestIntValue":-2147483648,"TestLongValue":9223372036854775807,"TestByteValue":250,"TestUnsignedIntValue":4294967295,"TestFloatValue":3.40282347E+38,"TestDoubleValue":1.7976931348623157E+308,"TestCharValue":"A","TestDateTime":6/3/1987 2:34:00 AM,"ChildArray":null,"ChildList":null}
            // {"TestStringValue":"Test","TestBoolValue":true,"TestIntValue":-2147483648,"TestLongValue":9223372036854775807,"TestByteValue":250,"TestUnsignedIntValue":4294967295,"TestFloatValue":3.40282347E+38,"TestDoubleValue":1.7976931348623157E+308,"TestCharValue":"A","TestDateTimeValue":"1987-06-03T02:34:00","TestNullableStringValue":"Test","TestNullableBoolValue":true,"TestNullableIntValue":-2147483648,"TestNullableLongValue":9223372036854775807,"TestNullableByteValue":250,"TestNullableUIntValue":4294967295,"TestNullableFloatValue":3.40282347E+38,"TestNullableDoubleValue":1.7976931348623157E+308,"TestNullableCharValue":"A","TestNullableDateTimeValue":"1987-06-03T02:34:00","ChildArray":null,"ChildList":null}
            var request = TestRESTRequestResponse.CreateTestHttpRequest(TestRESTRequestResponse.CreateTestHttpResponse(json));
            request.Method = "GET";
            Assert.IsNotNull(request);
            var testRequest = new RestWebRequest(request);
            Assert.IsNotNull(testRequest);
            var testResponse = testRequest.GetRestResponse();
            Assert.IsNotNull(testResponse);

            var testObject = new RestObject<TestRESTObject>(testResponse);
            Assert.IsNotNull(testObject);
            var testExplicit = testObject.ExplicitObject;
            Assert.IsNotNull(testExplicit);
            TestRESTObject.AssertValidValuesForTestClass(testExplicit, false, false, false, false);
        }
Ejemplo n.º 16
0
        //---------------------------------------------------------------------
        public override void Validate(object sender, ValidationEventArgs e)
        {
            RestObject response = ValidateJson(sender, e);

            if (null == response)
            {
                return;
            }
            foreach (var p in PropertyNames.Split(','))
            {
                if (null == response[p])
                {
                    e.Message = String.Format("'{0}' Not Found", p);
                    e.IsValid = false;
                    return;
                }
            }
            e.IsValid = true;

            //e.WebTest.Context.Add(ContextParameterName, propertyValue);
        }
Ejemplo n.º 17
0
        public RestObject ValidateJson(object sender, ValidationEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(e.Response.BodyString))
            {
                e.IsValid = false;
                e.Message = String.Format("Empty or null response {0}", e.Response.StatusCode);
                return(null);
            }
            JavaScriptSerializer serialiser = new JavaScriptSerializer();
            //dynamic data = serialiser.Deserialize<dynamic>(e.Response.BodyString);
            RestObject response = serialiser.Deserialize <RestObject>(e.Response.BodyString);

            if (JSonStatus != response.Status)
            {
                e.IsValid = false;
                e.Message = String.Format("Response Status '{0}' not '{1}'", response.Status, JSonStatus);
                return(null);
            }

            return(response);
        }
Ejemplo n.º 18
0
        public override void Validate(object sender, ValidationEventArgs e)
        {
            RestObject response = ValidateJson(sender, e);

            if (null == response)
            {
                return;
            }

            if (null == response[PropertyName])
            {
                e.Message = String.Format("{0} Not Found", PropertyName);
                e.IsValid = false;
                return;
            }

            if (UseRegularExpression)
            {
                var re = new Regex(PropertyValue);
                if (!re.IsMatch((string)response[PropertyName]))
                {
                    e.Message = String.Format("{0} => '{1}' !~ '{2}'", PropertyName, response[PropertyName], PropertyValue);
                    e.IsValid = false;
                    return;
                }
            }
            else
            {
                if (PropertyValue != (string)response[PropertyName])
                {
                    e.Message = String.Format("{0} => '{1}' != '{2}'", PropertyName, response[PropertyName], PropertyValue);
                    e.IsValid = false;
                    return;
                }
            }

            e.IsValid = true;
            //e.WebTest.Context.Add(ContextParameterName, propertyValue);
        }
Ejemplo n.º 19
0
        private object Status(RestVerbs verbs, IParameterCollection parameters)
        {
            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);
        }
Ejemplo n.º 20
0
        private object AllPlayersStats(RestRequestArgs args)
        {
            // Gets and checks if result (stats) are not empty
            var AllStats = DB.GetAllStats();

            if (AllStats == null)
            {
                return(RestError("Empty database"));
            }

            var Result = new RestObject();

            foreach (var Row in AllStats)
            {
                Result.Add(Row.Key, new Dictionary <string, int>()
                {
                    { "tiles_destroyed", Row.Value[0] },
                    { "tiles_placed", Row.Value[1] },
                    { "deaths", Row.Value[2] }
                });
            }
            return(Result);
        }
Ejemplo n.º 21
0
        private Dictionary <string, object> DeserializeActionParameters(JObject jObject, List <HttpParameterDescriptor> propertiesDescriptors)
        {
            Dictionary <string, object> outputArguments = new Dictionary <string, object>();

            foreach (HttpParameterDescriptor propertyDescriptor in propertiesDescriptors)
            {
                string name = propertyDescriptor.ParameterName;

                JToken jToken = jObject[name];
                if (jToken == null || jToken.Type == JTokenType.Null)
                {
                    if (!propertyDescriptor.IsOptional)
                    {
                        throw new RestRequestException(RestRequestException.MISSING_PARAMETER, name);
                    }
                }
                else
                {
                    outputArguments.Add(name, RestObject.FromJson(propertyDescriptor.ParameterType, jToken));
                }
            }

            return(outputArguments);
        }
Ejemplo n.º 22
0
 public DomainFIPAclTemplateEntriesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(DomainFIPAclTemplateEntry))
 {
 }
Ejemplo n.º 23
0
        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;
        }
Ejemplo n.º 24
0
 public ZFBAutoAssignmentsFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(ZFBAutoAssignment))
 {
 }
Ejemplo n.º 25
0
        private object ServerStatusV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData)
        {
            var ret = new RestObject()
            {
                {"name", TShock.Config.ServerName},
                {"port", TShock.Config.ServerPort},
                {"playercount", Main.player.Where(p => null != p && p.active).Count()},
                {"maxplayers", TShock.Config.MaxSlots},
                {"world", Main.worldName},
                {"uptime", (DateTime.Now - System.Diagnostics.Process.GetCurrentProcess().StartTime).ToString(@"d'.'hh':'mm':'ss")},
                {"serverpassword", !string.IsNullOrEmpty(TShock.Config.ServerPassword)}
            };

            if (GetBool(parameters["players"], false))
            {
                var players = new ArrayList();
                foreach (TSPlayer tsPlayer in TShock.Players.Where(p => null != p))
                {
                    var p = PlayerFilter(tsPlayer, parameters, ((tokenData.UserGroupName) != "" && TShock.Utils.GetGroup(tokenData.UserGroupName).HasPermission(RestPermissions.viewips)));
                    if (null != p)
                        players.Add(p);
                }
                ret.Add("players", players);
            }

            if (GetBool(parameters["rules"], false))
            {
                var rules = new Dictionary<string,object>();
                rules.Add("AutoSave", TShock.Config.AutoSave);
                rules.Add("DisableBuild", TShock.Config.DisableBuild);
                rules.Add("DisableClownBombs", TShock.Config.DisableClownBombs);
                rules.Add("DisableDungeonGuardian", TShock.Config.DisableDungeonGuardian);
                rules.Add("DisableInvisPvP", TShock.Config.DisableInvisPvP);
                rules.Add("DisableSnowBalls", TShock.Config.DisableSnowBalls);
                rules.Add("DisableTombstones", TShock.Config.DisableTombstones);
                rules.Add("EnableWhitelist", TShock.Config.EnableWhitelist);
                rules.Add("HardcoreOnly", TShock.Config.HardcoreOnly);
                rules.Add("PvPMode", TShock.Config.PvPMode);
                rules.Add("SpawnProtection", TShock.Config.SpawnProtection);
                rules.Add("SpawnProtectionRadius", TShock.Config.SpawnProtectionRadius);
                rules.Add("ServerSideInventory", TShock.Config.ServerSideCharacter);

                ret.Add("rules", rules);
            }
            return ret;
        }
Ejemplo n.º 26
0
        private object PlayerKills(RestRequestArgs args)
        {
            var Name = args.Parameters["name"];

            // Checks if parameters exists
            if (string.IsNullOrWhiteSpace(Name))
            {
                return RestMissingParam("name");
            }

            // Gets and checks if result (kills) are not empty
            var Kills = DB.GetKills(Name);
            if (Kills == null)
            {
                return RestError("Invalid name");
            }

            var Result = new RestObject();
            foreach (var Row in Kills)
            {
                Result.Add(Row.Key, Row.Value);
            }

            return Result;
        }
 public IngressProfilesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(IngressProfile))
 {
 }
Ejemplo n.º 28
0
        private RestObject NewTokenInternal(string username, string password, IHttpContext context)
        {
            int tokens = 0;
            if (tokenBucket.TryGetValue(context.RemoteEndPoint.Address.ToString(), out tokens))
            {
                if (tokens >= Math.Max(TShock.Config.RESTMaximumRequestsPerInterval, 5))
                {
                    TShock.Log.ConsoleError("A REST login from {0} was blocked as it currently has {1} tokens", context.RemoteEndPoint.Address.ToString(), tokens);
                    tokenBucket[context.RemoteEndPoint.Address.ToString()] += 1; // Tokens over limit, increment by one and reject request
                    return new RestObject("403")
                    {
                        Error = "Username or password may be incorrect or this account may not have sufficient privileges."
                    };
                }
                if (!TShock.Config.RESTLimitOnlyFailedLoginRequests)
                    tokenBucket[context.RemoteEndPoint.Address.ToString()] += 1; // Tokens under limit, increment by one and process request
            }
            else
            {
                if (!TShock.Config.RESTLimitOnlyFailedLoginRequests)
                    tokenBucket.Add(context.RemoteEndPoint.Address.ToString(), 1); // First time request, set to one and process request
            }

            User userAccount = TShock.Users.GetUserByName(username);
            if (userAccount == null)
            {
                AddTokenToBucket(context.RemoteEndPoint.Address.ToString());
                return new RestObject("403") { Error = "Username or password may be incorrect or this account may not have sufficient privileges." };
            }

            if (!userAccount.VerifyPassword(password))
            {
                AddTokenToBucket(context.RemoteEndPoint.Address.ToString());
                return new RestObject("403") { Error = "Username or password may be incorrect or this account may not have sufficient privileges." };
            }

            Group userGroup = TShock.Utils.GetGroup(userAccount.Group);
            if (!userGroup.HasPermission(RestPermissions.restapi) && userAccount.Group != "superadmin")
            {
                AddTokenToBucket(context.RemoteEndPoint.Address.ToString());
                return new RestObject("403")
                { Error = "Username or password may be incorrect or this account may not have sufficient privileges." };
            }

            string tokenHash;
            var rand = new Random();
            var randbytes = new byte[32];
            do
            {
                rand.NextBytes(randbytes);
                tokenHash = randbytes.Aggregate("", (s, b) => s + b.ToString("X2"));
            } while (Tokens.ContainsKey(tokenHash));

            Tokens.Add(tokenHash, new TokenData { Username = userAccount.Name, UserGroupName = userGroup.Name });

            AddTokenToBucket(context.RemoteEndPoint.Address.ToString());

            RestObject response = new RestObject() { Response = "Successful login" };
            response["token"] = tokenHash;
            return response;
        }
 public L2DomainTemplatesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(L2DomainTemplate))
 {
 }
 public IPv6FilterProfilesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(IPv6FilterProfile))
 {
 }
Ejemplo n.º 31
0
        private object ChangeWorldSaveSettings(RestVerbs verbs, IParameterCollection parameters)
        {
            bool state;
            bool.TryParse(verbs["state"], out state);

                if (state == true)
                {
                    TShock.Config.AutoSave = true;
                }
                else
                {
                    TShock.Config.AutoSave = false;
                }

                RestObject rj = new RestObject("200");
                rj["response"] = "Value changed";
                rj["state"] = state;

                return rj;
        }
Ejemplo n.º 32
0
        private object WorldSave(RestVerbs verbs, IParameterCollection parameters)
        {
            TShock.Utils.SaveWorld();

            RestObject rj = new RestObject("200");
            rj["response"] = "World saved.";
            return rj;
        }
        public void TestRequestAndResponseWithoutNulls()
        {
            //Just to make it more readable
            var quote = "\"";
            var openBracket = "{";
            var closeBracket = "}";
            var comma = ",";
            var colon = ":";
            var crlf = "";
            // "R" formatting preserves the most precision for float/double
            var json = TestRESTRequestResponse.CreateString(openBracket, crlf,
                                    quote, "TestStringValue", quote, colon, quote, TestRESTObject.TEST_STRING, quote, comma, crlf,
                                    quote, "TestBoolValue", quote, colon, TestRESTObject.TEST_BOOL.ToString().ToLower(), comma, crlf,
                                    quote, "TestIntValue", quote, colon, TestRESTObject.TEST_INT.ToString(), comma, crlf,
                                    quote, "TestLongValue", quote, colon, TestRESTObject.TEST_LONG.ToString(), comma, crlf,
                                    quote, "TestByteValue", quote, colon, TestRESTObject.TEST_BYTE.ToString(), comma, crlf,
                                    quote, "TestUnsignedIntValue", quote, colon, TestRESTObject.TEST_UINT.ToString(), comma, crlf,
                                    quote, "TestFloatValue", quote, colon, TestRESTObject.TEST_FLOAT.ToString("R"), comma, crlf,
                                    quote, "TestDoubleValue", quote, colon, TestRESTObject.TEST_DOUBLE.ToString("R"), comma, crlf,
                                    quote, "TestCharValue", quote, colon, quote, TestRESTObject.TEST_CHAR.ToString(), quote, comma, crlf,
                                    quote, "TestDateTimeValue", quote, colon, TestRESTObject.TEST_DATETIME.Subtract(TestRESTRequestResponse.UNIX_EPOCH).TotalSeconds.ToString(), comma, crlf,
                                    quote, "TestNullableStringValue", quote, colon, quote, TestRESTObject.TEST_STRING, quote, comma, crlf,
                                    quote, "TestNullableBoolValue", quote, colon, TestRESTObject.TEST_BOOL.ToString().ToLower(), comma, crlf,
                                    quote, "TestNullableIntValue", quote, colon, TestRESTObject.TEST_INT.ToString(), comma, crlf,
                                    quote, "TestNullableLongValue", quote, colon, TestRESTObject.TEST_LONG.ToString(), comma, crlf,
                                    quote, "TestNullableByteValue", quote, colon, TestRESTObject.TEST_BYTE.ToString(), comma, crlf,
                                    quote, "TestNullableUIntValue", quote, colon, TestRESTObject.TEST_UINT.ToString(), comma, crlf,
                                    quote, "TestNullableFloatValue", quote, colon, TestRESTObject.TEST_FLOAT.ToString("R"), comma, crlf,
                                    quote, "TestNullableDoubleValue", quote, colon, TestRESTObject.TEST_DOUBLE.ToString("R"), comma, crlf,
                                    quote, "TestNullableCharValue", quote, colon, quote, TestRESTObject.TEST_CHAR.ToString(), quote, comma, crlf,
                                    quote, "TestNullableDateTimeValue", quote, colon, TestRESTObject.TEST_DATETIME.Subtract(TestRESTRequestResponse.UNIX_EPOCH).TotalSeconds.ToString(), comma, crlf,
                                    quote, "ChildArray", quote, colon, "null", comma, crlf,
                                    quote, "ChildList", quote, colon, "null", crlf,
                                    closeBracket
                                   );

            Assert.IsTrue(json != null);
            var request = TestRESTRequestResponse.CreateTestHttpRequest(TestRESTRequestResponse.CreateTestHttpResponse(json));
            request.Method = "GET";
            Assert.IsNotNull(request);
            var testRequest = new RestWebRequest(request);
            Assert.IsNotNull(testRequest);
            var testResponse = testRequest.GetRestResponse();
            Assert.IsNotNull(testResponse);

            var testObject = new RestObject<TestRESTObject>(testResponse);
            Assert.IsNotNull(testObject);
            var testExplicit = testObject.ExplicitObject;
            Assert.IsNotNull(testExplicit);
            TestRESTObject.AssertValidValuesForTestClass(testExplicit, false, false, false, true);
        }
Ejemplo n.º 34
0
 private object Broadcast(RestVerbs verbs, IParameterCollection parameters)
 {
     if (parameters["msg"] != null && parameters["msg"].Trim() != "")
     {
         TShock.Utils.Broadcast(parameters["msg"]);
         RestObject reply = new RestObject("200");
         reply["response"] = "The message was broadcasted successfully.";
         return reply;
     }
     RestObject fail = new RestObject("400");
     fail["response"] = "Broadcast failed.";
     return fail;
 }
Ejemplo n.º 35
0
        private object Butcher(RestVerbs verbs, IParameterCollection parameters)
        {
            bool killFriendly;
            if (!bool.TryParse(parameters["killfriendly"], out killFriendly))
            {
                RestObject fail = new RestObject("400");
                fail["response"] = "The given value for killfriendly wasn't a boolean value.";
                return fail;
            }
            if (killFriendly)
            {
                killFriendly = !killFriendly;
            }

            int killcount = 0;
            for (int i = 0; i < Main.npc.Length; i++)
            {
                if (Main.npc[i].active && Main.npc[i].type != 0 && !Main.npc[i].townNPC && (!Main.npc[i].friendly || killFriendly))
                {
                    TSPlayer.Server.StrikeNPC(i, 99999, 90f, 1);
                    killcount++;
                }
            }

            RestObject rj = new RestObject("200");
            rj["response"] = killcount + " NPCs have been killed.";
            return rj;
        }
Ejemplo n.º 36
0
 public static RestObject<TestRESTObject> SerializeAndParseRESTObject(TestRESTObject testObject)
 {
     var json = JsonConvert.SerializeObject(testObject);
     var restObject = new RestObject<TestRESTObject>(json);
     //Check to make sure that serialization was correct
     Assert.IsTrue(restObject.ExplicitObject != null, "Explicit Object was not correctly populated");
     return restObject;
 }
Ejemplo n.º 37
0
 private object getServerVersion(RestRequestArgs args)
 {
     var ret = new RestObject()
     {
         {"name", TShock.Config.ServerName},
         {"serverversion", Main.versionNumber.ToString()},
         {"tshockversion", TShock.VersionNum.ToString()},
         {"port", TShock.Config.ServerPort},
         {"APIversion", TerrariaApi.Server.ServerApi.ApiVersion.Major + "." + TerrariaApi.Server.ServerApi.ApiVersion.Minor}
     };
      return ret;
 }
Ejemplo n.º 38
0
        protected virtual object ProcessRequest(object sender, HttpListenerContext e)
        {
            try
            {
                var uri = e.Request.Url.AbsolutePath;
                uri = uri.TrimEnd('/');

                foreach (var com in commands)
                {
                    var verbs = new RestVerbs();
                    if (com.HasVerbs)
                    {
                        var match = Regex.Match(uri, com.UriVerbMatch);
                        if (!match.Success)
                            continue;
                        if ((match.Groups.Count - 1) != com.UriVerbs.Length)
                            continue;

                        for (int i = 0; i < com.UriVerbs.Length; i++)
                            verbs.Add(com.UriVerbs[i], match.Groups[i + 1].Value);
                    }
                    else if (com.UriTemplate.ToLower() != uri.ToLower())
                    {
                        continue;
                    }

                    var nvc = new NameValueCollection();
                    CopyCollection(e.Request.QueryString, nvc);
                    CopyCollection(GetFormData(e), nvc);
                    //This overwrites get collisions with post data.

                    var obj = ExecuteCommand(com, verbs, nvc);
                    if (obj != null)
                        return obj;
                }
            }
            catch (Exception exception)
            {
                var eobj = new RestObject(500)
                {
                    Error = exception.Message
                };
                eobj["stacktrace"] = Convert.ToBase64String(Encoding.UTF8.GetBytes(exception.StackTrace));
                return eobj;
            }
            return new RestObject(404)
            {
                Error = "Specified API endpoint doesn't exist. Refer to the documentation for a list of valid endpoints.",
            };
        }
Ejemplo n.º 39
0
        private object PlayerStats(RestRequestArgs args)
        {
            var Name = args.Parameters["name"];

            // Checks if parameters exists
            if (string.IsNullOrWhiteSpace(Name))
            {
                return RestMissingParam("name");
            }

            // Gets and checks if result (stats) are not empty
            var Stats = DB.GetStats(Name);
            if (Stats == null)
            {
                return RestError("Invalid name");
            }

            var Result = new RestObject()
            {
                {"tiles_destroyed", Stats[0]},
                {"tiles_placed", Stats[1]},
                {"deaths", Stats[2]}
            };

            return Result;
        }
 public SaaSApplicationTypesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(SaaSApplicationType))
 {
 }
Ejemplo n.º 41
0
 private object UserList(RestVerbs verbs, IParameterCollection parameters)
 {
     var ret = new RestObject("200");
     string playerlist = "";
     foreach (var TSPlayer in TShock.Players)
     {
         if (playerlist == "")
         {
             playerlist += TSPlayer.UserAccountName;
         } else
         {
             playerlist += ", " + TSPlayer.UserAccountName;
         }
     }
     ret["activeuesrs"] = playerlist;
     return ret;
 }
Ejemplo n.º 42
0
 private object ServerCommand(RestVerbs verbs, IParameterCollection parameters)
 {
     if (parameters["cmd"] != null && parameters["cmd"].Trim() != "")
     {
         TSRestPlayer tr = new TSRestPlayer();
         RestObject ro = new RestObject("200");
         Commands.HandleCommand(tr, parameters["cmd"]);
         foreach (string s in tr.GetCommandOutput())
         {
             ro.Add("response", s);
         }
         return ro;
     }
     RestObject fail = new RestObject("400");
     fail["response"] = "Missing or blank cmd parameter.";
     return fail;
 }
 public NetconfGlobalConfigurationsFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(NetconfGlobalConfiguration))
 {
 }
Ejemplo n.º 44
0
        object Status(RestVerbs verbs, IParameterCollection parameters)
        {
            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;
        }
Ejemplo n.º 45
0
 public OSPFInterfacesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(OSPFInterface))
 {
 }
Ejemplo n.º 46
0
 object UserList(RestVerbs verbs, IParameterCollection parameters)
 {
     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["players"] = currentPlayers;
     return ret;
 }
Ejemplo n.º 47
0
        private object UserUpdateV2(RestVerbs verbs, IParameterCollection parameters, SecureRest.TokenData tokenData)
        {
            var ret = UserFind(parameters);
            if (ret is RestObject)
                return ret;

            var password = parameters["password"];
            var group = parameters["group"];
            if (string.IsNullOrWhiteSpace(group) && string.IsNullOrWhiteSpace(password))
                return RestMissingParam("group", "password");

            User user = (User)ret;
            var response = new RestObject();
            if (!string.IsNullOrWhiteSpace(password))
            {
                try
                {
                    TShock.Users.SetUserPassword(user, password);
                    response.Add("password-response", "Password updated successfully");
                }
                catch (Exception e)
                {
                    return RestError("Failed to update user password (" + e.Message + ")");
                }
            }

            if (!string.IsNullOrWhiteSpace(group))
            {
                try
                {
                    TShock.Users.SetUserGroup(user, group);
                    response.Add("group-response", "Group updated successfully");
                }
                catch (Exception e)
                {
                    return RestError("Failed to update user group (" + e.Message + ")");
                }
            }

            return response;
        }
Ejemplo n.º 48
0
        private object AllPlayersStats(RestRequestArgs args)
        {
            // Gets and checks if result (stats) are not empty
            var AllStats = DB.GetAllStats();
            if (AllStats == null)
            {
                return RestError("Empty database");
            }

            var Result = new RestObject();
            foreach (var Row in AllStats)
            {
                Result.Add(Row.Key, new Dictionary<string, int>(){
                {"tiles_destroyed", Row.Value[0]},
                {"tiles_placed", Row.Value[1]},
                {"deaths", Row.Value[2]}});
            }
            return Result;
        }
Ejemplo n.º 49
0
 public RolesFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(Role))
 {
 }
Ejemplo n.º 50
0
        private object ServerStatusV2(RestVerbs verbs, IParameterCollection parameters)
        {
            if (TPulse.Config.EnableTokenEndpointAuthentication)
                return RestError("Server settings require a token for this API call");

            var ret = new RestObject()
            {
                {"name", TPulse.Config.ServerName},
                {"port", TPulse.Config.ServerPort},
                {"playercount", Main.player.Where(p => null != p && p.active).Count()},
                {"maxplayers", TPulse.Config.MaxSlots},
                {"world", Main.worldName}
            };

            if (GetBool(parameters["players"], false))
            {
                var players = new ArrayList();
                foreach (TPPlayer tsPlayer in TPulse.Players.Where(p => null != p))
                {
                    var p = PlayerFilter(tsPlayer, parameters);
                    if (null != p)
                        players.Add(p);
                }
                ret.Add("players", players);
            }

            if (GetBool(parameters["rules"], false))
            {
                var rules = new Dictionary<string,object>();
                rules.Add("AutoSave", TPulse.Config.AutoSave);
                rules.Add("DisableBuild", TPulse.Config.DisableBuild);
                rules.Add("DisableClownBombs", TPulse.Config.DisableClownBombs);
                rules.Add("DisableDungeonGuardian", TPulse.Config.DisableDungeonGuardian);
                rules.Add("DisableInvisPvP", TPulse.Config.DisableInvisPvP);
                rules.Add("DisableSnowBalls", TPulse.Config.DisableSnowBalls);
                rules.Add("DisableTombstones", TPulse.Config.DisableTombstones);
                rules.Add("EnableWhitelist", TPulse.Config.EnableWhitelist);
                rules.Add("HardcoreOnly", TPulse.Config.HardcoreOnly);
                rules.Add("PvPMode", TPulse.Config.PvPMode);
                rules.Add("SpawnProtection", TPulse.Config.SpawnProtection);
                rules.Add("SpawnProtectionRadius", TPulse.Config.SpawnProtectionRadius);

                ret.Add("rules", rules);
            }
            return ret;
        }
Ejemplo n.º 51
0
 public TestsFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(Test))
 {
 }
Ejemplo n.º 52
0
        private object Off(RestVerbs verbs, IParameterCollection parameters)
        {
            bool confirm;
            bool.TryParse(parameters["confirm"], out confirm);
            bool nosave;
            bool.TryParse(parameters["nosave"], out nosave);

            if (confirm == true)
            {
                if (!nosave)
                    WorldGen.saveWorld();
                Netplay.disconnect = true;
                RestObject reply = new RestObject("200");
                reply["response"] = "The server is shutting down.";
                return reply;
            }
            RestObject fail = new RestObject("400");
            fail["response"] = "Invalid/missing confirm switch, and/or missing nosave switch.";
            return fail;
        }
 public L4ServiceGroupsFetcher(RestObject parentRestObj)
     : base(parentRestObj, typeof(L4ServiceGroup))
 {
 }
Ejemplo n.º 54
0
        private RestObject NewTokenInternal(string username, string password)
        {
            User userAccount = TShock.Users.GetUserByName(username);
            if (userAccount == null)
                return new RestObject("401") { Error = "Invalid username/password combination provided. Please re-submit your query with a correct pair." };

            if (!TShock.Utils.HashPassword(password).Equals(userAccount.Password, StringComparison.InvariantCultureIgnoreCase))
                return new RestObject("401")
                    { Error = "Invalid username/password combination provided. Please re-submit your query with a correct pair." };

            Group userGroup = TShock.Utils.GetGroup(userAccount.Group);
            if (!userGroup.HasPermission(RestPermissions.restapi) && userAccount.Group != "superadmin")
                return new RestObject("403")
                    { Error = "Although your account was successfully found and identified, your account lacks the permission required to use the API. (restapi)" };

            string tokenHash;
            var rand = new Random();
            var randbytes = new byte[32];
            do
            {
                rand.NextBytes(randbytes);
                tokenHash = randbytes.Aggregate("", (s, b) => s + b.ToString("X2"));
            } while (Tokens.ContainsKey(tokenHash));

            Tokens.Add(tokenHash, new TokenData { Username = userAccount.Name, UserGroupName = userGroup.Name });

            RestObject response = new RestObject() { Response = "Successful login" };
            response["token"] = tokenHash;
            return response;
        }