def validate_me_on_server(self, recursive_retry=False): client_nonce = uuid.uuid4().hex client_device = Device.get_own_device() r = self.post( "session/create", { "client_nonce": client_nonce, "client_device": client_device.pk, "client_version": client_device.get_version(), "client_os": kalite.OS, }) raw_data = r.content try: data = json.loads(raw_data) except ValueError as e: z = re.search(r'exception_value">([^<]+)<', unicode(raw_data), re.MULTILINE) if z: raise Exception("Could not load JSON\n; server error=%s" % z.group(1)) else: raise Exception("Could not load JSON\n; raw content=%s" % raw_data) # Happens if the server reports an error if data.get("error"): # This happens when a device points to a new central server, # either because it changed, or because it self-registered. if not recursive_retry and "Client device matching id could not be found." in data[ "error"]: resp = RegistrationClient().register(prove_self=True) if resp.get("error"): raise Exception( "Error [code=%s]: %s" % (resp.get("code", ""), resp.get("error", ""))) elif resp.get("code") != "registered": raise Exception("Unexpected code: '%s'" % resp.get("code", "")) # We seem to have succeeded registering through prove_self; # let's try to validate again (but without retrying again, lest we loop forever!) return self.validate_me_on_server(recursive_retry=True) raise Exception(data.get("error", "")) return (client_nonce, client_device, data)
def validate_me_on_server(self, recursive_retry=False): client_nonce = uuid.uuid4().hex client_device = Device.get_own_device() r = self.post("session/create", { "client_nonce": client_nonce, "client_device": client_device.pk, "client_version": client_device.get_version(), "client_os": get_os_name(), }) raw_data = r.content try: data = json.loads(raw_data) except ValueError as e: z = re.search(r'exception_value">([^<]+)<', unicode(raw_data), re.MULTILINE) if z: raise Exception("Could not load JSON\n; server error=%s" % z.group(1)) else: raise Exception("Could not load JSON\n; raw content=%s" % raw_data) # Happens if the server reports an error if data.get("error"): # This happens when a device points to a new central server, # either because it changed, or because it self-registered. if not recursive_retry and "Client device matching id could not be found." in data["error"]: resp = RegistrationClient().register(prove_self=True) if resp.get("error"): raise Exception("Error [code=%s]: %s" % (resp.get("code",""), resp.get("error",""))) elif resp.get("code") != "registered": raise Exception("Unexpected code: '%s'" % resp.get("code","")) # We seem to have succeeded registering through prove_self; # let's try to validate again (but without retrying again, lest we loop forever!) return self.validate_me_on_server(recursive_retry=True) raise Exception(data.get("error", "")) return (client_nonce, client_device, data)