def register_public_key_client(request): own_device = Device.get_own_device() if own_device.get_zone(): set_as_registered() return {"already_registered": True} client = RegistrationClient() if client.test_connection() != "success": return {"no_internet": True} reg_response = client.register() reg_status = reg_response.get("code") if reg_status == "registered": set_as_registered() return {"newly_registered": True} if reg_status == "device_already_registered": set_as_registered() return {"already_registered": True} if reg_status == "public_key_unregistered": return { "unregistered": True, "registration_url": client.path_to_url( reverse("register_public_key") + "?" + urllib.quote(own_device.public_key)), "central_login_url": "%s://%s/accounts/login" % (settings.SECURESYNC_PROTOCOL, settings.CENTRAL_SERVER_HOST), "callback_url": request.build_absolute_uri(reverse("register_public_key")), } error_msg = reg_response.get("error", "") if error_msg: return {"error_msg": error_msg} return HttpResponse(_("Registration status: ") + reg_status)
def register_public_key_client(request): own_device = Device.get_own_device() if own_device.get_zone(): set_as_registered() return {"already_registered": True} client = RegistrationClient() if client.test_connection() != "success": return {"no_internet": True} reg_response = client.register() reg_status = reg_response.get("code") if reg_status == "registered": set_as_registered() return {"newly_registered": True} if reg_status == "device_already_registered": set_as_registered() return {"already_registered": True} if reg_status == "public_key_unregistered": # Callback url used to redirect to the distributed server url # after successful registration on the central server. return { "unregistered": True, "registration_url": client.path_to_url( reverse("register_public_key") + "?" + urllib.quote(own_device.public_key) ), "central_login_url": "%s://%s/accounts/login" % (settings.SECURESYNC_PROTOCOL, settings.CENTRAL_SERVER_HOST), "callback_url": request.build_absolute_uri(reverse("register_public_key")), } error_msg = reg_response.get("error", "") if error_msg: return {"error_msg": error_msg} return HttpResponse(_("Registration status: ") + reg_status)
def register_public_key_client(request): own_device = Device.get_own_device() if own_device.is_registered(): initialize_registration() if request.next: return HttpResponseRedirect(request.next) else: return {"already_registered": True} client = RegistrationClient() if client.test_connection() != "success": return {"no_internet": True} reg_response = client.register() reg_status = reg_response.get("code") if reg_status == "registered": initialize_registration() if request.next: return HttpResponseRedirect(request.next) else: return {"newly_registered": True} elif reg_status == "device_already_registered": initialize_registration() if request.next: return HttpResponseRedirect(request.next) else: return {"already_registered": True} elif reg_status == "public_key_unregistered": # Callback url used to redirect to the distributed server url # after successful registration on the central server. base_registration_url = client.path_to_url( set_query_params(reverse("register_public_key"), { "device_key": urllib.quote(own_device.public_key), })) return { "unregistered": True, "auto_registration_url": set_query_params(base_registration_url, {"auto": True}), "classic_registration_url": set_query_params( base_registration_url, { "callback_url": request.build_absolute_uri(reverse("register_public_key")), }), "central_login_url": "%s://%s/accounts/login" % (settings.SECURESYNC_PROTOCOL, settings.CENTRAL_SERVER_HOST), } error_msg = reg_response.get("error", "") if error_msg: return {"error_msg": error_msg} return HttpResponse(_("Registration status: ") + reg_status)
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)