mirror of
https://github.com/modrinth/code.git
synced 2026-09-05 06:19:11 +00:00
feat: allow specific domain names to skip checks
This commit is contained in:
@@ -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")?;
|
||||||
|
|||||||
Reference in New Issue
Block a user