fix: create new session when the current expires

This commit is contained in:
Mahesh Bansod 2021-11-19 18:56:28 +05:30
parent a1d3c64765
commit dc059b947d
2 changed files with 50 additions and 12 deletions

View File

@ -1,4 +1,5 @@
use socialvoid::{ClientError, SocialvoidError}; use socialvoid::{ClientError, SocialvoidError};
use socialvoid_rawclient::AuthenticationError;
use socialvoid_rawclient::ErrorKind; use socialvoid_rawclient::ErrorKind;
use socialvoid_rawclient::ValidationError; use socialvoid_rawclient::ValidationError;
@ -21,13 +22,16 @@ impl std::fmt::Display for MyFriendlyError {
match &self.0 { match &self.0 {
SocialvoidError::RawClient(err) => match &err.kind { SocialvoidError::RawClient(err) => match &err.kind {
ErrorKind::Authentication(err) => { ErrorKind::Authentication(err) => {
write!(f, "This method needs you to log in. match err {
Authentication Error: {:#?}\nIf you are already logged in, then try logging out and logging in again. AuthenticationError::SessionExpired => write!(f, "The session was expired. Please login again."),
To log in: _ => write!(f, "This method needs you to log in.
socialvoid-cli login Authentication Error: {:#?}\nIf you are already logged in, then try logging out and logging in again.
To log out: To log in:
socialvoid-cli logout", err) socialvoid-cli login
} To log out:
socialvoid-cli logout", err)
}
},
ErrorKind::Cdn(err) => { ErrorKind::Cdn(err) => {
write!( write!(
f, f,

View File

@ -1,4 +1,6 @@
use socialvoid::session::RegisterRequest; use socialvoid::session::RegisterRequest;
use socialvoid_rawclient::AuthenticationError;
use socialvoid_rawclient::ErrorKind;
use structopt::StructOpt; use structopt::StructOpt;
mod entities; mod entities;
@ -33,18 +35,49 @@ async fn main() {
}; };
let password = prompt_password("Enter password: "); let password = prompt_password("Enter password: ");
//TODO: add OTP support //TODO: add OTP support
match sv.session.authenticate_user(username, password, None).await { match sv
Err(err) => { .session
println!( .authenticate_user(username.clone(), password.clone(), None)
.await
{
Err(err) => match err.kind {
ErrorKind::Authentication(AuthenticationError::SessionExpired) => {
println!("Session expired. Creating new session and retrying.");
match sv.session.create().await {
Ok(_) => {
match sv
.session
.authenticate_user(username, password, None)
.await
{
Err(err) => println!(
"Couldn't authenticate the user.\n{}",
MyFriendlyError::from(err)
),
Ok(_) => println!("Done."),
}
}
Err(err) => {
println!(
"Couldn't create the session.\n{}",
MyFriendlyError::from(err)
)
}
}
}
_ => println!(
"Couldn't authenticate the user.\n{}", "Couldn't authenticate the user.\n{}",
MyFriendlyError::from(err) MyFriendlyError::from(err)
); ),
} },
Ok(_) => { Ok(_) => {
println!("Successfully logged in."); println!("Successfully logged in.");
} }
} }
} }
SocialVoidCommand::Logout => {
let _ = sv.session.logout().await;
}
SocialVoidCommand::Register => { SocialVoidCommand::Register => {
if sv.session.authenticated() { if sv.session.authenticated() {
panic!( panic!(
@ -253,6 +286,7 @@ enum SocialVoidCommand {
Login { Login {
username: Option<String>, username: Option<String>,
}, },
Logout,
Register, Register,
Config { Config {
#[structopt(subcommand)] #[structopt(subcommand)]