public static void Save()
    {
        string serverFolder = Server.GetServerFolder("cfg");
        string contents1    = "";

        foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Banned))
        {
            if (!(user.notes == "EAC"))
            {
                contents1 = contents1 + "banid " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\r\n";
            }
        }
        File.WriteAllText(serverFolder + "/bans.cfg", contents1);
        string contents2 = "";

        foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Owner))
        {
            contents2 = contents2 + "ownerid " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\r\n";
        }
        foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator))
        {
            contents2 = contents2 + "moderatorid " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\r\n";
        }
        File.WriteAllText(serverFolder + "/users.cfg", contents2);
    }
        private void RemoveAllCommand(ConsoleSystem.Arg args)
        {
            var bannedPlayers = new HashSet <ulong>(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Select(x => x.steamid));

            ServerMgr.Instance.StartCoroutine(Delete(BaseNetworkable.serverEntities, bannedPlayers));
            args.ReplyWith($"Started to remove entities belonging to banned players");
        }
    public static string BanListString(bool bHeader = false)
    {
        IEnumerable <ServerUsers.User> all = ServerUsers.GetAll(ServerUsers.UserGroup.Banned);
        string str = "";

        if (bHeader)
        {
            if (all.Count <ServerUsers.User>() == 0)
            {
                return("ID filter list: empty\n");
            }
            if (all.Count <ServerUsers.User>() != 1)
            {
                int num = all.Count <ServerUsers.User>();
                str = string.Concat("ID filter list: ", num.ToString(), " entries\n");
            }
            else
            {
                str = "ID filter list: 1 entry\n";
            }
        }
        int num1 = 1;

        foreach (ServerUsers.User user in all)
        {
            str = string.Concat(new string[] { str, num1.ToString(), " ", user.steamid.ToString(), " : permanent\n" });
            num1++;
        }
        return(str);
    }
    public static void Save()
    {
        string serverFolder = Server.GetServerFolder("cfg");
        string str          = "";

        foreach (ServerUsers.User all in ServerUsers.GetAll(ServerUsers.UserGroup.Banned))
        {
            if (all.notes == "EAC")
            {
                continue;
            }
            str = string.Concat(new string[] { str, "banid ", all.steamid.ToString(), " ", all.username.QuoteSafe(), " ", all.notes.QuoteSafe(), "\r\n" });
        }
        File.WriteAllText(string.Concat(serverFolder, "/bans.cfg"), str);
        string str1 = "";

        foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Owner))
        {
            str1 = string.Concat(new string[] { str1, "ownerid ", user.steamid.ToString(), " ", user.username.QuoteSafe(), " ", user.notes.QuoteSafe(), "\r\n" });
        }
        foreach (ServerUsers.User all1 in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator))
        {
            str1 = string.Concat(new string[] { str1, "moderatorid ", all1.steamid.ToString(), " ", all1.username.QuoteSafe(), " ", all1.notes.QuoteSafe(), "\r\n" });
        }
        File.WriteAllText(string.Concat(serverFolder, "/users.cfg"), str1);
    }
        void ReadBansTest(ConsoleSystem.Arg arg)
        {
            if (!arg.IsAdmin)
            {
                return;
            }
            int result = banDB.Query($"SELECT * FROM {TableName}").Count;

            Puts($"Database: {result} Server: {ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Count()}");
        }
    public static string BanListStringEx()
    {
        string str = "";
        int    num = 1;

        foreach (ServerUsers.User all in ServerUsers.GetAll(ServerUsers.UserGroup.Banned))
        {
            str = string.Concat(new string[] { str, num.ToString(), " ", all.steamid.ToString(), " ", all.username.QuoteSafe(), " ", all.notes.QuoteSafe(), "\n" });
            num++;
        }
        return(str);
    }
    public static string BanListStringEx()
    {
        IEnumerable <ServerUsers.User> all = ServerUsers.GetAll(ServerUsers.UserGroup.Banned);
        string str = "";
        int    num = 1;

        foreach (ServerUsers.User user in all)
        {
            str = str + num.ToString() + " " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\n";
            ++num;
        }
        return(str);
    }
 void ClearLocalBans(ConsoleSystem.Arg arg)
 {
     if (!arg.IsAdmin)
     {
         return;
     }
     LoadingServerUsers = true;
     foreach (var ban in ServerUsers.GetAll(ServerUsers.UserGroup.Banned).ToList())
     {
         ServerUsers.Remove(ban.steamid);
     }
     LoadingServerUsers = false;
     Puts($"Cleared Server Bans");
 }
        private IEnumerator SaveBansToDatabase()
        {
            var bans = ServerUsers.GetAll(ServerUsers.UserGroup.Banned).ToList();

            yield return(null); //Gotta have that debug message show when you first load the plguin

            Puts($"Starting To Push {bans.Count} Bans To Database");
            foreach (var user in bans)
            {
                UpdateUserGroup(user.steamid, user.group, user.username, user.notes);
                yield return(null);
            }
            Puts("Finished Saving All Bans To The Database");
            yield return(null);
        }
