Os ~71 campos models.TextField do SAPL guardavam texto livre sem nenhuma
sanitização, e a renderização os tratava como HTML confiável em 142 pontos
(|safe, {% autoescape off %}). Qualquer usuário com permissão de edição
conseguia gravar <script> num campo e executá-lo no navegador de quem
abrisse a tela, inclusive nas páginas públicas (acompanhamento de matéria,
perfil público de parlamentar, resumo de sessão).
Duas camadas, ambas usando a mesma função idempotente para que não se
acumulem:
- Entrada: receiver pre_save global em sapl/base/receivers.py, cobrindo
forms, a API do drfautoapi, o admin e o shell num único ponto.
- Saída: get_field_display() em sapl/crispy_layout_mixin.py — que monta o
HTML de todo TextField para as telas de list/detail do CRUD — mais o
novo filtro |sanitize nos templates. Protege as linhas gravadas antes
desta mudança, já que não há backfill.
Políticas por campo, em sapl/sanitize.py:
- plain (padrão): remove toda a marcação e preserva o texto.
- rich: allowlist para os campos editados no TinyMCE (conteúdo de
expediente, ocorrências, considerações finais e texto de dispositivo).
Links continuam funcionando, com target e o alinhamento do editor
preservados; javascript:, data:, on* e <script> são descartados.
- exempt: LexmlProvedor.xml e TipoTextoArticulado.rodape_global, que não
são HTML.
Corrige também cinco |safe dentro de <textarea>, onde
</textarea><script> escapava do contexto, e cinco |striptags|safe — a
documentação do Django avisa que striptags não garante HTML seguro.
Sem migração de dados: as linhas existentes são neutralizadas na
renderização e limpas quando o registro for salvo de novo.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Impl Mixin para gerar relatórios de pesquisas
MultiFormatOutputMixin sobrescreve render_to_response e, com base no
parametro format=[xlsx, csv, json], gerar versão não paginada dos
resultados de FilterView. O mixin foi aplicado na pesquisa de matérias e
de normas e pode ser extendido para outras filterview's ou mesmo
listviews, internas ao Crud.
* Retorna último bump
* Atualiz de versões do front e impactos no código
Atualiza versões secundárias e de remendos x.Y.Z
Atualiza versões secundárias (minor version x.Y.z)
e de remendos (patch version x.y.Z)
em conjunto das libs de menor impacto no frontend.
Syncs webpack-bundle-tracker django-webpack-loader
A primeira delas é do frontend já a segunda é do backend.
Elas fazem a ponte entre o front e back. A primeira faz um catálogo
(webpack-stats-json) de todo material compilado para produção pelo webpack.
Em tempo de desenvolvimento, esses catálogo não possui referências para
arquivos, mas para urls do servidor de desenvolvimento do frontend.
Já a segunda, lê todo o material produzido pela primeira, disponibiliza
filters para acesso geral, modular ou diretamente a arquivos
específicos.
bump vs secundária do vue e vue-template-compiler
Já existe atualização de versão primária do VueJs mas atualizá-la algo
em ~3.0.0 exige revisão, refatoração e/ou reimplementação de código.
vue-template-compiler anda junto com vue e é usado para possui compilar
container pre-alimentado no backend como é o caso de:
https://github.com/interlegis/sapl/blob/3.1.x/sapl/templates/parlamentares/parlamentares_list.html
migra libs para devDependencies
bump version frontend
- Rm drf-yasg e add drj-spectacular
- corrige schema de listagem
- ajusta urls para /api/schema, /api/schema/swagger-ui, api/schema/redoc
- insere na paginação links diretos de next e previous com filtro
* Fix#3138 - Iniciando etiqueta de materia legislativa
* Gerando pdf com codigo de barra e opção largura/altura
* Anexando etiqueta em Texto Articulado
* Adaptando pra ficar parecido com protocolo Fix #3138
* Colocando classe de configuração de etiqueta da materia no map rules
* Ajustando importações
* Melhorando a disposição dos elementos da etiqueta
* Mudando fontes da etiqueta
* Melhorando formato da etiqueta
* Limitando campo ementa para no maximo 200 caracteres em ementa de materia legislativa
* Aumenta um pouco mais o tam máx
Co-authored-by: eribeiro <edwardr@senado.leg.br>
* Fix #3127
* Adiciona merger de PDF
* Adiciona pypdf4 em requirements.txt
* Adicionando mensagem de erro caso não tenha documento acessório
* Subido algumas recomendações(logs, exceptions, localização de imports)
* Mudando maneira de pegar o diretorio tmp
* Concertando problema de css
* Arrumando mensagem de erro para quando todos os documentos acessorios não tem pdf cadastrados
* Generalizando tmp file para utils.py
* Adicionando logs de info e quebrando linhas grandes
Co-authored-by: eribeiro <edwardr@senado.leg.br>
Co-authored-by: ulysses <ulysses3353@gmail.com>
* Refatora num matérias por tipo
* Adaptação p/ caso que utiliza MateriaEmTramitacao
* Update sapl/utils.py
Co-Authored-By: Edward <9326037+edwardoliveira@users.noreply.github.com>
* Update sapl/utils.py
Co-Authored-By: Edward <9326037+edwardoliveira@users.noreply.github.com>
* Update utils.py
Co-authored-by: João Rodrigues <cont.joaorodrigues@gmail.com>
Co-authored-by: Edward <9326037+edwardoliveira@users.noreply.github.com>