diff --git a/src/config.rs b/src/config.rs index f39ba8538..90910c067 100644 --- a/src/config.rs +++ b/src/config.rs @@ -19,10 +19,12 @@ pub enum Config { MailUser, MailPw, MailPort, + MailCertificateChecks, SendServer, SendUser, SendPw, SendPort, + SendCertificateChecks, ServerFlags, #[strum(props(default = "INBOX"))] ImapFolder, @@ -52,10 +54,12 @@ pub enum Config { ConfiguredMailPw, ConfiguredMailPort, ConfiguredMailSecurity, + ConfiguredMailCertificateChecks, ConfiguredSendServer, ConfiguredSendUser, ConfiguredSendPw, ConfiguredSendPort, + ConfiguredSendCertificateChecks, ConfiguredServerFlags, ConfiguredSendSecurity, ConfiguredE2EEEnabled, diff --git a/src/login_param.rs b/src/login_param.rs index 87ecd3886..bc0553dff 100644 --- a/src/login_param.rs +++ b/src/login_param.rs @@ -4,6 +4,20 @@ use std::fmt; use crate::context::Context; use crate::error::Error; +#[derive(Debug, FromPrimitive)] +#[repr(i32)] +pub enum CertificateChecks { + Strict, + AcceptInvalidHostnames, + AcceptInvalidCertificates, +} + +impl Default for CertificateChecks { + fn default() -> Self { + Self::AcceptInvalidCertificates + } +} + #[derive(Default, Debug)] pub struct LoginParam { pub addr: String, @@ -11,10 +25,14 @@ pub struct LoginParam { pub mail_user: String, pub mail_pw: String, pub mail_port: i32, + /// IMAP TLS options: whether to allow invalid certificates and/or invalid hostnames + pub mail_certificate_checks: CertificateChecks, pub send_server: String, pub send_user: String, pub send_pw: String, pub send_port: i32, + /// SMTP TLS options: whether to allow invalid certificates and/or invalid hostnames + pub send_certificate_checks: CertificateChecks, pub server_flags: i32, } @@ -48,6 +66,14 @@ impl LoginParam { let key = format!("{}mail_pw", prefix); let mail_pw = sql.get_config(context, key).unwrap_or_default(); + let key = format!("{}mail_certificate_checks", prefix); + let mail_certificate_checks = + if let Some(certificate_checks) = sql.get_config_int(context, key) { + num_traits::FromPrimitive::from_i32(certificate_checks).unwrap_or_default() + } else { + Default::default() + }; + let key = format!("{}send_server", prefix); let send_server = sql.get_config(context, key).unwrap_or_default(); @@ -60,6 +86,14 @@ impl LoginParam { let key = format!("{}send_pw", prefix); let send_pw = sql.get_config(context, key).unwrap_or_default(); + let key = format!("{}send_certificate_checks", prefix); + let send_certificate_checks = + if let Some(certificate_checks) = sql.get_config_int(context, key) { + num_traits::FromPrimitive::from_i32(certificate_checks).unwrap_or_default() + } else { + Default::default() + }; + let key = format!("{}server_flags", prefix); let server_flags = sql.get_config_int(context, key).unwrap_or_default(); @@ -69,10 +103,12 @@ impl LoginParam { mail_user, mail_pw, mail_port, + mail_certificate_checks, send_server, send_user, send_pw, send_port, + send_certificate_checks, server_flags, } }