1
0
Fork 0
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:
Carlos Tocino 2025-02-18 16:39:31 +01:00 committed by GitHub
parent 581c8d61ea
commit f497806fb1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 471 additions and 53 deletions

View 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}"),
}
}