Jami
  • Setup Jami
    • Download and install Jami
      • Jami for Android
      • Jami for GNU/Linux
      • Jami for iOS
      • Jami for macOS
      • Jami for Windows
      • Jami for servers
      • Jami for Web
    • Accounts
    • Add yourself
    • Link devices
    • Back up JAMI protocol accounts
    • Jami extensions
      • Jami extensions for Android
      • Jami extensions for Desktop
      • Jami extensions for iOS
      • Jami extensions for Web
  • Media
    • Safe software
    • Press releases
      • February 22, 2019
  • Videos
    • This is Jami
      • Let’s talk freely with Jami
      • How to talk privately with Jami
    • Jami for professionals
      • How can professionals communicate privately with their clients?
    • Jami for education
      • How can teachers communicate securely online with their students?
    • Jami for Windows
      • How to install Jami on Windows
    • Jami for macOS
      • How to create a Jami account on macOS
    • Jami for Android
      • How to create a Jami account on Android
    • Jami for Android TV
      • Use Jami on Android TV
    • JAMS (Jami Account Management Server)
      • Install JAMS on a server using Ubuntu 20.04 on a Digital Ocean Droplet
    • Tips
      • Why back up your Jami account?
      • How to share your ID on Android and iOS with other users (short version)
      • How to share your ID on Android and iOS with other users (long version)
      • How to configure biometric authentication for new accounts on Android
  • Recommendations
    • ar-AE العربية (الإمارات العربية المتحدة)
    • de-AT Deutsch (Österreich)
    • de-CH Deutsch (Schweiz)
    • de-DE Deutsch (Deutschland)
    • en-AU English (Australia)
    • en-CA English (Canada)
    • en-CH English (Switzerland)
    • en-DE English (Germany)
    • en-EC English (Ecuador)
    • en-GB English (United Kingdom)
    • en-ID English (Indonesia)
    • en-IN English (India)
    • en-IS English (Iceland)
    • en-KN English (Saint Kitts and Nevis)
    • en-SE English (Sweden)
    • en-US English (United States)
    • es-ES español (españa)
    • es-US español (estados unidos)
    • fr-BE Français (Belgique)
    • fr-CA Français (Canada)
    • fr-FR Français (France)
    • hi-IN हिंदी (भारत)
    • hu-HU magyar (Magyarország)
    • ko-KR 한국어(한국)
    • nl-NL Nederlands (Nederland)
    • pl-PL polski (Polska)
    • pt-BR Português (Brasil)
    • ru-RU Русский (Россия)
    • sv-SE svenska (Sverige)
    • tr-TR Türkçe (Türkiye)
    • vi-VN Tiếng Việt (Việt Nam)
    • zh-CN 中文(簡體,中國)
    • zh-TW 中文(繁體,台灣)
    • zh-US 中文(簡體,美國)
  • Manual de usuario
    • Introducción
      • ¿Cómo funciona Jami?
      • ¿Quién hace a Jami?
    • Crear una cuenta en Jami
      • Android
      • iOS
      • macOS
      • Las ventanas
    • Redes distribuidas de Jami
      • Conectividad
      • La red OpenDHT
      • La cadena de bloques JamiNS
    • Todas las características por cliente
      • Leyenda
      • Mensaje de texto
      • Llamando
      • Configuración de la cuenta
      • Otras características
      • Ajustes avanzados
    • Las preguntas frecuentes
      • Principios básicos
      • Gestión de cuentas
      • Avanzado
    • Utilice Jami en una LAN
      • Arranque
      • Servidor TURN
      • En móvil (DHT Proxy)
      • Nombre del servidor
    • Jami para servidores
      • Crear una cuenta de usuario en el servidor
      • Instale el demonio Jami en el servidor
      • Copiar los archivos de configuración de Jami
      • Create a script file to launch Jami on the server
    • Guía para reportes
      • Configurar tu entorno
      • Cómo denunciar un error
      • Escribir un resumen claro
      • Escribir pasos precisos para reproducirse
      • Resultados obtenidos
      • Resultados esperados
      • Proporcionar información adicional
  • JAMS manual
    • Download JAMS manual
    • Additional guides
      • Admin guide
      • Client guide
    • Introduction
      • Obtaining JAMS
      • System requirements
      • JAMS concepts
      • Getting started
      • Step 1: Create an administrator account
      • Step 2: Set up the Certification Authority
      • Step 3: Set up the user database
      • Step 4: Set up the server parameters
    • Private DHT node
  • Manual de compilación
    • Secciones
      • Introducción
      • Dependencias
  • Manual de desarrollo
    • Solicitudes de características
      • FPL
      • Planificado/en desarrollo
      • Deseado pero no planeado
      • Puede implementarse, las contribuciones son bienvenidas (o tardarán meses/años en llegar)
      • Depende de los cambios de masa
      • Envases
      • Otros
    • Nuevos desarrolladores
      • Las API de Jami
      • Estilo de codificación
      • Herramientas de depuración
      • Mejorar la calidad de Jami
      • Estilo de codificación Qt y QML
      • Herramientas de ensayo Qt y QML
      • Envía tu primer parche
      • Trabajar con Gerrit
    • Conceptos de Jami
      • Gestión de cuentas
      • Audio
      • Contactos prohibidos
      • Llamadas
      • Llamadas en el grupo
      • Protocolo de la conferencia
      • El administrador de conexión
      • Gestión de contactos
      • Tabla de enrutamiento dinámico (DRT)
      • Transferencia de archivos
      • Identificadores de Jami
      • Vincular un dispositivo nuevo
      • Nombre Protocolo del servidor
      • El grupo
      • Protocolo de sincronización
      • Sincronización de perfil
    • Más lejos
      • Elegir el valor CRF para el codificador
      • Sincronización del estado de entrega
      • Cómo funciona (backend)
      • API del cliente
      • Notas para el cliente
      • RFCs importantes
      • Localización compartida en el cliente QT
      • El estado del mensaje
      • Configurar su propio servidor TURN
    • Procesos
      • Proceso de diseño
      • Proceso de liberación
  • Extension manual
    • How it works?
      • How to use it?
      • Setup
      • Android
      • Linux/Windows
      • Use!
    • How to build?
      • Dependencies
      • ONNX Runtime 1.6.0
      • Plugin
      • Related articles:
    • Publishing on the Extension Store
      • Publication on the Extension Store
      • How the Extension Store works in Jami Desktop
      • Important: Test locally before publication
      • Add an extension
      • Congratulations, the Jami Extension has been added and is available for Jami users!
    • Requesting publication
      • Extension Store Requests
      • Authorize a new organization
      • Upload a new extension
    • Creating Jami extensions
      • Jami extensions
    • Jami extension certificates
      • Certificates
      • Signature mechanism
      • Certificate chain
      • Certificate constraint
      • Certificate revocation
      • Sign Organization Certificate
      • Examples
    • Extension Store in the Jami client
      • The Extension Store in the Daemon
      • The Extension Store in the Client
      • Extension State
    • TensorFlow extension
      • TensorFlow 2.1.0
  • Contribuir
    • Informe de errores y problemas
    • Código de contribución
    • Pautas de confirmación de mensajes
    • Envasado Jami
    • Contribución a esta documentación
    • Dependencias
    • Cloning del repositorio
    • Editar una página
    • Revisando su trabajo
    • Ahorrar su trabajo
    • Presentación de un cambio
    • Modificar su trabajo
    • Añadir una página
  • GNU Free Documentation License
    • 0. PREAMBLE
    • 1. APPLICABILITY AND DEFINITIONS
    • 2. VERBATIM COPYING
    • 3. COPYING IN QUANTITY
    • 4. MODIFICATIONS
    • 5. COMBINING DOCUMENTS
    • 6. COLLECTIONS OF DOCUMENTS
    • 7. AGGREGATION WITH INDEPENDENT WORKS
    • 8. TRANSLATION
    • 9. TERMINATION
    • 10. FUTURE REVISIONS OF THIS LICENSE
    • 11. RELICENSING
    • ADDENDUM: How to use this License for your documents
