Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
fix test_auto_create_auto_join_where_no_consent (#4886)
Browse files Browse the repository at this point in the history
  • Loading branch information
neilisfragile authored and richvdh committed Mar 19, 2019
1 parent e9eeca1 commit 88f0675
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 5 deletions.
1 change: 1 addition & 0 deletions changelog.d/4886.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fix test_auto_create_auto_join_where_no_consent.
1 change: 1 addition & 0 deletions changelog.d/4886.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fix test_auto_create_auto_join_where_no_consent.
13 changes: 10 additions & 3 deletions synapse/handlers/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,14 @@ def __init__(self, hs):

self.spam_checker = hs.get_spam_checker()

if self.config.block_events_without_consent_error is not None:
self._block_events_without_consent_error = (
self.config.block_events_without_consent_error
)

# we need to construct a ConsentURIBuilder here, as it checks that the necessary
# config options, but *only* if we have a configuration for which we are
# going to need it.
if self._block_events_without_consent_error:
self._consent_uri_builder = ConsentURIBuilder(self.config)

@defer.inlineCallbacks
Expand Down Expand Up @@ -378,7 +385,7 @@ def assert_accepted_privacy_policy(self, requester):
Raises:
ConsentNotGivenError: if the user has not given consent yet
"""
if self.config.block_events_without_consent_error is None:
if self._block_events_without_consent_error is None:
return

# exempt AS users from needing consent
Expand All @@ -405,7 +412,7 @@ def assert_accepted_privacy_policy(self, requester):
consent_uri = self._consent_uri_builder.build_user_consent_uri(
requester.user.localpart,
)
msg = self.config.block_events_without_consent_error % {
msg = self._block_events_without_consent_error % {
'consent_uri': consent_uri,
}
raise ConsentNotGivenError(
Expand Down
5 changes: 5 additions & 0 deletions synapse/handlers/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from synapse.api.errors import (
AuthError,
Codes,
ConsentNotGivenError,
InvalidCaptchaError,
LimitExceededError,
RegistrationError,
Expand Down Expand Up @@ -311,6 +312,10 @@ def _auto_join_rooms(self, user_id):
)
else:
yield self._join_user_to_room(fake_requester, r)
except ConsentNotGivenError as e:
# Technically not necessary to pull out this error though
# moving away from bare excepts is a good thing to do.
logger.error("Failed to join new user to %r: %r", r, e)
except Exception as e:
logger.error("Failed to join new user to %r: %r", r, e)

Expand Down
24 changes: 22 additions & 2 deletions tests/handlers/test_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,12 +187,32 @@ def test_auto_create_auto_join_rooms_when_support_user_exists(self):

@defer.inlineCallbacks
def test_auto_create_auto_join_where_no_consent(self):
self.hs.config.user_consent_at_registration = True
self.hs.config.block_events_without_consent_error = "Error"
"""Test to ensure that the first user is not auto-joined to a room if
they have not given general consent.
"""

# Given:-
# * a user must give consent,
# * they have not given that consent
# * The server is configured to auto-join to a room
# (and autocreate if necessary)

event_creation_handler = self.hs.get_event_creation_handler()
# (Messing with the internals of event_creation_handler is fragile
# but can't see a better way to do this. One option could be to subclass
# the test with custom config.)
event_creation_handler._block_events_without_consent_error = ("Error")
event_creation_handler._consent_uri_builder = Mock()
room_alias_str = "#room:test"
self.hs.config.auto_join_rooms = [room_alias_str]

# When:-
# * the user is registered and post consent actions are called
res = yield self.handler.register(localpart='jeff')
yield self.handler.post_consent_actions(res[0])

# Then:-
# * Ensure that they have not been joined to the room
rooms = yield self.store.get_rooms_for_user(res[0])
self.assertEqual(len(rooms), 0)

Expand Down

0 comments on commit 88f0675

Please sign in to comment.