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

Commit 04f5d2d

Browse files
authored
Remove v1/register's broken shared secret functionality (#3703)
1 parent 6326039 commit 04f5d2d

File tree

2 files changed

+1
-54
lines changed

2 files changed

+1
-54
lines changed

changelog.d/3703.removal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
The Shared-Secret registration method of the legacy v1/register REST endpoint has been removed. For a replacement, please see [the admin/register API documentation](https://github.com/matrix-org/synapse/blob/master/docs/admin_api/register_api.rst).

synapse/rest/client/v1_only/register.py

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,9 @@ def on_POST(self, request):
129129
login_type = register_json["type"]
130130

131131
is_application_server = login_type == LoginType.APPLICATION_SERVICE
132-
is_using_shared_secret = login_type == LoginType.SHARED_SECRET
133-
134132
can_register = (
135133
self.enable_registration
136134
or is_application_server
137-
or is_using_shared_secret
138135
)
139136
if not can_register:
140137
raise SynapseError(403, "Registration has been disabled")
@@ -144,7 +141,6 @@ def on_POST(self, request):
144141
LoginType.PASSWORD: self._do_password,
145142
LoginType.EMAIL_IDENTITY: self._do_email_identity,
146143
LoginType.APPLICATION_SERVICE: self._do_app_service,
147-
LoginType.SHARED_SECRET: self._do_shared_secret,
148144
}
149145

150146
session_info = self._get_session_info(request, session)
@@ -325,56 +321,6 @@ def _do_app_service(self, request, register_json, session):
325321
"home_server": self.hs.hostname,
326322
})
327323

328-
@defer.inlineCallbacks
329-
def _do_shared_secret(self, request, register_json, session):
330-
assert_params_in_dict(register_json, ["mac", "user", "password"])
331-
332-
if not self.hs.config.registration_shared_secret:
333-
raise SynapseError(400, "Shared secret registration is not enabled")
334-
335-
user = register_json["user"].encode("utf-8")
336-
password = register_json["password"].encode("utf-8")
337-
admin = register_json.get("admin", None)
338-
339-
# Its important to check as we use null bytes as HMAC field separators
340-
if b"\x00" in user:
341-
raise SynapseError(400, "Invalid user")
342-
if b"\x00" in password:
343-
raise SynapseError(400, "Invalid password")
344-
345-
# str() because otherwise hmac complains that 'unicode' does not
346-
# have the buffer interface
347-
got_mac = str(register_json["mac"])
348-
349-
want_mac = hmac.new(
350-
key=self.hs.config.registration_shared_secret.encode(),
351-
digestmod=sha1,
352-
)
353-
want_mac.update(user)
354-
want_mac.update(b"\x00")
355-
want_mac.update(password)
356-
want_mac.update(b"\x00")
357-
want_mac.update(b"admin" if admin else b"notadmin")
358-
want_mac = want_mac.hexdigest()
359-
360-
if compare_digest(want_mac, got_mac):
361-
handler = self.handlers.registration_handler
362-
user_id, token = yield handler.register(
363-
localpart=user.lower(),
364-
password=password,
365-
admin=bool(admin),
366-
)
367-
self._remove_session(session)
368-
defer.returnValue({
369-
"user_id": user_id,
370-
"access_token": token,
371-
"home_server": self.hs.hostname,
372-
})
373-
else:
374-
raise SynapseError(
375-
403, "HMAC incorrect",
376-
)
377-
378324

379325
class CreateUserRestServlet(ClientV1RestServlet):
380326
"""Handles user creation via a server-to-server interface

0 commit comments

Comments
 (0)