feat: Toggle to "Disable new IP Login authorization" emails in /admin (#1030)

Co-authored-by: Jiralite <[email protected]>
Co-authored-by: Hampus <[email protected]>
This commit is contained in:
authored and GitHub committed 2026-07-01 20:38:59 +02:00
1 parent 4a518b8e68
commit 6fd7c027e3
10 files changed
+149 -44

No files matched your search

@@ -140,6 +140,10 @@ pub struct InstanceEmailIntegrationResponse {
pub from_name: Option<String>,
#[serde(default)]
pub smtp: InstanceEmailSmtpIntegrationResponse,
#[serde(default)]
pub disable_new_ip_authorization: bool,
#[serde(default)]
pub effective_disable_new_ip_authorization: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
@@ -579,6 +583,8 @@ pub struct InstanceEmailIntegrationUpdateRequest {
pub from_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub smtp: Option<InstanceEmailSmtpIntegrationUpdateRequest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disable_new_ip_authorization: Option<bool>,
}
#[derive(Clone, Debug, Default, Serialize)]
@@ -627,6 +627,9 @@ fn build_integrations_update(form: &MultiValueForm) -> InstanceConfigUpdateReque
password: clean("integration_smtp_password"),
secure: Some(form.bool_value("integration_smtp_secure")),
}),
disable_new_ip_authorization: Some(
form.bool_value("integration_email_disable_new_ip_authorization"),
),
}),
bluesky: Some(InstanceBlueskyIntegrationUpdateRequest {
enabled: Some(form.bool_value("integration_bluesky_enabled")),
@@ -481,6 +481,11 @@ fn integrations_config_section(
} @else {
(badge("Effective: disabled", BadgeVariant::Default))
}
@if integrations.email.effective_disable_new_ip_authorization {
(badge("IP auth disabled", BadgeVariant::Warning))
} @else {
(badge("IP auth required", BadgeVariant::Default))
}
(secret_badge("SMTP password", integrations.email.smtp.password_set))
}
(checkbox("integration_email_enabled", "true", "Enable email delivery", integrations.email.effective_enabled, true))
@@ -518,6 +523,7 @@ fn integrations_config_section(
(password_input("integration_smtp_password", "SMTP password", Some("Leave blank to keep the current password.")))
}
(checkbox("integration_smtp_secure", "true", "Use TLS", integrations.email.smtp.secure.unwrap_or(true), true))
(checkbox("integration_email_disable_new_ip_authorization", "true", "Disable new IP login authorisation", integrations.email.disable_new_ip_authorization, true))
div class="flex flex-wrap gap-2" {
button type="submit"
formaction={(base) "/instance-config?action=test_smtp"}