diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2022-10-16 22:54:54 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-16 22:54:54 -0500 |
| commit | 4cef62e8e4aa04e44048eb67e5091c12a73d2a09 (patch) | |
| tree | 1c3b03bad262bdcab878cd42d445676290000bea /azalea-client/src/account.rs | |
| parent | 993914d175609e5d291e7caafc1983379642e7fe (diff) | |
| download | azalea-drasl-4cef62e8e4aa04e44048eb67e5091c12a73d2a09.tar.xz | |
Microsoft Authentication (#29)
* a
* try to do more work on auth signing (untested)
* well auth works when i remove the d= so
* auth stuff
* sessionserver stuff
* add auth in azalea-protocol/client
* caching*
refreshing microsoft auth tokens isn't implemented yet, also i haven't tested it
* how did i not notice that i had the code duplicated
* fix cache
* add refreshing msa token
* replace some printlns with log::trace
* auth works!
* Update main.rs
* fix clippy warnings
Diffstat (limited to 'azalea-client/src/account.rs')
| -rw-r--r-- | azalea-client/src/account.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/azalea-client/src/account.rs b/azalea-client/src/account.rs index c554908f..94e84ab8 100644 --- a/azalea-client/src/account.rs +++ b/azalea-client/src/account.rs @@ -1,20 +1,45 @@ //! Connect to Minecraft servers. -use crate::{client::JoinError, Client, Event}; +use crate::{client::JoinError, get_mc_dir, Client, Event}; use azalea_protocol::ServerAddress; use tokio::sync::mpsc::UnboundedReceiver; +use uuid::Uuid; /// Something that can join Minecraft servers. pub struct Account { pub username: String, + /// The access token for authentication. You can obtain one of these + /// manually from azalea-auth. + pub access_token: Option<String>, + /// Only required for online-mode accounts. + pub uuid: Option<uuid::Uuid>, } impl Account { pub fn offline(username: &str) -> Self { Self { username: username.to_string(), + access_token: None, + uuid: None, } } + pub async fn microsoft(email: &str) -> Result<Self, azalea_auth::AuthError> { + let minecraft_dir = get_mc_dir::minecraft_dir().unwrap(); + let auth_result = azalea_auth::auth( + email, + azalea_auth::AuthOpts { + cache_file: Some(minecraft_dir.join("azalea-auth.json")), + ..Default::default() + }, + ) + .await?; + Ok(Self { + username: auth_result.profile.name, + access_token: Some(auth_result.access_token), + uuid: Some(Uuid::parse_str(&auth_result.profile.id).expect("Invalid UUID")), + }) + } + /// Joins the Minecraft server on the given address using this account. pub async fn join( &self, |