Jami
  • Manual de desarrollo
  • Conceptos de Jami
  • Vincular un dispositivo nuevo
  • Ver código fuente de la página

Vincular un dispositivo nuevo

Este documento describe la arquitectura de la función que permite a los usuarios vincular su cuenta a un nuevo dispositivo, lo que se conoce como el proceso Vincular nuevo dispositivo.

  • Terminología

  • Máquina de Estado

    • Descripción general del Estado

    • Detalles

      • Detalles para import side

      • Detalles para export side

  • API entre demonio y cliente.

    • API para import side

    • API para export side

  • Máquina de estado daemon

  • Máquina de estado del cliente

  • Diagrama de secuencia completo (importación y exportación)

Terminología

Para entender este documento, aquí hay algunos términos clave:

  • import side: El dispositivo que importa la cuenta.

  • export side: El dispositivo que exporta la cuenta.

  • token: Un URI que identifica un dispositivo en la Tabla Hash Distribuida (DHT).

Máquina de Estado

The daemon manages this functionality using a state machine.

La evolución del estado se comunica a los clientes, habilitando la visualización de la interfaz adecuada.

Actualmente, la máquina de estados es simétrica tanto para la `parte de importación “como para la “parte de exportación”, aunque, dependiendo de la parte, ciertos estados son inaccesibles.

Descripción general del Estado

Estado

Nombre

Uso (parte)

Descripción

0

Init

Nada

Estado inicial.

1 de la Comisión

Token disponible

Solo importación

El “token” está disponible. Este es el URI que identifica el nuevo dispositivo en el DHT, que se muestra como texto o un código QR.

2 de la Comisión

Conectado

Exportar/Importar

Se está estableciendo una conexión punto a punto.

3 El

Autenticando

Exportar/Importar

Se está confirmando la identidad de la cuenta y la dirección del dispositivo.

4 El

En progreso

Exportar/Importar

Transición de Estado, se está transfiriendo el archivo de la cuenta.

5 El

Hecho

Exportar/Importar

Estado final. Representa el éxito o el fracaso.

Detalles

La máquina de estados puede incluir información complementaria para fines de visualización, pasada como un map<String, String> “details`.

