diff --git a/synapse/rest/client/v1/base.py b/synapse/rest/client/v1/base.py
index 1c020b7e2c..96b49b01f2 100644
--- a/synapse/rest/client/v1/base.py
+++ b/synapse/rest/client/v1/base.py
@@ -52,6 +52,10 @@ class ClientV1RestServlet(RestServlet):
"""
def __init__(self, hs):
+ """
+ Args:
+ hs (synapse.server.HomeServer):
+ """
self.hs = hs
self.handlers = hs.get_handlers()
self.builder_factory = hs.get_event_builder_factory()
diff --git a/synapse/rest/client/v1/register.py b/synapse/rest/client/v1/register.py
index 8e1f1b7845..2383b9df86 100644
--- a/synapse/rest/client/v1/register.py
+++ b/synapse/rest/client/v1/register.py
@@ -52,6 +52,10 @@ class RegisterRestServlet(ClientV1RestServlet):
PATTERNS = client_path_patterns("/register$", releases=(), include_in_unstable=False)
def __init__(self, hs):
+ """
+ Args:
+ hs (synapse.server.HomeServer): server
+ """
super(RegisterRestServlet, self).__init__(hs)
# sessions are stored as:
# self.sessions = {
@@ -60,6 +64,7 @@ class RegisterRestServlet(ClientV1RestServlet):
# TODO: persistent storage
self.sessions = {}
self.enable_registration = hs.config.enable_registration
+ self.auth_handler = hs.get_auth_handler()
def on_GET(self, request):
if self.hs.config.enable_registration_captcha:
@@ -299,9 +304,10 @@ class RegisterRestServlet(ClientV1RestServlet):
user_localpart = register_json["user"].encode("utf-8")
handler = self.handlers.registration_handler
- (user_id, token) = yield handler.appservice_register(
+ user_id = yield handler.appservice_register(
user_localpart, as_token
)
+ token = yield self.auth_handler.issue_access_token(user_id)
self._remove_session(session)
defer.returnValue({
"user_id": user_id,
diff --git a/synapse/rest/client/v2_alpha/register.py b/synapse/rest/client/v2_alpha/register.py
index 5db953a1e3..b7e03ea9d1 100644
--- a/synapse/rest/client/v2_alpha/register.py
+++ b/synapse/rest/client/v2_alpha/register.py
@@ -45,6 +45,10 @@ class RegisterRequestTokenRestServlet(RestServlet):
PATTERNS = client_v2_patterns("/register/email/requestToken$")
def __init__(self, hs):
+ """
+ Args:
+ hs (synapse.server.HomeServer): server
+ """
super(RegisterRequestTokenRestServlet, self).__init__()
self.hs = hs
self.identity_handler = hs.get_handlers().identity_handler
@@ -77,7 +81,12 @@ class RegisterRestServlet(RestServlet):
PATTERNS = client_v2_patterns("/register$")
def __init__(self, hs):
+ """
+ Args:
+ hs (synapse.server.HomeServer): server
+ """
super(RegisterRestServlet, self).__init__()
+
self.hs = hs
self.auth = hs.get_auth()
self.store = hs.get_datastore()
@@ -226,19 +235,17 @@ class RegisterRestServlet(RestServlet):
add_email = True
- access_token = yield self.auth_handler.issue_access_token(
+ result = yield self._create_registration_details(
registered_user_id
)
if add_email and result and LoginType.EMAIL_IDENTITY in result:
threepid = result[LoginType.EMAIL_IDENTITY]
yield self._register_email_threepid(
- registered_user_id, threepid, access_token,
+ registered_user_id, threepid, result["access_token"],
params.get("bind_email")
)
- result = yield self._create_registration_details(registered_user_id,
- access_token)
defer.returnValue((200, result))
def on_OPTIONS(self, _):
@@ -246,10 +253,10 @@ class RegisterRestServlet(RestServlet):
@defer.inlineCallbacks
def _do_appservice_registration(self, username, as_token):
- (user_id, token) = yield self.registration_handler.appservice_register(
+ user_id = yield self.registration_handler.appservice_register(
username, as_token
)
- defer.returnValue((yield self._create_registration_details(user_id, token)))
+ defer.returnValue((yield self._create_registration_details(user_id)))
@defer.inlineCallbacks
def _do_shared_secret_registration(self, username, password, mac):
@@ -273,10 +280,12 @@ class RegisterRestServlet(RestServlet):
403, "HMAC incorrect",
)
- (user_id, token) = yield self.registration_handler.register(
- localpart=username, password=password
+ (user_id, _) = yield self.registration_handler.register(
+ localpart=username, password=password, generate_token=False,
)
- defer.returnValue((yield self._create_registration_details(user_id, token)))
+
+ result = yield self._create_registration_details(user_id)
+ defer.returnValue(result)
@defer.inlineCallbacks
def _register_email_threepid(self, user_id, threepid, token, bind_email):
@@ -349,11 +358,31 @@ class RegisterRestServlet(RestServlet):
defer.returnValue()
@defer.inlineCallbacks
- def _create_registration_details(self, user_id, token):
- refresh_token = yield self.auth_handler.issue_refresh_token(user_id)
+ def _create_registration_details(self, user_id):
+ """Complete registration of newly-registered user
+
+ Issues access_token and refresh_token, and builds the success response
+ body.
+
+ Args:
+ (str) user_id: full canonical @user:id
+
+
+ Returns:
+ defer.Deferred: (object) dictionary for response from /register
+ """
+
+ access_token = yield self.auth_handler.issue_access_token(
+ user_id
+ )
+
+ refresh_token = yield self.auth_handler.issue_refresh_token(
+ user_id
+ )
+
defer.returnValue({
"user_id": user_id,
- "access_token": token,
+ "access_token": access_token,
"home_server": self.hs.hostname,
"refresh_token": refresh_token,
})
@@ -366,7 +395,11 @@ class RegisterRestServlet(RestServlet):
generate_token=False,
make_guest=True
)
- access_token = self.auth_handler.generate_access_token(user_id, ["guest = true"])
+ access_token = self.auth_handler.generate_access_token(
+ user_id, ["guest = true"]
+ )
+ # XXX the "guest" caveat is not copied by /tokenrefresh. That's ok
+ # so long as we don't return a refresh_token here.
defer.returnValue((200, {
"user_id": user_id,
"access_token": access_token,
|