diff --git a/src/channels_router.rs b/src/channels_router.rs index 6ba7f05..2fde4fb 100644 --- a/src/channels_router.rs +++ b/src/channels_router.rs @@ -9,7 +9,6 @@ use axum::{ use axum_extra::extract::Form; use diesel::prelude::*; use rand::Rng as _; -use regex::Regex; use serde::Deserialize; use uuid::Uuid; @@ -18,7 +17,7 @@ use crate::{ app_state::{AppState, DbConn}, channels::{BackendConfig, Channel, EmailBackendConfig, CHANNEL_BACKEND_EMAIL}, csrf::generate_csrf_token, - email::{MailSender as _, Mailer}, + email::{is_permissible_email, MailSender as _, Mailer}, guards, nav::{BreadcrumbTrail, Navbar, NavbarBuilder, NAVBAR_ITEM_CHANNELS}, schema::channels, @@ -374,15 +373,6 @@ async fn update_channel_email_recipient( ))) } -/// Returns true if the email address matches a format recognized as "valid". -/// Not all "legal" email addresses will be accepted, but addresses that are -/// "illegal" and/or could result in unexpected behavior should be rejected. -fn is_permissible_email(address: &str) -> bool { - let re = Regex::new(r"^[a-zA-Z0-9._+-]+@([a-zA-Z0-9_-]+.)+[a-zA-Z]+$") - .expect("email validation regex should parse"); - re.is_match(address) -} - #[derive(Deserialize)] struct VerifyEmailFormBody { csrf_token: String, diff --git a/src/email.rs b/src/email.rs index 98e2570..7c684d4 100644 --- a/src/email.rs +++ b/src/email.rs @@ -2,12 +2,22 @@ use anyhow::{Context, Result}; use axum::extract::FromRef; use futures::Future; use lettre::{AsyncSmtpTransport, AsyncTransport, Tokio1Executor}; +use regex::Regex; use serde::{Serialize, Serializer}; use crate::app_state::AppState; const POSTMARK_EMAIL_BATCH_URL: &str = "https://api.postmarkapp.com/email/batch"; +/// Returns true if the email address matches a format recognized as "valid". +/// Not all "legal" email addresses will be accepted, but addresses that are +/// "illegal" and/or could result in unexpected behavior should be rejected. +pub fn is_permissible_email(address: &str) -> bool { + let re = Regex::new(r"^[a-zA-Z0-9._+-]+@([a-zA-Z0-9_-]+.)+[a-zA-Z]+$") + .expect("email validation regex should parse"); + re.is_match(address) +} + #[derive(Clone, Serialize)] pub struct Message { #[serde(rename = "From")]