mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2025-01-23 11:31:00 -05:00
Ensure emails are canonicalized before fetching associated user. (#11547)
This should fix pushers with an email in non-canonical form is used as the pushkey.
This commit is contained in:
parent
3b8872299a
commit
9562f0c2f1
1
changelog.d/11547.bugfix
Normal file
1
changelog.d/11547.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fix a bug introduced in Synapse 1.17.0 where a pusher created for an email with capital letters would fail to be created.
|
@ -27,6 +27,7 @@ from synapse.push.pusher import PusherFactory
|
|||||||
from synapse.replication.http.push import ReplicationRemovePusherRestServlet
|
from synapse.replication.http.push import ReplicationRemovePusherRestServlet
|
||||||
from synapse.types import JsonDict, RoomStreamToken
|
from synapse.types import JsonDict, RoomStreamToken
|
||||||
from synapse.util.async_helpers import concurrently_execute
|
from synapse.util.async_helpers import concurrently_execute
|
||||||
|
from synapse.util.threepids import canonicalise_email
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
@ -113,7 +114,9 @@ class PusherPool:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if kind == "email":
|
if kind == "email":
|
||||||
email_owner = await self.store.get_user_id_by_threepid("email", pushkey)
|
email_owner = await self.store.get_user_id_by_threepid(
|
||||||
|
"email", canonicalise_email(pushkey)
|
||||||
|
)
|
||||||
if email_owner != user_id:
|
if email_owner != user_id:
|
||||||
raise SynapseError(400, "Email not found", Codes.THREEPID_NOT_FOUND)
|
raise SynapseError(400, "Email not found", Codes.THREEPID_NOT_FOUND)
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ from synapse.metrics.background_process_metrics import wrap_as_background_proces
|
|||||||
from synapse.storage._base import SQLBaseStore
|
from synapse.storage._base import SQLBaseStore
|
||||||
from synapse.storage.database import DatabasePool, make_in_list_sql_clause
|
from synapse.storage.database import DatabasePool, make_in_list_sql_clause
|
||||||
from synapse.util.caches.descriptors import cached
|
from synapse.util.caches.descriptors import cached
|
||||||
|
from synapse.util.threepids import canonicalise_email
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
@ -103,7 +104,7 @@ class MonthlyActiveUsersWorkerStore(SQLBaseStore):
|
|||||||
: self.hs.config.server.max_mau_value
|
: self.hs.config.server.max_mau_value
|
||||||
]:
|
]:
|
||||||
user_id = await self.hs.get_datastore().get_user_id_by_threepid(
|
user_id = await self.hs.get_datastore().get_user_id_by_threepid(
|
||||||
tp["medium"], tp["address"]
|
tp["medium"], canonicalise_email(tp["address"])
|
||||||
)
|
)
|
||||||
if user_id:
|
if user_id:
|
||||||
users.append(user_id)
|
users.append(user_id)
|
||||||
|
@ -856,7 +856,8 @@ class RegistrationWorkerStore(CacheInvalidationWorkerStore):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
medium: threepid medium e.g. email
|
medium: threepid medium e.g. email
|
||||||
address: threepid address e.g. me@example.com
|
address: threepid address e.g. me@example.com. This must already be
|
||||||
|
in canonical form.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The user ID or None if no user id/threepid mapping exists
|
The user ID or None if no user id/threepid mapping exists
|
||||||
|
@ -1550,7 +1550,8 @@ class UserRestTestCase(unittest.HomeserverTestCase):
|
|||||||
# Create user
|
# Create user
|
||||||
body = {
|
body = {
|
||||||
"password": "abc123",
|
"password": "abc123",
|
||||||
"threepids": [{"medium": "email", "address": "bob@bob.bob"}],
|
# Note that the given email is not in canonical form.
|
||||||
|
"threepids": [{"medium": "email", "address": "Bob@bob.bob"}],
|
||||||
}
|
}
|
||||||
|
|
||||||
channel = self.make_request(
|
channel = self.make_request(
|
||||||
|
Loading…
Reference in New Issue
Block a user