@ -10,6 +10,8 @@ use lemmy_db_schema::{
newtypes ::{ CommunityId , LocalUserId , PersonId , PostId } ,
source ::{
community ::Community ,
email_verification ::{ EmailVerification , EmailVerificationForm } ,
password_reset_request ::PasswordResetRequest ,
person_block ::PersonBlock ,
post ::{ Post , PostRead , PostReadForm } ,
secret ::Secret ,
@ -23,7 +25,14 @@ use lemmy_db_views_actor::{
community_person_ban_view ::CommunityPersonBanView ,
community_view ::CommunityView ,
} ;
use lemmy_utils ::{ claims ::Claims , settings ::structs ::FederationConfig , LemmyError , Sensitive } ;
use lemmy_utils ::{
claims ::Claims ,
email ::send_email ,
settings ::structs ::{ FederationConfig , Settings } ,
utils ::generate_random_string ,
LemmyError ,
Sensitive ,
} ;
use url ::Url ;
pub async fn blocking < F , T > ( pool : & DbPool , f : F ) -> Result < T , LemmyError >
@ -333,3 +342,122 @@ pub fn honeypot_check(honeypot: &Option<String>) -> Result<(), LemmyError> {
Ok ( ( ) )
}
}
pub fn send_email_to_user (
local_user_view : & LocalUserView ,
subject_text : & str ,
body_text : & str ,
comment_content : & str ,
settings : & Settings ,
) {
if local_user_view . person . banned | | ! local_user_view . local_user . send_notifications_to_email {
return ;
}
if let Some ( user_email ) = & local_user_view . local_user . email {
let subject = & format! (
"{} - {} {}" ,
subject_text , settings . hostname , local_user_view . person . name ,
) ;
let html = & format! (
"<h1>{}</h1><br><div>{} - {}</div><br><a href={}/inbox>inbox</a>" ,
body_text ,
local_user_view . person . name ,
comment_content ,
settings . get_protocol_and_hostname ( )
) ;
match send_email (
subject ,
user_email ,
& local_user_view . person . name ,
html ,
settings ,
) {
Ok ( _o ) = > _o ,
Err ( e ) = > tracing ::error ! ( "{}" , e ) ,
} ;
}
}
pub async fn send_password_reset_email (
local_user_view : & LocalUserView ,
pool : & DbPool ,
settings : & Settings ,
) -> Result < ( ) , LemmyError > {
// Generate a random token
let token = generate_random_string ( ) ;
// Insert the row
let token2 = token . clone ( ) ;
let local_user_id = local_user_view . local_user . id ;
blocking ( pool , move | conn | {
PasswordResetRequest ::create_token ( conn , local_user_id , & token2 )
} )
. await ? ? ;
let email = & local_user_view . local_user . email . to_owned ( ) . expect ( "email" ) ;
let subject = & format! ( "Password reset for {}" , local_user_view . person . name ) ;
let protocol_and_hostname = settings . get_protocol_and_hostname ( ) ;
let html = & format! ( "<h1>Password Reset Request for {}</h1><br><a href={}/password_change/{}>Click here to reset your password</a>" , local_user_view . person . name , protocol_and_hostname , & token ) ;
send_email ( subject , email , & local_user_view . person . name , html , settings )
}
/// Send a verification email
pub async fn send_verification_email (
local_user_id : LocalUserId ,
new_email : & str ,
username : & str ,
pool : & DbPool ,
settings : & Settings ,
) -> Result < ( ) , LemmyError > {
let form = EmailVerificationForm {
local_user_id ,
email : new_email . to_string ( ) ,
verification_token : generate_random_string ( ) ,
} ;
let verify_link = format! (
"{}/verify_email/{}" ,
settings . get_protocol_and_hostname ( ) ,
& form . verification_token
) ;
blocking ( pool , move | conn | EmailVerification ::create ( conn , & form ) ) . await ? ? ;
let subject = format! ( "Verify your email address for {}" , settings . hostname ) ;
let body = format! (
concat! (
"Please click the link below to verify your email address " ,
"for the account @{}@{}. Ignore this email if the account isn't yours.\n\n" ,
"<a href=\"{}\"></a>"
) ,
username , settings . hostname , verify_link
) ;
send_email ( & subject , new_email , username , & body , settings ) ? ;
Ok ( ( ) )
}
pub fn send_email_verification_success (
local_user_view : & LocalUserView ,
settings : & Settings ,
) -> Result < ( ) , LemmyError > {
let email = & local_user_view . local_user . email . to_owned ( ) . expect ( "email" ) ;
let subject = & format! ( "Email verified for {}" , local_user_view . person . name ) ;
let html = "Your email has been verified." ;
send_email ( subject , email , & local_user_view . person . name , html , settings )
}
pub fn send_application_approved_email (
local_user_view : & LocalUserView ,
settings : & Settings ,
) -> Result < ( ) , LemmyError > {
let email = & local_user_view . local_user . email . to_owned ( ) . expect ( "email" ) ;
let subject = & format! (
"Registration to {} approved for {}" ,
settings . hostname , local_user_view . person . name
) ;
let html = & format! (
"Your registration application has been approved. Welcome to {}!" ,
settings . hostname
) ;
send_email ( subject , email , & local_user_view . person . name , html , settings )
}