using System.Threading.Tasks; using SharedLibraryCore; using SharedLibraryCore.Commands; using SharedLibraryCore.Configuration; using SharedLibraryCore.Helpers; using SharedLibraryCore.Interfaces; using EFClient = Data.Models.Client.EFClient; namespace IW4MAdmin.Plugins.Login.Commands { public class LoginCommand : Command { private readonly LoginConfiguration _loginConfig; private readonly LoginStates _loginStates; public LoginCommand(CommandConfiguration config, ITranslationLookup translationLookup, LoginConfiguration loginConfig, LoginStates loginStates) : base(config, translationLookup) { _loginConfig = loginConfig; _loginStates = loginStates; Name = "login"; Description = _translationLookup["PLUGINS_LOGIN_COMMANDS_LOGIN_DESC"]; Alias = "li"; Permission = EFClient.Permission.Trusted; RequiresTarget = false; Arguments = [ new CommandArgument { Name = Utilities.CurrentLocalization.LocalizationIndex["COMMANDS_ARGS_PASSWORD"], Required = true } ]; } public override async Task ExecuteAsync(GameEvent gameEvent) { if (!_loginConfig.RequirePrivilegedClientLogin) { gameEvent.Origin.Tell(_translationLookup["PLUGINS_LOGIN_COMMANDS_LOGIN_DISABLED"]); return; } var success = gameEvent.Owner.Manager.TokenAuthenticator.AuthorizeToken(new TokenIdentifier { ClientId = gameEvent.Origin.ClientId, Token = gameEvent.Data }); if (!success) { var hashedPassword = await Task.FromResult(Hashing.Hash(gameEvent.Data, gameEvent.Origin.PasswordSalt)); success = hashedPassword[0] == gameEvent.Origin.Password; } if (success) { _loginStates.AuthorizedClients[gameEvent.Origin.ClientId] = true; } gameEvent.Origin.Tell(success ? _translationLookup["PLUGINS_LOGIN_COMMANDS_LOGIN_SUCCESS"] : _translationLookup["PLUGINS_LOGIN_COMMANDS_LOGIN_FAIL"]); } } }