WhitelistCommands.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using Content.Server.Administration;
  2. using Content.Server.Database;
  3. using Content.Shared.Administration;
  4. using Content.Shared.CCVar;
  5. using Robust.Server.Player;
  6. using Robust.Shared.Configuration;
  7. using Robust.Shared.Console;
  8. using Robust.Shared.Network;
  9. namespace Content.Server.Whitelist;
  10. [AdminCommand(AdminFlags.Ban)]
  11. public sealed class AddWhitelistCommand : LocalizedCommands
  12. {
  13. public override string Command => "whitelistadd";
  14. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  15. {
  16. if (args.Length == 0)
  17. {
  18. shell.WriteError(Loc.GetString("shell-need-minimum-one-argument"));
  19. shell.WriteLine(Help);
  20. return;
  21. }
  22. var db = IoCManager.Resolve<IServerDbManager>();
  23. var loc = IoCManager.Resolve<IPlayerLocator>();
  24. var name = string.Join(' ', args).Trim();
  25. var data = await loc.LookupIdByNameOrIdAsync(name);
  26. if (data != null)
  27. {
  28. var guid = data.UserId;
  29. var isWhitelisted = await db.GetWhitelistStatusAsync(guid);
  30. if (isWhitelisted)
  31. {
  32. shell.WriteLine(Loc.GetString("cmd-whitelistadd-existing", ("username", data.Username)));
  33. return;
  34. }
  35. await db.AddToWhitelistAsync(guid);
  36. shell.WriteLine(Loc.GetString("cmd-whitelistadd-added", ("username", data.Username)));
  37. return;
  38. }
  39. shell.WriteError(Loc.GetString("cmd-whitelistadd-not-found", ("username", args[0])));
  40. }
  41. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  42. {
  43. if (args.Length == 1)
  44. {
  45. return CompletionResult.FromHint(Loc.GetString("cmd-whitelistadd-arg-player"));
  46. }
  47. return CompletionResult.Empty;
  48. }
  49. }
  50. [AdminCommand(AdminFlags.Ban)]
  51. public sealed class RemoveWhitelistCommand : LocalizedCommands
  52. {
  53. public override string Command => "whitelistremove";
  54. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  55. {
  56. if (args.Length == 0)
  57. {
  58. shell.WriteError(Loc.GetString("shell-need-minimum-one-argument"));
  59. shell.WriteLine(Help);
  60. return;
  61. }
  62. var db = IoCManager.Resolve<IServerDbManager>();
  63. var loc = IoCManager.Resolve<IPlayerLocator>();
  64. var name = string.Join(' ', args).Trim();
  65. var data = await loc.LookupIdByNameOrIdAsync(name);
  66. if (data != null)
  67. {
  68. var guid = data.UserId;
  69. var isWhitelisted = await db.GetWhitelistStatusAsync(guid);
  70. if (!isWhitelisted)
  71. {
  72. shell.WriteLine(Loc.GetString("cmd-whitelistremove-existing", ("username", data.Username)));
  73. return;
  74. }
  75. await db.RemoveFromWhitelistAsync(guid);
  76. shell.WriteLine(Loc.GetString("cmd-whitelistremove-removed", ("username", data.Username)));
  77. return;
  78. }
  79. shell.WriteError(Loc.GetString("cmd-whitelistremove-not-found", ("username", args[0])));
  80. }
  81. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  82. {
  83. if (args.Length == 1)
  84. {
  85. return CompletionResult.FromHint(Loc.GetString("cmd-whitelistremove-arg-player"));
  86. }
  87. return CompletionResult.Empty;
  88. }
  89. }
  90. [AdminCommand(AdminFlags.Ban)]
  91. public sealed class KickNonWhitelistedCommand : LocalizedCommands
  92. {
  93. public override string Command => "kicknonwhitelisted";
  94. public override async void Execute(IConsoleShell shell, string argStr, string[] args)
  95. {
  96. if (args.Length != 0)
  97. {
  98. shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", ("properAmount", 0), ("currentAmount", args.Length)));
  99. shell.WriteLine(Help);
  100. return;
  101. }
  102. var cfg = IoCManager.Resolve<IConfigurationManager>();
  103. if (!cfg.GetCVar(CCVars.WhitelistEnabled))
  104. return;
  105. var player = IoCManager.Resolve<IPlayerManager>();
  106. var db = IoCManager.Resolve<IServerDbManager>();
  107. var net = IoCManager.Resolve<IServerNetManager>();
  108. foreach (var session in player.NetworkedSessions)
  109. {
  110. if (await db.GetAdminDataForAsync(session.UserId) is not null)
  111. continue;
  112. if (!await db.GetWhitelistStatusAsync(session.UserId))
  113. {
  114. net.DisconnectChannel(session.Channel, Loc.GetString("whitelist-not-whitelisted"));
  115. }
  116. }
  117. }
  118. }