Beispiel #1
0
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()
Beispiel #3
0
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()