- Shipped
- 27 de agosto de 2026 às 18:34 UTC
- Author
- Kamo
- Commit
- 1899050
* ******************************* -- form-codificado ou JSON, guardado pelo A própria assinatura do Carrier. Porquê um novo objectivo. /api/voip/webhook não pode receber um STOP e falha silenciosamente: readTree() é o corpo sem restrição de 'consumo', cada suporte de texto posts **************************** o parse lança, a exceção é engolido e o portador é respondido 200 OK -- então ele nunca repete. Confirmado na fonte atual antes de escrever isto. Por que este caminho. ************* ************************************************************************************************************************************************************************************* e combina com startsWith, então qualquer coisa abaixo dele exige um X-Internal-Auth cabeçalho que uma operadora não pode enviar. /api/bulktext/inbound é um SIBLING de /send, is adicionado a ************* e é deliberadamente NÃO registrado em InternalAuthFilter. Assinatura Twilio: HMAC-SHA1 sobre o URL completo (texto de pesquisa incluído) mais o Parâmetros POST anexados nome-então-valor na ordem ordenada caso-sensível, base64, comparado ao X-Twilio-Assinatura com MensagemDigest.isEqual. Verificado contra A documentação de segurança de Twilio, então fixada ao vetor publicado de Twilio's proprio twilio-java RequestValidatorTest (token 12345 -> RSOYDt4T1cUTdK1PDd93/VVr8B8=), então o teste não pode passar por um algoritmo errado. Modelado no MicrosoftTeamsProvider (segredo em branco -> log + false; exceção -> falso; comparação de tempo constante); NÃO no RingCentralProvider `return true; // TODO`, e RingCentralSignnatureUtil é igual a IgnoreCase não é reutilizado. A URL assinada é reconstruída a partir do X-Forwarded-Proto/Host, não getRequestURL(). A edge termina TLS, então getRequestURL () retorna o próprio esquema do contêiner e host, que não é o que Twilio assinou -- cada assinatura seria falha e o O fracasso seria exactamente uma falsificação. O flowerroute é fechado e continua a recusar todos os trabalhos. Flowroute publica no assinatura webhook: seus documentos de mensagem de entrada especificam o URL de retorno de chamada, o aplicativo/vnd.api+json tipo de conteúdo e a forma de carga útil, e nenhuma assinatura cabeçalho, esquema HMAC ou segredo compartilhado. Não há nada para verificar, por isso mantém a falha-fechada padrão em vez de obter um esquema inventado -- um inventado um quer rejeitar todo o tráfego genuíno ou ser escrito para retornar verdadeiro, que é a superfície falsificada que esta interface existe para prevenir. Flowroute também não post form-codificado, então `consumis` aceita vnd.api+json também. Sinch, Infobip e Vonage não são implementados em ambos os métodos e registrar um aviso nomeando-se. Provas TDD ------------- Vermelho (classe ausente): [ERROR] **************************** não foi possível encontrar o símbolo símbolo: classe BulkTextInboundController Localização: classe **************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Verde: Testes executados: 27, Falhas: 0, Erros: 0, Pular: 0 Mutação 1 -- aquele que o plano nomeia, e não prova nada. Plan Task 2 Passo 8 diz: make validateWebhookAssinatura padrão para `true` e aMissingWebhookSecretRejects deve ficar vermelho. Observado: Testes executados: 24, Falhas: 0, Erros: 0, Pular: 0 CONSTRUÇÃO DE SUCESSO Nada ficou vermelho. Cada test drives Twilio, que OVERRIDES o padrão, assim o falha-fechada padrão foi exercida por nenhum teste em tudo e poderia ter sido silenciosamente invertida a qualquer momento -- transformando quatro portadores de "recusa tudo" em "aceita qualquer coisa" num objectivo em que aceitar qualquer coisa permite a um estranho revogar o consentimento de qualquer consumidor. Fechado adicionando **************** que fixa o padrão em um nu implementação e sobre as quatro transportadoras reais que dependem dele. Repetir o mesmo mutação contra ela: **************************** **************************** [uma transportadora não implementada nunca deve aceitar um webhook inverificável] Esperando que o valor fosse falso, mas era verdadeiro **************************** **************************** [SinchTextProvider deve falhar fechado] Esperando que o valor fosse falso, mas era verdadeiro Mutação 2 -- aquele que realmente tem como alvo o teste chamado do plano: Em branco-authToken guarda mudou de `retorno falso` para `retorno verdadeiro'. Observado: **************************** **************************** esperado: 403 mas foi: 200 **************************** **************************** Esperando que o valor fosse falso, mas era verdadeiro Mutação 3 -- o parâmetro classificar invertido (ordem natural TreeMap -> Comparator.reverseOrder(), para mostrar que o teste do algoritmo não é vago: **************************** **************************** Esperando que o valor fosse verdadeiro, mas era falso **************************** **************************** esperado: 200 mas foi: 403 As três mutações reverteram. Conjunto completo após a reversão: Testes executados: 290, Falhas: 0, Erros: 0, Ignorado: 0 / SUCESSO CONSTRUIDO Gaps conhecidos, deliberados e registrados em tempo de execução **************************** * Uma mensagem de entrada verificada é reconhecida e LIGADA MAS NÃO RECORDADA. A hand-off para SmsKeywordService é uma TODO marcada porque essa classe chega Tarefa 3. Este endpoint não suprime nada ainda. * Resolução Org verifica instâncias ativas e coincide com o número para Contacte o Canon.fone. Não há inventário de números -- o único registro de propriedade é o único nullable FROM PHONE NUMBER no BulkTextProviderInstance, sem localizador e sem índice. Nenhuma correspondência, ou uma correspondência entre dois orgs, atribui o mensagem para ninguém e logs; supondo que um inquilino iria gravar uma revogação contra o errado, o que é pior do que não gravar. Precisa de ADD5/MS3. * InboundSms não carrega timestamp transportadora: Twilio entrada SMS webhook não Manda um. A tarefa 3 "consentedAt vem do evento portador, nunca now()" é Por conseguinte, não é satisfatório para o Twilio. Refs: **************************** Tarefa 2