feat: allow specific domain names to skip checks

This commit is contained in:
Michael H.
2026-08-31 14:56:51 +02:00
parent 876308516e
commit 306bde7155
2 changed files with 23 additions and 0 deletions
+2
View File
@@ -314,6 +314,8 @@ vars! {
SENDY_LIST_ID: String = "none"; SENDY_LIST_ID: String = "none";
SENDY_API_KEY: String = "none"; SENDY_API_KEY: String = "none";
SKIP_EMAIL_CHECK_DOMAINS: String = "";
NEVERBOUNCE_API_KEY: String = ""; NEVERBOUNCE_API_KEY: String = "";
NEVERBOUNCE_BASE_URL: String = neverbounce::DEFAULT_API_URL; NEVERBOUNCE_BASE_URL: String = neverbounce::DEFAULT_API_URL;
@@ -1901,11 +1901,28 @@ impl From<NewAccount> for AccountRegisterFlow {
} }
} }
/// Domains listed in `SKIP_EMAIL_CHECK_DOMAINS` bypass every email check.
fn email_checks_skipped(email: &str) -> bool {
let Some((_, domain)) = email.rsplit_once('@') else {
return false;
};
ENV.SKIP_EMAIL_CHECK_DOMAINS
.split(',')
.map(str::trim)
.filter(|skipped| !skipped.is_empty())
.any(|skipped| skipped.eq_ignore_ascii_case(domain))
}
/// Runs the UserCheck gate, which covers both password and OAuth signups. /// Runs the UserCheck gate, which covers both password and OAuth signups.
async fn ensure_email_passes_gate( async fn ensure_email_passes_gate(
redis: &RedisPool, redis: &RedisPool,
email: &str, email: &str,
) -> Result<(), ApiError> { ) -> Result<(), ApiError> {
if email_checks_skipped(email) {
return Ok(());
}
let action = check_email_gate(redis, email) let action = check_email_gate(redis, email)
.await .await
.wrap_request_err("checking email address")?; .wrap_request_err("checking email address")?;
@@ -1923,6 +1940,10 @@ async fn ensure_email_is_usable(
) -> Result<(), ApiError> { ) -> Result<(), ApiError> {
ensure_email_passes_gate(redis, email).await?; ensure_email_passes_gate(redis, email).await?;
if email_checks_skipped(email) {
return Ok(());
}
let result = check_email(redis, email) let result = check_email(redis, email)
.await .await
.wrap_request_err("checking email address")?; .wrap_request_err("checking email address")?;