def post(self, request): form = self.form_class(request.POST) if form.is_valid(): if request.user.is_authenticated(): billing = form.save(commit=False) billing.user = request.user _cryptor = self.default_cryptor(*gen_password(request.user.password)) try: billing.sign = billing.sign[:70] billing.sign = _cryptor.encrypt(billing.sign.encode('ascii')) except Exception as ex: return HttpResponseServerError(str(ex).encode('utf-8')) billing.transaction_timestamp = timezone.now() billing.save() _validator = self.default_validator() try: trz_sign = _validator.invalidate(request.user.username, billing.sign) except Exception as ex: return HttpResponseServerError(str(ex).encode('utf-8')) response = HttpResponseRedirect(self.success_url % request.user.id) set_cookie(response, 'transaction_sign', trz_sign) set_cookie(response, 'transaction_id', billing.sign) return response else: form.add_error(None, "User must be logged in to create billings") return render(request, self.template_name, {'form' : form })
def get(self, request, tid): transaction = self.query_transaction(tid) transaction_sign = request.COOKIES.get('transaction_sign') if transaction_sign is not None: try: _validator = self.default_validator() if _validator.validate(transaction, transaction_sign): resp = render(request, self.template_name, {"transaction": transaction, "status":"validated"}) set_cookie(resp, "valid", "True") return resp else: return render(request, self.template_name, {"transaction": transaction, "status":"unvalidated"}) except Exception as ex: return HttpResponseServerError(ex) else: raise Http404("Transaction sign is empty")