Get token #8

Merged
phoenix merged 9 commits from get_token into v0.3.0 2026-06-24 14:50:15 -04:00
3 changed files with 117 additions and 124 deletions
Showing only changes of commit dd9d452576 - Show all commits
+2 -2
View File
@@ -43,9 +43,9 @@ pub async fn load_app() -> Result<App, std::io::Error> {
match textsender_models::config::auxiliary::load_config().await {
Ok(twilio_config) => Ok(App {
api_url: envs[0].value.clone(),
auth_url: envs[1].value.clone(),
auth_url: envs[1].value.clone(),
service_username: envs[2].value.clone(),
service_passphrase: envs[3].value.clone(),
service_passphrase: envs[3].value.clone(),
twilio_config: twilio_config,
}),
Err(err) => Err(err),
+2 -4
View File
@@ -16,9 +16,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("App: {app:?}");
let auth = catapult::service::auth::Auth {
app: app.clone()
};
let auth = catapult::service::auth::Auth { app: app.clone() };
let token = match auth.get_token().await {
Ok(token) => token,
Err(err) => {
@@ -32,7 +30,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut svc = catapult::service::Service {
app: app.clone(),
token
token,
};
loop {
+113 -118
View File
@@ -1,6 +1,6 @@
pub struct Service {
pub app: crate::app::App,
pub token: textsender_models::token::Login
pub token: textsender_models::token::Login,
}
impl Service {
@@ -30,7 +30,7 @@ impl Service {
pub mod auth {
pub struct Auth {
pub app: crate::app::App
pub app: crate::app::App,
}
/*
@@ -63,167 +63,162 @@ pub mod auth {
println!("Payload: {payload:?}");
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 serde_json::from_str::<serde_json::Value>(&val) {
Ok(j) => {
println!("Good");
let message = &j["message"];
let data = &j["data"];
Ok(response) => {
match response.status() {
reqwest::StatusCode::OK => {
println!("Response: {response:?}");
match response.text().await {
Ok(val) => {
match serde_json::from_str::<serde_json::Value>(&val) {
Ok(j) => {
println!("Good");
let message = &j["message"];
let data = &j["data"];
println!("Message: {message:?}");
println!("Data: {data:?}");
match j.get("data") {
Some(serde_json::Value::Array(lrs)) => {
if lrs.is_empty() {
Err(std::io::Error::other("Error response is empty"))
} else {
let lr = lrs[0].clone();
let ll: textsender_models::token::LoginResult = match serde_json::from_value(lr) { Ok(lr) => lr,
println!("Message: {message:?}");
println!("Data: {data:?}");
match j.get("data") {
Some(serde_json::Value::Array(lrs)) => {
if lrs.is_empty() {
Err(std::io::Error::other(
"Error response is empty",
))
} else {
let lr = lrs[0].clone();
let ll: textsender_models::token::LoginResult = match serde_json::from_value(lr) { Ok(lr) => lr,
Err(err) => {
return Err(std::io::Error::other(err.to_string()));
}
};
Ok(ll)
// Ok(textsender_models::token::LoginResult::default())
Ok(ll)
// Ok(textsender_models::token::LoginResult::default())
}
}
}
_ => {
Err(std::io::Error::other("Error parsing response"))
_ => Err(std::io::Error::other(
"Error parsing response",
)),
}
}
}
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(err) => Err(std::io::Error::other(err)),
}
}
}
_ => {
Err(std::io::Error::other("Error getting token"))
_ => Err(std::io::Error::other("Error getting token")),
}
}
Err(err) => {
Err(std::io::Error::other(err.to_string()))
}
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 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,
});
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())),
}
*
*/
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"`
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,
}
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()
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
}
var r tokenResponse
err = json.NewDecoder(resp.Body).Decode(&r)
if err != nil {
return nil, err
}
return r.Data[0], nil
return r.Data[0], nil
}
type refreshTokenRequest struct {
AccessToken string `json:"access_token"`
AccessToken string `json:"access_token"`
}
func (a *Auth) GetRefreshToken(tok *token.Login) (*token.Login, error) {
req := refreshTokenRequest{AccessToken: tok.AccessToken}
req := refreshTokenRequest{AccessToken: tok.AccessToken}
jsonData, err := json.Marshal(req)
if err != nil {
return nil, err
}
jsonData, err := json.Marshal(req)
if err != nil {
return nil, err
}
resp, err := http.Post(fmt.Sprintf("%s/api/v1/token/refresh", a.Application.AuthUrl), "application/json", bytes.NewBuffer(jsonData))
if err != nil {
return nil, err
}
defer resp.Body.Close()
resp, err := http.Post(fmt.Sprintf("%s/api/v1/token/refresh", 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
} else {
if len(r.Data) == 0 {
return nil, nil
} else {
return r.Data[0], nil
}
}
var r tokenResponse
err = json.NewDecoder(resp.Body).Decode(&r)
if err != nil {
return nil, err
} else {
if len(r.Data) == 0 {
return nil, nil
} else {
return r.Data[0], nil
}
}
}
func (s *Auth) TokenExpired(tok *token.Login) bool {
now := time.Now()
expiredTime := time.Unix(tok.ExpiresIn, 0)
now := time.Now()
expiredTime := time.Unix(tok.ExpiresIn, 0)
if now.After(expiredTime) {
return true
} else {
return false
}
if now.After(expiredTime) {
return true
} else {
return false
}
}
*
*/