Skip to content

Commit

Permalink
Email notifications for new users when creating via the Admin API. (m…
Browse files Browse the repository at this point in the history
  • Loading branch information
dklimpel authored and phil-flex committed Jun 16, 2020
1 parent 48bbf0f commit 94d5f1a
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/7267.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix email notifications not being enabled for new users when created via the Admin API.
16 changes: 16 additions & 0 deletions synapse/rest/admin/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ def __init__(self, hs):
self.set_password_handler = hs.get_set_password_handler()
self.deactivate_account_handler = hs.get_deactivate_account_handler()
self.registration_handler = hs.get_registration_handler()
self.pusher_pool = hs.get_pusherpool()

async def on_GET(self, request, user_id):
await assert_requester_is_admin(self.auth, request)
Expand Down Expand Up @@ -281,6 +282,21 @@ async def on_PUT(self, request, user_id):
await self.auth_handler.add_threepid(
user_id, threepid["medium"], threepid["address"], current_time
)
if (
self.hs.config.email_enable_notifs
and self.hs.config.email_notif_for_new_users
):
await self.pusher_pool.add_pusher(
user_id=user_id,
access_token=None,
kind="email",
app_id="m.email",
app_display_name="Email Notifications",
device_display_name=threepid["address"],
pushkey=threepid["address"],
lang=None, # We don't know a user's language here
data={},
)

if "avatar_url" in body and type(body["avatar_url"]) == str:
await self.profile_handler.set_avatar_url(
Expand Down
75 changes: 75 additions & 0 deletions tests/rest/admin/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,81 @@ def test_create_user(self):
self.assertEqual(False, channel.json_body["is_guest"])
self.assertEqual(False, channel.json_body["deactivated"])

def test_create_user_email_notif_for_new_users(self):
"""
Check that a new regular user is created successfully and
got an email pusher.
"""
self.hs.config.registration_shared_secret = None
self.hs.config.email_enable_notifs = True
self.hs.config.email_notif_for_new_users = True
url = "/_synapse/admin/v2/users/@bob:test"

# Create user
body = json.dumps(
{
"password": "abc123",
"threepids": [{"medium": "email", "address": "[email protected]"}],
}
)

request, channel = self.make_request(
"PUT",
url,
access_token=self.admin_user_tok,
content=body.encode(encoding="utf_8"),
)
self.render(request)

self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
self.assertEqual("@bob:test", channel.json_body["name"])
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
self.assertEqual("[email protected]", channel.json_body["threepids"][0]["address"])

pushers = self.get_success(
self.store.get_pushers_by({"user_name": "@bob:test"})
)
pushers = list(pushers)
self.assertEqual(len(pushers), 1)
self.assertEqual("@bob:test", pushers[0]["user_name"])

def test_create_user_email_no_notif_for_new_users(self):
"""
Check that a new regular user is created successfully and
got not an email pusher.
"""
self.hs.config.registration_shared_secret = None
self.hs.config.email_enable_notifs = False
self.hs.config.email_notif_for_new_users = False
url = "/_synapse/admin/v2/users/@bob:test"

# Create user
body = json.dumps(
{
"password": "abc123",
"threepids": [{"medium": "email", "address": "[email protected]"}],
}
)

request, channel = self.make_request(
"PUT",
url,
access_token=self.admin_user_tok,
content=body.encode(encoding="utf_8"),
)
self.render(request)

self.assertEqual(201, int(channel.result["code"]), msg=channel.result["body"])
self.assertEqual("@bob:test", channel.json_body["name"])
self.assertEqual("email", channel.json_body["threepids"][0]["medium"])
self.assertEqual("[email protected]", channel.json_body["threepids"][0]["address"])

pushers = self.get_success(
self.store.get_pushers_by({"user_name": "@bob:test"})
)
pushers = list(pushers)
self.assertEqual(len(pushers), 0)

def test_set_password(self):
"""
Test setting a new password for another user.
Expand Down

0 comments on commit 94d5f1a

Please sign in to comment.