@@ -69,6 +69,7 @@ def __init__(self, hs: "HomeServer"):
69
69
self .store = hs .get_datastores ().main
70
70
self .auth = hs .get_auth ()
71
71
self .admin_handler = hs .get_admin_handler ()
72
+ self ._msc3866_enabled = hs .config .experimental .msc3866 .enabled
72
73
73
74
async def on_GET (self , request : SynapseRequest ) -> Tuple [int , JsonDict ]:
74
75
await assert_requester_is_admin (self .auth , request )
@@ -95,6 +96,13 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
95
96
guests = parse_boolean (request , "guests" , default = True )
96
97
deactivated = parse_boolean (request , "deactivated" , default = False )
97
98
99
+ # If support for MSC3866 is not enabled, apply no filtering based on the
100
+ # `approved` column.
101
+ if self ._msc3866_enabled :
102
+ approved = parse_boolean (request , "approved" , default = True )
103
+ else :
104
+ approved = True
105
+
98
106
order_by = parse_string (
99
107
request ,
100
108
"order_by" ,
@@ -115,8 +123,22 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
115
123
direction = parse_string (request , "dir" , default = "f" , allowed_values = ("f" , "b" ))
116
124
117
125
users , total = await self .store .get_users_paginate (
118
- start , limit , user_id , name , guests , deactivated , order_by , direction
126
+ start ,
127
+ limit ,
128
+ user_id ,
129
+ name ,
130
+ guests ,
131
+ deactivated ,
132
+ order_by ,
133
+ direction ,
134
+ approved ,
119
135
)
136
+
137
+ # If support for MSC3866 is not enabled, don't show the approval flag.
138
+ if not self ._msc3866_enabled :
139
+ for user in users :
140
+ del user ["approved" ]
141
+
120
142
ret = {"users" : users , "total" : total }
121
143
if (start + limit ) < total :
122
144
ret ["next_token" ] = str (start + len (users ))
@@ -163,6 +185,7 @@ def __init__(self, hs: "HomeServer"):
163
185
self .deactivate_account_handler = hs .get_deactivate_account_handler ()
164
186
self .registration_handler = hs .get_registration_handler ()
165
187
self .pusher_pool = hs .get_pusherpool ()
188
+ self ._msc3866_enabled = hs .config .experimental .msc3866 .enabled
166
189
167
190
async def on_GET (
168
191
self , request : SynapseRequest , user_id : str
@@ -239,6 +262,15 @@ async def on_PUT(
239
262
HTTPStatus .BAD_REQUEST , "'deactivated' parameter is not of type boolean"
240
263
)
241
264
265
+ approved : Optional [bool ] = None
266
+ if "approved" in body and self ._msc3866_enabled :
267
+ approved = body ["approved" ]
268
+ if not isinstance (approved , bool ):
269
+ raise SynapseError (
270
+ HTTPStatus .BAD_REQUEST ,
271
+ "'approved' parameter is not of type boolean" ,
272
+ )
273
+
242
274
# convert List[Dict[str, str]] into List[Tuple[str, str]]
243
275
if external_ids is not None :
244
276
new_external_ids = [
@@ -343,6 +375,9 @@ async def on_PUT(
343
375
if "user_type" in body :
344
376
await self .store .set_user_type (target_user , user_type )
345
377
378
+ if approved is not None :
379
+ await self .store .update_user_approval_status (target_user , approved )
380
+
346
381
user = await self .admin_handler .get_user (target_user )
347
382
assert user is not None
348
383
@@ -355,13 +390,18 @@ async def on_PUT(
355
390
if password is not None :
356
391
password_hash = await self .auth_handler .hash (password )
357
392
393
+ new_user_approved = True
394
+ if self ._msc3866_enabled and approved is not None :
395
+ new_user_approved = approved
396
+
358
397
user_id = await self .registration_handler .register_user (
359
398
localpart = target_user .localpart ,
360
399
password_hash = password_hash ,
361
400
admin = set_admin_to ,
362
401
default_display_name = displayname ,
363
402
user_type = user_type ,
364
403
by_admin = True ,
404
+ approved = new_user_approved ,
365
405
)
366
406
367
407
if threepids is not None :
@@ -550,6 +590,7 @@ async def on_POST(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
550
590
user_type = user_type ,
551
591
default_display_name = displayname ,
552
592
by_admin = True ,
593
+ approved = True ,
553
594
)
554
595
555
596
result = await register ._create_registration_details (user_id , body )
0 commit comments