@@ -20,6 +20,7 @@ import (
2020 "testing"
2121
2222 "github.com/matrix-org/gomatrixserverlib/spec"
23+ "github.com/stretchr/testify/assert"
2324)
2425
2526func stateNeededEquals (a , b StateNeeded ) bool {
@@ -1116,6 +1117,101 @@ func TestDemoteUserDefaultPowerLevelBelowOwn(t *testing.T) {
11161117 }
11171118}
11181119
1120+ func NilUserIDForBadSenderTest (roomID spec.RoomID , senderID spec.SenderID ) (* spec.UserID , error ) {
1121+ if senderID == "@baduser" {
1122+ return nil , nil
1123+ }
1124+
1125+ return spec .NewUserID (string (senderID ), true )
1126+ }
1127+
1128+ var nilPowerLevelTestRoom = & testAuthEvents {
1129+ CreateJSON : json .RawMessage (`{
1130+ "type": "m.room.create",
1131+ "state_key": "",
1132+ "sender": "@baduser",
1133+ "room_id": "!r1:a",
1134+ "event_id": "$e1:a",
1135+ "content": {
1136+ "room_version": "1"
1137+ }
1138+ }` ),
1139+ PowerLevelsJSON : json .RawMessage (`{
1140+ "type": "m.room.power_levels",
1141+ "state_key": "",
1142+ "sender": "@u1:a",
1143+ "room_id": "!r1:a",
1144+ "event_id": "$e3:a",
1145+ "content": {
1146+ "users_default": 100,
1147+ "users": {
1148+ "@u1:a": 100
1149+ },
1150+ "redact": 100
1151+ }
1152+ }` ),
1153+ MemberJSON : map [string ]json.RawMessage {
1154+ "@u1:a" : json .RawMessage (`{
1155+ "type": "m.room.member",
1156+ "state_key": "@u1:a",
1157+ "sender": "@u1:a",
1158+ "room_id": "!r1:a",
1159+ "event_id": "$e2:a",
1160+ "content": {
1161+ "membership": "join"
1162+ }
1163+ }` ),
1164+ },
1165+ }
1166+
1167+ func TestPowerLevelCheckShouldNotPanic (t * testing.T ) {
1168+ powerChangeBadUser , err := MustGetRoomVersion (RoomVersionV1 ).NewEventFromTrustedJSON (spec .RawJSON (`{
1169+ "type": "m.room.power_levels",
1170+ "state_key": "",
1171+ "sender": "@u1:a",
1172+ "room_id": "!r1:a",
1173+ "event_id": "$e5:a",
1174+ "content": {
1175+ "users_default": 50,
1176+ "users": {
1177+ "@baduser": 0
1178+ },
1179+ "redact": 100
1180+ }
1181+ }` ), false )
1182+ if err != nil {
1183+ t .Fatal (err )
1184+ }
1185+ assert .NotPanics (t , func () {
1186+ if err := Allowed (powerChangeBadUser , powerLevelTestRoom , NilUserIDForBadSenderTest ); err == nil {
1187+ panic ("Event should not be allowed" )
1188+ }
1189+ }, "" )
1190+
1191+ powerChange , err := MustGetRoomVersion (RoomVersionV1 ).NewEventFromTrustedJSON (spec .RawJSON (`{
1192+ "type": "m.room.power_levels",
1193+ "state_key": "",
1194+ "sender": "@u1:a",
1195+ "room_id": "!r1:a",
1196+ "event_id": "$e5:a",
1197+ "content": {
1198+ "users_default": 50,
1199+ "users": {
1200+ "@u1:a": 0
1201+ },
1202+ "redact": 100
1203+ }
1204+ }` ), false )
1205+ if err != nil {
1206+ t .Fatal (err )
1207+ }
1208+ assert .NotPanics (t , func () {
1209+ if err := Allowed (powerChange , nilPowerLevelTestRoom , NilUserIDForBadSenderTest ); err == nil {
1210+ panic ("Event should not be allowed" )
1211+ }
1212+ }, "" )
1213+ }
1214+
11191215func TestPromoteUserDefaultLevelAboveOwn (t * testing.T ) {
11201216 // User shouldn't be able to promote the user default
11211217 // level above their own effective level.
0 commit comments