combine do_login and do_login_raw
This commit is contained in:
parent
ca86b44640
commit
0bc5ca7016
1 changed files with 25 additions and 39 deletions
58
src/main.rs
58
src/main.rs
|
@ -398,7 +398,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_login(account: &mut SteamGuardAccount) {
|
fn do_login(account: &mut SteamGuardAccount) -> anyhow::Result<()> {
|
||||||
if account.account_name.len() > 0 {
|
if account.account_name.len() > 0 {
|
||||||
println!("Username: {}", account.account_name);
|
println!("Username: {}", account.account_name);
|
||||||
} else {
|
} else {
|
||||||
|
@ -412,40 +412,12 @@ fn do_login(account: &mut SteamGuardAccount) {
|
||||||
} else {
|
} else {
|
||||||
debug!("password is empty");
|
debug!("password is empty");
|
||||||
}
|
}
|
||||||
// TODO: reprompt if password is empty
|
account.session = Some(do_login_impl(
|
||||||
let mut login = UserLogin::new(account.account_name.clone(), password);
|
account.account_name.clone(),
|
||||||
let mut loops = 0;
|
password,
|
||||||
loop {
|
Some(account),
|
||||||
match login.login() {
|
)?);
|
||||||
Ok(s) => {
|
return Ok(());
|
||||||
account.session = Option::Some(s);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Err(LoginError::Need2FA) => {
|
|
||||||
debug!("generating 2fa code and retrying");
|
|
||||||
let server_time = steamapi::get_server_time();
|
|
||||||
login.twofactor_code = account.generate_code(server_time);
|
|
||||||
}
|
|
||||||
Err(LoginError::NeedCaptcha { captcha_gid }) => {
|
|
||||||
debug!("need captcha to log in");
|
|
||||||
login.captcha_text = tui::prompt_captcha_text(&captcha_gid);
|
|
||||||
}
|
|
||||||
Err(LoginError::NeedEmail) => {
|
|
||||||
println!("You should have received an email with a code.");
|
|
||||||
print!("Enter code");
|
|
||||||
login.email_code = tui::prompt();
|
|
||||||
}
|
|
||||||
r => {
|
|
||||||
error!("Fatal login result: {:?}", r);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
loops += 1;
|
|
||||||
if loops > 2 {
|
|
||||||
error!("Too many loops. Aborting login process, to avoid getting rate limited.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_login_raw() -> anyhow::Result<steamapi::Session> {
|
fn do_login_raw() -> anyhow::Result<steamapi::Session> {
|
||||||
|
@ -458,6 +430,14 @@ fn do_login_raw() -> anyhow::Result<steamapi::Session> {
|
||||||
} else {
|
} else {
|
||||||
debug!("password is empty");
|
debug!("password is empty");
|
||||||
}
|
}
|
||||||
|
return do_login_impl(username, password, None);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn do_login_impl(
|
||||||
|
username: String,
|
||||||
|
password: String,
|
||||||
|
account: Option<&SteamGuardAccount>,
|
||||||
|
) -> anyhow::Result<steamapi::Session> {
|
||||||
// TODO: reprompt if password is empty
|
// TODO: reprompt if password is empty
|
||||||
let mut login = UserLogin::new(username, password);
|
let mut login = UserLogin::new(username, password);
|
||||||
let mut loops = 0;
|
let mut loops = 0;
|
||||||
|
@ -466,10 +446,16 @@ fn do_login_raw() -> anyhow::Result<steamapi::Session> {
|
||||||
Ok(s) => {
|
Ok(s) => {
|
||||||
return Ok(s);
|
return Ok(s);
|
||||||
}
|
}
|
||||||
Err(LoginError::Need2FA) => {
|
Err(LoginError::Need2FA) => match account {
|
||||||
|
Some(a) => {
|
||||||
|
let server_time = steamapi::get_server_time();
|
||||||
|
login.twofactor_code = a.generate_code(server_time);
|
||||||
|
}
|
||||||
|
None => {
|
||||||
print!("Enter 2fa code: ");
|
print!("Enter 2fa code: ");
|
||||||
login.twofactor_code = tui::prompt();
|
login.twofactor_code = tui::prompt();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
Err(LoginError::NeedCaptcha { captcha_gid }) => {
|
Err(LoginError::NeedCaptcha { captcha_gid }) => {
|
||||||
debug!("need captcha to log in");
|
debug!("need captcha to log in");
|
||||||
login.captcha_text = tui::prompt_captcha_text(&captcha_gid);
|
login.captcha_text = tui::prompt_captcha_text(&captcha_gid);
|
||||||
|
|
Loading…
Reference in a new issue