private async ValueTask HandleAddOfflineIp(string target, string name, WebApiUser user, string reason)
        {
            if (IsIpAInvalid(target))
            {
                await user.WriteConsole($"Unable to comply: Invalid target address.", "ban system");

                return;
            }

            var ban = new PlayerBan(target,
                                    new string[]
            {
                $"Dashboard: {user.Password.User} [ban offline]"
            },
                                    DateTime.Now,
                                    new string[]
            {
                name
            }, reason);

            if (!await _database.Add(ban.IpAddress, ban))
            {
                await user.WriteConsole($"Unable to comply: Ban already exists.", "ban handler");
            }
            else
            {
                await user.WriteConsole($"Ban added.", "ban handler");
            }
        }
Example #2
0
        public void InsertBan(PlayerBan ban)
        {
            string sql =
                "INSERT INTO prefix_bans " +
                "(player_id, admin_id, ban_reason, ban_duration, ban_type, ban_timestamp) VALUES " +
                "(@player_id, @admin_id, @ban_reason, @ban_duration, @ban_type, @ban_timestamp)";

            NonQuery(sql,
                     "@player_id", ban.PlayerDatabaseId.ToString(),
                     "@admin_id", ban.AdminDatabaseId.ToString(),
                     "@ban_reason", ban.Reason,
                     "@ban_duration", ban.Duration.ToString(),
                     "@ban_type", ban.TypeId.ToString(),
                     "@ban_timestamp", GetTimestamp().ToString());
        }
Example #3
0
        public void InsertBan(Player p, Player a, string reason, bool ip, int duration = -1)
        {
            PlayerBan b = null;
            BanType   t = (ip ? BanType.IPAddress : BanType.Keyhash);

            if (duration < 0)
            {
                b = new PlayerBan(p.Name, p.KeyHash, p.RemoteAddressStr, a.Name, reason, t, p.DatabaseId, a.DatabaseId);
            }
            else
            {
                b = new PlayerBan(p.Name, p.KeyHash, p.RemoteAddressStr, a.Name, reason, new TimeSpan(0, 0, 0, duration), t, p.DatabaseId, a.DatabaseId);
            }
            core.Database.InsertBan(b);
        }
Example #4
0
        public override void Handle(string[] args)
        {
            var bans = Server.FindBansByName(PlayerName).ToList();

            if (bans.Count == 0)
            {
                SendMessage("Could not find any bans starting with this name.", LogMessageType.Error);
                return;
            }

            if (bans.Count > 1)
            {
                SendMessage("Found multiple bans starting with this name, be more specific.", LogMessageType.Error);
                return;
            }

            PlayerBan ban = bans.First();

            Server.RemoveBan(ban);
            SendMessage($"Unbanned {ban.ReferenceName} ({ban.GetIdentifier()}).", LogMessageType.Info);
        }
Example #5
0
        public static void InvokePlayerBan(ref ReferenceHub user, ref string userId, ref int duration, ref bool allow, ref string message, ref string reason)
        {
            PlayerBan playerBan = PlayerBanEvent;

            if (playerBan == null)
            {
                return;
            }
            // ev.Allow is already set to true in the constructor
            // Private field values set in the constructor to avoid triggering the logs
            PlayerBanEvent ev = new PlayerBanEvent(Plugin.Config.GetBool("exiled_log_ban_event", true), user, reason, userId, duration)
            {
                FullMessage = message,
                Reason      = reason
            };

            playerBan?.Invoke(ev);
            allow    = ev.Allow;
            userId   = ev.UserId;
            duration = ev.Duration;
            message  = ev.FullMessage;
            reason   = ev.Reason;
            user     = ev.BannedPlayer;
        }
        public static async void OnBanCommandAsync(Player sender, Player target, int days, string reason)
        {
            if (!target.IsLoggedIn)
            {
                sender.SendClientMessage(Color.Red, Messages.PlayerNotLoggedIn);
                return;
            }

            if (target.Account.AdminLevel > 0)
            {
                sender.SendClientMessage(Color.Red, "You can't use this command on admins.");
                return;
            }

            if (target == sender)
            {
                sender.SendClientMessage(Color.Red, Messages.CommandNotAllowedOnSelf);
                return;
            }

            if (days < 1)
            {
                sender.SendClientMessage(Color.Red, "You must enter at least one day.");
                return;
            }

            if (string.IsNullOrEmpty(reason))
            {
                sender.SendClientMessage(Color.Red, "Reason can not be empty.");
                return;
            }

            var account = target.Account;

            account.Bans++;

            var playerBan = new PlayerBan
            {
                Reason  = reason,
                AdminId = sender.Account.Id,
                OwnerId = target.Account.Id
            };

            var totalBanTime = DateTime.Now + TimeSpan.FromDays(days);

            if (account.Bans >= Configuration.Instance.MaximumBans)
            {
                playerBan.Duration = DateTime.MaxValue;

                target.SendClientMessage(Color.Red,
                                         $"This was the {Configuration.Instance.MaximumBans}ith and last ban. You have been banned permanently by {AdminRanks.AdminLevelNames[sender.Account.AdminLevel]} {sender.Name}.");
            }
            else
            {
                playerBan.Duration = totalBanTime;

                target.SendClientMessage(Color.Red, $"You have been banned by {sender.Name} for {days} day/s.");
                target.SendClientMessage(Color.Red, $"Reason: {reason}.");
            }

            await new PlayerAccountRepository(ConnectionFactory.GetConnection).UpdateAsync(account);
            await new PlayerBanRepository(ConnectionFactory.GetConnection).AddAsync(playerBan);

            BasePlayer.SendClientMessageToAll(Color.LightGray,
                                              $"{AdminRanks.AdminLevelNames[sender.Account.AdminLevel]} {sender.Name} has banned {target.Name} for {days} day/s.");

            await Task.Delay(Configuration.Instance.KickDelay);

            target.Kick();
        }
