From d5bcd3493b70e3d36e97fd0d3af82d221f4a0d0e Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Sat, 18 May 2024 20:41:27 +0530 Subject: [PATCH] fix: read email config as a URL for optionally disabling TLS --- .env_sample | 8 ++++++++ config/default.toml | 4 +--- src/settings/email.rs | 28 +++++++--------------------- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/.env_sample b/.env_sample index a5a10b0..5637545 100644 --- a/.env_sample +++ b/.env_sample @@ -1 +1,9 @@ export POSTGRES_DATABASE_URL="postgres://postgres:password@localhost:5432/postgres" + +# development maildev/maildev container creds +export VANIKAM_email_USERNAME=admin +export VANIKAM_email_PASSWORD=password +export VANIKAM_email_SERVER_HOSTNAME=localhost:10025 +export MAILDEV_URL=http://localhost:1080 +export VANIKAM_email_FROM="Vanikam Info " +export VANIKAM_email_REPLY_TO="Vanikam Support " diff --git a/config/default.toml b/config/default.toml index 916abdb..b7b7cfe 100644 --- a/config/default.toml +++ b/config/default.toml @@ -26,8 +26,6 @@ url = "postgres://example.org" # hack for tests to run successfully pool = 4 [email] -username="vanikam_mailer" -password="vanikam_mailer_password" -server_hostname="smtp.vanikam.example.com" +url="smtps://username:password@smtp.example.com:465" from="Vanikam Info " reply_to="Vanikam Support " diff --git a/src/settings/email.rs b/src/settings/email.rs index 2b3aeae..923abc5 100644 --- a/src/settings/email.rs +++ b/src/settings/email.rs @@ -7,13 +7,12 @@ use std::env; use config::{builder::DefaultState, ConfigBuilder}; use lettre::message::Mailbox; use serde::{Deserialize, Serialize}; +use url::Url; use validator::{Validate, ValidationError}; #[derive(Debug, Clone, Serialize, Deserialize, Validate, Eq, PartialEq)] pub struct Email { - pub username: String, - pub password: String, - pub server_hostname: String, + pub url: Url, #[validate(custom(function = "from_address_validation"))] pub from: String, #[validate(custom(function = "reply_to_address_validation"))] @@ -35,9 +34,7 @@ fn reply_to_address_validation(s: &str) -> Result<(), ValidationError> { impl Email { pub fn env_override(mut s: ConfigBuilder) -> ConfigBuilder { for (parameter, env_var_name) in [ - ("email.username", "VANIKAM_email_USERNAME"), - ("email.password", "VANIKAM_email_PASSWORD"), - ("email.server_hostname", "VANIKAM_email_SERVER_HOSTNAME"), + ("email.url", "VANIKAM_email_URL"), ("email.from", "VANIKAM_email_FROM"), ("email.reply_to", "VANIKAM_email_REPLY_TO"), ] @@ -62,17 +59,12 @@ mod tests { #[test] fn test_db_env_override() { let init_settings = crate::settings::Settings::new().unwrap(); + env_helper!( init_settings, - "VANIKAM_email_USERNAME", - "email_username", - email.username - ); - env_helper!( - init_settings, - "VANIKAM_email_PASSWORD", - "email_password", - email.password + "VANIKAM_email_URL", + Url::parse("smtp://smtp.example.org:465").unwrap(), + email.url ); env_helper!( init_settings, @@ -86,11 +78,5 @@ mod tests { "reploy_to@example.com", email.reply_to ); - env_helper!( - init_settings, - "VANIKAM_email_SERVER_HOSTNAME", - "smtp.example.com", - email.server_hostname - ); } }