Added more code to the managers module

This commit is contained in:
kdeng00
2024-05-12 17:36:00 -04:00
parent de9602f1a0
commit 7c84ce9a35
3 changed files with 83 additions and 7 deletions
+6 -1
View File
@@ -2,7 +2,9 @@ use std::collections::HashMap;
use std::default::Default; use std::default::Default;
use std::fs::File; use std::fs::File;
use std::io::{Read, Error}; use std::io::{Read, Error};
use tokio::runtime::Runtime;
use futures::{FutureExt, TryFutureExt};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::{exit_program, managers}; use crate::{exit_program, managers};
@@ -184,7 +186,10 @@ impl CommitManager {
api: api.clone(), api: api.clone(),
}; };
return tok_mgr.request_token(); // let token = tok_mgr.request_token();
let token = Runtime::new().unwrap().block_on(tok_mgr.request_token());
return token.unwrap();
} }
// TODO: Implement // TODO: Implement
fn upload_song_with_metadata(&self) { fn upload_song_with_metadata(&self) {
+65 -5
View File
@@ -7,18 +7,78 @@ pub struct TokenManager {
pub api: models::api::API, pub api: models::api::API,
} }
impl Default for TokenManager {
fn default() -> Self {
let mut token = TokenManager {
user: models::user::User::default(),
api: models::api::API::default(),
};
token.init();
return token;
}
}
impl TokenManager { impl TokenManager {
pub fn request_token(&self) -> models::token::Token { pub async fn request_token(&self) -> Result<models::token::Token, std::io::Error> {
let usr_json = self.user.to_json();
println!("Sending request for a token"); println!("Sending request for a token");
let endpoint = self.construct_endpoint(); let endpoint = self.construct_endpoint();
let mut url: String = String::from(&self.api.url); let mut url = self.retrieve_url();
url += &endpoint; // url += &endpoint;
println!("URL: {}", url); println!("URL: {}", url);
return models::token::Token::default(); let mut token = models::token::Token::default();
let client = reqwest::Client::new();
let response = client.post(&url)
.json(&self.user)
.send()
.await
.unwrap();
match response.status() {
reqwest::StatusCode::OK => {
// on success, parse our JSON to an APIResponse
let s = response.json::<models::token::Token>().await;
match s {
//
Ok(parsed) => {
token = parsed;
},
Err(_) => println!("Hm, the response didn't match the shape we expected."),
};
}
reqwest::StatusCode::UNAUTHORIZED => {
println!("Need to grab a new token");
}
other => {
panic!("Uh oh! Something unexpected happened: {:?}", other);
}
}
return Ok(token);
}
pub fn init(&mut self) {
let mut api = &mut self.api;
api.endpoint = String::from("api/v1/login");
api.version = String::from("v1");
}
pub fn retrieve_url(&self) -> String {
let api = &self.api;
let mut url = String::from(&api.url);
url += &String::from("api/");
url += &String::from(&api.version);
url += &String::from("/");
url += &String::from(&api.endpoint);
url += &String::from("/");
return url;
} }
fn construct_endpoint(&self) -> String { fn construct_endpoint(&self) -> String {
+12 -1
View File
@@ -1,6 +1,8 @@
use std::default::Default;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::models; use crate::models::{self, user::User};
#[derive(Debug, Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
pub struct UserManager { pub struct UserManager {
@@ -8,6 +10,15 @@ pub struct UserManager {
pub ica_action: models::icarus_action::IcarusAction, pub ica_action: models::icarus_action::IcarusAction,
} }
impl Default for UserManager {
fn default() -> Self {
UserManager {
user: models::user::User::default(),
ica_action: models::icarus_action::IcarusAction::default(),
}
}
}
impl UserManager { impl UserManager {
pub fn retrieve_user(&self) -> models::user::User { pub fn retrieve_user(&self) -> models::user::User {
return self.user.clone(); return self.user.clone();