Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Search in columns 'name' and 'displayname' in the admin users endpoint
Browse files Browse the repository at this point in the history
Signed-off-by: Manuel Stahl <manuel.stahl@awesome-technologies.de>
  • Loading branch information
awesome-manuel committed May 2, 2020
1 parent 032e5a2 commit bed8190
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 13 deletions.
1 change: 1 addition & 0 deletions changelog.d/7377.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Search in columns 'name' and 'displayname' in the admin users endpoint. Contributed by Awesome Technologies Innovationslabor GmbH.
2 changes: 1 addition & 1 deletion docs/admin_api/user_admin_api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ The parameter ``limit`` is optional but is used for pagination, denoting the
maximum number of items to return in this call. Defaults to ``100``.

The parameter ``user_id`` is optional and filters to only users with user IDs
that contain this value.
or display name that contain this value.

The parameter ``guests`` is optional and if ``false`` will **exclude** guest users.
Defaults to ``true`` to include guest users.
Expand Down
28 changes: 16 additions & 12 deletions synapse/storage/data_stores/main/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ def get_users_paginate(
Args:
start (int): start number to begin the query from
limit (int): number of rows to retrieve
name (string): filter for user names
name (string): search for user_id or display name
guests (bool): whether to in include guest users
deactivated (bool): whether to include deactivated users
Returns:
Expand All @@ -520,11 +520,11 @@ def get_users_paginate(

def get_users_paginate_txn(txn):
filters = []
args = []
args = [self.hs.config.server_name]

if name:
filters.append("name LIKE ?")
args.append("%" + name + "%")
filters.append("(name LIKE ? OR displayname LIKE ?)")
args.extend(["%" + name + "%:%", "%" + name + "%"])

if not guests:
filters.append("is_guest = 0")
Expand All @@ -534,22 +534,26 @@ def get_users_paginate_txn(txn):

where_clause = "WHERE " + " AND ".join(filters) if len(filters) > 0 else ""

sql = "SELECT COUNT(*) as total_users FROM users %s" % (where_clause)
txn.execute(sql, args)
count = txn.fetchone()[0]

args = [self.hs.config.server_name] + args + [limit, start]
sql = """
SELECT name, user_type, is_guest, admin, deactivated, displayname, avatar_url
sql_base = """
FROM users as u
LEFT JOIN profiles AS p ON u.name = '@' || p.user_id || ':' || ?
{}
ORDER BY u.name LIMIT ? OFFSET ?
""".format(
where_clause
)
sql = "SELECT COUNT(*) as total_users " + sql_base
txn.execute(sql, args)
count = txn.fetchone()[0]

sql = (
"SELECT name, user_type, is_guest, admin, deactivated, displayname, avatar_url "
+ sql_base
+ " ORDER BY u.name LIMIT ? OFFSET ?"
)
args += [limit, start]
txn.execute(sql, args)
users = self.db.cursor_to_dict(txn)

return users, count

return self.db.runInteraction("get_users_paginate_txn", get_users_paginate_txn)
Expand Down

0 comments on commit bed8190

Please sign in to comment.