Updated cmdclient to use new registration logic.

This commit is contained in:
Kegan Dougal 2014-09-15 15:09:21 +01:00
parent 04fbda46dd
commit 7f23425e59

View File

@ -145,35 +145,50 @@ class SynapseCmd(cmd.Cmd):
<noupdate> : Do not automatically clobber config values. <noupdate> : Do not automatically clobber config values.
""" """
args = self._parse(line, ["userid", "noupdate"]) args = self._parse(line, ["userid", "noupdate"])
path = "/register"
password = None password = None
pwd = None pwd = None
pwd2 = "_" pwd2 = "_"
while pwd != pwd2: while pwd != pwd2:
pwd = getpass.getpass("(Optional) Type a password for this user: ") pwd = getpass.getpass("Type a password for this user: ")
if len(pwd) == 0:
print "Not using a password for this user."
break
pwd2 = getpass.getpass("Retype the password: ") pwd2 = getpass.getpass("Retype the password: ")
if pwd != pwd2: if pwd != pwd2 or len(pwd) == 0:
print "Password mismatch." print "Password mismatch."
pwd = None
else: else:
password = pwd password = pwd
body = {} body = {
"type": "m.login.password"
}
if "userid" in args: if "userid" in args:
body["user_id"] = args["userid"] body["user_id"] = args["userid"]
if password: if password:
body["password"] = password body["password"] = password
reactor.callFromThread(self._do_register, "POST", path, body, reactor.callFromThread(self._do_register, body,
"noupdate" not in args) "noupdate" not in args)
@defer.inlineCallbacks @defer.inlineCallbacks
def _do_register(self, method, path, data, update_config): def _do_register(self, data, update_config):
url = self._url() + path # check the registration flows
json_res = yield self.http_client.do_request(method, url, data=data) url = self._url() + "/register"
json_res = yield self.http_client.do_request("GET", url)
print json.dumps(json_res, indent=4)
passwordFlow = None
for flow in json_res["flows"]:
if flow["type"] == "m.login.recaptcha" or ("stages" in flow and "m.login.recaptcha" in flow["stages"]):
print "Unable to register: Home server requires captcha."
return
if flow["type"] == "m.login.password" and "stages" not in flow:
passwordFlow = flow
break
if not passwordFlow:
return
json_res = yield self.http_client.do_request("POST", url, data=data)
print json.dumps(json_res, indent=4) print json.dumps(json_res, indent=4)
if update_config and "user_id" in json_res: if update_config and "user_id" in json_res:
self.config["user"] = json_res["user_id"] self.config["user"] = json_res["user_id"]