From 264090f2a649bc5d04a015f862725721564597e0 Mon Sep 17 00:00:00 2001 From: El Mau Date: Thu, 25 Nov 2021 10:22:23 -0600 Subject: [PATCH] =?UTF-8?q?Remover=20nodo=20KeyValue=20en=20XML=20para=20c?= =?UTF-8?q?ancelaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/app/controllers/pacs/cfdi_cert.py | 16 +++---- source/app/controllers/utils.py | 3 +- source/app/settings.py | 56 ++++++++++++------------ 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/source/app/controllers/pacs/cfdi_cert.py b/source/app/controllers/pacs/cfdi_cert.py index a3f32aa..5af2f57 100644 --- a/source/app/controllers/pacs/cfdi_cert.py +++ b/source/app/controllers/pacs/cfdi_cert.py @@ -7,6 +7,7 @@ import getpass import subprocess from pathlib import Path +import lxml.etree as ET import xmlsec from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization @@ -76,8 +77,8 @@ class SATCertificate(object): self._rfc = obj.subject.get_attributes_for_oid( NameOID.X500_UNIQUE_IDENTIFIER)[0].value.split(' ')[0] - self._serial_number2 = str(obj.serial_number) - self._serial_number = '{0:x}'.format(obj.serial_number)[1::2] + self._serial_number2 = '{0:x}'.format(obj.serial_number) + self._serial_number = self._serial_number2[1::2] self._not_before = obj.not_valid_before self._not_after = obj.not_valid_after now = datetime.datetime.utcnow() @@ -153,25 +154,24 @@ class SATCertificate(object): def sign_xml(self, tree): node = xmlsec.tree.find_node(tree, xmlsec.constants.NodeSignature) ctx = xmlsec.SignatureContext() - key = xmlsec.Key.from_memory(self.key_pem, xmlsec.constants.KeyDataFormatPem) + key = xmlsec.Key.from_memory( + self.key_pem, xmlsec.constants.KeyDataFormatPem) ctx.key = key ctx.sign(node) node = xmlsec.tree.find_node(tree, 'X509Certificate') node.text = self.cer_txt - node = xmlsec.tree.find_node(tree, 'X509IssuerName') node.text = self.issuer node = xmlsec.tree.find_node(tree, 'X509SerialNumber') node.text = self.serial_number2 - node = xmlsec.tree.find_node(tree, 'SignatureValue') node.text = node.text.replace('\n', '') - # ~ node = xmlsec.tree.find_node(tree, 'Modulus') - # ~ node.text = node.text.replace('\n', '') + xml_signed = ET.tostring( + tree, encoding='utf-8', xml_declaration=True).decode() - return tree + return xml_signed @property def rfc(self): diff --git a/source/app/controllers/utils.py b/source/app/controllers/utils.py index cda350a..92ba094 100644 --- a/source/app/controllers/utils.py +++ b/source/app/controllers/utils.py @@ -694,8 +694,7 @@ def cancel_xml_sign(invoice, auth, certificado): } template = TEMPLATE_CANCEL.format(**data) tree = ET.fromstring(template.encode()) - tree = cert.sign_xml(tree) - sign_xml = ET.tostring(tree).decode() + sign_xml = cert.sign_xml(tree) result = pac.cancel_xml(sign_xml, auth, invoice.xml) if pac.error: diff --git a/source/app/settings.py b/source/app/settings.py index 0da4434..c70dd3b 100644 --- a/source/app/settings.py +++ b/source/app/settings.py @@ -278,32 +278,34 @@ DEFAULT_GLOBAL = { # ~ # ~ # ~ """ -TEMPLATE_CANCEL = """ - - {uuid} - - - - - - - - - - - - - - - - - - - - - - - - + +TEMPLATE_CANCEL = """ + + {uuid} + + + + + + + + + + + + + + + + + + + + + + + + + """