migrations_v3_crm.sql 1.1 KB

123456789101112131415161718192021
  1. -- Webhooks de CRM: cada empresa possui um segredo HMAC próprio.
  2. --
  3. -- O segredo é usado para validar a autenticidade do corpo das requisições
  4. -- recebidas no endpoint de ingestão de dados de CRM. Como é por empresa,
  5. -- o segredo de uma empresa nunca consegue assinar dados de outra.
  6. --
  7. -- Formato: 32 bytes aleatórios em hexadecimal = 64 caracteres.
  8. -- Default vazio: a aplicação trata segredo vazio como "não configurado"
  9. -- e rejeita o webhook (401), evitando aceitar requisições sem proteção.
  10. ALTER TABLE company
  11. ADD COLUMN IF NOT EXISTS company_hmac_secret VARCHAR(64) NOT NULL DEFAULT '';
  12. -- Backfill: gera um segredo para empresas já existentes para que possam
  13. -- receber webhooks imediatamente. Novos segredos de produção devem ser
  14. -- gerados pela aplicação via random_bytes (ver Libs\Hmac::generateSecret).
  15. UPDATE company
  16. SET company_hmac_secret =
  17. md5(random()::text || clock_timestamp()::text || company_id::text)
  18. || md5(random()::text || clock_timestamp()::text || company_id::text || random()::text)
  19. WHERE company_hmac_secret = '';