diff --git a/synapse/rest/client/v2_alpha/account.py b/synapse/rest/client/v2_alpha/account.py
index dd4ea45588..7f8a6a4cf7 100644
--- a/synapse/rest/client/v2_alpha/account.py
+++ b/synapse/rest/client/v2_alpha/account.py
@@ -43,7 +43,7 @@ class PasswordRestServlet(RestServlet):
body = parse_json_object_from_request(request)
- authed, result, params = yield self.auth_handler.check_auth([
+ authed, result, params, _ = yield self.auth_handler.check_auth([
[LoginType.PASSWORD],
[LoginType.EMAIL_IDENTITY]
], body, self.hs.get_ip_from_request(request))
diff --git a/synapse/rest/client/v2_alpha/register.py b/synapse/rest/client/v2_alpha/register.py
index 533ff136eb..c440430e25 100644
--- a/synapse/rest/client/v2_alpha/register.py
+++ b/synapse/rest/client/v2_alpha/register.py
@@ -139,7 +139,7 @@ class RegisterRestServlet(RestServlet):
[LoginType.EMAIL_IDENTITY]
]
- authed, result, params = yield self.auth_handler.check_auth(
+ authed, result, params, session_id = yield self.auth_handler.check_auth(
flows, body, self.hs.get_ip_from_request(request)
)
@@ -147,6 +147,26 @@ class RegisterRestServlet(RestServlet):
defer.returnValue((401, result))
return
+ # have we already registered a user for this session
+ registered_user_id = self.auth_handler.get_session_data(
+ session_id, "registered_user_id", None
+ )
+ if registered_user_id is not None:
+ logger.info(
+ "Already registered user ID %r for this session",
+ registered_user_id
+ )
+ access_token = yield self.auth_handler.issue_access_token(registered_user_id)
+ refresh_token = yield self.auth_handler.issue_refresh_token(
+ registered_user_id
+ )
+ defer.returnValue((200, {
+ "user_id": registered_user_id,
+ "access_token": access_token,
+ "home_server": self.hs.hostname,
+ "refresh_token": refresh_token,
+ }))
+
# NB: This may be from the auth handler and NOT from the POST
if 'password' not in params:
raise SynapseError(400, "Missing password.", Codes.MISSING_PARAM)
@@ -161,6 +181,12 @@ class RegisterRestServlet(RestServlet):
guest_access_token=guest_access_token,
)
+ # remember that we've now registered that user account, and with what
+ # user ID (since the user may not have specified)
+ self.auth_handler.set_session_data(
+ session_id, "registered_user_id", user_id
+ )
+
if result and LoginType.EMAIL_IDENTITY in result:
threepid = result[LoginType.EMAIL_IDENTITY]
|