Beispiel #10
0
 /// <summary>
 /// Retrieve the list of banned users
 /// </summary>
 /// <returns></returns>
 private List <BannedPlayer> GetBannedUserList()
 {
     #if RUST
     IEnumerable <ServerUsers.User> users = ServerUsers.GetAll(ServerUsers.UserGroup.Banned).OrderBy(u => u.username).ThenBy(u => u.steamid);
     #else
     IEnumerable <IPlayer> users = players.All.Where(player => { return(player.IsBanned); }).OrderBy(u => u.Name).ThenBy(u => u.Id);
     #endif
     LogDebug($"GetBannedUserList > Retrieved the banned user list, users.Count = {users.Count()}");
     return((
                from user in users
                select new BannedPlayer {
             #if RUST
         Id = user.steamid.ToString(),
         Name = user.username,
         Reason = user.notes
             #else
         Id = user.Id,
         Name = user.Name,
         Reason = "Synched ban"
             #endif
     }
    public static string BanListString(bool bHeader = false)
    {
        IEnumerable <ServerUsers.User> all = ServerUsers.GetAll(ServerUsers.UserGroup.Banned);
        string str = "";

        if (bHeader)
        {
            if (all.Count <ServerUsers.User>() == 0)
            {
                return("ID filter list: empty\n");
            }
            str = all.Count <ServerUsers.User>() != 1 ? "ID filter list: " + all.Count <ServerUsers.User>().ToString() + " entries\n" : "ID filter list: 1 entry\n";
        }
        int num = 1;

        foreach (ServerUsers.User user in all)
        {
            str = str + num.ToString() + " " + user.steamid.ToString() + " : permanent\n";
            ++num;
        }
        return(str);
    }
Beispiel #12
0
        private void PushBansToServer()
        {
            var bans = new List <PlayerBan>(BansToSend);

            bans.AddRange(UnnamedBans.Where(x => UsernameValid(x)));
            UnnamedBans.RemoveAll(x => UsernameValid(x));
            bans.AddRange(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Where(x => !Settings.Instance.databaseBans.ContainsKey(x.steamid)).Select(x => new PlayerBan(x)));
            if (bans.Count() <= 0)
            {
                Puts("All bans have been synced with the database.");
                return;
            }
            var query = string.Format(MySqlConstants.ADD_BAN_TO_DATABASE, Settings.Instance.DatabaseName, Settings.Instance.TableName,
                                      string.Join(",", bans.Select(x => $"('{x.SteamID}','{x.Username}','{x.Reason.Replace(";", "").Replace("'", "")}')").ToArray())
                                      );

            Puts(query);
            try
            {
                PerformDatabaseQuery(query, (responseRows) =>
                {
                    Settings.Instance.PushedAllLocalBansToDatabase = true;
                    Puts($"Bans pushed to the database");
                });
            }
            catch
            {
                Puts("PushBansToServer() SQL Query failed!");
                Puts(query);
                timer.In(10f, () =>
                {
                    PushBansToServer();
                });
            }
            Puts($"Started to send {bans.Count()} bans to database!");
        }
        void AddAuths(int level, IPlayer adder = null, IPlayer player = null, bool singleAdd = false)
        {
            string lvl = Convert.ToString(level);

            if (singleAdd && player != null)
            {
                if (!AuthList(lvl).Contains(player.Id))
                {
                    if (IsMod(player.Id))
                    {
                        ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.None, null, null);
                        if (logAdding)
                        {
                            Log(logFilename, Lang("Log Removed", null, player.Id, Lang("Auth 1")));
                        }
                    }

                    if (IsOwner(player.Id))
                    {
                        ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.None, null, null);
                        if (logAdding)
                        {
                            Log(logFilename, Lang("Log Removed", null, player.Id, Lang("Auth 2")));
                        }
                    }
                    ServerUsers.Save();

                    return;
                }

                if (IsMod(player.Id) || IsOwner(player.Id))
                {
                    return;
                }

                if (level == 1 && !IsMod(player.Id))
                {
                    ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.Moderator, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty));

                    if (logAdding)
                    {
                        Log(logFilename, Lang("Log Added", null, player.Id, Lang("Auth 1")));
                    }
                }

                if (level == 2 || !IsOwner(player.Id))
                {
                    ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.Owner, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty));

                    if (logAdding)
                    {
                        Log(logFilename, Lang("Log Added", null, player.Id, Lang("Auth 2")));
                    }
                }

                ServerUsers.Save();

                if (addingMessage)
                {
                    Puts(Lang($"Console Message", null, player.Id, lvl));
                }

                if (adder != null)
                {
                    adder.Reply(Lang($"Added Message", adder.Id, player.Id, Lang($"Auth {lvl}")));
                }

                if (player != null)
                {
                    timer.Once(5f, () => {
                        player.Reply(Lang($"Given Auth Level", player.Id, lvl));
                    });
                }

                return;
            }

            if (removeUnlisted)
            {
                //int times = Members(1);
                foreach (var member in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator))
                {
                    if (!AuthList("1").Contains(member.steamid.ToString()))
                    {
                        timer.Once(0.01f, () =>
                        {
                            ServerUsers.Set(member.steamid, ServerUsers.UserGroup.None, null, null);
                            ServerUsers.Save();

                            if (logAdding)
                            {
                                Log(logFilename, Lang("Log Removed", null, member.steamid.ToString(), Lang("Auth 1")));
                            }

                            if (addingMessage)
                            {
                                Puts(Lang($"Console Message Removal", null, member.steamid.ToString(), member.group.ToString()));
                            }

                            if (adder != null)
                            {
                                adder.Reply(Lang($"Removed Message", adder.Id, member.steamid.ToString(), member.group.ToString()));
                            }
                        });
                    }
                }

                foreach (var member in ServerUsers.GetAll(ServerUsers.UserGroup.Owner))
                {
                    if (!AuthList("2").Contains(member.steamid.ToString()))
                    {
                        timer.Once(0.01f, () =>
                        {
                            ServerUsers.Set(member.steamid, ServerUsers.UserGroup.None, null, null);
                            ServerUsers.Save();

                            if (logAdding)
                            {
                                Log(logFilename, Lang("Log Removed", null, member.steamid.ToString(), Lang("Auth 2")));
                            }

                            if (addingMessage)
                            {
                                Puts(Lang($"Console Message Removal", null, member.steamid.ToString(), member.group.ToString()));
                            }

                            if (adder != null)
                            {
                                adder.Reply(Lang($"Removed Message", adder.Id, member.steamid.ToString(), member.group.ToString()));
                            }
                        });
                    }
                }
            }

            foreach (string ID in Config["Authentication List", $"Auth Level {lvl}"] as List <object> )
            {
                if (string.IsNullOrEmpty(ID))
                {
                    return;
                }

                if (!ID.IsSteamId())
                {
                    PrintWarning(Lang("Not SteamId", null, ID));
                    return;
                }

                if (level == 1 && AuthList(lvl).Contains(ID) && !IsMod(ID))
                {
                    if (adder != null && !IsMod(ID) || !IsOwner(ID))
                    {
                        adder.Reply(Lang($"Added Message", adder.Id, ID, Lang($"Auth {lvl}", adder.Id)));
                    }

                    if (addingMessage && !IsMod(ID) || !IsOwner(ID))
                    {
                        Puts(Lang($"Console Message", null, ID, lvl));
                    }

                    ServerUsers.Set(Convert.ToUInt64(ID), ServerUsers.UserGroup.Moderator, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty));

                    if (logAdding)
                    {
                        Log(logFilename, Lang("Log Added", null, ID, Lang("Auth 1")));
                    }
                }

                if (level == 2 && AuthList(lvl).Contains(ID) && !IsOwner(ID))
                {
                    if (adder != null && !IsMod(ID) || !IsOwner(ID))
                    {
                        adder.Reply(Lang($"Added Message", adder.Id, ID, Lang($"Auth {lvl}", adder.Id)));
                    }

                    if (addingMessage && !IsMod(ID) || !IsOwner(ID))
                    {
                        Puts(Lang($"Console Message", null, ID, lvl));
                    }

                    ServerUsers.Set(Convert.ToUInt64(ID), ServerUsers.UserGroup.Owner, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty));

                    if (logAdding)
                    {
                        Log(logFilename, Lang("Log Added", null, ID, Lang("Auth 2")));
                    }
                }

                ServerUsers.Save();
            }
        }
