Extract EmailSingup::ensure_email_not_blocked()

This commit is contained in:
Kitaiti Makoto 2023-01-03 17:49:15 +09:00
parent 3b3148fa6b
commit 832479a706

View File

@ -61,9 +61,7 @@ pub struct NewEmailSignup<'a> {
impl EmailSignup { impl EmailSignup {
pub fn start(conn: &DbConn, email: &str) -> Result<Token> { pub fn start(conn: &DbConn, email: &str) -> Result<Token> {
if let Some(x) = BlocklistedEmail::matches_blocklist(conn, email)? { Self::ensure_email_not_blocked(conn, email)?;
return Err(Error::Blocklisted(x.notify_user, x.notification_text));
}
conn.transaction(|| { conn.transaction(|| {
Self::ensure_user_not_exist_by_email(conn, email)?; Self::ensure_user_not_exist_by_email(conn, email)?;
@ -95,9 +93,8 @@ impl EmailSignup {
} }
pub fn confirm(&self, conn: &DbConn) -> Result<()> { pub fn confirm(&self, conn: &DbConn) -> Result<()> {
if let Some(x) = BlocklistedEmail::matches_blocklist(conn, &self.email)? { Self::ensure_email_not_blocked(conn, &self.email)?;
return Err(Error::Blocklisted(x.notify_user, x.notification_text));
}
conn.transaction(|| { conn.transaction(|| {
Self::ensure_user_not_exist_by_email(conn, &self.email)?; Self::ensure_user_not_exist_by_email(conn, &self.email)?;
if self.expired() { if self.expired() {
@ -109,9 +106,8 @@ impl EmailSignup {
} }
pub fn complete(&self, conn: &DbConn, username: String, password: String) -> Result<User> { pub fn complete(&self, conn: &DbConn, username: String, password: String) -> Result<User> {
if let Some(x) = BlocklistedEmail::matches_blocklist(conn, &self.email)? { Self::ensure_email_not_blocked(conn, &self.email)?;
return Err(Error::Blocklisted(x.notify_user, x.notification_text));
}
conn.transaction(|| { conn.transaction(|| {
Self::ensure_user_not_exist_by_email(conn, &self.email)?; Self::ensure_user_not_exist_by_email(conn, &self.email)?;
let user = NewUser::new_local( let user = NewUser::new_local(
@ -133,6 +129,14 @@ impl EmailSignup {
Ok(()) Ok(())
} }
fn ensure_email_not_blocked(conn: &DbConn, email: &str) -> Result<()> {
if let Some(x) = BlocklistedEmail::matches_blocklist(conn, email)? {
Err(Error::Blocklisted(x.notify_user, x.notification_text))
} else {
Ok(())
}
}
fn ensure_user_not_exist_by_email(conn: &DbConn, email: &str) -> Result<()> { fn ensure_user_not_exist_by_email(conn: &DbConn, email: &str) -> Result<()> {
if User::email_used(conn, email)? { if User::email_used(conn, email)? {
let _rows = Self::delete_existings_by_email(conn, email)?; let _rows = Self::delete_existings_by_email(conn, email)?;