Skip to content

v2.4.0

Choose a tag to compare

@github-actions github-actions released this 03 Aug 20:08
eb3726c

Segurança

  • A rota pública de ingestão (POST /api/events/ingest) passou a ter limite
    por token: 120 requisições por minuto. Era a única rota de escrita sem
    autenticação de sessão, então uma fonte de monitoramento ruidosa — ou um
    token vazado — podia encher a base de eventos sem qualquer freio. O limite
    é por token, não por IP: várias ferramentas atrás do mesmo IP não se
    penalizam entre si (#30).
  • Fechados 19 pontos em que uma consulta não filtrava por tenant_id
    (contador de views, agendamento de revisão, post-mortem, busca inteligente,
    estatísticas de webhook, fluxos GPS e as dez consultas de gamificação).
    Nenhum vazava leitura entre organizações no fluxo normal, porque o id vinha
    de um documento já filtrado — mas não havia defesa em profundidade: um id de
    outra organização chegando pela URL seria aceito (#31).

Adicionado

  • Interface completa em português e inglês. Doze telas passaram a atender os
    dois idiomas: KBView, Configurações, Revisões, Favoritos, Notificações,
    Busca Avançada, Busca Inteligente, Integrações (entrada e saída),
    Relatórios, Atividade dos Usuários e os editores de fluxo GPS e post-mortem
    (#32).
  • Testes de i18n rodando no CI antes do build: paridade de chaves entre os
    dois idiomas, existência real de cada chave citada no código, igualdade dos
    placeholders de interpolação e uma catraca que impede telas já traduzidas de
    voltarem a ter texto fixo (#32).

Corrigido

  • Datas passaram a seguir o idioma ativo. Antes o locale era pt-BR fixo em
    toda a aplicação, inclusive com o idioma em inglês (#32).
  • Rótulos de prioridade, tipo de etapa, período e dia da semana viviam em
    constantes de módulo, avaliadas uma única vez na carga: não mudavam ao
    trocar de idioma sem recarregar a página (#32).
  • Plural de zero em português. A regra CLDR classifica 0 como singular, o que
    produzia "0 resultado encontrado" na tela de busca (#32).
  • sourceTokens.map(t => ...) sombreava a função de tradução em
    InboundEventSources: a aba Entrada quebraria com t is not a function ao
    renderizar, mas só quando já existisse um token cadastrado — o build passava
    normalmente (#32).