Beispiel #14
0
        private void OnServerInitialized()
        {
            if (!permission.PermissionExists(excludePermission))
            {
                permission.RegisterPermission(excludePermission, this);
            }
            playerConnections = Interface.GetMod().DataFileSystem.ReadObject <StoredData>(this.Title);
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                UpdatePlayer(player);
            }
            StoredData cleanedConnections = new StoredData();

            foreach (var pair in playerConnections.PlayerInfo)
            {
                if (UnixTimeStampUTC() - pair.Value.LastTime < removeRecordAfterDays * 86400)
                {
                    cleanedConnections.PlayerInfo.Add(pair.Key, pair.Value);
                }
                //cleanedConnections.PlayerInfo[pair.Key].LastDateTime = UnixTimeStampToDateTime(pair.Value.LastTime).ToString();
            }
            playerConnections = cleanedConnections;
            SaveData();
            cleanedConnections = null;
            if (excludeGroupOwner)
            {
                foreach (var user in ServerUsers.GetAll(ServerUsers.UserGroup.Owner).ToList())
                {
                    groupOwner.Add(user.steamid);
                }
            }
            if (excludeGroupModerator)
            {
                foreach (var user in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator).ToList())
                {
                    groupModerator.Add(user.steamid);
                }
            }
            NextTick(() => {
                TimeSpan its = TimeSpan.FromSeconds(inactiveAfter);
                TimeSpan ts  = TimeSpan.FromSeconds(timerJob);
                if (timerEnabled)
                {
                    Puts($"Purge will be executed every: {ts.TotalHours.ToString("0")} hours ({ts.Days.ToString("0")}D | {ts.Hours.ToString("0")}H | {ts.Minutes.ToString("0")}M | {ts.Seconds.ToString("0")}S)");
                    Puts($"Players become inactive after: {its.TotalDays.ToString("0")} days ({its.Days.ToString("0")}D | {its.Hours.ToString("0")}H | {its.Minutes.ToString("0")}M | {its.Seconds.ToString("0")}S)");
                    timer.Every(timerJob, () => MainTimer(false));
                }
                else
                {
                    Puts("Timer function disabled by config. Purge needs to be started by command 'autopurge.run'");
                }

                if (Clans && useClansIO)
                {
                    clansEnabled = true;
                    Puts("Plugin 'Clans' found - Clan support activated");
                }
                if (!Clans && useClansIO)
                {
                    PrintWarning("Plugin 'Clans' not found - Clan support not active");
                }
                if (Friends && useFriendsApi)
                {
                    friendsEnabled = true;
                    Puts("Plugin 'Friends' found - Friends support activated");
                }
                if (!Friends && useFriendsApi)
                {
                    PrintWarning("Plugin 'Friends' not found - Friends support not active");
                }
                if (testMode)
                {
                    PrintWarning("Running in TestMode. Nothing will be purged");
                }
                if (purgeOnStart)
                {
                    MainTimer(true);
                }
            });
        }
