Add option to login with only a token (#427)

* Add login with token
This commit is contained in:
kozabrada123 2023-09-01 15:17:49 +00:00 committed by GitHub
parent 47ba03102c
commit bc5e64b79d
1 changed files with 36 additions and 0 deletions

View File

@ -1,5 +1,41 @@
use std::sync::{Arc, RwLock};
pub use login::*; pub use login::*;
pub use register::*; pub use register::*;
use crate::{
errors::ChorusResult,
gateway::Gateway,
instance::{ChorusUser, Instance},
types::{GatewayIdentifyPayload, User},
};
pub mod login; pub mod login;
pub mod register; pub mod register;
impl Instance {
/// Logs into an existing account on the spacebar server, using only a token.
pub async fn login_with_token(&mut self, token: String) -> ChorusResult<ChorusUser> {
let object_result = self.get_user(token.clone(), None).await;
if let Err(e) = object_result {
return Result::Err(e);
}
let user_settings = User::get_settings(&token, &self.urls.api, &mut self.clone())
.await
.unwrap();
let mut identify = GatewayIdentifyPayload::common();
let gateway = Gateway::new(self.urls.wss.clone()).await.unwrap();
identify.token = token.clone();
gateway.send_identify(identify).await;
let user = ChorusUser::new(
Arc::new(RwLock::new(self.clone())),
token.clone(),
self.clone_limits_if_some(),
Arc::new(RwLock::new(user_settings)),
Arc::new(RwLock::new(object_result.unwrap())),
gateway,
);
Ok(user)
}
}