diff --git a/cmdclient/console.py b/cmdclient/console.py
index a4d8145d72..7bda4000fc 100755
--- a/cmdclient/console.py
+++ b/cmdclient/console.py
@@ -225,8 +225,13 @@ class SynapseCmd(cmd.Cmd):
json_res = yield self.http_client.do_request("GET", url)
print json_res
- if ("type" not in json_res or "m.login.password" != json_res["type"] or
- "stages" in json_res):
+ if "flows" not in json_res:
+ print "Failed to find any login flows."
+ defer.returnValue(False)
+
+ flow = json_res["flows"][0] # assume first is the one we want.
+ if ("type" not in flow or "m.login.password" != flow["type"] or
+ "stages" in flow):
fallback_url = self._url() + "/login/fallback"
print ("Unable to login via the command line client. Please visit "
"%s to login." % fallback_url)
diff --git a/docs/specification.rst b/docs/specification.rst
index 8df5d478a1..30e4a7a3fb 100644
--- a/docs/specification.rst
+++ b/docs/specification.rst
@@ -230,19 +230,21 @@ with all the valid login flows when requested::
The client can login via 3 paths: 1a and 1b, 2a and 2b, or 3. The client should
select one of these paths.
- [
- {
- "type": "<login type1a>",
- "stages": [ "<login type 1a>", "<login type 1b>" ]
- },
- {
- "type": "<login type2a>",
- "stages": [ "<login type 2a>", "<login type 2b>" ]
- },
- {
- "type": "<login type3>"
- }
- ]
+ {
+ "flows": [
+ {
+ "type": "<login type1a>",
+ "stages": [ "<login type 1a>", "<login type 1b>" ]
+ },
+ {
+ "type": "<login type2a>",
+ "stages": [ "<login type 2a>", "<login type 2b>" ]
+ },
+ {
+ "type": "<login type3>"
+ }
+ ]
+ }
After the login is completed, the client's fully-qualified user ID and a new access
token MUST be returned::
diff --git a/synapse/rest/login.py b/synapse/rest/login.py
index bcf63fd2ab..99e4f10aac 100644
--- a/synapse/rest/login.py
+++ b/synapse/rest/login.py
@@ -27,7 +27,7 @@ class LoginRestServlet(RestServlet):
PASS_TYPE = "m.login.password"
def on_GET(self, request):
- return (200, {"type": LoginRestServlet.PASS_TYPE})
+ return (200, {"flows": [{"type": LoginRestServlet.PASS_TYPE}]})
def on_OPTIONS(self, request):
return (200, {})
|