From 05a14638f737d21e2cfe83eab4b18cbaf3e534bc Mon Sep 17 00:00:00 2001 From: Brendan Golden Date: Sat, 29 Jul 2023 21:38:03 +0100 Subject: [PATCH] feat: basic setup for email --- Cargo.lock | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 7 +++ src/lib.rs | 15 +++++++ 3 files changed, 144 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index d1f66b6..d675e4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -365,6 +365,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" + [[package]] name = "bincode" version = "1.3.3" @@ -742,6 +748,22 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +[[package]] +name = "email-encoding" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfb21b9878cf7a348dcb8559109aabc0ec40d69924bd706fa5149846c4fef75" +dependencies = [ + "base64 0.21.2", + "memchr", +] + +[[package]] +name = "email_address" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2153bd83ebc09db15bcbdc3e2194d901804952e3dc96967e1cd3b0c5c32d112" + [[package]] name = "encoding_rs" version = "0.8.32" @@ -1109,6 +1131,17 @@ dependencies = [ "digest 0.9.0", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + [[package]] name = "http" version = "0.2.9" @@ -1162,6 +1195,12 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + [[package]] name = "iana-time-zone" version = "0.1.56" @@ -1327,6 +1366,29 @@ dependencies = [ "url", ] +[[package]] +name = "lettre" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bd09637ae3ec7bd605b8e135e757980b3968430ff2b1a4a94fb7769e50166d" +dependencies = [ + "base64 0.21.2", + "email-encoding", + "email_address", + "fastrand", + "futures-util", + "hostname", + "httpdate", + "idna", + "mime", + "native-tls", + "nom", + "once_cell", + "quoted_printable", + "socket2", + "tokio", +] + [[package]] name = "libc" version = "0.2.144" @@ -1393,6 +1455,34 @@ dependencies = [ "value-bag", ] +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "maud" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0bab19cef8a7fe1c18a43e881793bfc9d4ea984befec3ae5bd0415abf3ecf00" +dependencies = [ + "itoa", + "maud_macros", +] + +[[package]] +name = "maud_macros" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be95d66c3024ffce639216058e5bae17a83ecaf266ffc6e4d060ad447c9eed2" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "memchr" version = "2.5.0" @@ -1646,6 +1736,30 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -1670,6 +1784,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "quoted_printable" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3866219251662ec3b26fc217e3e05bf9c4f84325234dfb96bf0bf840889e49" + [[package]] name = "rand" version = "0.7.3" @@ -1986,6 +2106,8 @@ dependencies = [ "csv", "dotenv", "ldap3", + "lettre", + "maud", "rand 0.8.5", "serde", "sqlx", diff --git a/Cargo.toml b/Cargo.toml index dc8fd86..97283d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,9 @@ edition = "2021" [[bin]] name = "update_groups" +[[bin]] +name = "new_users" + [dependencies] # for the ldap ldap3="0.11.1" @@ -34,3 +37,7 @@ chrono = "0.4.26" # handlign teh csv export from wolves csv = "1.2" + +# for email +lettre = "0.10.4" +maud = "0.25.0" diff --git a/src/lib.rs b/src/lib.rs index 5b3a0f6..6b2ed97 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -128,6 +128,9 @@ pub struct Config { pub database: String, pub csv: String, pub host_port: String, + pub mail_smtp: String, + pub mail_user: String, + pub mail_pass: String, } pub fn get_config() -> Config { @@ -142,6 +145,9 @@ pub fn get_config() -> Config { database: "database.db".to_string(), csv: "wolves.csv".to_string(), host_port: "127.0.0.1:8087".to_string(), + mail_smtp: "".to_string(), + mail_user: "".to_string(), + mail_pass: "".to_string(), }; if let Ok(x) = env::var("LDAP_HOST") { @@ -165,6 +171,15 @@ pub fn get_config() -> Config { if let Ok(x) = env::var("HOST_PORT") { config.host_port = x.trim().to_string(); } + if let Ok(x) = env::var("EMAIL_SMTP") { + config.mail_smtp = x.trim().to_string(); + } + if let Ok(x) = env::var("EMAIL_USER") { + config.mail_user = x.trim().to_string(); + } + if let Ok(x) = env::var("EMAIL_PASS") { + config.mail_pass = x.trim().to_string(); + } config }