Conversation
rvalyi
marked this pull request as draft
September 3, 2026 13:35
Contributor
|
Hi @renatonlima, |
certificateThe fiscal certificate was refactored to extend the Odoo core certificate.certificate model, which stores the uploaded pfx in 'content' and its password in 'pkcs12_password'. Adapt the NFe signing path and the tests that create fake certificates to the new fields and model.
The fiscal certificate was refactored to extend the Odoo core certificate.certificate model. Adapt the SEFAZ test to create the fake certificate with the core model and its 'content'/'pkcs12_password' fields.
Member
|
Muito bom parabéns, uma duvida besta por que não olhei o código, dessa forma a senha do certificado fica criptografado no bando de dados? |
rvalyi
force-pushed
the
18.0-certificate-refactor
branch
from
September 3, 2026 14:28
bce855f to
fa9b52f
Compare
Member
Author
A senha do certificado continua sem criptografia, assim como ta no core e ate na branch master. Mas eu acabei de criar (com meu amigue GLM) um pequeno glue module que resolve isso usando o modulo data_encryption da OCA. Seria bom se vc puder dar um feedback OCA/server-env#294 |
rvalyi
marked this pull request as ready for review
September 3, 2026 16:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo
Este PR refatora o módulo
l10n_br_fiscal_certificatepara estender o módulo corecertificate(certificate.certificate) do Odoo, em vez de manter um modelo próprio (l10n_br_fiscal.certificate). Toda a lógica genérica de certificado — parsing de PFX/PKCS12, extração de datas, número de série, validade, chave privada e cadeia de certificados — passa a ser responsabilidade do core. O módulo brasileiro mantém apenas o que é genuinamente específico do Brasil.Motivação
O módulo duplicava lógica que já existe (e continua evoluindo) no core
certificate:is_valid);O core faz tudo isso de forma mais robusta e completa: suporta DER, PEM e PKCS12;
is_validé pesquisável; a chave privada fica separada emcertificate.key; os certificados da cadeia são criados automaticamente; e há escopo por empresa.O que muda
l10n_br_fiscal.certificatedeixa de existir e vira_inheritdecertificate.certificate, adicionando apenas:scope(seleção estendida com o valorl10n_br);type(nf-e / e-cpf / e-cnpj);subtype(a1 / a3);owner_cnpj_cpf(computado a partir desubject_common_name);issuer_name(computado a partir depem_certificate).res.companymantémcertificate_nfe_id/certificate_ecnpj_id(agora apontando paracertificate.certificate) e o método_get_br_ecertificate(), que continua devolvendo o objetoCertificadodoerpbrasil.assinatura. Ou seja, a assinatura XML-DSig dos documentos fiscais (NF-e, CT-e, MDF-e, NFS-e) não muda.file/passwordforam mapeados paracontent/pkcs12_password.Menos código para manter
Apesar de o script de migração adicionar linhas, a lógica de negócio que passamos a manter é bem menor:
models/certificate.py: de 146 linhas → 66 linhas (−80 linhas de parsing,validação, cálculo de datas/nome/validade, constraints, onchange e overrides de
create/write, tudo agora delegado ao core);migrations/18.0.2.0.0/pre-migration.py+post-migration.py,~138 linhas) são código executado uma única vez durante a migração da base — não é lógica de negócio a ser mantida no dia a dia.
Ou seja, trocamos ~80 linhas de lógica recorrente (e vários conceitos: modelo próprio, parsing, validade, nome, chave privada, cadeia) por código de migração que roda uma única vez. O módulo fica restrito ao que é brasileiro: tipo/subtipo do certificado, CNPJ/CPF do titular e a integração com o
erpbrasil.assinatura.À prova de futuro (Odoo 20)
certificateé mantido ativamente pela Odoo S.A. e, no Odoo 20, já traz anova API
BinaryBytes,_verify, suporte a Ed25519, chave criptografada escope='ca'. Como a extensão brasileira não toca mais em codificação binária (content/pem_certificate), a migração para o Odoo 20 fica absorvida pelo core — o port do módulo BR tende a zero.owner_cnpj_cpfeissuer_namesão campos computados (derivados desubject_common_name/pem_certificate), portanto não há dado armazenado que precise de nova migração._get_br_ecertificate()mantém o contrato com os módulos fiscais, que continuam assinando viaerpbrasil.assinatura(XML-DSig rsa-sha1, que o corecertificatenãosubstitui).
Migração de dados
Como o modelo mudou de nome e passou a ser escopado por empresa, foi incluído um script de migração no padrão OpenUpgrade (
migrations/18.0.2.0.0/):pre-migration.pycopia os certificados legados para uma tabela temporária (o campo bináriofilevive emir.attachment);post-migration.pyrecria cada certificado comocertificate.certificate(mapeandofile→content,password→pkcs12_password,type,subtypee derivandocompany_iddos vínculos emres.company), re-aponta as FKscertificate_nfe_id/certificate_ecnpj_ide remove a tabela legada.Observação: o core
certificate.certificateexigecompany_id, então os certificados passam a ser escopados por empresa (antes eram globais).Assisted by GLM 5.3
antes:
depois: