Skip to content

Commit bf8b003

Browse files
committed
Updated token example
1 parent fe4d36b commit bf8b003

File tree

1 file changed

+30
-22
lines changed

1 file changed

+30
-22
lines changed

examples/get_token.rs

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::env;
22

33
use librespot::core::{authentication::Credentials, config::SessionConfig, session::Session};
4+
use librespot::protocol::authentication::AuthenticationType;
45

56
const SCOPES: &str =
67
"streaming,user-read-playback-state,user-modify-playback-state,user-read-currently-playing";
@@ -10,36 +11,43 @@ async fn main() {
1011
let mut session_config = SessionConfig::default();
1112

1213
let args: Vec<_> = env::args().collect();
13-
if args.len() == 4 {
14-
session_config.client_id = args[3].clone()
15-
} else if args.len() != 3 {
16-
eprintln!("Usage: {} USERNAME PASSWORD [CLIENT_ID]", args[0]);
14+
if args.len() == 3 {
15+
session_config.client_id = args[2].clone()
16+
} else if args.len() != 2 {
17+
eprintln!("Usage: {} ACCESS_TOKEN [CLIENT_ID]", args[0]);
1718
return;
1819
}
19-
let username = &args[1];
20-
let password = &args[2];
20+
let access_token = &args[1];
2121

22+
// Now create a new session with that token.
2223
let session = Session::new(session_config.clone(), None);
23-
let credentials = Credentials::with_password(username, password);
24-
println!("Connecting with password..");
25-
let token = match session.connect(credentials, false).await {
26-
Ok(()) => {
27-
println!("Session username: {:#?}", session.username());
28-
session.token_provider().get_token(SCOPES).await.unwrap()
24+
let credentials = Credentials::with_access_token(access_token);
25+
println!("Connecting with token..");
26+
match session.connect(credentials, false).await {
27+
Ok(()) => println!("Session username: {:#?}", session.username()),
28+
Err(e) => {
29+
println!("Error connecting: {e}");
30+
return;
2931
}
32+
};
33+
34+
// This will fail. You can't use keymaster from an access token authed session.
35+
// let token = session2.token_provider().get_token(SCOPES).await.unwrap();
36+
37+
// Instead, derive stored credentials and auth a new session using those.
38+
let stored_credentials = Credentials {
39+
username: Some(session.username()),
40+
auth_type: AuthenticationType::AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS,
41+
auth_data: session.auth_data(),
42+
};
43+
let session2 = Session::new(session_config, None);
44+
match session2.connect(stored_credentials, false).await {
45+
Ok(()) => println!("Session username: {:#?}", session2.username()),
3046
Err(e) => {
3147
println!("Error connecting: {}", e);
3248
return;
3349
}
3450
};
35-
println!("Token: {:#?}", token);
36-
37-
// Now create a new session with that token.
38-
let session = Session::new(session_config, None);
39-
let credentials = Credentials::with_access_token(token.access_token);
40-
println!("Connecting with token..");
41-
match session.connect(credentials, false).await {
42-
Ok(()) => println!("Session username: {:#?}", session.username()),
43-
Err(e) => println!("Error connecting: {}", e),
44-
}
51+
let token = session2.token_provider().get_token(SCOPES).await.unwrap();
52+
println!("Got me a token: {token:#?}");
4553
}

0 commit comments

Comments
 (0)