Detalles para import side

Estado

Nombre

Detalles

0

Init

No procede.

1 de la Comisión

Token disponible

token: Un URI de 59 caracteres con el prefijo jami-auth://.

2 de la Comisión

Conectado

Sin detalles.

3 El

Autenticando

peer_id: Jami ID de la cuenta importada.
auth_scheme: {"", "none", "password"} (vacío si no está protegido).
auth_error: {"bad_password"}.

4 El

En progreso

Sin detalles.

5 El

Hecho

error: {"", "none", "network", "authentication"} (vacío si no hay error).

Detalles para export side

Estado

Nombre

Detalles

0

Init

No procede.

1 de la Comisión

Token disponible

No procede.

2 de la Comisión

Conectado

Sin detalles.

3 El

Autenticando

peer_address: Dirección IP del dispositivo exportador.

4 El

En progreso

Sin detalles.

5 El

Hecho

error: {"", "none", "network", "authentication"} (vacío si no hay error).

API entre demonio y cliente.

API para import side

Nombre de la Señal

Dirección

Finalidad

addAccount

Saliente

Anuncia la intención de importar una cuenta. Debe incluir la clave Account.archiveURL="jami-auth".

provideAccountAuthentication

Saliente

Proporciona una contraseña si es necesario y confirma la identidad de la cuenta importada.

removeAccount

Saliente

Cancela la operación.

deviceAuthStateChanged

Entrantes

Indica el nuevo estado y proporciona detalles.

API para export side

Nombre de la Señal

Dirección

Finalidad

addDevice

Saliente

Anuncia la intención de exportar una cuenta.

confirmAddDevice

Saliente

Confirma la dirección del dispositivo exportador.

cancelAddDevice

Saliente

Cancela la operación.

addDeviceStateChanged

Entrantes

Indica el nuevo estado y proporciona detalles.

Máquina de estado daemon

        stateDiagram-v2
    state "Import Side" as Import {
        [*] --> Import_Init
        Import_Init --> Import_TokenAvailable: Generate token
        Import_TokenAvailable --> Import_Connecting: Peer detected
        Import_Connecting --> Import_Authenticating: Connection established
        Import_Authenticating --> Import_InProgress: Auth success
        Import_InProgress --> Import_Done: Transfer complete
        note right of Import_TokenAvailable
            Provides:
            - Authentication code
            - QR data
        end note
        note right of Import_Authenticating
            May require password
            auth_scheme: "", "none", "password"
        end note
        note right of Import_Done
            error: "", "none", "network", "authentication"
        end note
    }
    state "Export Side" as Export {
        [*] --> Export_Init
        Export_Init --> Export_Connecting: Token validated
        Export_Connecting --> Export_Authenticating: Connection established
        Export_Authenticating --> Export_InProgress: Auth success
        Export_InProgress --> Export_Done: Transfer complete
        note right of Export_Init
            Accepts:
            - Authentication code
            - QR data
        end note
        note right of Export_Authenticating
            Confirms peer address
        end note
    }
    

