diff --git a/synapse/rest/admin/__init__.py b/synapse/rest/admin/__init__.py
index 0e413f02ab..07e0fb71f2 100644
--- a/synapse/rest/admin/__init__.py
+++ b/synapse/rest/admin/__init__.py
@@ -109,6 +109,7 @@ from synapse.rest.admin.users import (
UserReplaceMasterCrossSigningKeyRestServlet,
UserRestServletV2,
UsersRestServletV2,
+ UsersRestServletV3,
UserTokenRestServlet,
WhoisRestServlet,
)
@@ -289,6 +290,7 @@ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
UserTokenRestServlet(hs).register(http_server)
UserRestServletV2(hs).register(http_server)
UsersRestServletV2(hs).register(http_server)
+ UsersRestServletV3(hs).register(http_server)
UserMediaStatisticsRestServlet(hs).register(http_server)
LargestRoomsStatistics(hs).register(http_server)
EventReportDetailRestServlet(hs).register(http_server)
diff --git a/synapse/rest/admin/users.py b/synapse/rest/admin/users.py
index 0229e87f43..a9645e4af7 100644
--- a/synapse/rest/admin/users.py
+++ b/synapse/rest/admin/users.py
@@ -23,7 +23,7 @@ import hmac
import logging
import secrets
from http import HTTPStatus
-from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
+from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union
import attr
@@ -118,7 +118,8 @@ class UsersRestServletV2(RestServlet):
errcode=Codes.INVALID_PARAM,
)
- deactivated = parse_boolean(request, "deactivated", default=False)
+ deactivated = self._parse_parameter_deactivated(request)
+
locked = parse_boolean(request, "locked", default=False)
admins = parse_boolean(request, "admins")
@@ -182,6 +183,22 @@ class UsersRestServletV2(RestServlet):
return HTTPStatus.OK, ret
+ def _parse_parameter_deactivated(self, request: SynapseRequest) -> Optional[bool]:
+ """
+ Return None (no filtering) if `deactivated` is `true`, otherwise return `False`
+ (exclude deactivated users from the results).
+ """
+ return None if parse_boolean(request, "deactivated") else False
+
+
+class UsersRestServletV3(UsersRestServletV2):
+ PATTERNS = admin_patterns("/users$", "v3")
+
+ def _parse_parameter_deactivated(
+ self, request: SynapseRequest
+ ) -> Union[bool, None]:
+ return parse_boolean(request, "deactivated")
+
class UserRestServletV2(RestServlet):
PATTERNS = admin_patterns("/users/(?P<user_id>[^/]*)$", "v2")
|