private void btnSteamLogin_Click(object sender, EventArgs e)
{
string username = txtUsername.Text;
string password = txtPassword.Text;
if (LoginReason == LoginType.Android)
{
FinishExtract(username, password);
return;
}
else if (LoginReason == LoginType.Refresh)
{
RefreshLogin(username, password);
return;
}
var userLogin = new UserLogin(username, password);
LoginResult response = LoginResult.BadCredentials;
while ((response = userLogin.DoLogin()) != LoginResult.LoginOkay)
{
switch (response)
{
case LoginResult.NeedEmail:
InputForm emailForm = new InputForm("Enter the code sent to your email:");
emailForm.ShowDialog();
if (emailForm.Canceled)
{
this.Close();
return;
}
userLogin.EmailCode = emailForm.txtBox.Text;
break;
case LoginResult.NeedCaptcha:
CaptchaForm captchaForm = new CaptchaForm(userLogin.CaptchaGID);
captchaForm.ShowDialog();
if (captchaForm.Canceled)
{
this.Close();
return;
}
userLogin.CaptchaText = captchaForm.CaptchaCode;
break;
case LoginResult.Need2FA:
MessageBox.Show("This account already has a mobile authenticator linked to it.\nRemove the old authenticator from your Steam account before adding a new one.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
return;
case LoginResult.BadRSA:
MessageBox.Show("Error logging in: Steam returned \"BadRSA\".", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
return;
case LoginResult.BadCredentials:
MessageBox.Show("Error logging in: Username or password was incorrect.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
return;
case LoginResult.TooManyFailedLogins:
MessageBox.Show("Error logging in: Too many failed logins, try again later.", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
return;
case LoginResult.GeneralFailure:
MessageBox.Show("Error logging in: Steam returned \"GeneralFailure\".", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
return;
}
}
//Login succeeded
SessionData session = userLogin.Session;
AuthenticatorLinker linker = new AuthenticatorLinker(session);
AuthenticatorLinker.LinkResult linkResponse = AuthenticatorLinker.LinkResult.GeneralFailure;
while ((linkResponse = linker.AddAuthenticator()) != AuthenticatorLinker.LinkResult.AwaitingFinalization)
{
switch (linkResponse)
{
case AuthenticatorLinker.LinkResult.MustProvidePhoneNumber:
string phoneNumber = "";
while (!PhoneNumberOkay(phoneNumber))
{
InputForm phoneNumberForm = new InputForm("Enter your phone number in the following format: +{cC} phoneNumber. EG, +1 123-456-7890");
phoneNumberForm.txtBox.Text = "+1 ";
phoneNumberForm.ShowDialog();
if (phoneNumberForm.Canceled)
{
this.Close();
return;
}
phoneNumber = FilterPhoneNumber(phoneNumberForm.txtBox.Text);
}
linker.PhoneNumber = phoneNumber;
break;
case AuthenticatorLinker.LinkResult.MustRemovePhoneNumber:
linker.PhoneNumber = null;
break;
case AuthenticatorLinker.LinkResult.GeneralFailure:
MessageBox.Show("Error adding your phone number. Steam returned \"GeneralFailure\".");
this.Close();
return;
}
}
Manifest manifest = Manifest.GetManifest();
string passKey = null;
if (manifest.Entries.Count == 0)
{
passKey = manifest.PromptSetupPassKey("Please enter an encryption passkey. Leave blank or hit cancel to not encrypt (VERY INSECURE).");
}
else if (manifest.Entries.Count > 0 && manifest.Encrypted)
{
bool passKeyValid = false;
while (!passKeyValid)
{
InputForm passKeyForm = new InputForm("Please enter your current encryption passkey.");
passKeyForm.ShowDialog();
if (!passKeyForm.Canceled)
{
passKey = passKeyForm.txtBox.Text;
passKeyValid = manifest.VerifyPasskey(passKey);
if (!passKeyValid)
{
MessageBox.Show("That passkey is invalid. Please enter the same passkey you used for your other accounts.");
}
}
else
{
this.Close();
return;
}
}
}
//Save the file immediately; losing this would be bad.
if (!manifest.SaveAccount(linker.LinkedAccount, passKey != null, passKey))
{
manifest.RemoveAccount(linker.LinkedAccount);
MessageBox.Show("Unable to save mobile authenticator file. The mobile authenticator has not been linked.");
this.Close();
return;
}
MessageBox.Show("The Mobile Authenticator has not yet been linked. Before finalizing the authenticator, please write down your revocation code: " + linker.LinkedAccount.RevocationCode);
AuthenticatorLinker.FinalizeResult finalizeResponse = AuthenticatorLinker.FinalizeResult.GeneralFailure;
while (finalizeResponse != AuthenticatorLinker.FinalizeResult.Success)
{
InputForm smsCodeForm = new InputForm("Please input the SMS code sent to your phone.");
smsCodeForm.ShowDialog();
if (smsCodeForm.Canceled)
{
manifest.RemoveAccount(linker.LinkedAccount);
this.Close();
return;
}
InputForm confirmRevocationCode = new InputForm("Please enter your revocation code to ensure you've saved it.");
confirmRevocationCode.ShowDialog();
if (confirmRevocationCode.txtBox.Text.ToUpper() != linker.LinkedAccount.RevocationCode)
{
MessageBox.Show("Revocation code incorrect; the authenticator has not been linked.");
manifest.RemoveAccount(linker.LinkedAccount);
this.Close();
return;
}
string smsCode = smsCodeForm.txtBox.Text;
finalizeResponse = linker.FinalizeAddAuthenticator(smsCode);
switch (finalizeResponse)
{
case AuthenticatorLinker.FinalizeResult.BadSMSCode:
continue;
case AuthenticatorLinker.FinalizeResult.UnableToGenerateCorrectCodes:
MessageBox.Show("Unable to generate the proper codes to finalize this authenticator. The authenticator should not have been linked. In the off-chance it was, please write down your revocation code, as this is the last chance to see it: " + linker.LinkedAccount.RevocationCode);
manifest.RemoveAccount(linker.LinkedAccount);
this.Close();
return;
case AuthenticatorLinker.FinalizeResult.GeneralFailure:
MessageBox.Show("Unable to finalize this authenticator. The authenticator should not have been linked. In the off-chance it was, please write down your revocation code, as this is the last chance to see it: " + linker.LinkedAccount.RevocationCode);
manifest.RemoveAccount(linker.LinkedAccount);
this.Close();
return;
}
}
//Linked, finally. Re-save with FullyEnrolled property.
manifest.SaveAccount(linker.LinkedAccount, passKey != null, passKey);
MessageBox.Show("Mobile authenticator successfully linked. Please write down your revocation code: " + linker.LinkedAccount.RevocationCode);
this.Close();
}