示例#1
0
        public async Task <PostingPermissionDto> IsPostingAllowedAsync(TPrimaryKey threadId, string userIpAddress)
        {
            var bans = await _context.Bans
                       .Where(
                ban =>
                ((ban.Category == null) || (ban.Category.Threads.Any(thread => thread.Id == threadId))) &&
                (!ban.IsDeleted) &&
                (ban.Start <= DateTime.UtcNow) &&
                (ban.End >= DateTime.UtcNow))
                       .ToListAsync();

            var relatedBan = bans
                             .FirstOrDefault(ban =>
                                             _ipAddressCalculator.IsInRange(ban.LowerIpAddress, ban.UpperIpAddress, userIpAddress));

            var isPostingAllowed = relatedBan == null;

            BanDto banDto = null;

            if (!isPostingAllowed)
            {
                banDto = _mapper.Map <BanDto>(relatedBan);
            }

            return(new PostingPermissionDto {
                IsPostingAllowed = isPostingAllowed, Ban = banDto
            });
        }
示例#2
0
        public async Task <BaseResult> BanAsync(BanDto banDto)
        {
            if (banDto == null)
            {
                throw new ArgumentNullException(nameof(banDto));
            }

            await using var context = _contextFactory.CreateContext();
            int objectionableUserId = default;

            if (!banDto.ObjectionableUserId.HasValue && banDto.ObjectionableTripId.HasValue)
            {
                objectionableUserId = (await context.Trips.AsNoTracking()
                                       .FirstAsync(x => x.Id == banDto.ObjectionableTripId)).UserId;
            }
            if (banDto.ObjectionableUserId.HasValue && !banDto.ObjectionableTripId.HasValue)
            {
                objectionableUserId = banDto.ObjectionableUserId.Value;
            }
            await context.ObjectionableContents.AddAsync(new ObjectionableContent
            {
                UserId = banDto.UserId,
                ObjectionableUserId   = objectionableUserId,
                ObjectionableReasonId = banDto.ObjectionableReasonId,
                TripId  = banDto.ObjectionableTripId ?? default,
                Comment = banDto.Comment,
                BanDate = DateTime.UtcNow
            });
示例#3
0
        public async Task <User> BanUserAsync(BanDto banDto)
        {
            var user = await FindUserForBanAsync(banDto?.UserId).ConfigureAwait(false);

            var ban = await _banService.AddBan(banDto).ConfigureAwait(false);

            return(user);
        }
示例#4
0
        public async Task <ActionResult> BanUser([FromRoute] string userId, [FromBody] BanDto dto)
        {
            var user = await _appDbContext.Users.FirstOrDefaultAsync(i => i.Id == Guid.Parse(userId));

            user.BanLiftedDate = DateTime.Now + dto.BanDuration;

            await _appDbContext.SaveChangesAsync();

            return(Ok());
        }
示例#5
0
        public async Task <ActionResult> BanAsync([FromBody] BanDto banDto)
        {
            _logger.LogMethodCallingWithObject(banDto);
            var currentRole = User.Claims.FirstOrDefault(x => x.Type.Equals(ClaimsIdentity.DefaultRoleClaimType))?.Value;
            var userRole    = (await _userManager.GetUserRoleAsync(Guid.Parse(banDto.Id))).ToString();

            if (Equals(userRole, "Account manager") || Equals(userRole, currentRole))
            {
                return(Forbid("Lack of rights"));
            }
            await _userManager.BanUserAsync(banDto);

            return(Ok());
        }
示例#6
0
        private async void OnListViewItemSelected(object sender, ItemTappedEventArgs e)
        {
            if (!(e.Item is ObjectionableReason selectedObjectionableReason))
            {
                return;
            }

            ObjectionableReasonList.SelectedItem = null;
            var objectionableReasonId = selectedObjectionableReason.Id;
            var result = await DisplayAlert(AppResources.ConfirmAction, AppResources.AreYouSure,
                                            AppResources.ConfirmActionYes, AppResources.ConfirmActionNo);

            if (result)
            {
                var banDto = new BanDto
                {
                    ObjectionableUserId   = _objectionableUserId,
                    ObjectionableTripId   = _tripId,
                    ObjectionableReasonId = objectionableReasonId,
                    Comment = EditorCommentReason.Text
                };

                var serializableObj = JsonConvert.SerializeObject(banDto);
                var fullUrl         = Url.BanUser;
                var(baseResult, content) = await _network.LoadDataPostAsync(fullUrl, serializableObj, null);

                switch (baseResult.Result)
                {
                case StatusCode.Ok:
                    await DisplayAlert(AppResources.Notification, AppResources.YourReportHasBeenSentSuccessfully,
                                       AppResources.Ok);

                    await Navigation.PopAsync(true);

                    break;

                default:
                    await DisplayAlert(AppResources.Notification, baseResult.Message, AppResources.Ok);

                    await Navigation.PopAsync(true);

                    break;
                }
            }
        }
示例#7
0
 public async Task <ActionResult> Ban([FromBody] BanDto banDto)
 {
     return(await HandleExceptions(async() =>
     {
         var currentRole = User.Claims.FirstOrDefault(x => x.Type.Equals(ClaimsIdentity.DefaultRoleClaimType))?.Value;
         var userRole = (await _userManager.GetUserRoleAsync(banDto.Id)).ToString();
         if (userRole == "Account manager" || userRole == currentRole)
         {
             return Forbid("Lack of rights");
         }
         if (ModelState.IsValid)
         {
             await _userManager.BanUserAsync(banDto);
             return Ok();
         }
         return BadRequest("Model state is not valid");
     }));
 }
示例#8
0
        public async Task <ActionResult <BaseResult> > BanAsync([FromBody, Required] BanDto banDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var login = HttpContext.User.Identity.Name;

            if (!string.IsNullOrEmpty(login))
            {
                var userAuth = await _authService.GetActiveUserByLoginAsNoTrackingAsync(login);

                banDto.UserId = userAuth.UserId;
            }

            return(await _userService.BanAsync(banDto));
        }
示例#9
0
        public async Task <BanRecord> AddBan(BanDto banDto)
        {
            var ban = new BanRecord
            {
                UserId         = banDto?.UserId,
                Description    = banDto.Description,
                ExpirationDate = banDto.ExpirationDate,
            };
            await _context.BanRecords.AddAsync(ban).ConfigureAwait(false);

            await _context.SaveChangesAsync().ConfigureAwait(false);

            var user = await _context.Users.FirstOrDefaultAsync(u => u.Id == ban.UserId).ConfigureAwait(false);

            user.BanRecordId = ban.Id;
            await _context.SaveChangesAsync().ConfigureAwait(false);

            return(ban);
        }
示例#10
0
        public async Task <ActionResult> Ban([FromBody] BanDto banDto)
        {
            if (banDto == null)
            {
                return(BadRequest());
            }

            banDto.CreatedDate = DateTime.UtcNow;

            var existingBlock = _context.Bans.AsQueryable().FirstOrDefault(x => x.Email == banDto.Email);

            if (existingBlock != null)
            {
                return(Ok(existingBlock));
            }

            await _context.Bans.AddAsync(_mapper.Map <Bans>(banDto));

            await _context.SaveChangesAsync();

            return(Ok());
        }
示例#11
0
        public bool Execute(GameServer server, Player plr, string[] args)
        {
            if (args.Length < 1)
            {
                plr.SendConsoleMessage(S4Color.Red + "Wrong Usage, possible usages:");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> - permanent ban");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> pardon - unban");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> days <duration(days)> - ban for x days");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> mins <duration(minutes)> - ban for x minutes");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> secs <duration(seconds)> - ban for x seconds");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> <currentdate(ex:20180130)> <unk> <duration(seconds)>");
                return(true);
            }

            if (args.Length < 2)
            {
                Array.Resize(ref args, args.Length + 1);
                args[1] = "none";
            }

            bool           unban             = false;
            string         nickname          = args[0];
            int            DurationInSeconds = 0;
            DateTimeOffset curDate           = DateTimeOffset.MinValue;

            if (args[1] == "pardon")
            {
                unban = true;
            }
            else if (args[1] == "secs")
            {
                int.TryParse(args[2], out DurationInSeconds);
            }
            else if (args[1] == "mins")
            {
                int.TryParse(args[2], out var DurationInMinutes);
                DurationInSeconds = DurationInMinutes * 60;
            }
            else if (args[1] == "days")
            {
                int.TryParse(args[2], out var DurationInDays);
                DurationInSeconds = DurationInDays * 24 * 60 * 60;  //days->hours->minutes->seconds
            }
            else if (DateTimeOffset.TryParseExact(args[1], "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out curDate))
            {
                if (args.Length >= 4)
                {
                    int.TryParse(args[2], out var Unk);
                    int.TryParse(args[3], out var DurationInMs);
                    DurationInSeconds = DurationInMs / 60;
                }
            }
            else
            {
                DurationInSeconds = (int)TimeSpan.FromDays(10 * 365).TotalSeconds;
            }

            AccountDto account;

            using (var db = AuthDatabase.Open())
            {
                account = (db.Find <AccountDto>(statement => statement
                                                .Include <BanDto>(join => join.LeftOuterJoin())
                                                .Where($"{nameof(AccountDto.Nickname):C} = @Nickname")
                                                .WithParameters(new { Nickname = nickname })))
                          .FirstOrDefault();

                if (account == null)
                {
                    plr.SendConsoleMessage(S4Color.Red + "Unknown player!");
                    return(true);
                }

                if (unban)
                {
                    foreach (var accountBan in account.Bans)
                    {
                        accountBan.Duration = 0;
                        db.UpdateAsync(accountBan);
                    }

                    db.UpdateAsync(account);
                    Console.WriteLine($"{plr?.Account?.Nickname?? "Unknown player"} has unbanned {account.Nickname}");
                    if (plr != null)
                    {
                        plr.SendConsoleMessage(S4Color.Green + $"Unbanned {account.Nickname}");
                    }
                }
                else
                {
                    var duration = TimeSpan.FromSeconds(DurationInSeconds);

                    var ban = new BanDto()
                    {
                        AccountId = account.Id,
                        Account   = account,
                        Date      = 0,
                        Duration  = DateTimeOffset.Now.Add(duration).ToUnixTimeSeconds(),
                        Reason    = "GMConsole"
                    };

                    var player = GameServer.Instance.PlayerManager.Get((ulong)account.Id);
                    player?.Session?.CloseAsync();

                    db.InsertAsync(ban);
                    db.UpdateAsync(account);

                    var uptime = new StringBuilder();
                    if (duration.Days > 0)
                    {
                        uptime.AppendFormat("{0} days ", duration.Days);
                    }
                    if (duration.Hours > 0)
                    {
                        uptime.AppendFormat("{0} hours ", duration.Hours);
                    }
                    if (duration.Minutes > 0)
                    {
                        uptime.AppendFormat("{0} minutes ", duration.Minutes);
                    }
                    if (duration.Seconds > 0)
                    {
                        uptime.AppendFormat("{0} seconds ", duration.Seconds);
                    }

                    Console.WriteLine($"{plr?.Account?.Nickname ?? "Unknown player"} has banned {account.Nickname} for {uptime.ToString()}");
                    if (plr != null)
                    {
                        plr.SendConsoleMessage(S4Color.Green + $"Banned {account.Nickname} for {uptime.ToString()}");
                    }
                }
            }

            return(true);
        }
示例#12
0
        public async Task <bool> Execute(GameServer server, Player plr, string[] args)
        {
            if (args.Length < 1)
            {
                plr.SendConsoleMessage(S4Color.Red + "Wrong Usage, possible usages:");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> roomkick - roomkick");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> - permanent ban");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> pardon - unban");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> days <duration(days)> - ban for x days");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> mins <duration(minutes)> - ban for x minutes");
                plr.SendConsoleMessage(S4Color.Red + "> /ban <username> secs <duration(seconds)> - ban for x seconds");
                plr.SendConsoleMessage(S4Color.Red +
                                       "> /ban <username> <currentdate(ex:20180130)> <unk> <duration(seconds)>");
                return(true);
            }

            if (args.Length < 2)
            {
                Array.Resize(ref args, args.Length + 1);
                args[1] = "none";
            }

            var unban             = false;
            var nickname          = args[0];
            var durationInSeconds = 0;

            try
            {
                AccountDto account;
                switch (args[1])
                {
                case "pardon":
                    unban = true;
                    break;

                case "roomkick":
                    using (var db = AuthDatabase.Open())
                    {
                        account = (await DbUtil.FindAsync <AccountDto>(db, statement => statement
                                                                       .Include <BanDto>(join => join.LeftOuterJoin())
                                                                       .Where($"{nameof(AccountDto.Nickname):C} = @Nickname")
                                                                       .WithParameters(new { Nickname = nickname }))
                                   ).FirstOrDefault();

                        if (account == null)
                        {
                            plr.SendConsoleMessage(S4Color.Red + "Unknown player");
                            return(true);
                        }

                        var player = GameServer.Instance.PlayerManager.Get((ulong)account.Id);
                        if (player == null)
                        {
                            plr.SendConsoleMessage(S4Color.Red + "Player is not online");
                            return(true);
                        }

                        player.Room?.Leave(player, RoomLeaveReason.ModeratorKick);
                        plr.SendConsoleMessage(S4Color.Green + $"Kicked {account.Nickname} out of room");
                    }

                    return(true);

                case "secs":
                    int.TryParse(args[2], out durationInSeconds);
                    break;

                case "mins":
                    int.TryParse(args[2], out var durationInMinutes);
                    durationInSeconds = durationInMinutes * 60;
                    break;

                case "days":
                    int.TryParse(args[2], out var durationInDays);
                    durationInSeconds = durationInDays * 24 * 60 * 60; //days->hours->minutes->seconds
                    break;

                default:
                    if (DateTimeOffset.TryParseExact(args[1], "yyyyMMdd", CultureInfo.InvariantCulture,
                                                     DateTimeStyles.None, out _))
                    {
                        if (args.Length >= 4)
                        {
                            int.TryParse(args[2], out var unk);
                            int.TryParse(args[3], out var durationInMs);
                            durationInSeconds = durationInMs / 60;
                        }
                    }
                    else
                    {
                        durationInSeconds = (int)TimeSpan.FromDays(10 * 365).TotalSeconds;
                    }

                    break;
                }

                using (var db = AuthDatabase.Open())
                {
                    account = (await DbUtil.FindAsync <AccountDto>(db, statement => statement
                                                                   .Include <BanDto>(join => join.LeftOuterJoin())
                                                                   .Where($"{nameof(AccountDto.Nickname):C} = @Nickname")
                                                                   .WithParameters(new { Nickname = nickname }))
                               ).FirstOrDefault();

                    if (account == null)
                    {
                        plr.SendConsoleMessage(S4Color.Red + "Unknown player");
                        return(true);
                    }

                    if (unban)
                    {
                        foreach (var accountBan in account.Bans)
                        {
                            accountBan.Duration = 0;
                            await DbUtil.UpdateAsync(db, accountBan);
                        }

                        await DbUtil.UpdateAsync(db, account);

                        CommandManager.Logger.Information(
                            $"{plr?.Account?.Nickname ?? "Unknown player"} has unbanned {account.Nickname}");
                        plr?.SendConsoleMessage(S4Color.Green + $"Unbanned {account.Nickname}");
                    }
                    else
                    {
                        if (plr.Account.SecurityLevel <= (SecurityLevel)account.SecurityLevel)
                        {
                            plr.SendConsoleMessage($"You cannot ban this player");
                            return(true);
                        }

                        var duration = TimeSpan.FromSeconds(durationInSeconds);

                        var ban = new BanDto
                        {
                            AccountId = account.Id,
                            Account   = account,
                            Date      = 0,
                            Duration  = DateTimeOffset.Now.Add(duration).ToUnixTimeSeconds(),
                            Reason    = $"GMConsole - {plr?.Account?.Nickname ?? "n/A"}"
                        };

                        var player = GameServer.Instance.PlayerManager.Get((ulong)account.Id);
                        player?.Session?.CloseAsync();

                        await DbUtil.InsertAsync(db, ban);

                        await DbUtil.UpdateAsync(db, account);

                        var uptime = new StringBuilder();
                        if (duration.Days > 0)
                        {
                            uptime.AppendFormat("{0} days ", duration.Days);
                        }
                        if (duration.Hours > 0)
                        {
                            uptime.AppendFormat("{0} hours ", duration.Hours);
                        }
                        if (duration.Minutes > 0)
                        {
                            uptime.AppendFormat("{0} minutes ", duration.Minutes);
                        }
                        if (duration.Seconds > 0)
                        {
                            uptime.AppendFormat("{0} seconds ", duration.Seconds);
                        }

                        CommandManager.Logger.Information(
                            $"{plr?.Account?.Nickname ?? "Unknown player"} has banned {account.Nickname} for {uptime}");
                        plr?.SendConsoleMessage(S4Color.Green + $"Banned {account.Nickname} for {uptime}");
                    }
                }
            }
            catch (Exception)
            {
                plr.SendConsoleMessage(S4Color.Red + "Unknown player");
            }

            return(true);
        }