forked from 2sys/shoutdotdev
reorganize is_permissible_email() into email.rs
This commit is contained in:
parent
7893aa65e3
commit
3f7e0018c3
2 changed files with 11 additions and 11 deletions
|
@ -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,
|
||||||
|
|
10
src/email.rs
10
src/email.rs
|
@ -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")]
|
||||||
|
|
Loading…
Add table
Reference in a new issue