Saving changes
catapult PR / Rustfmt (pull_request) Failing after 48s
catapult PR / Clippy (pull_request) Failing after 59s
catapult PR / Check (pull_request) Successful in 1m34s

This commit is contained in:
2026-06-22 22:32:52 -04:00
parent adcc9a382f
commit 515c0c564b
3 changed files with 102 additions and 137 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Access token: {}", token.access_token); println!("Access token: {}", token.access_token);
let mut svc = catapult::service::Service { let mut svc = catapult::service::core::Service {
app: app.clone(), app: app.clone(),
token, token,
}; };
+30
View File
@@ -0,0 +1,30 @@
pub struct Service {
pub app: crate::app::App,
pub token: textsender_models::token::Login,
}
impl Service {
pub async fn do_the_work(&mut self) {
println!("Do some work");
todo!(
r#"
Need to finish this
This function should fetch a token, check if the token is valid, and obtain a refresh token if
it has expired.
Then do the real work.
1. Check the queue
2. If there is an item, get the data,
3. Evaluate if it is schedulable
4. Get the events and iterate each one
5. starting with the message
6. Get the contact
7. Send the message
8. Record the message event response
"#
);
}
}
+53 -118
View File
@@ -1,54 +1,13 @@
pub struct Service { pub mod core;
pub app: crate::app::App,
pub token: textsender_models::token::Login,
}
impl Service {
pub async fn do_the_work(&mut self) {
println!("Do some work");
todo!(
r#"
Need to finish this
This function should fetch a token, check if the token is valid, and obtain a refresh token if
it has expired.
Then do the real work.
1. Check the queue
2. If there is an item, get the data,
3. Evaluate if it is schedulable
4. Get the events and iterate each one
5. starting with the message
6. Get the contact
7. Send the message
8. Record the message event response
"#
);
}
}
pub mod auth { pub mod auth {
pub struct Auth { pub struct Auth {
pub app: crate::app::App, pub app: crate::app::App,
} }
/*
#[derive(serde::Deserialize, serde::Serialize)]
struct ServiceRequest {
pub username: String,
pub passphrase: String
}
*/
impl Auth { impl Auth {
pub async fn get_token(&self) -> Result<textsender_models::token::Login, std::io::Error> { pub async fn get_token(&self) -> Result<textsender_models::token::Login, std::io::Error> {
/*
let svcRequest = ServiceRequest {
username: self.app.service_username,
passphrase: self.app.service_passphrase,
};
*/
let client = reqwest::Client::new(); let client = reqwest::Client::new();
let endpoint = String::from("api/v1/service/login"); let endpoint = String::from("api/v1/service/login");
let api_url = format!("{}/{endpoint}", self.app.auth_url); let api_url = format!("{}/{endpoint}", self.app.auth_url);
@@ -69,7 +28,57 @@ pub mod auth {
println!("Response: {response:?}"); println!("Response: {response:?}");
match response.text().await { match response.text().await {
Ok(val) => { Ok(val) => {
match serde_json::from_str::<serde_json::Value>(&val) { match parse_token_response(&val).await {
Ok(login_result) => Ok(login_result),
Err(err) => Err(err)
}
}
Err(err) => Err(std::io::Error::other(err)),
}
}
_ => Err(std::io::Error::other("Error getting token")),
}
}
Err(err) => Err(std::io::Error::other(err.to_string())),
}
}
pub async fn get_refresh_token(&self, login_result: &textsender_models::token::Login) -> Result<textsender_models::token::Login, std::io::Error> {
let client = reqwest::Client::new();
let endpoint = String::from("api/v1/token/refresh");
let api_url = format!("{}/{endpoint}", self.app.auth_url);
println!("Url: {api_url:?}");
let payload = serde_json::json!({
"access_token": login_result.access_token
});
match client.post(api_url).json(&payload).send().await {
Ok(response) => {
match response.status() {
reqwest::StatusCode::OK => {
println!("Response: {response:?}");
match response.text().await {
Ok(val) => {
match parse_token_response(&val).await {
Ok(login_result) => Ok(login_result),
Err(err) => Err(err)
}
}
Err(err) => Err(std::io::Error::other(err)),
}
}
_ => Err(std::io::Error::other("Error getting token")),
}
}
Err(err) => Err(std::io::Error::other(err.to_string())),
}
}
}
async fn parse_token_response(response: &String) -> Result<textsender_models::token::LoginResult, std::io::Error> {
match serde_json::from_str::<serde_json::Value>(response) {
Ok(j) => { Ok(j) => {
println!("Good"); println!("Good");
let message = &j["message"]; let message = &j["message"];
@@ -91,7 +100,6 @@ pub mod auth {
} }
}; };
Ok(ll) Ok(ll)
// Ok(textsender_models::token::LoginResult::default())
} }
} }
_ => Err(std::io::Error::other( _ => Err(std::io::Error::other(
@@ -102,83 +110,10 @@ pub mod auth {
Err(err) => Err(std::io::Error::other(err.to_string())), Err(err) => Err(std::io::Error::other(err.to_string())),
} }
} }
Err(err) => Err(std::io::Error::other(err)),
}
}
_ => Err(std::io::Error::other("Error getting token")),
}
}
Err(err) => Err(std::io::Error::other(err.to_string())),
}
}
}
} }
/* /*
*
let client = reqwest::Client::new();
let endpoint = String::from("api/v2/service/login");
let api_url = format!("{}/{endpoint}", app.auth_uri);
let payload = serde_json::json!({
"passphrase": icarus_envy::environment::get_service_passphrase().await.value,
});
match client.post(api_url).json(&payload).send().await {
Ok(response) => match response
.json::<crate::api::service_token::response::Response>()
.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())),
}
*
*/
/*
*
type tokenResponse struct {
Message string `json:"message"`
Data []*token.Login `json:"data"`
}
func (a *Auth) GetToken() (*token.Login, error) {
serv := service{
Username: a.Application.ServiceUsername,
Passphrase: a.Application.ServicePassphrase,
}
jsonData, err := json.Marshal(serv)
if err != nil {
return nil, err
}
resp, err := http.Post(
fmt.Sprintf("%s/api/v1/service/login", a.Application.AuthUrl),
"application/json",
bytes.NewBuffer(jsonData),
)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var r tokenResponse
err = json.NewDecoder(resp.Body).Decode(&r)
if err != nil {
return nil, err
}
return r.Data[0], nil
}
type refreshTokenRequest struct { type refreshTokenRequest struct {
AccessToken string `json:"access_token"` AccessToken string `json:"access_token"`
} }