| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- using System.Threading.Tasks;
- using Content.Server.Administration.Managers;
- using Content.Server.Database;
- using Content.Server.EUI;
- using Content.Shared.Administration;
- using Content.Shared.Administration.BanList;
- using Content.Shared.Eui;
- using Robust.Shared.Network;
- namespace Content.Server.Administration.BanList;
- public sealed class BanListEui : BaseEui
- {
- [Dependency] private readonly IAdminManager _admins = default!;
- [Dependency] private readonly IPlayerLocator _playerLocator = default!;
- [Dependency] private readonly IServerDbManager _db = default!;
- public BanListEui()
- {
- IoCManager.InjectDependencies(this);
- }
- private Guid BanListPlayer { get; set; }
- private string BanListPlayerName { get; set; } = string.Empty;
- private List<SharedServerBan> Bans { get; } = new();
- private List<SharedServerRoleBan> RoleBans { get; } = new();
- public override void Opened()
- {
- base.Opened();
- _admins.OnPermsChanged += OnPermsChanged;
- }
- public override void Closed()
- {
- base.Closed();
- _admins.OnPermsChanged -= OnPermsChanged;
- }
- public override EuiStateBase GetNewState()
- {
- return new BanListEuiState(BanListPlayerName, Bans, RoleBans);
- }
- private void OnPermsChanged(AdminPermsChangedEventArgs args)
- {
- if (args.Player == Player && !_admins.HasAdminFlag(Player, AdminFlags.Ban))
- {
- Close();
- }
- }
- private async Task LoadBans(NetUserId userId)
- {
- foreach (var ban in await _db.GetServerBansAsync(null, userId, null, null))
- {
- SharedServerUnban? unban = null;
- if (ban.Unban is { } unbanDef)
- {
- var unbanningAdmin = unbanDef.UnbanningAdmin == null
- ? null
- : (await _playerLocator.LookupIdAsync(unbanDef.UnbanningAdmin.Value))?.Username;
- unban = new SharedServerUnban(unbanningAdmin, ban.Unban.UnbanTime.UtcDateTime);
- }
- (string, int cidrMask)? ip = ("*Hidden*", 0);
- var hwid = "*Hidden*";
- if (_admins.HasAdminFlag(Player, AdminFlags.Pii))
- {
- ip = ban.Address is { } address
- ? (address.address.ToString(), address.cidrMask)
- : null;
- hwid = ban.HWId?.ToString();
- }
- Bans.Add(new SharedServerBan(
- ban.Id,
- ban.UserId,
- ip,
- hwid,
- ban.BanTime.UtcDateTime,
- ban.ExpirationTime?.UtcDateTime,
- ban.Reason,
- ban.BanningAdmin == null
- ? null
- : (await _playerLocator.LookupIdAsync(ban.BanningAdmin.Value))?.Username,
- unban
- ));
- }
- }
- private async Task LoadRoleBans(NetUserId userId)
- {
- foreach (var ban in await _db.GetServerRoleBansAsync(null, userId, null, null))
- {
- SharedServerUnban? unban = null;
- if (ban.Unban is { } unbanDef)
- {
- var unbanningAdmin = unbanDef.UnbanningAdmin == null
- ? null
- : (await _playerLocator.LookupIdAsync(unbanDef.UnbanningAdmin.Value))?.Username;
- unban = new SharedServerUnban(unbanningAdmin, ban.Unban.UnbanTime.UtcDateTime);
- }
- (string, int cidrMask)? ip = ("*Hidden*", 0);
- var hwid = "*Hidden*";
- if (_admins.HasAdminFlag(Player, AdminFlags.Pii))
- {
- ip = ban.Address is { } address
- ? (address.address.ToString(), address.cidrMask)
- : null;
- hwid = ban.HWId?.ToString();
- }
- RoleBans.Add(new SharedServerRoleBan(
- ban.Id,
- ban.UserId,
- ip,
- hwid,
- ban.BanTime.UtcDateTime,
- ban.ExpirationTime?.UtcDateTime,
- ban.Reason,
- ban.BanningAdmin == null
- ? null
- : (await _playerLocator.LookupIdAsync(ban.BanningAdmin.Value))?.Username,
- unban,
- ban.Role
- ));
- }
- }
- private async Task LoadFromDb()
- {
- Bans.Clear();
- RoleBans.Clear();
- var userId = new NetUserId(BanListPlayer);
- BanListPlayerName = (await _playerLocator.LookupIdAsync(userId))?.Username ??
- string.Empty;
- await LoadBans(userId);
- await LoadRoleBans(userId);
- StateDirty();
- }
- public async Task ChangeBanListPlayer(Guid banListPlayer)
- {
- BanListPlayer = banListPlayer;
- await LoadFromDb();
- }
- }
|