Porque um submit é pouco, dois é bom, e três o Mikrotik bloqueia.
Introdução
Você já tentou enviar dados para o Mikrotik e para um WebHook ao mesmo tempo? Não? Então você vive uma vida tranquila demais.
Neste tutorial, vamos complicar o simples: validar um CPF, mascará-lo, enviar para um webhook invisível, e ainda logar o usuário no hotspot.
Pré-requisitos
- Um HTML com mais camadas que uma cebola.
- Conhecimentos em JavaScript suficientes pra saber que
getElementById()
é mais fiel quequerySelector()
. - Coragem.
A lógica (ou a ausência dela)
- O usuário digita nome e CPF.
- O CPF é validado, formatado e psicologicamente avaliado.
- O formulário hidden envia os dados para o webhook da empresa.
- Após 2 segundos (ritual obrigatório), o login original é enviado ao Mikrotik.
O código mágico
htmlCopyEdit<form id="loginForm" action="$(link-login-only)" method="post">
<input name="nome" required>
<input name="cpf" id="documento" required minlength="14" maxlength="14" oninput="aplicarMascara()">
<input type="submit" id="submitBtn" value="Acessar Internet">
</form>
<form id="whForm" action="https://webhook.example.com" method="post" target="hiddenFrame" style="display:none;">
<input type="hidden" id="whNome" name="nome">
<input type="hidden" id="whcpf" name="cpf">
</form>
<iframe name="hiddenFrame" style="display:none;"></iframe>
JavaScript com propósitos místicos
jsCopyEditdocument.getElementById("loginForm").addEventListener("submit", function(e) {
e.preventDefault(); // Pare de confiar no comportamento padrão.
if (!validarDocumento()) return false; // Se não validar, nem tenta.
const nome = document.querySelector("input[name='nome']").value;
const cpf = document.getElementById("documento").value;
document.getElementById("whNome").value = nome;
document.getElementById("whcpf").value = cpf;
document.getElementById("whForm").submit(); // Primeiro strike.
setTimeout(() => {
document.getElementById("loginForm").submit(); // Segundo strike.
}, 2000); // Delay místico para sincronia de realidades.
});
Mas por que funciona?
Porque JavaScript é um ato de fé. E também porque:
- O form escondido usa um iframe pra enviar dados sem recarregar a página.
- O form do Mikrotik precisa ser enviado por último pra não cortar a festa antes da hora.
- O delay de 2 segundos é o tempo exato pro universo respirar.
Erros comuns (e por que você vai cometê-los)
- Usar
value
dos inputs antes de o form ser submetido? Vai darundefined
. - Esquecer o
id
no campocpf
e usarquerySelector()
? Vai caçar com vara curta. - Trocar a ordem dos submits? Vai quebrar o webhook antes de nascer.
Considerações Finais
Se tudo funcionar de primeira, revise: algo está errado.
Mas se funcionar depois de uns 3 testes, 2 alertas duplicados e um botão girando… então, meus parabéns: você desbloqueou o Modo Kemper. =D