48
48
from synapse .events import EventBase
49
49
from synapse .events .snapshot import EventContext
50
50
from synapse .rest import admin
51
- from synapse .rest .client import account , directory , login , profile , register , room , sync
51
+ from synapse .rest .client import (
52
+ account ,
53
+ directory ,
54
+ knock ,
55
+ login ,
56
+ profile ,
57
+ register ,
58
+ room ,
59
+ sync ,
60
+ )
52
61
from synapse .server import HomeServer
53
62
from synapse .types import JsonDict , RoomAlias , UserID , create_requester
54
63
from synapse .util import Clock
@@ -733,7 +742,7 @@ def test_post_room_no_keys(self) -> None:
733
742
self .assertEqual (HTTPStatus .OK , channel .code , channel .result )
734
743
self .assertTrue ("room_id" in channel .json_body )
735
744
assert channel .resource_usage is not None
736
- self .assertEqual (32 , channel .resource_usage .db_txn_count )
745
+ self .assertEqual (33 , channel .resource_usage .db_txn_count )
737
746
738
747
def test_post_room_initial_state (self ) -> None :
739
748
# POST with initial_state config key, expect new room id
@@ -746,7 +755,7 @@ def test_post_room_initial_state(self) -> None:
746
755
self .assertEqual (HTTPStatus .OK , channel .code , channel .result )
747
756
self .assertTrue ("room_id" in channel .json_body )
748
757
assert channel .resource_usage is not None
749
- self .assertEqual (34 , channel .resource_usage .db_txn_count )
758
+ self .assertEqual (35 , channel .resource_usage .db_txn_count )
750
759
751
760
def test_post_room_visibility_key (self ) -> None :
752
761
# POST with visibility config key, expect new room id
@@ -1154,6 +1163,7 @@ class RoomJoinTestCase(RoomBase):
1154
1163
admin .register_servlets ,
1155
1164
login .register_servlets ,
1156
1165
room .register_servlets ,
1166
+ knock .register_servlets ,
1157
1167
]
1158
1168
1159
1169
def prepare (self , reactor : MemoryReactor , clock : Clock , hs : HomeServer ) -> None :
@@ -1167,6 +1177,8 @@ def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
1167
1177
self .room2 = self .helper .create_room_as (room_creator = self .user1 , tok = self .tok1 )
1168
1178
self .room3 = self .helper .create_room_as (room_creator = self .user1 , tok = self .tok1 )
1169
1179
1180
+ self .store = hs .get_datastores ().main
1181
+
1170
1182
def test_spam_checker_may_join_room_deprecated (self ) -> None :
1171
1183
"""Tests that the user_may_join_room spam checker callback is correctly called
1172
1184
and blocks room joins when needed.
@@ -1317,6 +1329,57 @@ async def user_may_join_room(
1317
1329
expect_additional_fields = return_value [1 ],
1318
1330
)
1319
1331
1332
+ def test_suspended_user_cannot_join_room (self ) -> None :
1333
+ # set the user as suspended
1334
+ self .get_success (self .store .set_user_suspended_status (self .user2 , True ))
1335
+
1336
+ channel = self .make_request (
1337
+ "POST" , f"/join/{ self .room1 } " , access_token = self .tok2
1338
+ )
1339
+ self .assertEqual (channel .code , 403 )
1340
+ self .assertEqual (
1341
+ channel .json_body ["errcode" ], "ORG.MATRIX.MSC3823.USER_ACCOUNT_SUSPENDED"
1342
+ )
1343
+
1344
+ channel = self .make_request (
1345
+ "POST" , f"/rooms/{ self .room1 } /join" , access_token = self .tok2
1346
+ )
1347
+ self .assertEqual (channel .code , 403 )
1348
+ self .assertEqual (
1349
+ channel .json_body ["errcode" ], "ORG.MATRIX.MSC3823.USER_ACCOUNT_SUSPENDED"
1350
+ )
1351
+
1352
+ def test_suspended_user_cannot_knock_on_room (self ) -> None :
1353
+ # set the user as suspended
1354
+ self .get_success (self .store .set_user_suspended_status (self .user2 , True ))
1355
+
1356
+ channel = self .make_request (
1357
+ "POST" ,
1358
+ f"/_matrix/client/v3/knock/{ self .room1 } " ,
1359
+ access_token = self .tok2 ,
1360
+ content = {},
1361
+ shorthand = False ,
1362
+ )
1363
+ self .assertEqual (channel .code , 403 )
1364
+ self .assertEqual (
1365
+ channel .json_body ["errcode" ], "ORG.MATRIX.MSC3823.USER_ACCOUNT_SUSPENDED"
1366
+ )
1367
+
1368
+ def test_suspended_user_cannot_invite_to_room (self ) -> None :
1369
+ # set the user as suspended
1370
+ self .get_success (self .store .set_user_suspended_status (self .user1 , True ))
1371
+
1372
+ # first user invites second user
1373
+ channel = self .make_request (
1374
+ "POST" ,
1375
+ f"/rooms/{ self .room1 } /invite" ,
1376
+ access_token = self .tok1 ,
1377
+ content = {"user_id" : self .user2 },
1378
+ )
1379
+ self .assertEqual (
1380
+ channel .json_body ["errcode" ], "ORG.MATRIX.MSC3823.USER_ACCOUNT_SUSPENDED"
1381
+ )
1382
+
1320
1383
1321
1384
class RoomAppserviceTsParamTestCase (unittest .HomeserverTestCase ):
1322
1385
servlets = [
0 commit comments