public void ClientEvent_OnSubmitLoginAccount(Client client, string username, string password) { if (client.IsLoggedIn(true)) { client.TriggerEvent(Events.ServerToClient.Authentication.DisplayError, AccountStrings.ErrorPlayerAlreadyLoggedIn); return; } if (!ValidateString(ValidationStrings.Username, username)) { client.TriggerEvent(Events.ServerToClient.Authentication.DisplayError, AccountStrings.ErrorUsernameInvalid); return; } if (!ValidateString(ValidationStrings.Password, password)) { client.TriggerEvent(Events.ServerToClient.Authentication.DisplayError, AccountStrings.ErrorPasswordInvalid); return; } TaskManager.Run(client, async() => { if (!await AccountModel.ExistsAsync(username)) { client.TriggerEvent(Events.ServerToClient.Authentication.DisplayError, AccountStrings.ErrorUsernameNotExist); return; } if (!await AccountModel.AuthenticateAsync(username, password)) { client.TriggerEvent(Events.ServerToClient.Authentication.DisplayError, AccountStrings.ErrorInvalidCredentials); return; } var fetchedAcc = await AccountModel.FetchAsync(username); if (IsAccountLoggedIn(fetchedAcc)) { client.TriggerEvent(Events.ServerToClient.Authentication.DisplayError, AccountStrings.ErrorAccountAlreadyLoggedIn); return; } await LoginAccount(fetchedAcc, client); if (!fetchedAcc.HasVerifiedEmail()) { client.TriggerEvent(Events.ServerToClient.Authentication.ShowInitialEmailVerification); return; } if (fetchedAcc.Is2FAbyEmailEnabled()) { fetchedAcc.HasPassedTwoStepByEmail = false; await EmailToken.CreateAsync(fetchedAcc, fetchedAcc.EmailAddress); await EmailToken.SendEmail(fetchedAcc); client.TriggerEvent(Events.ServerToClient.Authentication.Show2FAbyEmailAddress); return; } if (fetchedAcc.Is2FAbyGAEnabled()) { fetchedAcc.HasPassedTwoStepByGA = false; client.TriggerEvent(Events.ServerToClient.Authentication.Show2FAbyGoogleAuth); return; } SetLoginState(client, false); }); }