Pareando um celular

Um celular pareia com um código curto que você abre pelo painel ou por um terminal. O que é o código, quanto ele dura, quando queima e o que o celular guarda depois.

Abra um código #

Com o acesso remoto ligado, a seção Remote access do painel mostra o endereço público como texto e como QR code. Pressione o QR code para abri-lo numa aba do editor, grande o bastante para escanear, ou pressione Copy the URL. Depois pressione Pair a device. A seção mostra Pairing code XXXX-XXXX · expires <time>, e Copy the code põe o código na área de transferência. Pressionar de novo substitui o código, e o rótulo vira New pairing code, porque só um código fica aberto por vez.

Um terminal também abre um, na máquina que roda o servidor:

powershell
autodev serve pair

Ele imprime Pairing code: XXXX-XXXX (expires <time>) e, na linha seguinte, o endereço público. Quando o acesso remoto não está rodando, ele diz isso e termina com erro.

O código tem 8 caracteres, escritos em dois grupos de quatro. As letras I, L, O e U ficam de fora, porque são difíceis de distinguir de outros caracteres num teclado de celular. No celular, maiúsculas e minúsculas não importam, e o traço e os espaços são ignorados.

Abra o endereço público no celular. A página diz Enter the pairing code shown in the panel. Digite o código e pressione Pair. O QR code leva só o endereço, nunca o código.

O que o código permite #

RegraO que o servidor faz
DuraçãoO código expira depois de 10 minutos.
UsoFunciona uma vez. Um pareamento bem-sucedido o fecha.
Tentativas erradas5 tentativas erradas o fecham. Depois da quinta, mesmo o código certo não encontra pareamento aberto.
Ao mesmo tempoUm código fica aberto por vez. Um novo o substitui.
Sem nenhum abertoToda tentativa recebe a resposta no_pairing_open. Não há o que adivinhar.

Um celular que não está pareado vê uma página com o nome AutoDev, o pedido de um código e o motivo de um pareamento ter falhado: wrong_code, no_pairing_open ou missing_code. Ela não mostra nome de projeto, status nem contagens.

Um código é aberto a partir da máquina, e só de lá: pelo painel ou por autodev serve pair. A rota que o abre e o lê aceita o token do servidor e mais nada, então um celular pareado não pode abrir um código para outro dispositivo.

Um pareamento bem-sucedido define um cookie chamado autodev_device. Ele guarda um token aleatório de 192 bits, e é marcado como HttpOnly, Secure e SameSite=Lax, com idade máxima de cerca de 400 dias, o máximo que um navegador guarda um cookie. O servidor lembra o token na memória, e o celular o apresenta em toda requisição.

O SameSite=Lax é o que deixa um link aberto a partir de um chat ou de uma nota chegar já pareado, onde o Strict teria mostrado a página de pareamento. Toda rota que muda algo é um POST, e um cookie Lax não é enviado num POST entre sites.

O cookie não decide por quanto tempo um celular fica pareado. O endereço e o processo do servidor decidem: o celular fica pareado enquanto o mesmo servidor rodar no mesmo endereço, e um servidor que roda por dias não pede ao celular que pareie de novo. Nada do pareamento é gravado em disco. O hostname de um túnel rápido é diferente a cada execução, e um cookie pertence a um único hostname, então um celular pareado ontem à noite não consegue apresentar o cookie ao endereço de hoje.

Desconectando #

O menu do celular tem Disconnect this device. Ele revoga só aquele celular e limpa o cookie dele, e todo outro dispositivo pareado continua pareado. O painel mostra quantos dispositivos estão pareados.

Nada no painel revoga um dispositivo, ou todos, a não ser desligar o acesso remoto. Os limites do túnel diz o que isso significa para um celular perdido.

O que você pode fazer pelo celular trata do que um celular pareado mostra e envia. Ligando o acesso remoto trata do servidor a que o código pertence.