27
27
28
28
import attr
29
29
30
+ from synapse ._pydantic_compat import HAS_PYDANTIC_V2
30
31
from synapse .api .constants import Direction , UserTypes
31
32
from synapse .api .errors import Codes , NotFoundError , SynapseError
32
33
from synapse .http .servlet import (
33
34
RestServlet ,
34
35
assert_params_in_dict ,
36
+ parse_and_validate_json_object_from_request ,
35
37
parse_boolean ,
36
38
parse_enum ,
37
39
parse_integer ,
46
48
assert_user_is_admin ,
47
49
)
48
50
from synapse .rest .client ._base import client_patterns
51
+ from synapse .rest .models import RequestBodyModel
49
52
from synapse .storage .databases .main .registration import ExternalIDReuseException
50
53
from synapse .storage .databases .main .stats import UserSortOrder
51
54
from synapse .types import JsonDict , JsonMapping , UserID
52
55
53
56
if TYPE_CHECKING :
54
57
from synapse .server import HomeServer
55
58
59
+ if TYPE_CHECKING or HAS_PYDANTIC_V2 :
60
+ from pydantic .v1 import StrictBool
61
+ else :
62
+ from pydantic import StrictBool
63
+
64
+
56
65
logger = logging .getLogger (__name__ )
57
66
58
67
@@ -740,6 +749,9 @@ def __init__(self, hs: "HomeServer"):
740
749
self .is_mine = hs .is_mine
741
750
self .store = hs .get_datastores ().main
742
751
752
+ class PutBody (RequestBodyModel ):
753
+ suspend : StrictBool
754
+
743
755
async def on_PUT (
744
756
self , request : SynapseRequest , target_user_id : str
745
757
) -> Tuple [int , JsonDict ]:
@@ -752,8 +764,8 @@ async def on_PUT(
752
764
if not await self .store .get_user_by_id (target_user_id ):
753
765
raise NotFoundError ("User not found" )
754
766
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
757
769
await self .store .set_user_suspended_status (target_user_id , suspend )
758
770
759
771
return HTTPStatus .OK , {f"user_{ target_user_id } _suspended" : suspend }
0 commit comments