Example #7
0
        public override void HandlePost(HttpListenerContext ctx, WebUser user, string postData)
        {
            PlayerApiParams p = null;

            if ((p = TryJsonParse <PlayerApiParams>(ctx, postData)) == null)
            {
                return;
            }

            switch (p.Action)
            {
            case "players_update":
                WebAdmin.SendHtml(ctx, ToJson(Core.Players.GetPlayers_s()));
                break;

            case "players_swap":
                WebServer.LogAudit(user, "swapped slot #{0}", p.PlayerId.ToString());
                WebAdmin.SendHtml(ctx, ToJson(new QuickAdminResponse()));
                Core.Scheduler.PushTask(() => Core.Players.Swap(new Player(p.PlayerId)));
                break;

            case "players_kick":
                WebServer.LogAudit(user, "kicked slot #{0}", p.PlayerId.ToString());
                WebAdmin.SendHtml(ctx, ToJson(new QuickAdminResponse()));
                Core.Scheduler.PushTask(() => Core.Players.Kick(new Player(p.PlayerId)));
                break;

            case "players_ban":
                WebServer.LogAudit(user, "banned slot #{0}", p.PlayerId.ToString());
                WebAdmin.SendHtml(ctx, ToJson(new QuickAdminResponse()));
                Player player;
                if ((player = Core.Players.GetPlayerBySlot(p.PlayerId)) != null)
                {
                    PlayerBan ban;
                    //TODO: figure something out for adminId
                    string adminName = "WebAdmin";
                    string reason    = "WebAdmin";
                    int    adminDBId = 1;

                    if (p.BanDuration < 0)
                    {
                        ban = new PlayerBan(player.Name, player.KeyHash, player.RemoteAddress.ToString(), adminName, reason, p.BanType, player.DatabaseId, adminDBId);
                    }
                    else
                    {
                        TimeSpan duration = new TimeSpan(0, 0, p.BanDuration);
                        ban = new PlayerBan(player.Name, player.KeyHash, player.RemoteAddressStr, adminName, reason, duration, p.BanType, player.DatabaseId, adminDBId);
                    }

                    Core.Database.InsertBan(ban);



                    Core.Scheduler.PushTask(() => Core.Players.Kick(player));
                }



                break;
            }
        }
Example #8
0
        public override void BanPlayer(Player p, Player admin, TimeSpan duration, string reason = "")
        {
            PlayerBan b = new PlayerBan(p.Name, p.KeyHash, p.RemoteAddressStr, admin.Name, reason, duration, BanType.IPAddress, p.DatabaseId, admin.DatabaseId);

            Core.Database.InsertBan(b);
        }
Example #9
0
        public virtual void BanPlayer(Player p, Player admin, string reason = "")
        {
            PlayerBan b = new PlayerBan(p.Name, p.KeyHash, p.RemoteAddressStr, admin.Name, reason, BanType.Keyhash, p.DatabaseId, admin.DatabaseId);

            Core.Database.InsertBan(b);
        }
Example #10
0
 private bool UsernameValid(PlayerBan ban)
 {
     return(UsernameValid(ban.SteamID, ban.Username));
 }