Skip to content

Migrate admin Pages editor from CKEditor 4 to CKEditor 5. - #515

Merged
gitnnolabs merged 1 commit into
scieloorg:masterfrom
gitnnolabs:bug/update-ckeditor
Aug 5, 2026
Merged

Migrate admin Pages editor from CKEditor 4 to CKEditor 5.#515
gitnnolabs merged 1 commit into
scieloorg:masterfrom
gitnnolabs:bug/update-ckeditor

Conversation

@gitnnolabs

Copy link
Copy Markdown
Collaborator

O que esse PR faz?

Substitui o CKEditor 4.22.1 (EOL) pelo CKEditor 5 self-hosted (GPL) no admin de Páginas informativas.

  • Remove o aviso "This CKEditor 4.22.1 version is not secure..." (CKEditor no OPAC BR #484)
  • Mantém create/edit de conteúdo HTML rico no Flask-Admin
  • Sincroniza o idioma da UI do editor com session.lang do admin (pt_BRpt-br, es, en)
  • Habilita os plugins OSS do bundle (toolbar completa, menu bar, htmlSupport permissivo para HTML legado)
  • Adiciona testes de integração em opac/tests/test_admin_pages_ckeditor.py

Onde a revisão poderia começar?

  1. opac/webapp/templates/admin/pages/_ckeditor5.html — carga dos assets e locale
  2. opac/webapp/static/js/ckeditor5/opac-pages-editor.js — init ClassicEditor / plugins / toolbar
  3. opac/webapp/templates/admin/pages/add.html e edit.html
  4. opac/tests/test_admin_pages_ckeditor.py

Como este poderia ser testado manualmente?

  1. Subir o ambiente local e fazer login no admin
  2. Ir em Páginas → criar uma página nova e confirmar que o CKEditor 5 carrega sem o aviso de versão insegura
  3. Editar uma página existente com HTML rico (listas, tabelas, links, alinhamento) e salvar
  4. Reabrir a página e conferir se o conteúdo foi preservado
  5. No rodapé do admin, trocar o idioma (Português / English / Español), recarregar create/edit e verificar se a toolbar/UI do editor acompanha o idioma
  6. (Opcional) Rodar os testes:
export OPAC_CONFIG="config/templates/testing.template" && flask --app opac.app test -p "test_admin_pages_ckeditor"

Algum cenário de contexto que queira dar?

A equipe de publicação reportou o banner de segurança do CKEditor 4 no OPAC BR. O projeto já estava na última release OSS do CK4 (4.22.1); a versão sugerida pelo aviso (4.25.1-lts) é comercial. A migração usa CKEditor 5 self-hosted com licenseKey: 'GPL', sem CDN nem licença paga. Plugins premium / cloud (CKBox, EasyImage, etc.) ficaram de fora.

Nota de licença: o OPAC é BSD-2-Clause; o CK5 OSS é GPL 2+. Vale acompanhamento jurídico SciELO / Open Source Program da CKSource se necessário.

Screenshots

O Ckeditor 5 está funcionando para o 3 idiomas:

EN:

Screenshot 2026-07-27 at 08 22 09

PT-BR:

Screenshot 2026-07-27 at 08 22 42

ES:

Screenshot 2026-07-27 at 08 23 06

Quais são os tickets relevantes?

Referências


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: substituição do CKEditor 4 EOL por CKEditor 5 OSS vendored em static/js/ckeditor5/ (não é pacote pip/npm de runtime). Validação Trivy/Sonar fica a cargo do pipeline do PR.
  • 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): validação ocorrerá no CI do próprio PR após o push.

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.): o campo content continua sendo HTML de páginas informativas editado apenas por usuários autenticados no admin (mesmo modelo do CK4). O editor usa htmlSupport permissivo para preservar HTML legado; o acesso permanece restrito ao admin.
  • 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)

Replace EOL CKEditor 4.22.1 with self-hosted CKEditor 5 (GPL) to remove the insecure-version warning (scieloorg#484), sync the editor UI language with the admin session locale, and cover create/edit plus locale wiring with tests.
@gitnnolabs gitnnolabs self-assigned this Jul 27, 2026
@gitnnolabs gitnnolabs added the bug Something isn't working label Jul 27, 2026
@samuelveigarangel

Copy link
Copy Markdown
Contributor

Não é melhor colocar o CKEditor via CDN ou instalar ele via npm no build? Acho que essas duas abordagens são melhores que carregar os arquivos do ckeditor no static/js

@gitnnolabs

Copy link
Copy Markdown
Collaborator Author

Não é melhor carregar o CKEditor via CDN ou instalá-lo via npm no build? Acho que essas duas abordagens seriam melhores do que carregar os arquivos na pasta static/js.

@samuelveigarangel, não temos o npm configurado neste projeto e evitamos o uso de CDNs de terceiros no OPAC. Como nosso tráfego é alto, depender de uma CDN externa traz o risco de indisponibilidade ou de sermos colocados em uma blacklist por excesso de requisições.

A principal justificativa, no entanto, é que o CKEditor é um componente restrito ao painel de admin. Como o volume de acessos a essa área é muito baixo, carregar os arquivos diretamente do static/js não gera problemas de performance e mantém a aplicação autônoma.

@gitnnolabs
gitnnolabs merged commit af85584 into scieloorg:master Aug 5, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants