mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-22 12:21:18 +00:00
Adding a site option to email admins for new reports. (#2730)
- Fixes #2551
This commit is contained in:
parent
166854b37e
commit
ddb6268164
12 changed files with 69 additions and 5 deletions
|
@ -18,7 +18,7 @@
|
||||||
"eslint": "^8.25.0",
|
"eslint": "^8.25.0",
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"jest": "^27.0.6",
|
"jest": "^27.0.6",
|
||||||
"lemmy-js-client": "0.17.0-rc.61",
|
"lemmy-js-client": "0.17.2-rc.1",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"ts-jest": "^27.0.3",
|
"ts-jest": "^27.0.3",
|
||||||
|
|
|
@ -3,7 +3,7 @@ use actix_web::web::Data;
|
||||||
use lemmy_api_common::{
|
use lemmy_api_common::{
|
||||||
comment::{CommentReportResponse, CreateCommentReport},
|
comment::{CommentReportResponse, CreateCommentReport},
|
||||||
context::LemmyContext,
|
context::LemmyContext,
|
||||||
utils::{check_community_ban, get_local_user_view_from_jwt},
|
utils::{check_community_ban, get_local_user_view_from_jwt, send_new_report_email_to_admins},
|
||||||
websocket::UserOperation,
|
websocket::UserOperation,
|
||||||
};
|
};
|
||||||
use lemmy_db_schema::{
|
use lemmy_db_schema::{
|
||||||
|
@ -54,6 +54,17 @@ impl Perform for CreateCommentReport {
|
||||||
|
|
||||||
let comment_report_view = CommentReportView::read(context.pool(), report.id, person_id).await?;
|
let comment_report_view = CommentReportView::read(context.pool(), report.id, person_id).await?;
|
||||||
|
|
||||||
|
// Email the admins
|
||||||
|
if local_site.reports_email_admins {
|
||||||
|
send_new_report_email_to_admins(
|
||||||
|
&comment_report_view.creator.name,
|
||||||
|
&comment_report_view.comment_creator.name,
|
||||||
|
context.pool(),
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
let res = CommentReportResponse {
|
let res = CommentReportResponse {
|
||||||
comment_report_view,
|
comment_report_view,
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@ use actix_web::web::Data;
|
||||||
use lemmy_api_common::{
|
use lemmy_api_common::{
|
||||||
context::LemmyContext,
|
context::LemmyContext,
|
||||||
post::{CreatePostReport, PostReportResponse},
|
post::{CreatePostReport, PostReportResponse},
|
||||||
utils::{check_community_ban, get_local_user_view_from_jwt},
|
utils::{check_community_ban, get_local_user_view_from_jwt, send_new_report_email_to_admins},
|
||||||
websocket::UserOperation,
|
websocket::UserOperation,
|
||||||
};
|
};
|
||||||
use lemmy_db_schema::{
|
use lemmy_db_schema::{
|
||||||
|
@ -56,6 +56,17 @@ impl Perform for CreatePostReport {
|
||||||
|
|
||||||
let post_report_view = PostReportView::read(context.pool(), report.id, person_id).await?;
|
let post_report_view = PostReportView::read(context.pool(), report.id, person_id).await?;
|
||||||
|
|
||||||
|
// Email the admins
|
||||||
|
if local_site.reports_email_admins {
|
||||||
|
send_new_report_email_to_admins(
|
||||||
|
&post_report_view.creator.name,
|
||||||
|
&post_report_view.post_creator.name,
|
||||||
|
context.pool(),
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
let res = PostReportResponse { post_report_view };
|
let res = PostReportResponse { post_report_view };
|
||||||
|
|
||||||
context
|
context
|
||||||
|
|
|
@ -3,7 +3,7 @@ use actix_web::web::Data;
|
||||||
use lemmy_api_common::{
|
use lemmy_api_common::{
|
||||||
context::LemmyContext,
|
context::LemmyContext,
|
||||||
private_message::{CreatePrivateMessageReport, PrivateMessageReportResponse},
|
private_message::{CreatePrivateMessageReport, PrivateMessageReportResponse},
|
||||||
utils::get_local_user_view_from_jwt,
|
utils::{get_local_user_view_from_jwt, send_new_report_email_to_admins},
|
||||||
websocket::UserOperation,
|
websocket::UserOperation,
|
||||||
};
|
};
|
||||||
use lemmy_db_schema::{
|
use lemmy_db_schema::{
|
||||||
|
@ -53,6 +53,17 @@ impl Perform for CreatePrivateMessageReport {
|
||||||
let private_message_report_view =
|
let private_message_report_view =
|
||||||
PrivateMessageReportView::read(context.pool(), report.id).await?;
|
PrivateMessageReportView::read(context.pool(), report.id).await?;
|
||||||
|
|
||||||
|
// Email the admins
|
||||||
|
if local_site.reports_email_admins {
|
||||||
|
send_new_report_email_to_admins(
|
||||||
|
&private_message_report_view.creator.name,
|
||||||
|
&private_message_report_view.private_message_creator.name,
|
||||||
|
context.pool(),
|
||||||
|
context.settings(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
let res = PrivateMessageReportResponse {
|
let res = PrivateMessageReportResponse {
|
||||||
private_message_report_view,
|
private_message_report_view,
|
||||||
};
|
};
|
||||||
|
|
|
@ -195,6 +195,7 @@ pub struct EditSite {
|
||||||
pub blocked_instances: Option<Vec<String>>,
|
pub blocked_instances: Option<Vec<String>>,
|
||||||
pub taglines: Option<Vec<String>>,
|
pub taglines: Option<Vec<String>>,
|
||||||
pub registration_mode: Option<RegistrationMode>,
|
pub registration_mode: Option<RegistrationMode>,
|
||||||
|
pub reports_email_admins: Option<bool>,
|
||||||
pub auth: Sensitive<String>,
|
pub auth: Sensitive<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -483,6 +483,28 @@ pub async fn send_new_applicant_email_to_admins(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Send a report to all admins
|
||||||
|
pub async fn send_new_report_email_to_admins(
|
||||||
|
reporter_username: &str,
|
||||||
|
reported_username: &str,
|
||||||
|
pool: &DbPool,
|
||||||
|
settings: &Settings,
|
||||||
|
) -> Result<(), LemmyError> {
|
||||||
|
// Collect the admins with emails
|
||||||
|
let admins = LocalUserSettingsView::list_admins_with_emails(pool).await?;
|
||||||
|
|
||||||
|
let reports_link = &format!("{}/reports", settings.get_protocol_and_hostname(),);
|
||||||
|
|
||||||
|
for admin in &admins {
|
||||||
|
let email = &admin.local_user.email.clone().expect("email");
|
||||||
|
let lang = get_interface_language_from_settings(admin);
|
||||||
|
let subject = lang.new_report_subject(&settings.hostname, reporter_username, reported_username);
|
||||||
|
let body = lang.new_report_body(reports_link);
|
||||||
|
send_email(&subject, email, &admin.person.name, &body, settings)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn check_registration_application(
|
pub async fn check_registration_application(
|
||||||
local_user_view: &LocalUserView,
|
local_user_view: &LocalUserView,
|
||||||
local_site: &LocalSite,
|
local_site: &LocalSite,
|
||||||
|
|
|
@ -119,6 +119,7 @@ impl PerformCrud for EditSite {
|
||||||
.federation_worker_count(data.federation_worker_count)
|
.federation_worker_count(data.federation_worker_count)
|
||||||
.captcha_enabled(data.captcha_enabled)
|
.captcha_enabled(data.captcha_enabled)
|
||||||
.captcha_difficulty(data.captcha_difficulty.clone())
|
.captcha_difficulty(data.captcha_difficulty.clone())
|
||||||
|
.reports_email_admins(data.reports_email_admins)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let update_local_site = LocalSite::update(context.pool(), &local_site_form)
|
let update_local_site = LocalSite::update(context.pool(), &local_site_form)
|
||||||
|
|
|
@ -698,6 +698,7 @@ table! {
|
||||||
captcha_enabled -> Bool,
|
captcha_enabled -> Bool,
|
||||||
captcha_difficulty -> Text,
|
captcha_difficulty -> Text,
|
||||||
registration_mode -> RegistrationModeType,
|
registration_mode -> RegistrationModeType,
|
||||||
|
reports_email_admins -> Bool,
|
||||||
published -> Timestamp,
|
published -> Timestamp,
|
||||||
updated -> Nullable<Timestamp>,
|
updated -> Nullable<Timestamp>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ pub struct LocalSite {
|
||||||
pub captcha_enabled: bool,
|
pub captcha_enabled: bool,
|
||||||
pub captcha_difficulty: String,
|
pub captcha_difficulty: String,
|
||||||
pub registration_mode: RegistrationMode,
|
pub registration_mode: RegistrationMode,
|
||||||
|
pub reports_email_admins: bool,
|
||||||
pub published: chrono::NaiveDateTime,
|
pub published: chrono::NaiveDateTime,
|
||||||
pub updated: Option<chrono::NaiveDateTime>,
|
pub updated: Option<chrono::NaiveDateTime>,
|
||||||
}
|
}
|
||||||
|
@ -62,6 +63,7 @@ pub struct LocalSiteInsertForm {
|
||||||
pub captcha_enabled: Option<bool>,
|
pub captcha_enabled: Option<bool>,
|
||||||
pub captcha_difficulty: Option<String>,
|
pub captcha_difficulty: Option<String>,
|
||||||
pub registration_mode: Option<RegistrationMode>,
|
pub registration_mode: Option<RegistrationMode>,
|
||||||
|
pub reports_email_admins: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, TypedBuilder)]
|
#[derive(Clone, TypedBuilder)]
|
||||||
|
@ -89,6 +91,7 @@ pub struct LocalSiteUpdateForm {
|
||||||
pub captcha_enabled: Option<bool>,
|
pub captcha_enabled: Option<bool>,
|
||||||
pub captcha_difficulty: Option<String>,
|
pub captcha_difficulty: Option<String>,
|
||||||
pub registration_mode: Option<RegistrationMode>,
|
pub registration_mode: Option<RegistrationMode>,
|
||||||
|
pub reports_email_admins: Option<bool>,
|
||||||
pub updated: Option<Option<chrono::NaiveDateTime>>,
|
pub updated: Option<Option<chrono::NaiveDateTime>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 21808b45ea3ef7fa91654d4f6738b5144da6bfe7
|
Subproject commit 2b95e1fa2f6ecb50a5b0575b1362b9f81a60e9b7
|
|
@ -0,0 +1 @@
|
||||||
|
alter table local_site drop column reports_email_admins;
|
|
@ -0,0 +1,2 @@
|
||||||
|
-- Adding a field to email admins for new reports
|
||||||
|
alter table local_site add column reports_email_admins boolean not null default false;
|
Loading…
Reference in a new issue