Emparejar un teléfono

Un teléfono se empareja con un código corto que abres desde el panel o una terminal. Qué es el código, cuánto dura, cuándo se quema y qué guarda el teléfono después.

Abre un código #

Con el acceso remoto activado, la sección Remote access del panel muestra la dirección pública como texto y como código QR. Pulsa el código QR para abrirlo en una pestaña del editor, lo bastante grande para escanearlo, o pulsa Copy the URL. Después pulsa Pair a device. La sección muestra Pairing code XXXX-XXXX · expires <time>, y Copy the code pone el código en el portapapeles. Volver a pulsarlo reemplaza el código, y la etiqueta pasa a New pairing code, porque solo hay un código abierto a la vez.

Una terminal también abre uno, en la máquina que ejecuta el servidor:

powershell
autodev serve pair

Imprime Pairing code: XXXX-XXXX (expires <time>) y, en la línea siguiente, la dirección pública. Cuando el acceso remoto no está en marcha, lo dice y termina con un error.

El código tiene 8 caracteres, escritos en dos grupos de cuatro. Las letras I, L, O y U se dejan fuera, porque son difíciles de distinguir de otros caracteres en un teclado de teléfono. En el teléfono, las mayúsculas y minúsculas no importan, y el guion y los espacios se ignoran.

Abre la dirección pública en el teléfono. La página dice Enter the pairing code shown in the panel. Escribe el código y pulsa Pair. El código QR lleva solo la dirección, nunca el código.

Qué permite el código #

ReglaQué hace el servidor
DuraciónEl código caduca a los 10 minutos.
UsoFunciona una vez. Un emparejamiento correcto lo cierra.
Intentos fallidos5 intentos fallidos lo cierran. Tras el quinto, ni siquiera el código correcto encuentra un emparejamiento abierto.
A la vezHay un código abierto a la vez. Uno nuevo lo reemplaza.
Sin ninguno abiertoTodo intento recibe la respuesta no_pairing_open. No hay nada que adivinar.

Un teléfono que no está emparejado ve una página con el nombre AutoDev, la petición de un código y el motivo de que un emparejamiento fallara: wrong_code, no_pairing_open o missing_code. No muestra nombre de proyecto, estado ni cuentas.

Un código se abre desde la máquina, y solo desde allí: desde el panel o con autodev serve pair. La ruta que lo abre y lo lee acepta el token del servidor y nada más, así que un teléfono emparejado no puede abrir un código para otro dispositivo.

Un emparejamiento correcto establece una cookie llamada autodev_device. Contiene un token aleatorio de 192 bits, y está marcada como HttpOnly, Secure y SameSite=Lax, con una edad máxima de unos 400 días, lo máximo que un navegador guarda una cookie. El servidor recuerda el token en memoria, y el teléfono lo presenta en cada petición.

SameSite=Lax es lo que deja que un enlace abierto desde un chat o una nota llegue ya emparejado, donde Strict habría mostrado la página de emparejamiento. Toda ruta que cambia algo es un POST, y una cookie Lax no se envía en un POST entre sitios.

La cookie no decide cuánto tiempo sigue emparejado un teléfono. Lo deciden la dirección y el proceso del servidor: el teléfono sigue emparejado mientras el mismo servidor funcione en la misma dirección, y un servidor que funciona durante días no le pide al teléfono que se empareje de nuevo. Nada del emparejamiento se escribe en disco. El nombre de host de un túnel rápido es distinto en cada ejecución, y una cookie pertenece a un solo nombre de host, así que un teléfono emparejado anoche no puede presentar su cookie a la dirección de esta noche.

Desconectar #

El menú del teléfono tiene Disconnect this device. Revoca solo ese teléfono y borra su cookie, y todos los demás dispositivos emparejados siguen emparejados. El panel muestra cuántos dispositivos están emparejados.

Nada en el panel revoca un dispositivo, ni todos, salvo desactivar el acceso remoto. Los límites del túnel dice qué significa eso para un teléfono perdido.

Qué puedes hacer desde el teléfono trata de lo que un teléfono emparejado muestra y envía. Activar el acceso remoto trata del servidor al que pertenece el código.