28 lines
896 B
Python
28 lines
896 B
Python
|
import base64
|
||
|
|
||
|
from cryptography import x509
|
||
|
|
||
|
from odoo import fields, models
|
||
|
|
||
|
|
||
|
class Certificate(models.Model):
|
||
|
_inherit = 'certificate.certificate'
|
||
|
|
||
|
scope = fields.Selection(
|
||
|
selection_add=[
|
||
|
('tbai', 'TBAI')
|
||
|
],
|
||
|
)
|
||
|
|
||
|
def _l10n_es_edi_tbai_get_issuer(self):
|
||
|
self.ensure_one()
|
||
|
|
||
|
cert = x509.load_pem_x509_certificate(base64.b64decode(self.pem_certificate))
|
||
|
|
||
|
common_name = cert.issuer.get_attributes_for_oid(x509.oid.NameOID.COMMON_NAME)[0].value
|
||
|
org_unit = cert.issuer.get_attributes_for_oid(x509.oid.NameOID.ORGANIZATIONAL_UNIT_NAME)[0].value
|
||
|
org_name = cert.issuer.get_attributes_for_oid(x509.oid.NameOID.ORGANIZATION_NAME)[0].value
|
||
|
country_name = cert.issuer.get_attributes_for_oid(x509.oid.NameOID.COUNTRY_NAME)[0].value
|
||
|
|
||
|
return f'CN={common_name}, OU={org_unit}, O={org_name}, C={country_name}'
|