mirror of
https://github.com/chatmail/core.git
synced 2026-04-29 03:16:29 +03:00
also make smtp respect CertificateChecks setting roughly
This commit is contained in:
committed by
dignifiedquire
parent
6054b90975
commit
8595b92fcf
@@ -6,9 +6,10 @@ use async_imap::{
|
|||||||
};
|
};
|
||||||
use async_std::net::{self, TcpStream};
|
use async_std::net::{self, TcpStream};
|
||||||
use async_std::prelude::*;
|
use async_std::prelude::*;
|
||||||
|
use async_std::sync::Arc;
|
||||||
use async_tls::client::TlsStream;
|
use async_tls::client::TlsStream;
|
||||||
|
|
||||||
use crate::login_param::{dc_build_tls, CertificateChecks};
|
use crate::login_param::{dc_build_tls_config, CertificateChecks};
|
||||||
|
|
||||||
const DCC_IMAP_DEBUG: &str = "DCC_IMAP_DEBUG";
|
const DCC_IMAP_DEBUG: &str = "DCC_IMAP_DEBUG";
|
||||||
|
|
||||||
@@ -37,9 +38,9 @@ impl Client {
|
|||||||
certificate_checks: CertificateChecks,
|
certificate_checks: CertificateChecks,
|
||||||
) -> ImapResult<Self> {
|
) -> ImapResult<Self> {
|
||||||
let stream = TcpStream::connect(addr).await?;
|
let stream = TcpStream::connect(addr).await?;
|
||||||
let tls = dc_build_tls(certificate_checks);
|
let tls_config = dc_build_tls_config(certificate_checks);
|
||||||
let tls_stream = tls.connect(domain.as_ref(), stream)?.await?;
|
let tls_connector: async_tls::TlsConnector = Arc::new(tls_config).into();
|
||||||
|
let tls_stream = tls_connector.connect(domain.as_ref(), stream)?.await?;
|
||||||
let mut client = ImapClient::new(tls_stream);
|
let mut client = ImapClient::new(tls_stream);
|
||||||
if std::env::var(DCC_IMAP_DEBUG).is_ok() {
|
if std::env::var(DCC_IMAP_DEBUG).is_ok() {
|
||||||
client.debug = true;
|
client.debug = true;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ use std::fmt;
|
|||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use async_std::sync::Arc;
|
use async_std::sync::Arc;
|
||||||
use async_tls;
|
|
||||||
use rustls;
|
use rustls;
|
||||||
use webpki;
|
use webpki;
|
||||||
|
|
||||||
@@ -269,7 +268,7 @@ impl rustls::ServerCertVerifier for NoCertificateVerification {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn dc_build_tls(certificate_checks: CertificateChecks) -> async_tls::TlsConnector {
|
pub fn dc_build_tls_config(certificate_checks: CertificateChecks) -> rustls::ClientConfig {
|
||||||
let mut config = rustls::ClientConfig::new();
|
let mut config = rustls::ClientConfig::new();
|
||||||
match certificate_checks {
|
match certificate_checks {
|
||||||
CertificateChecks::Strict => {}
|
CertificateChecks::Strict => {}
|
||||||
@@ -293,7 +292,7 @@ pub fn dc_build_tls(certificate_checks: CertificateChecks) -> async_tls::TlsConn
|
|||||||
.set_certificate_verifier(Arc::new(NoCertificateVerification {}));
|
.set_certificate_verifier(Arc::new(NoCertificateVerification {}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Arc::new(config).into()
|
config
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ use crate::constants::*;
|
|||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use crate::events::Event;
|
use crate::events::Event;
|
||||||
use crate::login_param::LoginParam;
|
use crate::login_param::{dc_build_tls_config, LoginParam};
|
||||||
use crate::oauth2::*;
|
use crate::oauth2::*;
|
||||||
|
|
||||||
#[derive(DebugStub)]
|
#[derive(DebugStub)]
|
||||||
@@ -65,10 +65,7 @@ impl Smtp {
|
|||||||
let domain = &lp.send_server;
|
let domain = &lp.send_server;
|
||||||
let port = lp.send_port as u16;
|
let port = lp.send_port as u16;
|
||||||
|
|
||||||
let mut tls_config = rustls::ClientConfig::new();
|
let tls_config = dc_build_tls_config(lp.smtp_certificate_checks);
|
||||||
tls_config
|
|
||||||
.root_store
|
|
||||||
.add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS);
|
|
||||||
let tls_parameters = ClientTlsParameters::new(domain.to_string(), tls_config);
|
let tls_parameters = ClientTlsParameters::new(domain.to_string(), tls_config);
|
||||||
|
|
||||||
let (creds, mechanism) = if 0 != lp.server_flags & (DC_LP_AUTH_OAUTH2 as i32) {
|
let (creds, mechanism) = if 0 != lp.server_flags & (DC_LP_AUTH_OAUTH2 as i32) {
|
||||||
|
|||||||
Reference in New Issue
Block a user