]> Untitled Git - lemmy.git/commitdiff
Merge pull request #1921 from LemmyNet/fix_login
authorNutomic <me@nutomic.com>
Mon, 22 Nov 2021 13:05:57 +0000 (13:05 +0000)
committerGitHub <noreply@github.com>
Mon, 22 Nov 2021 13:05:57 +0000 (13:05 +0000)
Fix login ilike bug. Fixes #1920

crates/db_schema/src/impls/person.rs
crates/db_schema/src/lib.rs
crates/db_views/src/local_user_view.rs

index a9ba1d2e960a47e784a4831becf030723ff76740..b04764808817c715b659491bc23dcd6e7143a608 100644 (file)
@@ -5,7 +5,7 @@ use crate::{
   source::person::{Person, PersonForm},
   traits::Crud,
 };
-use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl, *};
+use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl};
 use url::Url;
 
 mod safe_type {
@@ -194,7 +194,7 @@ impl Person {
     person
       .filter(deleted.eq(false))
       .filter(local.eq(true))
-      .filter(name.ilike(from_name))
+      .filter(name.eq(from_name))
       .first::<Person>(conn)
   }
 
index f30f0bd80b92059edcd1fc051c8cae55644e0d3c..a2a19290a1800a89b510aa8a2f64d2ba85b6172c 100644 (file)
@@ -70,7 +70,7 @@ pub fn from_opt_str_to_opt_enum<T: std::str::FromStr>(opt: &Option<String>) -> O
 }
 
 pub fn fuzzy_search(q: &str) -> String {
-  let replaced = q.replace(" ", "%");
+  let replaced = q.replace("%", "\\%").replace("_", "\\_").replace(" ", "%");
   format!("%{}%", replaced)
 }
 
@@ -154,8 +154,11 @@ mod tests {
 
   #[test]
   fn test_fuzzy_search() {
-    let test = "This is a fuzzy search";
-    assert_eq!(fuzzy_search(test), "%This%is%a%fuzzy%search%".to_string());
+    let test = "This %is% _a_ fuzzy search";
+    assert_eq!(
+      fuzzy_search(test),
+      "%This%\\%is\\%%\\_a\\_%fuzzy%search%".to_string()
+    );
   }
 
   #[test]
index f697aba65792e1606ea675752796ddea6d42d62b..23e81d3651eb66c720da32a9cc0c62057d944430 100644 (file)
@@ -82,8 +82,8 @@ impl LocalUserView {
       .inner_join(person_aggregates::table.on(person::id.eq(person_aggregates::person_id)))
       .filter(
         person::name
-          .ilike(name_or_email)
-          .or(local_user::email.ilike(name_or_email)),
+          .eq(name_or_email)
+          .or(local_user::email.eq(name_or_email)),
       )
       .select((
         local_user::all_columns,