From 334a0e3ea60462c563bc5c3d5238c20fe7be76f9 Mon Sep 17 00:00:00 2001 From: Per Stark Date: Fri, 21 Mar 2025 12:55:21 +0100 Subject: [PATCH] remove mail functionality for now removing mail functionality --- crates/api-router/src/error.rs | 2 +- crates/common/Cargo.toml | 3 -- crates/common/src/error.rs | 6 +-- crates/common/src/utils/config.rs | 6 --- crates/common/src/utils/mailer.rs | 80 ---------------------------- crates/html-router/src/html_state.rs | 7 --- 6 files changed, 2 insertions(+), 102 deletions(-) diff --git a/crates/api-router/src/error.rs b/crates/api-router/src/error.rs index f67ead0..9beeb72 100644 --- a/crates/api-router/src/error.rs +++ b/crates/api-router/src/error.rs @@ -25,7 +25,7 @@ pub enum ApiError { impl From for ApiError { fn from(err: AppError) -> Self { match err { - AppError::Database(_) | AppError::OpenAI(_) | AppError::Email(_) => { + AppError::Database(_) | AppError::OpenAI(_) => { tracing::error!("Internal error: {:?}", err); ApiError::InternalError("Internal server error".to_string()) } diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 287d723..9d7f445 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -23,11 +23,8 @@ axum_typed_multipart = "0.12.1" chrono = { version = "0.4.39", features = ["serde"] } chrono-tz = "0.10.1" config = "0.15.4" -lettre = { version = "0.11.11", features = [] } mime = "0.3.17" mime_guess = "2.0.5" -minijinja = { version = "2.5.0", features = ["loader", "multi_template"] } -minijinja-autoreload = "2.5.0" reqwest = {version = "0.12.12", features = ["charset", "json"]} sha2 = "0.10.8" tempfile = "3.12.0" diff --git a/crates/common/src/error.rs b/crates/common/src/error.rs index 630957e..b1e97c8 100644 --- a/crates/common/src/error.rs +++ b/crates/common/src/error.rs @@ -2,7 +2,7 @@ use async_openai::error::OpenAIError; use thiserror::Error; use tokio::task::JoinError; -use crate::{storage::types::file_info::FileError, utils::mailer::EmailError}; +use crate::storage::types::file_info::FileError; // Core internal errors #[derive(Error, Debug)] @@ -13,8 +13,6 @@ pub enum AppError { OpenAI(#[from] OpenAIError), #[error("File error: {0}")] File(#[from] FileError), - #[error("Email error: {0}")] - Email(#[from] EmailError), #[error("Not found: {0}")] NotFound(String), #[error("Validation error: {0}")] @@ -29,8 +27,6 @@ pub enum AppError { GraphMapper(String), #[error("IoError: {0}")] Io(#[from] std::io::Error), - #[error("Minijina error: {0}")] - MiniJinja(#[from] minijinja::Error), #[error("Reqwest error: {0}")] Reqwest(#[from] reqwest::Error), #[error("Tiktoken error: {0}")] diff --git a/crates/common/src/utils/config.rs b/crates/common/src/utils/config.rs index 6f12178..9559196 100644 --- a/crates/common/src/utils/config.rs +++ b/crates/common/src/utils/config.rs @@ -2,9 +2,6 @@ use config::{Config, ConfigError, File}; #[derive(Clone, Debug)] pub struct AppConfig { - pub smtp_username: String, - pub smtp_password: String, - pub smtp_relayer: String, pub surrealdb_address: String, pub surrealdb_username: String, pub surrealdb_password: String, @@ -18,9 +15,6 @@ pub fn get_config() -> Result { .build()?; Ok(AppConfig { - smtp_username: config.get_string("SMTP_USERNAME")?, - smtp_password: config.get_string("SMTP_PASSWORD")?, - smtp_relayer: config.get_string("SMTP_RELAYER")?, surrealdb_address: config.get_string("SURREALDB_ADDRESS")?, surrealdb_username: config.get_string("SURREALDB_USERNAME")?, surrealdb_password: config.get_string("SURREALDB_PASSWORD")?, diff --git a/crates/common/src/utils/mailer.rs b/crates/common/src/utils/mailer.rs index 32468cf..8b13789 100644 --- a/crates/common/src/utils/mailer.rs +++ b/crates/common/src/utils/mailer.rs @@ -1,81 +1 @@ -use lettre::address::AddressError; -use lettre::message::MultiPart; -use lettre::{transport::smtp::authentication::Credentials, SmtpTransport}; -use lettre::{Message, Transport}; -use minijinja::context; -use minijinja_autoreload::AutoReloader; -use thiserror::Error; -use tracing::info; -pub struct Mailer { - pub mailer: SmtpTransport, -} - -#[derive(Error, Debug)] -pub enum EmailError { - #[error("Email construction error: {0}")] - EmailParsingError(#[from] AddressError), - - #[error("Email sending error: {0}")] - SendingError(#[from] lettre::transport::smtp::Error), - - #[error("Body constructing error: {0}")] - BodyError(#[from] lettre::error::Error), - - #[error("Templating error: {0}")] - TemplatingError(#[from] minijinja::Error), -} - -impl Mailer { - pub fn new( - username: &str, - relayer: &str, - password: &str, - ) -> Result { - let creds = Credentials::new(username.to_owned(), password.to_owned()); - - let mailer = SmtpTransport::relay(&relayer)?.credentials(creds).build(); - - Ok(Mailer { mailer }) - } - - pub fn send_email_verification( - &self, - email_to: &str, - verification_code: &str, - templates: &AutoReloader, - ) -> Result<(), EmailError> { - let name = email_to - .split('@') - .next() - .unwrap_or("User") - .chars() - .enumerate() - .map(|(i, c)| if i == 0 { c.to_ascii_uppercase() } else { c }) - .collect::(); - - let context = context! { - name => name, - verification_code => verification_code - }; - - let env = templates.acquire_env()?; - let html = env - .get_template("email/email_verification.html")? - .render(&context)?; - let plain = env - .get_template("email/email_verification.txt")? - .render(&context)?; - - let email = Message::builder() - .from("Admin ".parse()?) - .reply_to("Admin ".parse()?) - .to(format!("{} <{}>", name, email_to).parse()?) - .subject("Verify Your Email Address") - .multipart(MultiPart::alternative_plain_html(plain, html))?; - - info!("Sending email to: {}", email_to); - self.mailer.send(&email)?; - Ok(()) - } -} diff --git a/crates/html-router/src/html_state.rs b/crates/html-router/src/html_state.rs index 1ce1f51..760d649 100644 --- a/crates/html-router/src/html_state.rs +++ b/crates/html-router/src/html_state.rs @@ -2,7 +2,6 @@ use axum_session::SessionStore; use axum_session_surreal::SessionSurrealPool; use common::storage::db::SurrealDbClient; use common::utils::config::AppConfig; -use common::utils::mailer::Mailer; use minijinja::{path_loader, Environment}; use minijinja_autoreload::AutoReloader; use std::path::PathBuf; @@ -14,7 +13,6 @@ pub struct HtmlState { pub db: Arc, pub openai_client: Arc>, pub templates: Arc, - pub mailer: Arc, pub session_store: Arc>>, } @@ -52,11 +50,6 @@ impl HtmlState { db: surreal_db_client.clone(), templates: Arc::new(reloader), openai_client: openai_client.clone(), - mailer: Arc::new(Mailer::new( - &config.smtp_username, - &config.smtp_relayer, - &config.smtp_password, - )?), session_store, };