aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/account.rs
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2022-10-16 22:54:54 -0500
committerGitHub <noreply@github.com>2022-10-16 22:54:54 -0500
commit4cef62e8e4aa04e44048eb67e5091c12a73d2a09 (patch)
tree1c3b03bad262bdcab878cd42d445676290000bea /azalea-client/src/account.rs
parent993914d175609e5d291e7caafc1983379642e7fe (diff)
downloadazalea-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.rs27
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,