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/client.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/client.rs')
| -rw-r--r-- | azalea-client/src/client.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs index 09f68c4a..25c68c5d 100644 --- a/azalea-client/src/client.rs +++ b/azalea-client/src/client.rs @@ -38,7 +38,6 @@ use std::{ }; use thiserror::Error; use tokio::{ - io::AsyncWriteExt, sync::mpsc::{self, UnboundedReceiver, UnboundedSender}, task::JoinHandle, time::{self}, @@ -105,6 +104,8 @@ pub enum JoinError { ReadPacket(#[from] azalea_protocol::read::ReadPacketError), #[error("{0}")] Io(#[from] io::Error), + #[error("{0}")] + SessionServer(#[from] azalea_auth::sessionserver::SessionServerError), } #[derive(Error, Debug)] @@ -159,7 +160,17 @@ impl Client { debug!("Got encryption request"); let e = azalea_crypto::encrypt(&p.public_key, &p.nonce).unwrap(); - // TODO: authenticate with the server here (authenticateServer) + if let Some(access_token) = &account.access_token { + conn.authenticate( + access_token, + &account + .uuid + .expect("Uuid must be present if access token is present."), + e.secret_key, + p, + ) + .await?; + } conn.write( ServerboundKeyPacket { @@ -171,6 +182,7 @@ impl Client { .get(), ) .await?; + conn.set_encryption_key(e.secret_key); } ClientboundLoginPacket::LoginCompression(p) => { @@ -237,7 +249,7 @@ impl Client { /// Disconnect from the server, ending all tasks. pub async fn shutdown(self) -> Result<(), std::io::Error> { - self.write_conn.lock().await.write_stream.shutdown().await?; + self.write_conn.lock().await.shutdown().await?; let tasks = self.tasks.lock(); for task in tasks.iter() { task.abort(); |
