From 80c4c7950b32767d5b38ca7d171067dc3d620277 Mon Sep 17 00:00:00 2001 From: phoenix Date: Wed, 13 Aug 2025 16:56:30 -0400 Subject: [PATCH] tsk-41: Can fetch the token now --- src/api.rs | 10 +++++++++ src/main.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/api.rs b/src/api.rs index 023ac14..9a380ec 100644 --- a/src/api.rs +++ b/src/api.rs @@ -133,3 +133,13 @@ pub mod get_coverart_queue { } } } + +pub mod service_token { + pub mod response { + #[derive(Debug, serde::Deserialize, serde::Serialize)] + pub struct Response { + pub message: String, + pub data: Vec, + } + } +} diff --git a/src/main.rs b/src/main.rs index 74cc46a..83792e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,18 +15,29 @@ async fn main() -> Result<(), Box> { // let app_base_url = icarus_envy::environment::get_icarus_base_api_url().await; let mut app = config::App { uri: icarus_envy::environment::get_icarus_base_api_url().await, - token: auth::get_token().await, - // ..Default::default() + // token: auth::get_token(&app).await, + ..Default::default() }; + match auth::get_token(&app).await { + Ok(login_result) => { + app.token = login_result; + } + Err(err) => { + eprintln!("Error: {err:?}"); + std::process::exit(-1); + } + }; + tokio::time::sleep(tokio::time::Duration::from_secs(SECONDS_TO_SLEEP)).await; // let mut service_login = auth::get_token().await; loop { println!("Base URL: {:?}", app.uri); println!("Token: {:?}", app.token); + tokio::time::sleep(tokio::time::Duration::from_secs(SECONDS_TO_SLEEP)).await; if auth::did_token_expire(&app.token).await { - app.token = auth::get_refresh_token(&app.token).await; + app.token = auth::get_refresh_token(&app, &app.token).await; println!("Token refreshed"); println!("Refreshed token: {:?}", app.token); } @@ -94,8 +105,48 @@ async fn main() -> Result<(), Box> { mod auth { // TODO: Implement function - pub async fn get_token() -> icarus_models::login_result::LoginResult { - icarus_models::login_result::LoginResult::default() + pub async fn get_token(app: &crate::config::App) -> Result { + /* + * + ) -> Result { + let client = reqwest::Client::new(); + let endpoint = String::from("api/v2/song/metadata/queue"); + let api_url = format!("{}/{endpoint}", app.uri); + client + .get(api_url) + .query(&[("song_queue_id", song_queue_id)]) + .send() + */ + let client = reqwest::Client::new(); + let endpoint = String::from("api/v2/service/login"); + let api_url = format!("{}/{endpoint}", app.uri); + + let payload = serde_json::json!({ + "passphrase": icarus_envy::environment::get_service_passphrase().await, + }); + + println!("Payload: {payload:?}"); + + match client.post(api_url).json(&payload) + .send().await { + Ok(response) => match response.json::().await { + Ok(resp) => { + if resp.data.is_empty() { + Err(std::io::Error::other(String::from("No token returned"))) + } else { + Ok(resp.data[0].clone()) + } + } + Err(err) => { + Err(std::io::Error::other(err.to_string())) + } + } + Err(err) => { + Err(std::io::Error::other(err.to_string())) + } + } + + // icarus_models::login_result::LoginResult::default() } // TODO: Implement function. Might want to put the functionality within icarus_models @@ -105,7 +156,7 @@ mod auth { } // TODO: Implement function - pub async fn get_refresh_token(login_result: &icarus_models::login_result::LoginResult) -> icarus_models::login_result::LoginResult { + pub async fn get_refresh_token(app: &crate::config::App, login_result: &icarus_models::login_result::LoginResult) -> icarus_models::login_result::LoginResult { icarus_models::login_result::LoginResult::default() } }