From 210c470ebda0feb7e71b9bd2676fd9e4e359e057 Mon Sep 17 00:00:00 2001 From: Nutomic Date: Thu, 28 Sep 2023 16:06:45 +0200 Subject: [PATCH] Notify admin about registration application after email verification (fixes #3024) (#3995) --- crates/api/src/local_user/verify_email.rs | 16 +++++++++++++++- crates/api_crud/src/user/create.rs | 4 ++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/api/src/local_user/verify_email.rs b/crates/api/src/local_user/verify_email.rs index 6226e5041..d3b549ccb 100644 --- a/crates/api/src/local_user/verify_email.rs +++ b/crates/api/src/local_user/verify_email.rs @@ -2,20 +2,25 @@ use actix_web::web::{Data, Json}; use lemmy_api_common::{ context::LemmyContext, person::{VerifyEmail, VerifyEmailResponse}, + utils::send_new_applicant_email_to_admins, }; use lemmy_db_schema::{ source::{ email_verification::EmailVerification, local_user::{LocalUser, LocalUserUpdateForm}, + person::Person, }, traits::Crud, + RegistrationMode, }; +use lemmy_db_views::structs::SiteView; use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType}; pub async fn verify_email( data: Json, context: Data, ) -> Result, LemmyError> { + let site_view = SiteView::read_local(&mut context.pool()).await?; let token = data.token.clone(); let verification = EmailVerification::read_for_token(&mut context.pool(), &token) .await @@ -30,9 +35,18 @@ pub async fn verify_email( }; let local_user_id = verification.local_user_id; - LocalUser::update(&mut context.pool(), local_user_id, &form).await?; + let local_user = LocalUser::update(&mut context.pool(), local_user_id, &form).await?; EmailVerification::delete_old_tokens_for_local_user(&mut context.pool(), local_user_id).await?; + // send out notification about registration application to admins if enabled + if site_view.local_site.registration_mode == RegistrationMode::RequireApplication + && site_view.local_site.application_email_admins + { + let person = Person::read(&mut context.pool(), local_user.person_id).await?; + send_new_applicant_email_to_admins(&person.name, &mut context.pool(), context.settings()) + .await?; + } + Ok(Json(VerifyEmailResponse {})) } diff --git a/crates/api_crud/src/user/create.rs b/crates/api_crud/src/user/create.rs index e1efcbed2..f153f147c 100644 --- a/crates/api_crud/src/user/create.rs +++ b/crates/api_crud/src/user/create.rs @@ -158,8 +158,8 @@ pub async fn register( RegistrationApplication::create(&mut context.pool(), &form).await?; } - // Email the admins - if local_site.application_email_admins { + // Email the admins, only if email verification is not required + if local_site.application_email_admins && !local_site.require_email_verification { send_new_applicant_email_to_admins(&data.username, &mut context.pool(), context.settings()) .await?; }