Fallback if 'approved' isn't included in a registration replication request (#14135)

This commit is contained in:
Brendan Abolivier 2022-10-11 14:41:06 +02:00 committed by GitHub
parent d94bcbced3
commit 422cff7df6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

1
changelog.d/14135.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a bug introduced in Synapse 1.69.0rc1 which would cause registration replication requests to fail if the worker sending the request is not running Synapse 1.69.

View File

@ -39,6 +39,16 @@ class ReplicationRegisterServlet(ReplicationEndpoint):
self.store = hs.get_datastores().main self.store = hs.get_datastores().main
self.registration_handler = hs.get_registration_handler() self.registration_handler = hs.get_registration_handler()
# Default value if the worker that sent the replication request did not include
# an 'approved' property.
if (
hs.config.experimental.msc3866.enabled
and hs.config.experimental.msc3866.require_approval_for_new_accounts
):
self._approval_default = False
else:
self._approval_default = True
@staticmethod @staticmethod
async def _serialize_payload( # type: ignore[override] async def _serialize_payload( # type: ignore[override]
user_id: str, user_id: str,
@ -92,6 +102,12 @@ class ReplicationRegisterServlet(ReplicationEndpoint):
await self.registration_handler.check_registration_ratelimit(content["address"]) await self.registration_handler.check_registration_ratelimit(content["address"])
# Always default admin users to approved (since it means they were created by
# an admin).
approved_default = self._approval_default
if content["admin"]:
approved_default = True
await self.registration_handler.register_with_store( await self.registration_handler.register_with_store(
user_id=user_id, user_id=user_id,
password_hash=content["password_hash"], password_hash=content["password_hash"],
@ -103,7 +119,7 @@ class ReplicationRegisterServlet(ReplicationEndpoint):
user_type=content["user_type"], user_type=content["user_type"],
address=content["address"], address=content["address"],
shadow_banned=content["shadow_banned"], shadow_banned=content["shadow_banned"],
approved=content["approved"], approved=content.get("approved", approved_default),
) )
return 200, {} return 200, {}