def sign_contract(request, partner_id=None, template_name='contract.html', context={}): if request.is_ajax(): if request.method == "POST": if request.POST.get('oper') == 'upload': form = ContractForm(request.POST, initial={'cer_file': fake_field_file, 'key_file': fake_field_file}) contract_id = request.POST.get('contract_id') if form.is_valid(): if request.FILES and request.FILES.get('cer_file') and request.FILES.get('key_file'): # Obtenemos el objecto Contract contract = Contract.objects.get(id=contract_id) passphrase = request.POST.get('password') # Hacemos el upload del archivo cer_file_path, cer_file_name = save_file(settings.AGR_STORAGE_PATH, request.FILES.get('cer_file'), 'tmp', contract_id) key_file_path, key_file_name = save_file(settings.AGR_STORAGE_PATH, request.FILES.get('key_file'), 'tmp', contract_id) # Aqui las validaciones con manifiesto-utilities.py cert_file = M2Crypto.X509.load_cert(cer_file_path, M2Crypto.X509.FORMAT_DER) key_cert_must_match, files_tuple = utilities.verify_cert_key_match(cer_file_name, key_file_name, passphrase) if not key_cert_must_match: for file in files_tuple: try: os.remove(file) except: pass response = { 'success': False, 'message': 'Verify that the certificate and the key match', } response = json.dumps(response) return HttpResponse(response) cert_is_fiel = utilities.FielValidator(cert_file) deserialize_validation = json.loads(json.dumps(cert_is_fiel.is_valid())) if cert_is_fiel.is_fiel: # Si el archivo si es FIEL cert_signed_by_sat = utilities.SignedSATAuthority(cert_file) deserialize_validation = json.loads(json.dumps(cert_signed_by_sat.is_valid())) if deserialize_validation['success']: # Si el archivo si esta firmado por el SAT cert_date_is_valid = utilities.CertificateExpiration(cert_file) deserialize_validation = json.loads(json.dumps(cert_date_is_valid.is_valid())) if cert_date_is_valid.valid: files_signed_created = utilities.gen_digital_seal(contract, files_tuple[0], files_tuple[2], passphrase, partner_id, contract.taxpayer_id) #print "files_signed_created", files_signed_created if files_signed_created: # Webservice sign_contract ws = AgreementWS() try: if partner_id == settings.SN_FINKOK: partner_id = None #print "sign_contract" ws.sign_contract(partner_id=partner_id, taxpayer_id=request.POST.get('rfc_person')) except: #print "error sign_contract" pass for file in files_tuple: try: os.remove(file) except: pass response = { 'success': True, 'message': '', 'uuid': str(contract.uuid), 'taxpayer_id': str(contract.taxpayer_id), 'partner_id': request.POST.get('partner_id'), } response = json.dumps(response) return HttpResponse(response) else: for file in files_tuple: try: os.remove(file) except: pass response = { 'success': False, 'message': u'No se ha podido firmar su manifiesto', } response = json.dumps(response) return HttpResponse(response) else: for file in files_tuple: try: os.remove(file) except: pass response = { 'success': False, 'message': deserialize_validation['message'], } response = json.dumps(response) return HttpResponse(response) else: for file in files_tuple: try: os.remove(file) except: pass response = { 'success': False, 'message': deserialize_validation['message'], } response = json.dumps(response) return HttpResponse(response) else: for file in files_tuple: try: os.remove(file) except: pass response = { 'success': False, 'message': deserialize_validation['message'], } response = json.dumps(response) return HttpResponse(response) else: response = { 'success': False, 'errors': dict(form.errors.items()) } response = json.dumps(response) return HttpResponse(response) if request.POST.get('oper') == 'save': #User not signed contract form = ContractForm(request.POST, initial={'cer_file': fake_field_file, 'key_file': fake_field_file}) first_invoice = request.POST.get('first_invoice') if form.is_valid(): contract = Contract( partner_uuid=form.cleaned_data['partner_id'], name=form.cleaned_data['name'], taxpayer_id=form.cleaned_data['rfc_person'], address=form.cleaned_data['address'], email=form.cleaned_data['email'], first_invoice=first_invoice, ) contract.save() response = { 'success': True, 'contract_id': contract.id } response = json.dumps(response) return HttpResponse(response) else: response = { 'success': False, 'errors': dict(form.errors.items()) } response = json.dumps(response) return HttpResponse(response) if request.POST.get('oper') == 'verify': ## Verify user if kinkok client ws = AgreementWS() if partner_id == settings.SN_FINKOK: user_valid = ws.verify_user(snid=None, taxpayer_id=request.POST.get('rfc_person')) else: user_valid = ws.verify_user(snid=partner_id, taxpayer_id=request.POST.get('rfc_person')) try: error = user_valid['error'] if error == "Invalid Token": error = {'rfc_person': 'Error en el servidor'} if error == "Account was not Found": error = {'rfc_person': 'Este usuario no esta en nuestro sistema'} response = { 'success': False, 'errors': error, } response = json.dumps(response) return HttpResponse(response) except: user = user_valid['contract'] if user: # Ya firmo el contrato contracts = Contract.objects.filter(taxpayer_id=request.POST.get('rfc_person')) contract = contracts[0] error = {'rfc_person': 'Este usuario ya firmo el manifiesto'} response = { 'success': False, 'errors': error, 'prev_signed': 'ok', 'partner_id': contract.partner_uuid, 'taxpayer_id': contract.taxpayer_id, 'uuid': str(contract.uuid), } else: #No ha firmado el contrato y es un usuario valido date_time = user_valid['datetime'] from datetime import datetime first_contract = datetime(year=2014, month=1, day=1) try: if first_contract < date_time: date_to_sign_contract = date_time else: date_to_sign_contract = first_contract except: #print "date error" pass response = { 'success': True, 'date_time': str(date_to_sign_contract), } response = json.dumps(response) return HttpResponse(response) else: response = { 'success': False, 'message': 'You cant access this via GET and Ajax' } response = json.dumps(response) return HttpResponse(response) else: ws = AgreementWS() snid = partner_id if not partner_id: partner_id = settings.SN_FINKOK client = ws.sn_info(snid) form = ContractForm(initial={'partner_id': partner_id}) context = { 'form': form, 'client': client, 'snid': snid, } response = render_to_response(template_name, context_instance=RequestContext( request, context )) return HttpResponse(response)
def admin(request, partner_id=None, template_name='admin.html', context={}): if request.POST.get('logout'): context = { 'show_login': 1, 'show_data': 0, } response = render_to_response(template_name, context_instance=RequestContext( request, context, )) response.set_cookie('usr', '') response.set_cookie('passwd', '') response.set_cookie('snid', '') response.set_cookie('valid', 0) return response if request.GET.get('sEcho'): ws = AgreementWS() user = request.COOKIES['usr'] passwd_enc = request.COOKIES['passwd'] passwd = utilities.pycripto_function_dec(passwd_enc) snid = request.COOKIES['snid'] users_ws = ws.users(snid, user, passwd) start = int(request.GET.get('iDisplayStart')) length = int(request.GET.get('iDisplayLength')) rows = [] contracts_sw = users_ws['users']['ContractUser'] total = len(contracts_sw) for contract in contracts_sw: try: obj_contract = Contract.objects.get(taxpayer_id=contract.taxpayer_id) except: obj_contract = None if obj_contract: try: signed_date = obj_contract.signed_date.strftime("%B %d, %Y") name_client = obj_contract.name except: signed_date = "date_error" name_client = obj_contract.name pass else: signed_date = '-' name_client = '-' rows.append([ "<form id='form_%s' action='/app/invoices/add/' method='POST' >" "<input type='checkbox' name=id id='%s'/>" "<input type='hidden' name='value' value='%s' id='%s'/></form>" % (contract.taxpayer_id, contract.taxpayer_id, contract.taxpayer_id, contract.taxpayer_id), '<span>%s</span>' % name_client, '<span>%s</span>' % contract.taxpayer_id, '<span>%s</span>' % signed_date, '<span class="contract_%s"></span>' % contract.contract, ]) rows = rows[start:start + length] result = { 'aaData': rows, 'iTotalRecords': total, 'iTotalDisplayRecords': total, } result = json.dumps(result) return HttpResponse(result) try: if request.COOKIES['valid'] == '1': context = { 'show_login': 0, 'show_data': 1, 'snid': request.COOKIES['snid'], } response = render_to_response(template_name, context_instance=RequestContext( request, context, )) return HttpResponse(response) except: pass if request.method == "POST": ws = AgreementWS() snid = partner_id user = request.POST.get('admin_usr') passwd = request.POST.get('admin_pass') users_ws = ws.users(snid, user, passwd) try: if users_ws['error'] == "Invalid Token": context = { 'error': 'Usuario o password incorrecto', 'show_login': 1, 'show_data': 0, } response = render_to_response(template_name, context_instance=RequestContext( request, context, )) return HttpResponse(response) except: context = { 'show_login': 0, 'show_data': 1, 'snid': snid, } response = render_to_response(template_name, context_instance=RequestContext( request, context, )) response.set_cookie('usr', user) response.set_cookie('passwd', utilities.pycripto_function(passwd)) response.set_cookie('snid', partner_id) response.set_cookie('valid', 1) return response context = { 'show_login': 1, 'show_data': 0, } response = render_to_response(template_name, context_instance=RequestContext( request, context, )) return HttpResponse(response)