Beispiel #15
0
 public static ServerUsers.User[] Bans()
 {
     return(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).ToArray <ServerUsers.User>());
 }
Beispiel #16
0
        private void PullBansFromServer()
        {
            var query = string.Format(MySqlConstants.SELECT_ALL_BANS, Settings.Instance.DatabaseName, Settings.Instance.TableName);

            PerformDatabaseQuery(query, (responseRows) =>
            {
                if (responseRows == null)
                {
                    return;
                }

                HashSet <ulong> localBans = new HashSet <ulong>(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Select(x => x.steamid));

                Settings.Instance.databaseBans.Clear();

                if (responseRows.Any())
                {
                    //Add all database bans to local file
                    foreach (var row in responseRows)
                    {
                        var playerID = row["steamid"].ToString();

                        if (string.IsNullOrEmpty(playerID))
                        {
                            continue;
                        }

                        ulong steamID;
                        if (!ulong.TryParse(playerID, out steamID))
                        {
                            return;
                        }

                        var username = row["name"].ToString();
                        var reason   = row["reason"].ToString();

                        Settings.Instance.databaseBans.Add(steamID, new PlayerBan(steamID, reason));

                        if (!UsernameValid(steamID, username))
                        {
                            UnnamedBans.Add(new PlayerBan(steamID, reason));
                        }

                        if (localBans.Remove(steamID)) //No need to reban people
                        {
                            continue;
                        }

                        ServerUsers.Set(steamID, ServerUsers.UserGroup.Banned, playerID, reason);

                        BasePlayer player = BasePlayer.FindByID(steamID);

                        if (player != null)
                        {
                            player.Kick("Bans share across servers :)");
                        }
                    }

                    //Dont want to delete local ban list accidently
                    foreach (var player in localBans) //Unban users who aren't found on the database
                    {
                        ServerUsers.Remove(player);
                    }

                    if (UnnamedBans.Count > 0)
                    {
                        timer.In(10f, UpdateDatabaseUsernames);
                    }

                    Puts($"Updated ban list - {responseRows.Count} bans pulled from database");

                    Settings.Save();
                }
            });
        }