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

fix test_auto_create_auto_join_where_no_consent #4886

Merged
merged 9 commits into from
Mar 19, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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