2727
2828import attr
2929
30+ from synapse ._pydantic_compat import HAS_PYDANTIC_V2
3031from synapse .api .constants import Direction , UserTypes
3132from synapse .api .errors import Codes , NotFoundError , SynapseError
3233from synapse .http .servlet import (
3334 RestServlet ,
3435 assert_params_in_dict ,
36+ parse_and_validate_json_object_from_request ,
3537 parse_boolean ,
3638 parse_enum ,
3739 parse_integer ,
4648 assert_user_is_admin ,
4749)
4850from synapse .rest .client ._base import client_patterns
51+ from synapse .rest .models import RequestBodyModel
4952from synapse .storage .databases .main .registration import ExternalIDReuseException
5053from synapse .storage .databases .main .stats import UserSortOrder
5154from synapse .types import JsonDict , JsonMapping , UserID
5255
5356if TYPE_CHECKING :
5457 from synapse .server import HomeServer
5558
59+ if TYPE_CHECKING or HAS_PYDANTIC_V2 :
60+ from pydantic .v1 import StrictBool
61+ else :
62+ from pydantic import StrictBool
63+
64+
5665logger = logging .getLogger (__name__ )
5766
5867
@@ -740,6 +749,9 @@ def __init__(self, hs: "HomeServer"):
740749 self .is_mine = hs .is_mine
741750 self .store = hs .get_datastores ().main
742751
752+ class PutBody (RequestBodyModel ):
753+ suspend : StrictBool
754+
743755 async def on_PUT (
744756 self , request : SynapseRequest , target_user_id : str
745757 ) -> Tuple [int , JsonDict ]:
@@ -752,8 +764,8 @@ async def on_PUT(
752764 if not await self .store .get_user_by_id (target_user_id ):
753765 raise NotFoundError ("User not found" )
754766
755- body = parse_json_object_from_request (request , allow_empty_body = True )
756- suspend = body .get ( " suspend" , False )
767+ body = parse_and_validate_json_object_from_request (request , self . PutBody )
768+ suspend = body .suspend
757769 await self .store .set_user_suspended_status (target_user_id , suspend )
758770
759771 return HTTPStatus .OK , {f"user_{ target_user_id } _suspended" : suspend }
0 commit comments