예제 #1
0
    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)
예제 #2
0
    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)