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:
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 #
| Regra | O que o servidor faz |
|---|---|
| Duração | O código expira depois de 10 minutos. |
| Uso | Funciona uma vez. Um pareamento bem-sucedido o fecha. |
| Tentativas erradas | 5 tentativas erradas o fecham. Depois da quinta, mesmo o código certo não encontra pareamento aberto. |
| Ao mesmo tempo | Um código fica aberto por vez. Um novo o substitui. |
| Sem nenhum aberto | Toda 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.
O que o celular guarda #
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.