7.5 KiB
Integração OnlyOffice Document Server no SAPL
Visão Geral
A integração com o OnlyOffice Document Server permite que os parlamentares criem e editem proposições diretamente no navegador usando um editor de texto completo, similar ao Microsoft Word ou LibreOffice Writer.
Configuração
1. Iniciar o OnlyOffice via Docker
O OnlyOffice já está configurado no docker-compose-dev.yml. Para iniciar:
cd /home/bruno/sapl/docker
docker-compose -f docker-compose-dev.yml up -d
Isso irá:
- Subir o container
sapl-devna porta 8000 - Subir o container
onlyoffice-documentserverna porta 8001
2. Verificar se o OnlyOffice está rodando
Acesse: http://localhost:8001/welcome/
Se você ver a página de boas-vindas do OnlyOffice, está funcionando!
3. Variáveis de Ambiente
As seguintes variáveis de ambiente estão configuradas em sapl/settings.py:
ONLYOFFICE_URL: URL do servidor OnlyOffice (padrão:http://localhost:8001)ONLYOFFICE_JWT_SECRET: Chave secreta para JWT (opcional, para segurança adicional)ONLYOFFICE_JWT_ENABLED: Se o JWT está habilitado (padrão: False)
4. Instalar Dependências Python
pip install -r requirements/requirements.txt
Isso instalará:
python-docx==1.1.0- Para criar documentos Word em brancoPyJWT==2.8.0- Para autenticação JWT (opcional)requests==2.31.0- Para fazer requests HTTP
Como Usar
Criando uma Proposição com OnlyOffice
-
Acesse
/proposicao/create -
Preencha os dados básicos:
- Tipo de Proposição
- Ementa/Descrição
-
Selecione a opção "Criar com OnlyOffice" no campo "Tipo do Texto da Proposição"
-
Salve a proposição (ainda sem texto)
-
Na página de detalhes da proposição, clique no botão "Editar com OnlyOffice"
-
O editor será aberto no navegador, pronto para uso
-
Digite o texto da proposição usando todos os recursos do editor:
- Formatação de texto (negrito, itálico, sublinhado)
- Parágrafos e espaçamento
- Listas numeradas e com marcadores
- Tabelas
- Imagens
- Cabeçalhos e rodapés
- E muito mais!
-
O documento é salvo automaticamente enquanto você edita
-
Quando terminar, feche o editor e volte para a página da proposição
-
O arquivo estará disponível no campo "Texto Original"
Editando uma Proposição Existente
-
Acesse a proposição em
/proposicao/{id}/ -
Se a proposição ainda não foi enviada, você verá o botão "Editar com OnlyOffice"
-
Clique no botão para abrir o editor
-
Edite o documento
-
As alterações são salvas automaticamente
Enviando a Proposição
Após criar/editar o texto com OnlyOffice:
- Volte para a página de detalhes da proposição
- Clique em "Enviar"
- O documento será enviado junto com a proposição
Arquitetura
Endpoints Criados
/proposicao/{pk}/onlyoffice/editor- Renderiza a página com o editor/proposicao/{pk}/onlyoffice/config- Retorna configuração JSON para o editor/proposicao/{pk}/onlyoffice/download- Endpoint para o OnlyOffice baixar o documento/proposicao/{pk}/onlyoffice/callback- Callback para salvar o documento editado
Fluxo de Edição
┌──────────────┐
│ Usuário │
└──────┬───────┘
│ 1. Acessa editor
▼
┌──────────────────┐
│ SAPL (Django) │
└──────┬───────────┘
│ 2. Retorna HTML com script do OnlyOffice
▼
┌──────────────────┐
│ Navegador │
└──────┬───────────┘
│ 3. Carrega config via /onlyoffice/config
▼
┌──────────────────┐
│ SAPL (Django) │
└──────┬───────────┘
│ 4. Retorna configuração JSON
▼
┌──────────────────┐
│ Navegador │◄────────────┐
└──────┬───────────┘ │
│ 5. Inicializa editor │
│ │
▼ │
┌──────────────────┐ │
│ OnlyOffice Server│ │
└──────┬───────────┘ │
│ 6. Baixa documento │
│ via /download │
│ │
▼ │
┌──────────────────┐ │
│ SAPL (Django) │─────────────┘
└──────┬───────────┘
│ 7. Retorna documento (ou documento em branco)
▼
┌──────────────────┐
│ OnlyOffice Server│
└──────┬───────────┘
│ 8. Usuário edita
│ 9. AutoSave
▼
┌──────────────────┐
│ SAPL (Django) │
│ /callback │
└──────┬───────────┘
│ 10. Salva documento no banco
▼
┌──────────────────┐
│ Proposição │
│ texto_original │
└──────────────────┘
Segurança
- Autenticação: Apenas usuários autenticados podem acessar o editor
- Autorização: Apenas operadores do autor da proposição podem editar
- Bloqueio após envio: Proposições enviadas não podem mais ser editadas
- JWT (Opcional): Pode ser habilitado para maior segurança
Troubleshooting
OnlyOffice não carrega
Problema: A página do editor mostra "Erro ao carregar o editor"
Solução:
- Verifique se o container está rodando:
docker ps | grep onlyoffice - Verifique os logs:
docker logs onlyoffice-documentserver - Verifique se a porta 8001 está acessível:
curl http://localhost:8001/welcome/
Documento não salva
Problema: Edições não são salvas
Solução:
- Verifique os logs do Django para ver se o callback está sendo chamado
- Verifique se a URL de callback está acessível pelo OnlyOffice
- Se estiver usando Docker, verifique se os containers estão na mesma rede
Erro de permissão
Problema: "Você não tem permissão para editar esta proposição"
Solução:
- Verifique se o usuário está vinculado ao autor da proposição
- Verifique em
/sistema/usuario/{id}/editse o campo "Autor" está preenchido
Configuração de Produção
Para ambiente de produção:
-
Habilite JWT:
ONLYOFFICE_JWT_ENABLED=True ONLYOFFICE_JWT_SECRET="sua-chave-secreta-forte-aqui" -
Use HTTPS:
- Configure um certificado SSL para o OnlyOffice
- Atualize
ONLYOFFICE_URLpara usarhttps://
-
Configure recursos:
- O OnlyOffice pode consumir bastante memória
- Recomendado: mínimo 4GB RAM para o container
-
Backup:
- Os documentos são salvos no campo
texto_originalda proposição - Certifique-se de fazer backup regular do banco de dados e arquivos de mídia
- Os documentos são salvos no campo