Repository navigation
feat(seguranca): no-store, regras de senha e login sem pistas (tasks 47, 46, 45, 52) - #34
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Task 47. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Task 46. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… teto por conta O teto por conta (50 erros em 15 min, todos os ips) so avisa no log: o CAPTCHA ainda nao foi escolhido. Task 45. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Money::toCents recusa valor negativo (a tela tambem) - compra que passa de 10.000 pontos pela regra tem mensagem propria - conferencia do lancamento do cartao sai do controller para o PointsLogModel - RewardModel::deleteOrDeactivate numa transacao com o premio travado - Migrator so separa comandos no ';' fora de texto e de comentario - comentarios desatualizados do index.php e do schema.sql Task 52. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Migration 007 remove cpf, email, birth_date e gender (e os indices): o cliente e so o telefone. Task 49. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Digito verificador pela regra nova da Receita (codigo ascii - 48), cnpj numerico continua valendo, mascara com letras, perfil formatado e ADR 001. Task 57. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Os pontos voltam ao saldo com um reversal no points_log, o total acumulado nao muda e os relatorios deixam de contar o resgate desfeito. Task 44. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
So o cartao desta loja muda (saldo, historico e consentimento vao junto); telefone que ja tem cartao nesta loja e recusado. Task 43. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… erro marcado - style="" das views vira classe (a barra de progresso usa passos de 5%) - src/ts/forms.ts: botao mostra carregando e o formulario nao e enviado duas vezes; o campo apontado pelo erro fica marcado, com aria-invalid e foco - foco do teclado sempre visivel Task 18. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- scripts inline viram src/ts/nav.ts e src/ts/customer.ts (compilados em public/js) - onsubmit/onclick viram data-confirm (forms.js) e data-print (nav.js) - RequestGuard manda CSP com default-src 'self' e, em https, Strict-Transport-Security Task 48. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- indicadores e historico por periodo (hoje, 7 dias, mes, intervalo); o saldo em circulacao continua o atual - merchant/export baixa o historico do periodo ou a lista de clientes em csv (; + BOM, protegido contra injecao de formula), so desta loja Task 59. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
?url=health responde ok/erro em json antes do session_start. O healthcheck do Docker e o monitor externo ficam para a parte de infraestrutura. Task 56 (parte de codigo). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A baseline guarda so os "might not be defined" das views (variaveis do extract). CI, composer audit no workflow e Dependabot ficam pendentes. Task 51 (parte de codigo). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…padrao MAIL_DRIVER vazio nao manda nada e avisa no log (sem o conteudo); "log" grava o e-mail em MAIL_LOG_FILE para dev e testes. Provedor, SPF e DKIM ficam para a escolha do time. Task 55 (parte de codigo). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Token aleatorio de uso unico, valido por 1 hora e guardado so como hash (migration 008). O pedido responde igual exista o e-mail ou nao e tem limite por ip e por e-mail; trocar a senha derruba as sessoes abertas. Task 21. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cadastro manda um link (24 h, uso unico, so o hash no banco); enquanto nao confirma, o lojista entra mas so ve a tela de confirmar, com reenvio. Contas existentes contam como confirmadas (migration 009). Os links por e-mail passam a herdar de MerchantTokenModel. Task 50. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
handleForgot/handleReset tinham retorno never e o render ainda fazia return depois: codigo novo nao entra na baseline. Task 21. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tabela admins (migration 010), conta criada por bin/create-admin.php, sessao separada da do lojista. O admin ve as lojas (sem dados dos clientes) e ativa ou desativa um lojista, que perde o acesso na hora. Task 30. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ADR 003 em status "proposta": tabela users com papel dono/atendente, permissoes por rota, autor de cada movimentacao no points_log e perguntas em aberto para o time. Sem codigo. Task 58. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(admin): painel administrativo e adr de atendentes (tasks 30, 58)
feat(conta): e-mail transacional, esqueci a senha e confirmacao do e-mail (tasks 55, 21, 50)
chore(qualidade): rota de saude e phpstan nivel 5 (tasks 56, 51)
feat(seguranca): acessibilidade, csp completa e relatorios por periodo com csv (tasks 18, 48, 59)
feat(balcao): customers so telefone, cnpj alfanumerico, estorno de resgate e correcao do cartao (tasks 49, 57, 44, 43)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tasks
Cache-Control: no-storeem todomerchant/*ecustomer/*(RequestGuard::sendNoStore).PasswordPolicy, senha de 8 a 72 bytes no cadastro e na troca, e a nova não pode ser igual à atual. O login não confere tamanho.LoginGuard::DUMMY_HASH), token CSRF novo no login e teto por conta (50 erros em 15 min, somando todos os IPs), que só avisa no log. Falta escolher o CAPTCHA.Money::toCentsrecusa negativo.valor_pontos_demaistem mensagem própria.PointsLogModel.deleteOrDeactivateroda numa transação.Migrator::statementssó separa no;fora de texto e de comentário.CLAUDE.md(seção balcão, testes de máscara, comando/autopilot).Pontos de atenção
maxlength="72"do HTML conta caracteres e o servidor conta bytes. Assim o navegador nunca barra uma senha válida, e o servidor explica quando acento ou emoji passam do limite.Como testar
composer test -- --filter "SecurityHeadersTest|PasswordPolicy|RegisterTest|ProfileTest|LoginGuard|LoginLockout|MoneyTest|MigratorStatements"?url=merchant/profile?url=merchant/dashboardpara ver ono-store🤖 Generated with Claude Code