Os limites do túnel
Quem alcança o servidor enquanto o túnel está no ar, o que o código impõe, o que não impõe, e o que acontece quando o túnel falha ou você perde um celular.
Público enquanto roda #
Enquanto o servidor roda com um túnel, o endereço dele é alcançável pela internet. O endereço é um hostname de túnel rápido da Cloudflare, aleatório a cada execução, e morre com o servidor. Não é uma rede privada, e nada nele depende de o celular ser seu: o que fica entre a internet e a execução é o que o código impõe, abaixo.
O AutoDev não tem relay próprio. O tráfego passa pelo serviço de túnel da Cloudflare, do qual o AutoDev executa um cliente e que não opera. O endereço começa com https://. O último salto, do cloudflared para o AutoDev, é http simples em 127.0.0.1.
O que o código impõe #
| Requisição | O que ela precisa |
|---|---|
A página em /, sem credencial | Nada. Mostra a página de pareamento, sem nome de projeto, status nem contagens. |
POST /pair | Um código de pareamento aberto. 5 tentativas erradas o fecham. |
/pairing, que abre e lê um código | O token do servidor. Um cookie de pareamento não é aceito. |
Toda outra rota: a página de check-in, /answer, /command, /project, /unpair, /events e /view/<kind> | O token do servidor como Authorization: Bearer, ou o cookie de um dispositivo pareado. Qualquer outra coisa recebe 401. |
POST /command com um cookie | Também o cabeçalho X-AutoDev-Device: 1. |
Mais três regras valem para toda requisição:
- O servidor aceita só nomes de host de loopback. O túnel reescreve o cabeçalho
Hostpara127.0.0.1, de modo que a defesa do servidor contra DNS rebinding fica como está. A lista de permitidos não foi relaxada para o uso remoto. - As páginas de check-in levam uma política de segurança de conteúdo,
default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline', então uma página não consegue buscar nada em lugar nenhum. - O que um celular envia se limita a imagens, e cada imagem a 8 MB. Uma requisição é cortada quando fica maior do que uma mensagem com suas fotos pode ser.
O token vem de --token, de AUTODEV_WEB_TOKEN ou, quando nenhum dos dois está definido, é gerado: 24 bytes aleatórios. O autodev serve imprime um token gerado e diz para tratá-lo como uma senha. Um servidor destacado guarda o token em serve.json, em ~/.autodev/, para que o painel possa se conectar a ele.
Revogando um dispositivo #
Parar o servidor esquece todo dispositivo pareado, então, para um celular perdido, a forma de cortá-lo é desligar o acesso remoto. Os dispositivos vivem na memória do servidor e em mais nenhum lugar.
Um celular pode se desconectar pelo próprio menu. Nada revoga um outro dispositivo em particular, e o painel não tem controle que revogue todos sem parar o servidor.
A idade máxima do cookie, cerca de 400 dias, é um pedido ao navegador. O servidor não confere a idade de um dispositivo: ele aceita um token até o servidor parar. Um token copiado de um celular funciona enquanto o servidor rodar.
Quando o túnel falha #
Um túnel pode falhar ao iniciar de três jeitos, e a mensagem de cada um é escrita como está aqui:
cloudflared did not announce a tunnel URL within 60scloudflared exited with code N before announcing a URLcloudflared is not installed or not on PATH, com o comando de instalação
Em cada caso o servidor continua rodando em loopback, e só esta máquina o alcança. Um servidor iniciado pelo painel escreve Tunnel unavailable — serving on loopback only. e o motivo no log de eventos como serve.tunnel_failed, e a linha de endereço do painel mostra Tunnel unavailable — loopback only. cloudflared ausente trata da correção.
O AutoDev continua vigiando o túnel depois que ele anunciou o endereço. Se o cloudflared sair depois, ou o processo dele falhar, o AutoDev retira o endereço, grava um aviso serve.tunnel_down com o motivo, e a linha de endereço muda para o mesmo Tunnel unavailable — loopback only. Ele não refaz o túnel: um novo tem um hostname aleatório novo, e todo celular pareia de novo. Desligue e ligue o acesso remoto para ter um.
O que isto não faz #
- Não tem contas, e não dá nomes aos dispositivos.
- Não expira um dispositivo no servidor, e não revoga um único dispositivo a partir da máquina.
- Não mantém o endereço entre execuções. Uma execução nova tem um endereço novo, e todo celular pareia de novo.
- Não limita o que um celular pareado pode ler, a não ser pelo nível: no
full, o feed leva o que os agentes disseram, os comandos que executaram e os arquivos que escreveram.
Ligando o acesso remoto trata de iniciar e parar o servidor, e Todas as chaves de configuração trata das configurações que não são específicas dele.