Skip to content

Corrige os dados de Minio para obter o endereço correto dos documentos carregados - #1038

Open
robertatakenaka wants to merge 4 commits into
scieloorg:mainfrom
robertatakenaka:fix_files_storage_wasabi
Open

Corrige os dados de Minio para obter o endereço correto dos documentos carregados#1038
robertatakenaka wants to merge 4 commits into
scieloorg:mainfrom
robertatakenaka:fix_files_storage_wasabi

Conversation

@robertatakenaka

@robertatakenaka robertatakenaka commented Aug 3, 2026

Copy link
Copy Markdown
Member

O que esse PR faz?

Corrige a lógica de resolução de public_url em MinioConfiguration, que duplicava o prefixo do bucket sobre uma public_base_url já informada pelo usuário, e refatora get_files_storage para centralizar a montagem dos argumentos de MinioStorage através de uma nova property kwargs. Também renomeia os parâmetros do construtor de MinioStorage (bucket, object_name_prefix, public_urlminio_bucket, minio_object_name_prefix, minio_public_url) para eliminar a colisão de nomes com as properties homônimas de MinioConfiguration.

Onde a revisão poderia começar?

files_storage/models.py, pela property minio_public_url e pelo método get_files_storage.

Como este poderia ser testado manualmente?

  1. Criar uma MinioConfiguration com host_root_dir preenchido e public_base_url informada — confirmar que a URL retornada por get_files_storage(...).public_url é exatamente a public_base_url informada, sem concatenação.
  2. Criar uma configuração sem public_base_url — confirmar que a URL é montada a partir de host/secure, com o bucket resolvido anexado como subcaminho.
  3. Rodar a suíte de testes: python manage.py test files_storage.test_models.

Algum cenário de contexto que queira dar?

Esse ajuste corrige um bug de produção em potencial: URLs públicas de leitura configuradas manualmente estavam sendo alteradas silenciosamente quando host_root_dir estava presente, o que pode ter causado (ou pode vir a causar) URLs de leitura incorretas para arquivos armazenados via MinIO/S3/Wasabi.
Bug encontrado ao resolver #1035

Screenshots

Não aplicável (mudança de lógica de backend, sem interface visual).

Quais são os tickets relevantes?

Relacionado à issue "Corrigir get_files_storage e inconsistência em public_url ao usar host_root_dir".

Corrige #1037 (issue aberto)
Corrige #1015 (pr fechado)

Referências

  • Norma NSI.04 - Norma de Desenvolvimento Seguro.

Segurança da informação (NSI.04)

Seção obrigatória. Marque as opções aplicáveis e justifique quando necessário. Referência: NSI.04 - Norma de Desenvolvimento Seguro.

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim — descreva os controles de proteção aplicados (criptografia, mascaramento, anonimização, etc.):
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim — descreva o que mudou e por quê:
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim — as novas dependências foram verificadas no SBOM/Trivy sem vulnerabilidades críticas/altas em aberto?
    • Verificado e aprovado
    • Pendente / vulnerabilidade aceita com justificativa:
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim — link do job:
  • Não aplicável a este PR (justifique):

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim — confirme que há sanitização/parametrização (prepared statements, escaping, etc.):
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim — HTTPS obrigatório está garantido e o acesso segue o princípio de menor privilégio?
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim (bloquear merge e corrigir antes de prosseguir)

…tar colisão de nomes

Propósito:
Os parâmetros do construtor de MinioStorage (bucket, object_name_prefix,
public_url) tinham nomes genéricos que colidiam semanticamente com
properties de mesmo nome em MinioConfiguration, dificultando o
rastreamento de onde cada valor era originado.

Solução técnica:
Renomeados os parâmetros do __init__ para minio_bucket,
minio_object_name_prefix e minio_public_url, deixando explícito que
são valores específicos de configuração do Minio. Atributos internos
(self.bucket, self.object_name_prefix, self.public_url) mantidos
inalterados para não impactar o restante da classe.
…com host_root_dir

Propósito:
get_files_storage montava o MinioStorage usando 'obj.host_root_dir or
obj.bucket' diretamente na chamada, sem centralizar essa regra, e a
property public_url aplicava o prefixo de host_root_dir por cima da
public_base_url informada pelo usuário, alterando um valor que deveria
ser respeitado como está.

Solução técnica:
- Introduzida a property kwargs em MinioConfiguration, centralizando a
  montagem dos argumentos usados por MinioStorage (agora com os nomes
  minio_bucket, minio_object_name_prefix, minio_public_url).
- Criada a property minio_bucket, que resolve a precedência entre
  host_root_dir e bucket.
- Property object_name_prefix renomeada para minio_object_name_prefix
  (mesma lógica: bucket vira prefixo somente quando host_root_dir
  existe).
- Property public_url renomeada para minio_public_url e corrigida:
  quando public_base_url é informado, ele é usado exatamente como
  está (sem concatenar prefixo); quando ausente, a URL é montada a
  partir do host e, nesse caso, o minio_bucket é anexado como
  subcaminho.
- get_files_storage agora usa obj.kwargs + minio_http_client, evitando
  duplicar a lógica de resolução de bucket/prefixo/url na chamada.
…ublic_url

Propósito:
Os testes existentes validavam os nomes antigos de parâmetros e a
regra antiga de public_url (que sempre concatenava o prefixo por cima
da public_base_url informada).

Solução técnica:
Testes ajustados para os nomes minio_bucket, minio_object_name_prefix
e minio_public_url, e para o novo comportamento de minio_public_url:
- Quando public_base_url é informada, é usada exatamente como está,
  mesmo havendo host_root_dir.
- Quando ausente, a URL é montada a partir do host, anexando
  minio_bucket como subcaminho.
Removidas notas de docstring que descreviam o contrato antigo.
@gitnnolabs

Copy link
Copy Markdown
Contributor

Validando...

@gitnnolabs

gitnnolabs commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Para rodar os testes utilizei o seguinte comando:

docker compose -f local.yml run --rm django python manage.py test files_storage.tests.test_models -v 2

Teste executado com sucesso:

Screenshot 2026-08-04 at 08 13 24

@gitnnolabs gitnnolabs left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De acordo com o incorporação.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants