Add additional slurs configuration option. Closes #1464. (#1612)

* Actualize a comment about config initialization

* Add additional slurs functionality.

It is possible to additional regex for slurs filtering.
It can be done through `additional_slurs` option in config file.
This commit is contained in:
Pavel Balashov 2021-05-26 16:39:38 +03:00 committed by Felix Ableitner
parent 173efded96
commit 107e1a2500
5 changed files with 20 additions and 5 deletions

View file

@ -90,4 +90,8 @@
# # whether or not smtp connections should use tls # # whether or not smtp connections should use tls
# use_tls: true # use_tls: true
# } # }
# additional_slurs:
# '''
# (\bThis\b)|(\bis\b)|(\bsample\b)
# '''
} }

View file

@ -17,6 +17,7 @@ impl Default for Settings {
jwt_secret: Some("changeme".into()), jwt_secret: Some("changeme".into()),
pictrs_url: Some("http://pictrs:8080".into()), pictrs_url: Some("http://pictrs:8080".into()),
iframely_url: Some("http://iframely".into()), iframely_url: Some("http://iframely".into()),
additional_slurs: None,
} }
} }
} }

View file

@ -27,10 +27,10 @@ lazy_static! {
} }
impl Settings { impl Settings {
/// Reads config from the files and environment. /// Reads config from configuration file.
/// First, defaults are loaded from CONFIG_FILE_DEFAULTS, then these values can be overwritten /// Then values from the environment (with prefix LEMMY) are added to the config.
/// from CONFIG_FILE (optional). Finally, values from the environment (with prefix LEMMY) are /// And then default values are merged into config.
/// added to the config. /// Defaults are controlled by Default trait implemntation for Settings structs.
/// ///
/// Note: The env var `LEMMY_DATABASE_URL` is parsed in /// Note: The env var `LEMMY_DATABASE_URL` is parsed in
/// `lemmy_db_queries/src/lib.rs::get_database_url_from_env()` /// `lemmy_db_queries/src/lib.rs::get_database_url_from_env()`

View file

@ -17,6 +17,7 @@ pub struct Settings {
pub(crate) captcha: Option<CaptchaConfig>, pub(crate) captcha: Option<CaptchaConfig>,
pub(crate) email: Option<EmailConfig>, pub(crate) email: Option<EmailConfig>,
pub(crate) setup: Option<SetupConfig>, pub(crate) setup: Option<SetupConfig>,
pub(crate) additional_slurs: Option<String>,
} }
#[derive(Debug, Deserialize, Clone)] #[derive(Debug, Deserialize, Clone)]

View file

@ -7,7 +7,16 @@ use regex::{Regex, RegexBuilder};
lazy_static! { lazy_static! {
static ref EMAIL_REGEX: Regex = Regex::new(r"^[a-zA-Z0-9.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$").expect("compile regex"); static ref EMAIL_REGEX: Regex = Regex::new(r"^[a-zA-Z0-9.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$").expect("compile regex");
static ref SLUR_REGEX: Regex = RegexBuilder::new(r"(fag(g|got|tard)?\b|cock\s?sucker(s|ing)?|ni((g{2,}|q)+|[gq]{2,})[e3r]+(s|z)?|mudslime?s?|kikes?|\bspi(c|k)s?\b|\bchinks?|gooks?|bitch(es|ing|y)?|whor(es?|ing)|\btr(a|@)nn?(y|ies?)|\b(b|re|r)tard(ed)?s?)").case_insensitive(true).build().expect("compile regex"); static ref SLUR_REGEX: Regex = {
let mut slurs = r"(fag(g|got|tard)?\b|cock\s?sucker(s|ing)?|ni((g{2,}|q)+|[gq]{2,})[e3r]+(s|z)?|mudslime?s?|kikes?|\bspi(c|k)s?\b|\bchinks?|gooks?|bitch(es|ing|y)?|whor(es?|ing)|\btr(a|@)nn?(y|ies?)|\b(b|re|r)tard(ed)?s?)".to_string();
if let Some(additional_slurs) = Settings::get().additional_slurs {
slurs.push('|');
slurs.push_str(&additional_slurs);
};
RegexBuilder::new(&&slurs).case_insensitive(true).build().expect("compile regex")
};
static ref USERNAME_MATCHES_REGEX: Regex = Regex::new(r"/u/[a-zA-Z][0-9a-zA-Z_]*").expect("compile regex"); static ref USERNAME_MATCHES_REGEX: Regex = Regex::new(r"/u/[a-zA-Z][0-9a-zA-Z_]*").expect("compile regex");
// TODO keep this old one, it didn't work with port well tho // TODO keep this old one, it didn't work with port well tho
// static ref MENTIONS_REGEX: Regex = Regex::new(r"@(?P<name>[\w.]+)@(?P<domain>[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)").expect("compile regex"); // static ref MENTIONS_REGEX: Regex = Regex::new(r"@(?P<name>[\w.]+)@(?P<domain>[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)").expect("compile regex");