Enforce hs_disabled_message correctly

Fixes a bug where hs_disabled_message was not enforced for 3pid-based requests
if there was no server_notices_mxid configured.
pull/4888/head
Richard van der Hoff 2019-03-19 11:04:12 +00:00
parent fd463b4f5d
commit 0dbfae03f9
3 changed files with 24 additions and 3 deletions

2
changelog.d/4888.bugfix Normal file
View File

@ -0,0 +1,2 @@
Fix a bug where hs_disabled_message was sometimes not correctly enforced.

View File

@ -788,9 +788,11 @@ class Auth(object):
# Never fail an auth check for the server notices users or support user # Never fail an auth check for the server notices users or support user
# This can be a problem where event creation is prohibited due to blocking # This can be a problem where event creation is prohibited due to blocking
is_support = yield self.store.is_support_user(user_id) if user_id is not None:
if user_id == self.hs.config.server_notices_mxid or is_support: if user_id == self.hs.config.server_notices_mxid:
return return
if (yield self.store.is_support_user(user_id)):
return
if self.hs.config.hs_disabled: if self.hs.config.hs_disabled:
raise ResourceLimitError( raise ResourceLimitError(

View File

@ -344,6 +344,23 @@ class AuthTestCase(unittest.TestCase):
self.assertEquals(e.exception.errcode, Codes.RESOURCE_LIMIT_EXCEEDED) self.assertEquals(e.exception.errcode, Codes.RESOURCE_LIMIT_EXCEEDED)
self.assertEquals(e.exception.code, 403) self.assertEquals(e.exception.code, 403)
@defer.inlineCallbacks
def test_hs_disabled_no_server_notices_user(self):
"""Check that 'hs_disabled_message' works correctly when there is no
server_notices user.
"""
# this should be the default, but we had a bug where the test was doing the wrong
# thing, so let's make it explicit
self.hs.config.server_notices_mxid = None
self.hs.config.hs_disabled = True
self.hs.config.hs_disabled_message = "Reason for being disabled"
with self.assertRaises(ResourceLimitError) as e:
yield self.auth.check_auth_blocking()
self.assertEquals(e.exception.admin_contact, self.hs.config.admin_contact)
self.assertEquals(e.exception.errcode, Codes.RESOURCE_LIMIT_EXCEEDED)
self.assertEquals(e.exception.code, 403)
@defer.inlineCallbacks @defer.inlineCallbacks
def test_server_notices_mxid_special_cased(self): def test_server_notices_mxid_special_cased(self):
self.hs.config.hs_disabled = True self.hs.config.hs_disabled = True