def test_backend_organization_claim_device_addr_good(organization_addr, device_id, token): addr = BackendOrganizationClaimDeviceAddr.build(organization_addr, device_id, token) assert addr.hostname == organization_addr.hostname assert addr.port == organization_addr.port assert addr.use_ssl == organization_addr.use_ssl assert addr.organization_id == organization_addr.organization_id assert addr.root_verify_key == organization_addr.root_verify_key assert isinstance(addr.device_id, DeviceID) assert addr.device_id == device_id assert addr.token == token addr2 = BackendOrganizationClaimDeviceAddr.from_url(addr.to_url()) assert isinstance(addr2.device_id, DeviceID) assert addr == addr2
def register_device(self): if not self.line_edit_device_name.text(): show_error(self, _("TEXT_INVITE_DEVICE_EMPTY_DEVICE_NAME")) return try: new_device_id = DeviceID( f"{self.core.device.user_id}@{self.line_edit_device_name.text()}" ) except ValueError as exc: show_error(self, _("TEXT_INVITE_DEVICE_BAD_DEVICE_NAME"), exception=exc) return token = core_generate_invitation_token() try: addr = BackendOrganizationClaimDeviceAddr.build( self.core.device.organization_addr, device_id=new_device_id) except ValueError as exc: show_error(self, _("TEXT_INVITE_DEVICE_WRONG_PARAMETERS"), exception=exc) return self.line_edit_device.setText(new_device_id.device_name) self.line_edit_device.setCursorPosition(0) self.line_edit_token.setText(token) self.line_edit_token.setCursorPosition(0) self.line_edit_url.setText(addr.to_url()) self.line_edit_url.setCursorPosition(0) self.widget_registration.show() self.registration_job = self.jobs_ctx.submit_job( ThreadSafeQtSignal(self, "registration_success"), ThreadSafeQtSignal(self, "registration_error"), _do_registration, core=self.core, device=self.core.device, new_device_name=new_device_id.device_name, token=token, ) self.line_edit_device_name.hide() self.button_register.hide()
async def _invite_device(config, device, new_device_name): action_addr = BackendOrganizationClaimDeviceAddr.build( organization_addr=device.organization_addr, device_id=DeviceID(f"{device.user_id}@{new_device_name}"), ) token = generate_invitation_token() action_addr_display = click.style(action_addr.to_url(), fg="yellow") token_display = click.style(token, fg="yellow") click.echo(f"url: {action_addr_display}") click.echo(f"token: {token_display}") async with spinner("Waiting for invitation reply"): await invite_and_create_device( device=device, new_device_name=new_device_name, token=token, keepalive=config.backend_connection_keepalive, ) display_device = click.style(f"{device.device_name}@{new_device_name}", fg="yellow") click.echo(f"Device {display_device} is ready !")
async def alice_invite(running_backend, backend, alice): device_id = DeviceID(f"{alice.user_id}@pc1") # Modify address subdomain to be able to switch it offline whithout # disconnecting the inviter organization_addr = addr_with_device_subdomain(alice.organization_addr, device_id) invitation = { "addr": BackendOrganizationClaimDeviceAddr.build(organization_addr, device_id, "123456"), "token": "123456", "user_id": device_id.user_id, "device_name": device_id.device_name, "password": "******", } async def _invite(): await invite_and_create_device(alice, invitation["device_name"], invitation["token"]) async with trio.open_service_nursery() as nursery: with backend.event_bus.listen() as spy: nursery.start_soon(_invite) await spy.wait_with_timeout("event.connected", {"event_name": "device.claimed"}) yield invitation nursery.cancel_scope.cancel()