fix: create new session when the current expires
This commit is contained in:
parent
a1d3c64765
commit
dc059b947d
|
@ -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,
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
Loading…
Reference in New Issue