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

Commit

Permalink
Test that we require validated email for email pushers (#9496)
Browse files Browse the repository at this point in the history
  • Loading branch information
erikjohnston authored Feb 25, 2021
1 parent 1e62d9e commit 2566dc5
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog.d/9496.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Test that we require validated email for email pushers.
6 changes: 6 additions & 0 deletions synapse/push/pusherpool.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

from prometheus_client import Gauge

from synapse.api.errors import Codes, SynapseError
from synapse.metrics.background_process_metrics import (
run_as_background_process,
wrap_as_background_process,
Expand Down Expand Up @@ -113,6 +114,11 @@ async def add_pusher(
The newly created pusher.
"""

if kind == "email":
email_owner = await self.store.get_user_id_by_threepid("email", pushkey)
if email_owner != user_id:
raise SynapseError(400, "Email not found", Codes.THREEPID_NOT_FOUND)

time_now_msec = self.clock.time_msec()

# create the pusher setting last_stream_ordering to the current maximum
Expand Down
34 changes: 32 additions & 2 deletions tests/push/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from twisted.internet.defer import Deferred

import synapse.rest.admin
from synapse.api.errors import Codes, SynapseError
from synapse.rest.client.v1 import login, room

from tests.unittest import HomeserverTestCase
Expand Down Expand Up @@ -100,12 +101,19 @@ def prepare(self, reactor, clock, hs):
user_tuple = self.get_success(
self.hs.get_datastore().get_user_by_access_token(self.access_token)
)
token_id = user_tuple.token_id
self.token_id = user_tuple.token_id

# We need to add email to account before we can create a pusher.
self.get_success(
hs.get_datastore().user_add_threepid(
self.user_id, "email", "[email protected]", 0, 0
)
)

self.pusher = self.get_success(
self.hs.get_pusherpool().add_pusher(
user_id=self.user_id,
access_token=token_id,
access_token=self.token_id,
kind="email",
app_id="m.email",
app_display_name="Email Notifications",
Expand All @@ -116,6 +124,28 @@ def prepare(self, reactor, clock, hs):
)
)

def test_need_validated_email(self):
"""Test that we can only add an email pusher if the user has validated
their email.
"""
with self.assertRaises(SynapseError) as cm:
self.get_success_or_raise(
self.hs.get_pusherpool().add_pusher(
user_id=self.user_id,
access_token=self.token_id,
kind="email",
app_id="m.email",
app_display_name="Email Notifications",
device_display_name="[email protected]",
pushkey="[email protected]",
lang=None,
data={},
)
)

self.assertEqual(400, cm.exception.code)
self.assertEqual(Codes.THREEPID_NOT_FOUND, cm.exception.errcode)

def test_simple_sends_email(self):
# Create a simple room with two users
room = self.helper.create_room_as(self.user_id, tok=self.access_token)
Expand Down

0 comments on commit 2566dc5

Please sign in to comment.