Máquina de estado del cliente

        stateDiagram-v2
    [*] --> Initial
    Initial --> ImportDevice: ImportFromDevice selected
    Initial --> ExportDevice: ExportToDevice selected
    state "Import Device" as ImportDevice {
        [*] --> Import_Init
        Import_Init --> Import_TokenAvailable: Token received
        Import_TokenAvailable --> Import_Connecting: Peer detected
        Import_Connecting --> Import_Authenticating: Connection established
        Import_Authenticating --> Import_InProgress: Auth success
        Import_InProgress --> Import_Done: Transfer complete
        Import_Authenticating --> Import_Error: Bad password
        Import_Connecting --> Import_Error: Connection failed
        Import_InProgress --> Import_Error: Transfer failed
        Import_Error --> [*]: Reset
        Import_Done --> [*]: Account ready
        note right of Import_TokenAvailable
            Display:
            - QR code
            - Authentication code
            - Copy button
        end note
        note right of Import_Authenticating
            Show password input if needed
        end note
    }
    state "Export Device" as ExportDevice {
        [*] --> Export_Init
        state Export_Init {
            [*] --> ShowInputOptions
            ShowInputOptions --> ScanQR: Camera selected
            ShowInputOptions --> ManualEntry: Manual selected
            ScanQR --> QRScanning: Start camera
            QRScanning --> TokenObtained: QR detected
            QRScanning --> ShowInputOptions: Cancel scan
            ManualEntry --> TokenObtained: Valid code entered
            ManualEntry --> ShowInputOptions: Cancel entry
        }
        Export_Init --> Export_Connecting: Token validated
        Export_Connecting --> Export_Authenticating: Connection established
        Export_Authenticating --> Export_InProgress: Auth provided
        Export_InProgress --> Export_Done: Transfer complete
        Export_Connecting --> Export_Error: Invalid token
        Export_Authenticating --> Export_Error: Auth failed
        Export_InProgress --> Export_Error: Transfer failed
        Export_Error --> [*]: Reset
        Export_Done --> [*]: Device added
        note right of Export_Init
            Input options:
            - QR scanner
            - Manual code entry
        end note
        note right of Export_Authenticating
            Confirm peer device
        end note
    }
    ImportDevice --> Initial: Back/Cancel
    ExportDevice --> Initial: Back/Cancel
    

Diagrama de secuencia completo (importación y exportación)

        sequenceDiagram
    box white Import Side
    participant IC as New Client
    participant ID as New Daemon
    end
    box white Export Side
    participant ED as Old Daemon
    participant EC as Old Client
    end
    %% Initial Setup
    IC->>ID: addAccount(archiveURL="jami-auth")
    activate ID
    ID-->>IC: deviceAuthStateChanged(state=TOKEN_AVAILABLE)
    Note over IC: Display QR code<br/>and auth token
    %% Export Side Initiation
    EC->>EC: User chooses to export
    EC->>EC: Scan QR/Enter token
    EC->>ED: addDevice(token)
    activate ED
    %% Connection Establishment
    ED->>ID: DHT connection request
    ID-->>IC: deviceAuthStateChanged(state=CONNECTING)
    ED-->>EC: addDeviceStateChanged(state=CONNECTING)
    %% Authentication Phase
    ID-->>IC: deviceAuthStateChanged(state=AUTHENTICATING,<br/>peer_id, auth_scheme)
    ED-->>EC: addDeviceStateChanged(state=AUTHENTICATING,<br/>peer_address)
    alt Account is password protected
        IC->>IC: Show password prompt
        IC->>ID: provideAccountAuthentication(password)
    end
    EC->>ED: confirmAddDevice()
    %% Transfer Phase
    ID-->>IC: deviceAuthStateChanged(state=IN_PROGRESS)
    ED-->>EC: addDeviceStateChanged(state=IN_PROGRESS)
    ED->>ID: Transfer account archive
    %% Completion
    ID-->>IC: deviceAuthStateChanged(state=DONE, error="")
    ED-->>EC: addDeviceStateChanged(state=DONE, error="")
    deactivate ID
    deactivate ED
    Note over IC,EC: Account successfully linked
    alt Error Scenarios
        ID-->>IC: deviceAuthStateChanged(state=DONE, error="network")
        ED-->>EC: addDeviceStateChanged(state=DONE, error="network")
        Note over IC,EC: Network error during transfer
        ID-->>IC: deviceAuthStateChanged(state=DONE, error="authentication")
        ED-->>EC: addDeviceStateChanged(state=DONE, error="authentication")
        Note over IC,EC: Authentication failed
    end
    %% Cancellation Scenarios
    rect rgb(240, 240, 240)
        Note over IC,EC: Optional Cancellation Flows
        IC->>ID: removeAccount()
        EC->>ED: cancelAddDevice()
    end
    
Anterior Siguiente

Derechos de autor © 2018-2025 Savoir-faire Linux Inc. and contributors.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

Compilado con Sphinx usando un tema proporcionado por Read the Docs.