Skip to content

Commit

Permalink
fixed listmonk
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcelCoding committed Feb 5, 2024
1 parent 6f669d3 commit 81f47de
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 40 deletions.
82 changes: 46 additions & 36 deletions src/lists.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use email_address::EmailAddress;
use serde::{Deserialize, Serialize};
use std::error::Error;
use std::fmt;
use std::path::PathBuf;

use email_address::EmailAddress;
use reqwest::Client;
use serde::{Deserialize, Serialize};
use tracing::error;
use url::Url;

use reqwest::Client;
//use reqwest::Error;

#[derive(Debug, Clone)]
Expand All @@ -26,10 +27,9 @@ pub(crate) struct Subscriber {
pub(crate) struct ListmonkCreateSubscriber {
email: String,
name: String,
status: String, // "enabled" or "disabled"
status: String,
// "enabled" or "disabled"
lists: Vec<i32>,
attribs: serde_json::value::Value,
preconfirm_subscriptions: bool,
}

#[derive(Debug, Clone, Deserialize)]
Expand Down Expand Up @@ -90,14 +90,12 @@ impl Subscriber {
}

impl ListmonkCreateSubscriber {
fn load(subscriber: &Subscriber) -> ListmonkCreateSubscriber {
fn load(subscriber: &Subscriber, lists: Vec<i32>) -> ListmonkCreateSubscriber {
ListmonkCreateSubscriber {
email: subscriber.email.clone(),
name: "NewsSubscriber".to_string(),
status: "enabled".to_string(),
attribs: serde_json::value::Value::Null,
lists: vec![],
preconfirm_subscriptions: true,
lists,
}
}
}
Expand Down Expand Up @@ -149,7 +147,10 @@ impl MailingLists {
.join("/api/subscribers")
.expect("invalid url"),
)
.json(&ListmonkCreateSubscriber::load(&new_subscriber))
.json(&ListmonkCreateSubscriber::load(
&new_subscriber,
vec![desired_list],
))
.basic_auth(self.user.clone(), Some(self.password.clone()))
.send()
.await
Expand All @@ -159,6 +160,15 @@ impl MailingLists {
})?;

if response_create.status() != reqwest::StatusCode::OK {
error!(
"Listmonk error: {} {}",
response_create.status(),
response_create
.text()
.await
.ok()
.unwrap_or("unable to extract body".to_string())
);
return Err(MailingListsError::ListmonkError);
}

Expand All @@ -170,30 +180,30 @@ impl MailingLists {
}
};

let mailing_list_add = client
.put(
self
.url
.clone()
.join("/api/subscribers/lists")
.expect("invalid url"),
)
.json(&ListmonkAddSubscribers::load(
json_body.data.id,
desired_list,
))
.basic_auth(self.user.clone(), Some(self.password.clone()))
.send()
.await
.map_err(|e| {
error!("reqwest error while to sending to listmonk {:?}", e);
MailingListsError::RequestError
})?;

if mailing_list_add.status() != reqwest::StatusCode::OK {
Err(MailingListsError::ListmonkError)
} else {
Ok(())
}
// let mailing_list_add = client
// .put(
// self
// .url
// .clone()
// .join("/api/subscribers/lists")
// .expect("invalid url"),
// )
// .json(&ListmonkAddSubscribers::load(
// json_body.data.id,
// desired_list,
// ))
// .basic_auth(self.user.clone(), Some(self.password.clone()))
// .send()
// .await
// .map_err(|e| {
// error!("reqwest error while to sending to listmonk {:?}", e);
// MailingListsError::RequestError
// })?;
//
// if mailing_list_add.status() != reqwest::StatusCode::OK {
// Err(MailingListsError::ListmonkError)
// } else {
Ok(())
// }
}
}
8 changes: 4 additions & 4 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::args::Args;
use crate::documents::Documents;
use crate::lists::MailingLists;
use crate::news::News;
use crate::routes::{ContentPaths, route};
use crate::routes::{route, ContentPaths};
use crate::state::FoundationState;
use crate::team::Team;
use crate::text_blocks::TextBlocks;
Expand Down Expand Up @@ -56,7 +56,7 @@ async fn main() -> anyhow::Result<()> {
&args.listmonk_password_file,
&args.listmonk_lists,
)
.await?,
.await?,
};

let cors = CorsLayer::new()
Expand All @@ -70,8 +70,8 @@ async fn main() -> anyhow::Result<()> {
document: args.content_directory.join("documents/download"),
team: args.content_directory.join("team/assets"),
})
.layer(cors)
.with_state(state);
.layer(cors)
.with_state(state);

let listener = TcpListener::bind(&args.listen_addr).await?;
info!("Listening on http://{}...", args.listen_addr);
Expand Down

0 comments on commit 81f47de

Please sign in to comment.