|
44 | 44 | from twisted.web.iweb import UNKNOWN_LENGTH, IResponse
|
45 | 45 | from twisted.web.resource import Resource
|
46 | 46 |
|
47 |
| -from synapse.api.errors import HttpResponseException |
| 47 | +from synapse.api.errors import Codes, HttpResponseException |
48 | 48 | from synapse.api.ratelimiting import Ratelimiter
|
49 | 49 | from synapse.config._base import Config
|
50 | 50 | from synapse.config.oembed import OEmbedEndpointConfig
|
@@ -2880,11 +2880,12 @@ def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
2880 | 2880 |
|
2881 | 2881 | config["media_storage_providers"] = [provider_config]
|
2882 | 2882 |
|
2883 |
| - # These are the limits that we are testing |
2884 |
| - config["media_upload_limits"] = [ |
2885 |
| - {"time_period": "1d", "max_size": "1K"}, |
2886 |
| - {"time_period": "1w", "max_size": "3K"}, |
2887 |
| - ] |
| 2883 | + # These are the limits that we are testing unless overridden |
| 2884 | + if config.get("media_upload_limits") is None: |
| 2885 | + config["media_upload_limits"] = [ |
| 2886 | + {"time_period": "1d", "max_size": "1K"}, |
| 2887 | + {"time_period": "1w", "max_size": "3K"}, |
| 2888 | + ] |
2888 | 2889 |
|
2889 | 2890 | return self.setup_test_homeserver(config=config)
|
2890 | 2891 |
|
@@ -3002,10 +3003,11 @@ def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
3002 | 3003 | config["media_storage_providers"] = [provider_config]
|
3003 | 3004 |
|
3004 | 3005 | # default limits to use
|
3005 |
| - config["media_upload_limits"] = [ |
3006 |
| - {"time_period": "1d", "max_size": "1K"}, |
3007 |
| - {"time_period": "1w", "max_size": "3K"}, |
3008 |
| - ] |
| 3006 | + if config.get("media_upload_limits") is None: |
| 3007 | + config["media_upload_limits"] = [ |
| 3008 | + {"time_period": "1d", "max_size": "1K"}, |
| 3009 | + {"time_period": "1w", "max_size": "3K"}, |
| 3010 | + ] |
3009 | 3011 |
|
3010 | 3012 | return self.setup_test_homeserver(config=config)
|
3011 | 3013 |
|
@@ -3158,3 +3160,70 @@ def test_uses_defaults(self) -> None:
|
3158 | 3160 | )
|
3159 | 3161 | self.assertEqual(self.last_media_upload_limit_exceeded["sent_bytes"], 500)
|
3160 | 3162 | self.assertEqual(self.last_media_upload_limit_exceeded["attempted_bytes"], 800)
|
| 3163 | + |
| 3164 | + @override_config( |
| 3165 | + { |
| 3166 | + "media_upload_limits": [ |
| 3167 | + { |
| 3168 | + "time_period": "1d", |
| 3169 | + "max_size": "1K", |
| 3170 | + "msc4335_info_url": "https://example.com", |
| 3171 | + }, |
| 3172 | + ] |
| 3173 | + } |
| 3174 | + ) |
| 3175 | + def test_msc4335_defaults_disabled(self) -> None: |
| 3176 | + """Test that the MSC4335 is not used unless experimental feature is enabled.""" |
| 3177 | + channel = self.upload_media(500, self.tok3) |
| 3178 | + self.assertEqual(channel.code, 200) |
| 3179 | + |
| 3180 | + channel = self.upload_media(800, self.tok3) |
| 3181 | + # n.b. this response is not spec compliant as described at: https://github.com/element-hq/synapse/issues/18749 |
| 3182 | + self.assertEqual(channel.code, 400) |
| 3183 | + self.assertEqual(channel.json_body["errcode"], Codes.RESOURCE_LIMIT_EXCEEDED) |
| 3184 | + |
| 3185 | + @override_config( |
| 3186 | + { |
| 3187 | + "experimental_features": {"msc4335_enabled": True}, |
| 3188 | + "media_upload_limits": [ |
| 3189 | + { |
| 3190 | + "time_period": "1d", |
| 3191 | + "max_size": "1K", |
| 3192 | + "msc4335_info_url": "https://example.com", |
| 3193 | + } |
| 3194 | + ], |
| 3195 | + } |
| 3196 | + ) |
| 3197 | + def test_msc4335_returns_user_limit_exceeded(self) -> None: |
| 3198 | + """Test that the MSC4335 error is returned when experimental feature is enabled.""" |
| 3199 | + channel = self.upload_media(500, self.tok3) |
| 3200 | + self.assertEqual(channel.code, 200) |
| 3201 | + |
| 3202 | + channel = self.upload_media(800, self.tok3) |
| 3203 | + self.assertEqual(channel.code, 403) |
| 3204 | + self.assertEqual(channel.json_body["errcode"], Codes.UNKNOWN) |
| 3205 | + self.assertEqual( |
| 3206 | + channel.json_body["org.matrix.msc4335.errcode"], "M_USER_LIMIT_EXCEEDED" |
| 3207 | + ) |
| 3208 | + self.assertEqual( |
| 3209 | + channel.json_body["org.matrix.msc4335.info_url"], "https://example.com" |
| 3210 | + ) |
| 3211 | + |
| 3212 | + @override_config( |
| 3213 | + { |
| 3214 | + "experimental_features": {"msc4335_enabled": True}, |
| 3215 | + "media_upload_limits": [ |
| 3216 | + { |
| 3217 | + "time_period": "1d", |
| 3218 | + "max_size": "1K", |
| 3219 | + } |
| 3220 | + ], |
| 3221 | + } |
| 3222 | + ) |
| 3223 | + def test_msc4335_requires_info_url(self) -> None: |
| 3224 | + """Test that the MSC4335 error is not used if info_url is not provided.""" |
| 3225 | + channel = self.upload_media(500, self.tok3) |
| 3226 | + self.assertEqual(channel.code, 200) |
| 3227 | + |
| 3228 | + channel = self.upload_media(800, self.tok3) |
| 3229 | + self.assertEqual(channel.code, 400) |
0 commit comments