diff --git a/source/app/controllers/cfdi_cert.py b/source/app/controllers/cfdi_cert.py index 12b19c4..49b72dd 100644 --- a/source/app/controllers/cfdi_cert.py +++ b/source/app/controllers/cfdi_cert.py @@ -35,6 +35,7 @@ class SATCertificate(object): self._is_fiel = False self._are_couple = False self._is_valid_time = False + self._cer = b'' self._cer_pem = '' self._cer_txt = '' self._key_enc = b'' @@ -64,6 +65,7 @@ class SATCertificate(object): return digest.finalize() def _get_data_cer(self, cer): + self._cer = cer obj = x509.load_der_x509_certificate(cer, default_backend()) self._rfc = obj.subject.get_attributes_for_oid( NameOID.X500_UNIQUE_IDENTIFIER)[0].value.split(' ')[0] @@ -182,6 +184,10 @@ class SATCertificate(object): def is_valid_time(self): return self._is_valid_time + @property + def cer(self): + return self._cer + @property def cer_pem(self): return self._cer_pem.encode() diff --git a/source/app/controllers/utils.py b/source/app/controllers/utils.py index 6ba662b..413df7e 100644 --- a/source/app/controllers/utils.py +++ b/source/app/controllers/utils.py @@ -619,17 +619,9 @@ def get_client_balance(auth): def get_cert(args): - p1 = '/home/mau/Desktop/Pruebas_EKU9003173C9/file.cer' - cer = args['cer'] - # ~ cer = cer.encode() - # ~ cer = base64.b64decode(args['cer'].encode()) - with open(p1, 'w') as f: - f.write(cer) - # ~ cer = base64.b64decode(args['cer'].encode()) - print('TYPE', type(cer)) - # ~ print(cer) - # ~ key = base64.b64decode(args['key'].encode()) - # ~ cert = SATCertificate(cer, key, args['contra']) - return + cer = base64.b64decode(args['cer'].split(',')[1]) + key = base64.b64decode(args['key'].split(',')[1]) + cert = SATCertificate(cer, key, args['contra']) + return cert diff --git a/source/app/models/main.py b/source/app/models/main.py index 3fdcb54..a03c6cd 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -1181,10 +1181,36 @@ class Certificado(BaseModel): return getattr(cls, f'_get_{opt}')(values) @classmethod - def _validate(cls, args): + def _validate_cert(cls, args): + msg = 'Certificado guardado correctamente' + result = {'ok': True, 'msg': msg, 'data': {}} cert = utils.get_cert(args) - print(cert) - return {'ok': False, 'msg': 'error', 'data': {}} + if not cert.is_valid: + result['ok'] = False + result['msg'] = cert.error + return result + + obj = Certificado.get(Certificado.es_fiel==False) + if obj.rfc != cert.rfc: + result['ok'] = False + result['msg'] = 'El RFC del certificado no corresponde.' + return result + + obj.key_enc = cert.key_enc + obj.cer = cert.cer + obj.serie = cert.serial_number + obj.desde = cert.not_before + obj.hasta = cert.not_after + obj.save() + + data = { + 'cert_rfc': obj.rfc, + 'cert_serie': obj.serie, + 'cert_desde': obj.desde, + 'cert_hasta': obj.hasta, + } + result['data'] = data + return result @classmethod def post(cls, values): @@ -1198,16 +1224,6 @@ class Certificado(BaseModel): def get_(cls): return Certificado.select()[0] - @classmethod - def add(cls, file_obj): - if file_obj.filename.endswith('key'): - path_key = util.save_temp(file_obj.file.read()) - Configuracion.add({'path_key': path_key}) - elif file_obj.filename.endswith('cer'): - path_cer = util.save_temp(file_obj.file.read()) - Configuracion.add({'path_cer': path_cer}) - return {'status': 'server'} - @classmethod def validate(cls, values, session): row = {} diff --git a/source/static/js/controller/admin.js b/source/static/js/controller/admin.js index 80a3b82..b004781 100644 --- a/source/static/js/controller/admin.js +++ b/source/static/js/controller/admin.js @@ -2651,34 +2651,6 @@ function cmd_subir_certificado_click(){ return } - //~ if($$('lst_cert').count() < 2){ - //~ msg = 'Selecciona al menos dos archivos: CER y KEY del certificado.' - //~ msg_error(msg) - //~ return - //~ } - - //~ if($$('lst_cert').count() > 2){ - //~ msg = 'Selecciona solo dos archivos: CER y KEY del certificado.' - //~ msg_error(msg) - //~ return - //~ } - - //~ var fo1 = $$('up_cert').files.getItem($$('up_cert').files.getFirstId()) - //~ var fo2 = $$('up_cert').files.getItem($$('up_cert').files.getLastId()) - - //~ var ext = ['key', 'cer'] - //~ if(ext.indexOf(fo1.type.toLowerCase()) == -1 || ext.indexOf(fo2.type.toLowerCase()) == -1){ - //~ msg = 'Archivos inválidos, se requiere un archivo CER y un KEY.' - //~ msg_error(msg) - //~ return - //~ } - - //~ if(fo1.type == fo2.type && fo1.size == fo2.size){ - //~ msg = 'Selecciona archivos diferentes: un archivo CER y un KEY.' - //~ msg_error(msg) - //~ return - //~ } - var serie = $$('form_cert').getValues()['cert_serie'] if(serie){ @@ -2697,13 +2669,6 @@ function cmd_subir_certificado_click(){ }) } - //~ if (fo1.type.toLowerCase()=='cer'){ - //~ values['cer'] = fo1.file - //~ values['key'] = fo2.file - //~ } else { - //~ values['key'] = fo1.file - //~ values['cer'] = fo2.file - //~ } $$('form_upload').setValues({}) $$('up_cert').files.data.clearAll() @@ -2740,12 +2705,12 @@ function up_cert_before_file_add(file){ reader.addEventListener('load', (event) => { file_cer = event.target.result; }); - reader.readAsBinaryString(file.file); + reader.readAsDataURL(file.file); } else { reader.addEventListener('load', (event) => { file_key = event.target.result; }); - reader.readAsBinaryString(file.file); + reader.readAsDataURL(file.file); } } @@ -2754,7 +2719,7 @@ function validate_cert(values){ msg = 'Archivos recibidos correctamente. Esperando validación' msg_ok(msg) - values['opt'] = 'validate' + values['opt'] = 'validate_cert' webix.ajax().post('/cert', values, { error:function(text, data, XmlHttpRequest){ msg = 'Ocurrio un error, consulta a soporte técnico' @@ -2772,35 +2737,3 @@ function validate_cert(values){ }) } - -//~ function up_cert_upload_complete(response){ - //~ if(response.status != 'server'){ - //~ msg = 'Ocurrio un error al subir los archivos' - //~ msg_error(msg) - //~ return - //~ } - - //~ msg = 'Archivos subidos correctamente. Esperando validación' - //~ msg_ok(msg) - - //~ var values = $$('form_upload').getValues() - //~ $$('form_upload').setValues({}) - //~ $$('up_cert').files.data.clearAll() - //~ values['opt'] = 'validate' - - //~ webix.ajax().post('/cert', values, { - //~ error:function(text, data, XmlHttpRequest){ - //~ msg = 'Ocurrio un error, consulta a soporte técnico' - //~ msg_error(msg) - //~ }, - //~ success:function(text, data, XmlHttpRequest){ - //~ var values = data.json() - //~ if(values.ok){ - //~ $$('form_cert').setValues(values.data) - //~ msg_ok(values.msg) - //~ }else{ - //~ msg_error(values.msg) - //~ } - //~ } - //~ }) -//~ } diff --git a/source/static/js/ui/admin.js b/source/static/js/ui/admin.js index 0e02fbd..5af4922 100644 --- a/source/static/js/ui/admin.js +++ b/source/static/js/ui/admin.js @@ -292,7 +292,7 @@ var emisor_certificado = [ {view: 'list', id: 'lst_cert', name: 'certificado', type: 'uploader', autoheight:true, borderless: true}, {}]}, {cols: [{}, - {view: 'text', id: 'txt_contra', name: 'contra', value: '12345678a', + {view: 'text', id: 'txt_contra', name: 'contra', label: 'Contraseña KEY', labelPosition: 'top', labelAlign: 'center', type: 'password', required: true}, {}]}, {cols: [{}, {view: 'button', id: 'cmd_subir_certificado',