Remove v1/register's broken shared secret functionality (#3703)
This commit is contained in:
parent
63260397c6
commit
04f5d2db62
|
@ -0,0 +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).
|
|
@ -129,12 +129,9 @@ class RegisterRestServlet(ClientV1RestServlet):
|
||||||
login_type = register_json["type"]
|
login_type = register_json["type"]
|
||||||
|
|
||||||
is_application_server = login_type == LoginType.APPLICATION_SERVICE
|
is_application_server = login_type == LoginType.APPLICATION_SERVICE
|
||||||
is_using_shared_secret = login_type == LoginType.SHARED_SECRET
|
|
||||||
|
|
||||||
can_register = (
|
can_register = (
|
||||||
self.enable_registration
|
self.enable_registration
|
||||||
or is_application_server
|
or is_application_server
|
||||||
or is_using_shared_secret
|
|
||||||
)
|
)
|
||||||
if not can_register:
|
if not can_register:
|
||||||
raise SynapseError(403, "Registration has been disabled")
|
raise SynapseError(403, "Registration has been disabled")
|
||||||
|
@ -144,7 +141,6 @@ class RegisterRestServlet(ClientV1RestServlet):
|
||||||
LoginType.PASSWORD: self._do_password,
|
LoginType.PASSWORD: self._do_password,
|
||||||
LoginType.EMAIL_IDENTITY: self._do_email_identity,
|
LoginType.EMAIL_IDENTITY: self._do_email_identity,
|
||||||
LoginType.APPLICATION_SERVICE: self._do_app_service,
|
LoginType.APPLICATION_SERVICE: self._do_app_service,
|
||||||
LoginType.SHARED_SECRET: self._do_shared_secret,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
session_info = self._get_session_info(request, session)
|
session_info = self._get_session_info(request, session)
|
||||||
|
@ -325,56 +321,6 @@ class RegisterRestServlet(ClientV1RestServlet):
|
||||||
"home_server": self.hs.hostname,
|
"home_server": self.hs.hostname,
|
||||||
})
|
})
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
|
||||||
def _do_shared_secret(self, request, register_json, session):
|
|
||||||
assert_params_in_dict(register_json, ["mac", "user", "password"])
|
|
||||||
|
|
||||||
if not self.hs.config.registration_shared_secret:
|
|
||||||
raise SynapseError(400, "Shared secret registration is not enabled")
|
|
||||||
|
|
||||||
user = register_json["user"].encode("utf-8")
|
|
||||||
password = register_json["password"].encode("utf-8")
|
|
||||||
admin = register_json.get("admin", None)
|
|
||||||
|
|
||||||
# Its important to check as we use null bytes as HMAC field separators
|
|
||||||
if b"\x00" in user:
|
|
||||||
raise SynapseError(400, "Invalid user")
|
|
||||||
if b"\x00" in password:
|
|
||||||
raise SynapseError(400, "Invalid password")
|
|
||||||
|
|
||||||
# str() because otherwise hmac complains that 'unicode' does not
|
|
||||||
# have the buffer interface
|
|
||||||
got_mac = str(register_json["mac"])
|
|
||||||
|
|
||||||
want_mac = hmac.new(
|
|
||||||
key=self.hs.config.registration_shared_secret.encode(),
|
|
||||||
digestmod=sha1,
|
|
||||||
)
|
|
||||||
want_mac.update(user)
|
|
||||||
want_mac.update(b"\x00")
|
|
||||||
want_mac.update(password)
|
|
||||||
want_mac.update(b"\x00")
|
|
||||||
want_mac.update(b"admin" if admin else b"notadmin")
|
|
||||||
want_mac = want_mac.hexdigest()
|
|
||||||
|
|
||||||
if compare_digest(want_mac, got_mac):
|
|
||||||
handler = self.handlers.registration_handler
|
|
||||||
user_id, token = yield handler.register(
|
|
||||||
localpart=user.lower(),
|
|
||||||
password=password,
|
|
||||||
admin=bool(admin),
|
|
||||||
)
|
|
||||||
self._remove_session(session)
|
|
||||||
defer.returnValue({
|
|
||||||
"user_id": user_id,
|
|
||||||
"access_token": token,
|
|
||||||
"home_server": self.hs.hostname,
|
|
||||||
})
|
|
||||||
else:
|
|
||||||
raise SynapseError(
|
|
||||||
403, "HMAC incorrect",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class CreateUserRestServlet(ClientV1RestServlet):
|
class CreateUserRestServlet(ClientV1RestServlet):
|
||||||
"""Handles user creation via a server-to-server interface
|
"""Handles user creation via a server-to-server interface
|
||||||
|
|
Loading…
Reference in New Issue