i-educar icon indicating copy to clipboard operation
i-educar copied to clipboard

Corrigir erro de download S3 causado por encoding duplo de caracteres na key

Open msoares94 opened this issue 4 months ago • 3 comments

Contexto

Ao gerar arquivos (ex: relatórios ou CSVs) com nomes que incluem : no timestamp, como:

matriculas_2025-08-05_12:07:49.csv

... o caminho resultante no S3 é corretamente salvo com :. Porém, ao tentar gerar uma URL assinada a partir da URL de download, a aplicação extrai a key diretamente da URL já codificada, que contém %253A (duplo encode de :%3A%253A), como neste exemplo:

https://.../matriculas_2025-08-05_12%253A07%253A49.csv

Isso resultava em erro NoSuchKey do S3, pois a assinatura gerada referenciava uma key inexistente.


O que foi feito

  • Adicionado urldecode(urldecode(...)) nas classes S3UrlPresigner e S3BackupUrlPresigner
  • Isso garante que a chave seja convertida corretamente de %253A%3A:
  • Garante compatibilidade com URLs que já foram codificadas uma ou mais vezes por navegadores, JS ou APIs

Evidências

1. URL com erro (antes):

https://.../matriculas_2025-08-05_12%253A07%253A49.csv
  • Resultado: NoSuchKey

2. Key extraída no código (antes):

matriculas_2025-08-05_12%253A07%253A49.csv

3. Key correta esperada pelo S3:

matriculas_2025-08-05_12:07:49.csv

4. Após correção:

  • Key decodificada corretamente
  • URL gerada com Storage::temporaryUrl(...) válida
  • Download funcional

Testes manuais

  • [x] Gerado link para arquivo com : no nome
  • [x] Verificado que URL gerada contém %3A (e não %253A)
  • [x] Download do arquivo realizado com sucesso
  • [x] Backward compatibility mantida para arquivos com nomes simples

Checklist

  • [x] Corrige bug de encoding duplo
  • [x] Não afeta demais partes do sistema
  • [x] Corrigido apenas no backend, sem dependência de NGINX ou frontend

msoares94 avatar Aug 05 '25 17:08 msoares94

@edineivaldameri pode validar por favor.

edersoares avatar Sep 10 '25 13:09 edersoares

@msoares94 poderia informar os cenários onde o problema pode ocorrer, pois até o momento não tivemos relato desse erro.

Ao realizar testes no exportador de dados que é gera os aquivos no S3 com o mesmo padrão de nomenclatura não consegui em momento algum simular o erro relatado.

edineivaldameri avatar Sep 18 '25 11:09 edineivaldameri