reorganize is_permissible_email() into email.rs

This commit is contained in:
Brent Schroeter 2025-04-11 23:24:06 -07:00
parent 7893aa65e3
commit 3f7e0018c3
2 changed files with 11 additions and 11 deletions

View file

@ -9,7 +9,6 @@ use axum::{
use axum_extra::extract::Form; use axum_extra::extract::Form;
use diesel::prelude::*; use diesel::prelude::*;
use rand::Rng as _; use rand::Rng as _;
use regex::Regex;
use serde::Deserialize; use serde::Deserialize;
use uuid::Uuid; use uuid::Uuid;
@ -18,7 +17,7 @@ use crate::{
app_state::{AppState, DbConn}, app_state::{AppState, DbConn},
channels::{BackendConfig, Channel, EmailBackendConfig, CHANNEL_BACKEND_EMAIL}, channels::{BackendConfig, Channel, EmailBackendConfig, CHANNEL_BACKEND_EMAIL},
csrf::generate_csrf_token, csrf::generate_csrf_token,
email::{MailSender as _, Mailer}, email::{is_permissible_email, MailSender as _, Mailer},
guards, guards,
nav::{BreadcrumbTrail, Navbar, NavbarBuilder, NAVBAR_ITEM_CHANNELS}, nav::{BreadcrumbTrail, Navbar, NavbarBuilder, NAVBAR_ITEM_CHANNELS},
schema::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)] #[derive(Deserialize)]
struct VerifyEmailFormBody { struct VerifyEmailFormBody {
csrf_token: String, csrf_token: String,

View file

@ -2,12 +2,22 @@ use anyhow::{Context, Result};
use axum::extract::FromRef; use axum::extract::FromRef;
use futures::Future; use futures::Future;
use lettre::{AsyncSmtpTransport, AsyncTransport, Tokio1Executor}; use lettre::{AsyncSmtpTransport, AsyncTransport, Tokio1Executor};
use regex::Regex;
use serde::{Serialize, Serializer}; use serde::{Serialize, Serializer};
use crate::app_state::AppState; use crate::app_state::AppState;
const POSTMARK_EMAIL_BATCH_URL: &str = "https://api.postmarkapp.com/email/batch"; 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)] #[derive(Clone, Serialize)]
pub struct Message { pub struct Message {
#[serde(rename = "From")] #[serde(rename = "From")]