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 }); }
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 });
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); }
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()); }
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()); }
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; } } }
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"); })); }
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)); }
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); }
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()); }
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); }
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); }