Exemplo n.º 1
0
        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);
            });
        }