mirror of
https://github.com/librespot-org/librespot.git
synced 2025-10-03 09:49:31 +02:00
OAuth process made by a struct, allowing customization options. (#1462)
* get refresh token. Optional auth url browser opening * changelog * access token accepts custom message * docs updated * CustomParams renamed * OAuthToken can be cloned * builder pattern on token management * changelog * docs and format issues * split methods and finish documentation * new example and minor adjustments * typo * remove unnecessary dependency * requested changes * Update oauth/src/lib.rs Co-authored-by: Felix Prillwitz <photovoltex@mailbox.org> * Update oauth/src/lib.rs Co-authored-by: Felix Prillwitz <photovoltex@mailbox.org> * Update CHANGELOG.md Co-authored-by: Felix Prillwitz <photovoltex@mailbox.org> * Update oauth/src/lib.rs Co-authored-by: Felix Prillwitz <photovoltex@mailbox.org> * Update oauth/src/lib.rs Co-authored-by: Felix Prillwitz <photovoltex@mailbox.org> * Update oauth/src/lib.rs Co-authored-by: Nick Steel <nick@nsteel.co.uk> * Update oauth/src/lib.rs Co-authored-by: Nick Steel <nick@nsteel.co.uk> * remove veil. Oauth flow fix * debug trait instead of veil * Update main.rs Co-authored-by: Nick Steel <nick@nsteel.co.uk> --------- Co-authored-by: Felix Prillwitz <photovoltex@mailbox.org> Co-authored-by: Nick Steel <nick@nsteel.co.uk>
This commit is contained in:
parent
581c8d61ea
commit
f497806fb1
8 changed files with 471 additions and 53 deletions
64
oauth/examples/oauth_sync.rs
Normal file
64
oauth/examples/oauth_sync.rs
Normal file
|
@ -0,0 +1,64 @@
|
|||
use std::env;
|
||||
|
||||
use librespot_oauth::OAuthClientBuilder;
|
||||
|
||||
const SPOTIFY_CLIENT_ID: &str = "65b708073fc0480ea92a077233ca87bd";
|
||||
const SPOTIFY_REDIRECT_URI: &str = "http://127.0.0.1:8898/login";
|
||||
|
||||
const RESPONSE: &str = r#"
|
||||
<!doctype html>
|
||||
<html>
|
||||
<body>
|
||||
<h1>Return to your app!</h1>
|
||||
</body>
|
||||
</html>
|
||||
"#;
|
||||
|
||||
fn main() {
|
||||
let mut builder = env_logger::Builder::new();
|
||||
builder.parse_filters("librespot=trace");
|
||||
builder.init();
|
||||
|
||||
let args: Vec<_> = env::args().collect();
|
||||
let (client_id, redirect_uri, scopes) = if args.len() == 4 {
|
||||
// You can use your own client ID, along with it's associated redirect URI.
|
||||
(
|
||||
args[1].as_str(),
|
||||
args[2].as_str(),
|
||||
args[3].split(',').collect::<Vec<&str>>(),
|
||||
)
|
||||
} else if args.len() == 1 {
|
||||
(SPOTIFY_CLIENT_ID, SPOTIFY_REDIRECT_URI, vec!["streaming"])
|
||||
} else {
|
||||
eprintln!("Usage: {} [CLIENT_ID REDIRECT_URI SCOPES]", args[0]);
|
||||
return;
|
||||
};
|
||||
|
||||
let client = match OAuthClientBuilder::new(client_id, redirect_uri, scopes)
|
||||
.open_in_browser()
|
||||
.with_custom_message(RESPONSE)
|
||||
.build()
|
||||
{
|
||||
Ok(client) => client,
|
||||
Err(err) => {
|
||||
eprintln!("Unable to build an OAuth client: {}", err);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
let refresh_token = match client.get_access_token() {
|
||||
Ok(token) => {
|
||||
println!("OAuth Token: {token:#?}");
|
||||
token.refresh_token
|
||||
}
|
||||
Err(err) => {
|
||||
println!("Unable to get OAuth Token: {err}");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
match client.refresh_token(&refresh_token) {
|
||||
Ok(token) => println!("New refreshed OAuth Token: {token:#?}"),
|
||||
Err(err) => println!("Unable to get refreshed OAuth Token: {err}"),
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue