| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- using Content.Server.Administration;
- using Content.Server.Database;
- using Content.Shared.Administration;
- using Content.Shared.CCVar;
- using Robust.Server.Player;
- using Robust.Shared.Configuration;
- using Robust.Shared.Console;
- using Robust.Shared.Network;
- namespace Content.Server.Whitelist;
- [AdminCommand(AdminFlags.Ban)]
- public sealed class AddWhitelistCommand : LocalizedCommands
- {
- public override string Command => "whitelistadd";
- public override async void Execute(IConsoleShell shell, string argStr, string[] args)
- {
- if (args.Length == 0)
- {
- shell.WriteError(Loc.GetString("shell-need-minimum-one-argument"));
- shell.WriteLine(Help);
- return;
- }
- var db = IoCManager.Resolve<IServerDbManager>();
- var loc = IoCManager.Resolve<IPlayerLocator>();
- var name = string.Join(' ', args).Trim();
- var data = await loc.LookupIdByNameOrIdAsync(name);
- if (data != null)
- {
- var guid = data.UserId;
- var isWhitelisted = await db.GetWhitelistStatusAsync(guid);
- if (isWhitelisted)
- {
- shell.WriteLine(Loc.GetString("cmd-whitelistadd-existing", ("username", data.Username)));
- return;
- }
- await db.AddToWhitelistAsync(guid);
- shell.WriteLine(Loc.GetString("cmd-whitelistadd-added", ("username", data.Username)));
- return;
- }
- shell.WriteError(Loc.GetString("cmd-whitelistadd-not-found", ("username", args[0])));
- }
- public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
- {
- if (args.Length == 1)
- {
- return CompletionResult.FromHint(Loc.GetString("cmd-whitelistadd-arg-player"));
- }
- return CompletionResult.Empty;
- }
- }
- [AdminCommand(AdminFlags.Ban)]
- public sealed class RemoveWhitelistCommand : LocalizedCommands
- {
- public override string Command => "whitelistremove";
- public override async void Execute(IConsoleShell shell, string argStr, string[] args)
- {
- if (args.Length == 0)
- {
- shell.WriteError(Loc.GetString("shell-need-minimum-one-argument"));
- shell.WriteLine(Help);
- return;
- }
- var db = IoCManager.Resolve<IServerDbManager>();
- var loc = IoCManager.Resolve<IPlayerLocator>();
- var name = string.Join(' ', args).Trim();
- var data = await loc.LookupIdByNameOrIdAsync(name);
- if (data != null)
- {
- var guid = data.UserId;
- var isWhitelisted = await db.GetWhitelistStatusAsync(guid);
- if (!isWhitelisted)
- {
- shell.WriteLine(Loc.GetString("cmd-whitelistremove-existing", ("username", data.Username)));
- return;
- }
- await db.RemoveFromWhitelistAsync(guid);
- shell.WriteLine(Loc.GetString("cmd-whitelistremove-removed", ("username", data.Username)));
- return;
- }
- shell.WriteError(Loc.GetString("cmd-whitelistremove-not-found", ("username", args[0])));
- }
- public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
- {
- if (args.Length == 1)
- {
- return CompletionResult.FromHint(Loc.GetString("cmd-whitelistremove-arg-player"));
- }
- return CompletionResult.Empty;
- }
- }
- [AdminCommand(AdminFlags.Ban)]
- public sealed class KickNonWhitelistedCommand : LocalizedCommands
- {
- public override string Command => "kicknonwhitelisted";
- public override async void Execute(IConsoleShell shell, string argStr, string[] args)
- {
- if (args.Length != 0)
- {
- shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", ("properAmount", 0), ("currentAmount", args.Length)));
- shell.WriteLine(Help);
- return;
- }
- var cfg = IoCManager.Resolve<IConfigurationManager>();
- if (!cfg.GetCVar(CCVars.WhitelistEnabled))
- return;
- var player = IoCManager.Resolve<IPlayerManager>();
- var db = IoCManager.Resolve<IServerDbManager>();
- var net = IoCManager.Resolve<IServerNetManager>();
- foreach (var session in player.NetworkedSessions)
- {
- if (await db.GetAdminDataForAsync(session.UserId) is not null)
- continue;
- if (!await db.GetWhitelistStatusAsync(session.UserId))
- {
- net.DisconnectChannel(session.Channel, Loc.GetString("whitelist-not-whitelisted"));
- }
- }
- }
- }
|