feat(SMTP): disallow unencrypted SMTP with credentials
This commit is contained in:
@@ -10,6 +10,7 @@ use poem::middleware::{AddDataEndpoint, Cors, CorsEndpoint};
|
|||||||
use poem::{EndpointExt, Route};
|
use poem::{EndpointExt, Route};
|
||||||
use poem_openapi::OpenApiService;
|
use poem_openapi::OpenApiService;
|
||||||
|
|
||||||
|
use crate::settings::Starttls;
|
||||||
use crate::{
|
use crate::{
|
||||||
middleware::rate_limit::{RateLimit, RateLimitConfig},
|
middleware::rate_limit::{RateLimit, RateLimitConfig},
|
||||||
route::Api,
|
route::Api,
|
||||||
@@ -93,6 +94,7 @@ impl From<Application> for RunnableApplication {
|
|||||||
|
|
||||||
impl Application {
|
impl Application {
|
||||||
fn setup_app(settings: &Settings) -> poem::Route {
|
fn setup_app(settings: &Settings) -> poem::Route {
|
||||||
|
Self::prevent_unencrypted_smtp_with_credentials(settings);
|
||||||
let api_service = OpenApiService::new(
|
let api_service = OpenApiService::new(
|
||||||
Api::from(settings).apis(),
|
Api::from(settings).apis(),
|
||||||
settings.application.clone().name,
|
settings.application.clone().name,
|
||||||
@@ -109,6 +111,17 @@ impl Application {
|
|||||||
route
|
route
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn prevent_unencrypted_smtp_with_credentials(settings: &Settings) {
|
||||||
|
if !settings.email.tls
|
||||||
|
&& settings.email.starttls == Starttls::Never
|
||||||
|
&& !settings.email.user.is_empty()
|
||||||
|
&& settings.email.host != "localhost"
|
||||||
|
&& settings.email.host != "127.0.0.1"
|
||||||
|
{
|
||||||
|
panic!("Refusing to send SMTP credentials over cleartext to non-local host");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn setup_server(
|
fn setup_server(
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
tcp_listener: Option<poem::listener::TcpListener<String>>,
|
tcp_listener: Option<poem::listener::TcpListener<String>>,
|
||||||
|
|||||||
Reference in New Issue
Block a user