about summary refs log tree commit diff
path: root/gn_auth/auth/authorisation/users/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn_auth/auth/authorisation/users/models.py')
-rw-r--r--gn_auth/auth/authorisation/users/models.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/gn_auth/auth/authorisation/users/models.py b/gn_auth/auth/authorisation/users/models.py
index ef3ce7f..d30bfd0 100644
--- a/gn_auth/auth/authorisation/users/models.py
+++ b/gn_auth/auth/authorisation/users/models.py
@@ -1,6 +1,5 @@
 """Functions for acting on users."""
 import uuid
-from typing import Union
 from functools import reduce
 from datetime import datetime, timedelta
 
@@ -37,29 +36,36 @@ def __process_age_clause__(age_desc: str) -> tuple[str, int]:
         case "exactly":
             return "created = :created", _param
         case _:
-            raise Exception("Invalid age descriptor.")
+            raise Exception("Invalid age descriptor.")# pylint: disable=[broad-exception-raised]
 
 
-def __list_user_clauses_and_params__(**kwargs) -> tuple[list[str], dict[str, Union[int, str]]]:
+def __list_user_clauses_and_params__(**kwargs) -> tuple[str, dict[str, str]]:
     """Process the WHERE clauses, and params for the 'LIST USERS' query."""
-    clauses = []
+    clauses = ""
     params = {}
-    if bool(kwargs.get("email", "").strip()):
-        clauses = clauses + ["email LIKE :email"]
+    if bool(kwargs.get("email", "").strip()) and bool(kwargs.get("name", "").strip()):
+        clauses = "(email LIKE :email OR name LIKE :name)"
+        params = {
+            "email": f'%{kwargs["email"].strip()}%',
+            "name": f'%{kwargs["name"].strip()}%'
+        }
+    elif bool(kwargs.get("email", "").strip()):
+        clauses = "email LIKE :email"
         params["email"] = f'%{kwargs["email"].strip()}%'
-
-    if bool(kwargs.get("name", "").strip()):
-        clauses = clauses + ["name LIKE :name"]
+    elif bool(kwargs.get("name", "").strip()):
+        clauses = "name LIKE :name"
         params["name"] = f'%{kwargs["name"].strip()}%'
+    else:
+        clauses = ""
 
     if bool(kwargs.get("verified", "").strip()):
-        clauses = clauses + ["verified=:verified"]
-        params["verified"] = 1 if kwargs["verified"].strip() == "yes" else "no"
+        clauses = clauses + (" AND " if len(clauses) > 0 else "") + "verified=:verified"
+        params["verified"] = "1" if kwargs["verified"].strip() == "yes" else "0"
 
     if bool(kwargs.get("age", "").strip()):
         _clause, _param = __process_age_clause__(kwargs["age"].strip())
-        clauses = clauses + [_clause]
-        params["created"] = _param
+        clauses = clauses + (" AND " if len(clauses) > 0 else "") + _clause
+        params["created"] = str(_param)
 
     return clauses, params
 
@@ -73,7 +79,7 @@ def list_users(conn: db.DbConnection, **kwargs) -> tuple[User, ...]:
     _query = "SELECT * FROM users"
     _clauses, _params = __list_user_clauses_and_params__(**kwargs)
     if len(_clauses) > 0:
-        _query = _query + " WHERE " + " AND ".join(_clauses)
+        _query = _query + " WHERE " + _clauses
 
     with db.cursor(conn) as cursor:
         cursor.execute(_query, _params)