From 6c2491b9a3d170dd3cb8a74a6b3cd82a6d9e13b1 Mon Sep 17 00:00:00 2001 From: Louis Seubert Date: Fri, 20 May 2022 12:53:44 +0200 Subject: [PATCH] adding callback for reusable credentials (#983) This allows more control over how the credentials are saved to the cache --- CHANGELOG.md | 2 ++ core/src/session.rs | 11 +++++++---- core/tests/connect.rs | 1 + examples/get_token.rs | 2 +- examples/play.rs | 2 +- examples/playlist_tracks.rs | 2 +- src/main.rs | 5 ++++- 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b205977..1e37fae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [playback] `Sink`: `write()` now receives ownership of the packet (breaking). - [playback] `pipe`: create file if it doesn't already exist - [playback] More robust dynamic limiter for very wide dynamic range (breaking) +- [core] `Session`: `connect()` now returns the long-term credentials. +- [core] `Session`: `connect()` now accespt a flag if the credentails should be stored via the cache. - [build] The MSRV is now 1.53. ### Added diff --git a/core/src/session.rs b/core/src/session.rs index 6c4abc54..6c8bf93f 100644 --- a/core/src/session.rs +++ b/core/src/session.rs @@ -66,7 +66,8 @@ impl Session { config: SessionConfig, credentials: Credentials, cache: Option, - ) -> Result { + store_credentials: bool, + ) -> Result<(Session, Credentials), SessionError> { let ap = apresolve(config.proxy.as_ref(), config.ap_port).await; info!("Connecting to AP \"{}\"", ap); @@ -76,18 +77,20 @@ impl Session { connection::authenticate(&mut conn, credentials, &config.device_id).await?; info!("Authenticated as \"{}\" !", reusable_credentials.username); if let Some(cache) = &cache { - cache.save_credentials(&reusable_credentials); + if store_credentials { + cache.save_credentials(&reusable_credentials); + } } let session = Session::create( conn, config, cache, - reusable_credentials.username, + reusable_credentials.username.clone(), tokio::runtime::Handle::current(), ); - Ok(session) + Ok((session, reusable_credentials)) } fn create( diff --git a/core/tests/connect.rs b/core/tests/connect.rs index 8b95e437..e6aa7c66 100644 --- a/core/tests/connect.rs +++ b/core/tests/connect.rs @@ -13,6 +13,7 @@ async fn test_connection() { SessionConfig::default(), Credentials::with_password("test", "test"), None, + false, ) .await; diff --git a/examples/get_token.rs b/examples/get_token.rs index 636155e0..4d9e1f1c 100644 --- a/examples/get_token.rs +++ b/examples/get_token.rs @@ -20,7 +20,7 @@ async fn main() { println!("Connecting.."); let credentials = Credentials::with_password(&args[1], &args[2]); - let session = Session::connect(session_config, credentials, None) + let (session, _) = Session::connect(session_config, credentials, None, false) .await .unwrap(); diff --git a/examples/play.rs b/examples/play.rs index 6156cb7b..a91b6851 100644 --- a/examples/play.rs +++ b/examples/play.rs @@ -27,7 +27,7 @@ async fn main() { let backend = audio_backend::find(None).unwrap(); println!("Connecting .."); - let session = Session::connect(session_config, credentials, None) + let (session, _) = Session::connect(session_config, credentials, None, false) .await .unwrap(); diff --git a/examples/playlist_tracks.rs b/examples/playlist_tracks.rs index 0bf17ee7..8dbe1d5f 100644 --- a/examples/playlist_tracks.rs +++ b/examples/playlist_tracks.rs @@ -27,7 +27,7 @@ async fn main() { process::exit(1); }); - let session = Session::connect(session_config, credentials, None) + let (session, _) = Session::connect(session_config, credentials, None, false) .await .unwrap(); diff --git a/src/main.rs b/src/main.rs index 7ec21a5a..55df381d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1599,6 +1599,7 @@ async fn main() { setup.session_config.clone(), credentials, setup.cache.clone(), + true, ) .fuse(), ); @@ -1634,6 +1635,7 @@ async fn main() { setup.session_config.clone(), credentials, setup.cache.clone(), + true, ).fuse()); }, None => { @@ -1643,7 +1645,7 @@ async fn main() { } }, session = &mut connecting, if !connecting.is_terminated() => match session { - Ok(session) => { + Ok((session,_)) => { let mixer_config = setup.mixer_config.clone(); let mixer = (setup.mixer)(mixer_config); let player_config = setup.player_config.clone(); @@ -1711,6 +1713,7 @@ async fn main() { setup.session_config.clone(), credentials, setup.cache.clone(), + true ).fuse()); }, _ => {