X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Futils%2Fsrc%2Futils.rs;h=9d481de1906586be155faf47d9564bfd9fd4acc2;hb=235cc8b22897bfb3e71ba3dbd725d36863fea8ba;hp=99dd21c8fd3bedae8ecbaf6a30eaa23689cf79f0;hpb=276a8c2bd3e4fd1323e66b808675cf14cf6f75c5;p=lemmy.git diff --git a/crates/utils/src/utils.rs b/crates/utils/src/utils.rs index 99dd21c8..9d481de1 100644 --- a/crates/utils/src/utils.rs +++ b/crates/utils/src/utils.rs @@ -1,10 +1,11 @@ -use crate::{error::LemmyError, IpAddr}; +use crate::{error::LemmyError, location_info, IpAddr}; use actix_web::dev::ConnectionInfo; +use anyhow::Context; use chrono::{DateTime, FixedOffset, NaiveDateTime}; use itertools::Itertools; use once_cell::sync::Lazy; use rand::{distributions::Alphanumeric, thread_rng, Rng}; -use regex::Regex; +use regex::{Regex, RegexBuilder}; use url::Url; static MENTIONS_REGEX: Lazy = Lazy::new(|| { @@ -60,6 +61,15 @@ pub(crate) fn slur_check<'a>( } } +pub fn build_slur_regex(regex_str: Option<&str>) -> Option { + regex_str.map(|slurs| { + RegexBuilder::new(slurs) + .case_insensitive(true) + .build() + .expect("compile regex") + }) +} + pub fn check_slurs(text: &str, slur_regex: &Option) -> Result<(), LemmyError> { if let Err(slurs) = slur_check(text, slur_regex) { Err(LemmyError::from_error_message( @@ -87,6 +97,20 @@ pub(crate) fn slurs_vec_to_str(slurs: Vec<&str>) -> String { [start, combined].concat() } +/// Make sure if applications are required, that there is an application questionnaire +pub fn check_application_question( + application_question: &Option>, + require_application: &Option, +) -> Result<(), LemmyError> { + if require_application.unwrap_or(false) + && application_question.as_ref().unwrap_or(&None).is_none() + { + Err(LemmyError::from_message("application_question_required")) + } else { + Ok(()) + } +} + pub fn generate_random_string() -> String { thread_rng() .sample_iter(&Alphanumeric) @@ -178,6 +202,10 @@ pub fn clean_url_params(url: &Url) -> Url { url_out } +pub fn generate_domain_url(actor_id: &Url) -> Result { + Ok(actor_id.host_str().context(location_info!())?.to_string()) +} + #[cfg(test)] mod tests { use crate::utils::{clean_url_params, is_valid_post_title};