0
0
Fork 0
mirror of https://git.verdigado.com/NB-Public/simple-wkd.git synced 2024-12-06 14:52:41 +01:00

Add emails

This commit is contained in:
Delta1925 2023-04-14 12:18:49 +02:00
parent 5945294815
commit 9c35f4adef
No known key found for this signature in database
GPG key ID: 1C21ACE44193CB25
9 changed files with 149 additions and 41 deletions

View file

@ -3,9 +3,12 @@ use chrono::Utc;
use crate::errors::Error;
use crate::management::{delete_key, Action, Pending};
use crate::pending_path;
use crate::settings::SETTINGS;
use crate::settings::{SMTPEncryption, SETTINGS};
use crate::utils::{get_email_from_cert, parse_pem};
use crate::PENDING_FOLDER;
use lettre::transport::smtp::authentication::Credentials;
use lettre::{Message, SmtpTransport, Transport};
use std::fs;
use std::path::Path;
@ -37,7 +40,7 @@ pub fn confirm_action(token: &str) -> Result<(), Error> {
None => return Err(Error::ParseEmail),
};
match sequoia_net::wkd::insert(
&SETTINGS.folder_structure.root_folder,
&SETTINGS.root_folder,
domain,
SETTINGS.variant,
&cert,
@ -55,8 +58,42 @@ pub fn confirm_action(token: &str) -> Result<(), Error> {
}
}
pub fn send_confirmation_email(email: &str, action: &Action, token: &str) {
println!("Email sent to {email}");
println!("Action: {action:?}");
println!("Token: {token}");
pub fn send_confirmation_email(email: &str, action: &Action, token: &str) -> Result<(), Error> {
println!("Sending mail, token: {}", &token);
let email = Message::builder()
.from(match SETTINGS.mail_settings.mail_from.parse() {
Ok(mailbox) => mailbox,
Err(_) => panic!("Unable to parse the email in the settings!"),
})
.to(match email.parse() {
Ok(mailbox) => mailbox,
Err(_) => return Err(Error::ParseEmail),
})
.subject(&SETTINGS.mail_settings.mail_subject)
.body(format!("{action} - {token}"));
let message = match email {
Ok(message) => message,
Err(_) => return Err(Error::MailGeneration),
};
let creds = Credentials::new(
SETTINGS.mail_settings.smtp_username.to_owned(),
SETTINGS.mail_settings.smtp_password.to_owned(),
);
let builder = match &SETTINGS.mail_settings.smtp_tls {
SMTPEncryption::Tls => SmtpTransport::relay(&SETTINGS.mail_settings.smtp_host),
SMTPEncryption::Starttls => {
SmtpTransport::starttls_relay(&SETTINGS.mail_settings.smtp_host)
}
};
let mailer = match builder {
Ok(builder) => builder,
Err(_) => return Err(Error::SmtpBuilder),
}
.credentials(creds)
.port(SETTINGS.mail_settings.smtp_port)
.build();
match mailer.send(&message) {
Ok(_) => Ok(()),
Err(_) => Err(Error::SendMail),
}
}