]> Untitled Git - lemmy.git/blob - crates/api_crud/src/site/mod.rs
Fixes #2900 - Checks slur regex to see if it is too permissive (#3146)
[lemmy.git] / crates / api_crud / src / site / mod.rs
1 use lemmy_db_schema::{ListingType, RegistrationMode};
2 use lemmy_utils::error::{LemmyError, LemmyResult};
3
4 mod create;
5 mod read;
6 mod update;
7
8 /// Checks whether the default post listing type is valid for a site.
9 pub fn site_default_post_listing_type_check(
10   default_post_listing_type: &Option<ListingType>,
11 ) -> LemmyResult<()> {
12   if let Some(listing_type) = default_post_listing_type {
13     // Only allow all or local as default listing types...
14     if listing_type != &ListingType::All && listing_type != &ListingType::Local {
15       Err(LemmyError::from_message(
16         "invalid_default_post_listing_type",
17       ))
18     } else {
19       Ok(())
20     }
21   } else {
22     Ok(())
23   }
24 }
25
26 /// Checks whether the application question and registration mode align.
27 pub fn application_question_check(
28   current_application_question: &Option<String>,
29   new_application_question: &Option<String>,
30   registration_mode: RegistrationMode,
31 ) -> LemmyResult<()> {
32   let has_no_question: bool =
33     current_application_question.is_none() && new_application_question.is_none();
34   let is_nullifying_question: bool = new_application_question == &Some(String::new());
35
36   if registration_mode == RegistrationMode::RequireApplication
37     && (has_no_question || is_nullifying_question)
38   {
39     Err(LemmyError::from_message("application_question_required"))
40   } else {
41     Ok(())
42   }
43 }
44
45 #[cfg(test)]
46 mod tests {
47   use crate::site::{application_question_check, site_default_post_listing_type_check};
48   use lemmy_db_schema::{ListingType, RegistrationMode};
49
50   #[test]
51   fn test_site_default_post_listing_type_check() {
52     assert!(site_default_post_listing_type_check(&None::<ListingType>).is_ok());
53     assert!(site_default_post_listing_type_check(&Some(ListingType::All)).is_ok());
54     assert!(site_default_post_listing_type_check(&Some(ListingType::Local)).is_ok());
55     assert!(site_default_post_listing_type_check(&Some(ListingType::Subscribed)).is_err());
56   }
57
58   #[test]
59   fn test_application_question_check() {
60     assert!(
61       application_question_check(&Some(String::from("q")), &Some(String::new()), RegistrationMode::RequireApplication).is_err(),
62       "Expected application to be invalid because an application is required, current question: {:?}, new question: {:?}",
63       "q",
64       String::new(),
65     );
66     assert!(
67       application_question_check(&None, &None, RegistrationMode::RequireApplication).is_err(),
68       "Expected application to be invalid because an application is required, current question: {:?}, new question: {:?}",
69       None::<String>,
70       None::<String>
71     );
72
73     assert!(
74       application_question_check(&None, &None, RegistrationMode::Open).is_ok(),
75       "Expected application to be valid because no application required, current question: {:?}, new question: {:?}, mode: {:?}",
76       None::<String>,
77       None::<String>,
78       RegistrationMode::Open
79     );
80     assert!(
81       application_question_check(&None, &Some(String::from("q")), RegistrationMode::RequireApplication).is_ok(),
82       "Expected application to be valid because new application provided, current question: {:?}, new question: {:?}, mode: {:?}",
83       None::<String>,
84       Some(String::from("q")),
85       RegistrationMode::RequireApplication
86     );
87     assert!(
88       application_question_check(&Some(String::from("q")), &None, RegistrationMode::RequireApplication).is_ok(),
89       "Expected application to be valid because application existed, current question: {:?}, new question: {:?}, mode: {:?}",
90       Some(String::from("q")),
91       None::<String>,
92       RegistrationMode::RequireApplication
93     );
94   }
95 }