#[allow(non_upper_case_globals)] use crate::{ config::{MASTER_PORT, MASTER_SERVER}, messaging::{AsMsg, BaseMessage}, models, utils::{opt_to_string, VecDisplay}, UError, UResult, }; use reqwest::{Client, RequestBuilder, Url}; use std::env; use u_api_proc_macro::api_route; use uuid::Uuid; pub struct ClientHandler { base_url: Url, client: Client, password: Option, } impl ClientHandler { pub fn new(server: Option<&str>) -> Self { let env_server = env::var("U_SERVER").unwrap_or(String::from(MASTER_SERVER)); let master_server = server.unwrap_or(env_server.as_str()); Self { client: Client::new(), base_url: Url::parse(&format!("http://{}:{}", master_server, MASTER_PORT)).unwrap(), password: None, } } pub fn password(mut self, password: String) -> ClientHandler { self.password = Some(password); self } fn set_pwd(&self, rb: RequestBuilder) -> RequestBuilder { match &self.password { Some(p) => rb.bearer_auth(p), None => rb, } } fn build_get(&self, url: &str) -> RequestBuilder { let rb = self.client.get(self.base_url.join(url).unwrap()); self.set_pwd(rb) } fn build_post(&self, url: &str) -> RequestBuilder { let rb = self.client.post(self.base_url.join(url).unwrap()); self.set_pwd(rb) } // // get jobs for client #[api_route("GET")] fn get_agent_jobs(&self, url_param: Option) -> VecDisplay {} // // send something to server #[api_route("POST")] fn report(&self, payload: &M) -> models::Empty {} //##########// Admin area //##########// /// client listing #[api_route("GET")] fn get_agents(&self, url_param: Option) -> VecDisplay {} // // get all available jobs #[api_route("GET")] fn get_jobs(&self, url_param: Option) -> VecDisplay {} // // create and upload job #[api_route("POST")] fn upload_jobs(&self, payload: &[models::JobMeta]) -> models::Empty {} // // delete something #[api_route("GET")] fn del(&self, url_param: Option) -> String {} // // set jobs for client #[api_route("POST")] fn set_jobs(&self, url_param: Option, payload: &[String]) -> VecDisplay {} }