Controle de QR codes dos alunos no Painel e no Ikarus37, aceitando qualquer formato de QR #40

Closed
opened 2026-10-10 20:18:58 -03:00 by caio · 2 comments
Owner

Em produção nenhum dos 1003 alunos tem QR cadastrado, então ninguém consegue entrar na Área Funcional. E o sistema só aceita QR cujo conteúdo seja exatamente um código de 64 caracteres hexadecimais — o QR que os alunos já usam pode ter outro formato.

O que fazer

  • O login do app aceitar o QR com qualquer conteúdo: o sistema calcula a impressão digital (sha256) do que foi lido e compara com a do cadastro. O conteúdo do QR nunca é guardado.
  • Tela QR Codes no Painel e no Ikarus37: cobertura (quantos têm, quantos faltam, por esquadrão), lista com filtro, cadastrar/trocar o QR de um aluno lendo com a câmera (ou leitor/colando), remover.
  • "Conferir um QR": ler um QR e ver de quem é e quantos caracteres tem — serve pra descobrir o formato real.
  • Cadastro em lote (milhão;conteúdo do QR).
  • Continuar funcionando com os QR de teste do seed, que já são o próprio código de 64 caracteres.
Em produção nenhum dos 1003 alunos tem QR cadastrado, então ninguém consegue entrar na Área Funcional. E o sistema só aceita QR cujo conteúdo seja exatamente um código de 64 caracteres hexadecimais — o QR que os alunos já usam pode ter outro formato. **O que fazer** - [x] O login do app aceitar o QR com qualquer conteúdo: o sistema calcula a impressão digital (sha256) do que foi lido e compara com a do cadastro. O conteúdo do QR nunca é guardado. - [x] Tela **QR Codes** no Painel e no Ikarus37: cobertura (quantos têm, quantos faltam, por esquadrão), lista com filtro, cadastrar/trocar o QR de um aluno lendo com a câmera (ou leitor/colando), remover. - [x] "Conferir um QR": ler um QR e ver de quem é e quantos caracteres tem — serve pra descobrir o formato real. - [x] Cadastro em lote (milhão;conteúdo do QR). - [x] Continuar funcionando com os QR de teste do seed, que já são o próprio código de 64 caracteres.
Author
Owner

Feito em 8812a19 (develop). CI verde nos dois runners: run 34.

  • Login do app aceita o QR com qualquer conteúdo: o servidor calcula a impressão digital (sha256) do que foi lido. O conteúdo nunca é gravado.
  • Tela QR Codes no Painel (quem edita o efetivo) e no Ikarus37 (administrador técnico): cobertura por esquadrão, lista com filtro, cadastrar/trocar/remover, conferir um QR (de quem é e quantos caracteres tem) e cadastro em lote.
  • Os QR de teste do seed continuam funcionando.

Ainda não está em produção — falta publicar uma tag. A leitura pela câmera não pôde ser testada no ambiente de desenvolvimento (o navegador de teste bloqueia a câmera); o cadastro por conteúdo colado e todo o resto estão cobertos por teste.

Feito em 8812a19 (`develop`). CI verde nos dois runners: [run 34](https://cosmos.simioni.dev.br/cidit/projeto-argos/actions/runs/34). - Login do app aceita o QR com qualquer conteúdo: o servidor calcula a impressão digital (sha256) do que foi lido. O conteúdo nunca é gravado. - Tela **QR Codes** no Painel (quem edita o efetivo) e no Ikarus37 (administrador técnico): cobertura por esquadrão, lista com filtro, cadastrar/trocar/remover, conferir um QR (de quem é e quantos caracteres tem) e cadastro em lote. - Os QR de teste do seed continuam funcionando. **Ainda não está em produção** — falta publicar uma tag. A leitura pela câmera não pôde ser testada no ambiente de desenvolvimento (o navegador de teste bloqueia a câmera); o cadastro por conteúdo colado e todo o resto estão cobertos por teste.
caio closed this issue 2026-10-10 20:27:09 -03:00
caio added this to the Argos project 2026-10-10 20:27:21 -03:00
Author
Owner

Complemento — a câmera "só piscava" e não dava tempo de apontar. Corrigido em 57983eb e d81d7e2 (develop), CI verde: run 36.

  • Causa: o decodificador (jsQR) era buscado na internet, o endereço não respondia e o leitor desligava a câmera na hora.
  • Leitor local: o jsQR agora é servido pelo próprio sistema (web/app/vendor/). Chart.js e fontes também — nenhuma página carrega nada da internet, e há um teste que reprova se voltar a carregar.
  • Dá tempo de ler: a câmera fica aberta até ler. Ao ler, a imagem congela, aparece "QR identificado" e nada é enviado até confirmar ("Entrar" no app, "Confirmar" no Painel/Ikarus37). "Ler de novo" volta a procurar.
  • Mais aparelhos: o detector nativo do navegador só é usado se ele disser que lê QR, e o jsQR confere em paralelo.

Testado com câmera simulada (vídeo com um QR do seed); falta conferir com câmera real em celular.

Complemento — a câmera "só piscava" e não dava tempo de apontar. Corrigido em 57983eb e d81d7e2 (`develop`), CI verde: [run 36](https://cosmos.simioni.dev.br/cidit/projeto-argos/actions/runs/36). - **Causa:** o decodificador (jsQR) era buscado na internet, o endereço não respondia e o leitor desligava a câmera na hora. - **Leitor local:** o jsQR agora é servido pelo próprio sistema (`web/app/vendor/`). Chart.js e fontes também — nenhuma página carrega nada da internet, e há um teste que reprova se voltar a carregar. - **Dá tempo de ler:** a câmera fica aberta até ler. Ao ler, a imagem congela, aparece "QR identificado" e nada é enviado até confirmar ("Entrar" no app, "Confirmar" no Painel/Ikarus37). "Ler de novo" volta a procurar. - **Mais aparelhos:** o detector nativo do navegador só é usado se ele disser que lê QR, e o jsQR confere em paralelo. Testado com câmera simulada (vídeo com um QR do seed); falta conferir com câmera real em celular.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
cidit/projeto-argos#40
No description provided.