1
0

BanListEui.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using System.Threading.Tasks;
  2. using Content.Server.Administration.Managers;
  3. using Content.Server.Database;
  4. using Content.Server.EUI;
  5. using Content.Shared.Administration;
  6. using Content.Shared.Administration.BanList;
  7. using Content.Shared.Eui;
  8. using Robust.Shared.Network;
  9. namespace Content.Server.Administration.BanList;
  10. public sealed class BanListEui : BaseEui
  11. {
  12. [Dependency] private readonly IAdminManager _admins = default!;
  13. [Dependency] private readonly IPlayerLocator _playerLocator = default!;
  14. [Dependency] private readonly IServerDbManager _db = default!;
  15. public BanListEui()
  16. {
  17. IoCManager.InjectDependencies(this);
  18. }
  19. private Guid BanListPlayer { get; set; }
  20. private string BanListPlayerName { get; set; } = string.Empty;
  21. private List<SharedServerBan> Bans { get; } = new();
  22. private List<SharedServerRoleBan> RoleBans { get; } = new();
  23. public override void Opened()
  24. {
  25. base.Opened();
  26. _admins.OnPermsChanged += OnPermsChanged;
  27. }
  28. public override void Closed()
  29. {
  30. base.Closed();
  31. _admins.OnPermsChanged -= OnPermsChanged;
  32. }
  33. public override EuiStateBase GetNewState()
  34. {
  35. return new BanListEuiState(BanListPlayerName, Bans, RoleBans);
  36. }
  37. private void OnPermsChanged(AdminPermsChangedEventArgs args)
  38. {
  39. if (args.Player == Player && !_admins.HasAdminFlag(Player, AdminFlags.Ban))
  40. {
  41. Close();
  42. }
  43. }
  44. private async Task LoadBans(NetUserId userId)
  45. {
  46. foreach (var ban in await _db.GetServerBansAsync(null, userId, null, null))
  47. {
  48. SharedServerUnban? unban = null;
  49. if (ban.Unban is { } unbanDef)
  50. {
  51. var unbanningAdmin = unbanDef.UnbanningAdmin == null
  52. ? null
  53. : (await _playerLocator.LookupIdAsync(unbanDef.UnbanningAdmin.Value))?.Username;
  54. unban = new SharedServerUnban(unbanningAdmin, ban.Unban.UnbanTime.UtcDateTime);
  55. }
  56. (string, int cidrMask)? ip = ("*Hidden*", 0);
  57. var hwid = "*Hidden*";
  58. if (_admins.HasAdminFlag(Player, AdminFlags.Pii))
  59. {
  60. ip = ban.Address is { } address
  61. ? (address.address.ToString(), address.cidrMask)
  62. : null;
  63. hwid = ban.HWId?.ToString();
  64. }
  65. Bans.Add(new SharedServerBan(
  66. ban.Id,
  67. ban.UserId,
  68. ip,
  69. hwid,
  70. ban.BanTime.UtcDateTime,
  71. ban.ExpirationTime?.UtcDateTime,
  72. ban.Reason,
  73. ban.BanningAdmin == null
  74. ? null
  75. : (await _playerLocator.LookupIdAsync(ban.BanningAdmin.Value))?.Username,
  76. unban
  77. ));
  78. }
  79. }
  80. private async Task LoadRoleBans(NetUserId userId)
  81. {
  82. foreach (var ban in await _db.GetServerRoleBansAsync(null, userId, null, null))
  83. {
  84. SharedServerUnban? unban = null;
  85. if (ban.Unban is { } unbanDef)
  86. {
  87. var unbanningAdmin = unbanDef.UnbanningAdmin == null
  88. ? null
  89. : (await _playerLocator.LookupIdAsync(unbanDef.UnbanningAdmin.Value))?.Username;
  90. unban = new SharedServerUnban(unbanningAdmin, ban.Unban.UnbanTime.UtcDateTime);
  91. }
  92. (string, int cidrMask)? ip = ("*Hidden*", 0);
  93. var hwid = "*Hidden*";
  94. if (_admins.HasAdminFlag(Player, AdminFlags.Pii))
  95. {
  96. ip = ban.Address is { } address
  97. ? (address.address.ToString(), address.cidrMask)
  98. : null;
  99. hwid = ban.HWId?.ToString();
  100. }
  101. RoleBans.Add(new SharedServerRoleBan(
  102. ban.Id,
  103. ban.UserId,
  104. ip,
  105. hwid,
  106. ban.BanTime.UtcDateTime,
  107. ban.ExpirationTime?.UtcDateTime,
  108. ban.Reason,
  109. ban.BanningAdmin == null
  110. ? null
  111. : (await _playerLocator.LookupIdAsync(ban.BanningAdmin.Value))?.Username,
  112. unban,
  113. ban.Role
  114. ));
  115. }
  116. }
  117. private async Task LoadFromDb()
  118. {
  119. Bans.Clear();
  120. RoleBans.Clear();
  121. var userId = new NetUserId(BanListPlayer);
  122. BanListPlayerName = (await _playerLocator.LookupIdAsync(userId))?.Username ??
  123. string.Empty;
  124. await LoadBans(userId);
  125. await LoadRoleBans(userId);
  126. StateDirty();
  127. }
  128. public async Task ChangeBanListPlayer(Guid banListPlayer)
  129. {
  130. BanListPlayer = banListPlayer;
  131. await LoadFromDb();
  132. }
  133. }