summaryrefslogtreecommitdiff
path: root/postgresqleu/digisign/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'postgresqleu/digisign/views.py')
-rw-r--r--postgresqleu/digisign/views.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/postgresqleu/digisign/views.py b/postgresqleu/digisign/views.py
new file mode 100644
index 00000000..2d174af4
--- /dev/null
+++ b/postgresqleu/digisign/views.py
@@ -0,0 +1,39 @@
+from django.http import Http404, HttpResponse
+from django.shortcuts import get_object_or_404
+from django.views.decorators.csrf import csrf_exempt
+from django.db import transaction
+from django.conf import settings
+
+from postgresqleu.util.decorators import global_login_exempt
+from postgresqleu.digisign.models import DigisignProvider
+from postgresqleu.mailqueue.util import send_simple_mail
+
+
+@global_login_exempt
+@csrf_exempt
+def webhook(request, providershort, id):
+ if request.method != 'POST':
+ raise Http404()
+
+ provider = get_object_or_404(DigisignProvider, pk=id)
+ impl = provider.get_implementation()
+
+ if impl.webhookcode != providershort:
+ raise Http404()
+
+ try:
+ with transaction.atomic():
+ impl.process_webhook(request)
+ return HttpResponse("OK", status=200)
+ except Exception as e:
+ # Bad choice of address to send to, but it's the best we can do at this stage
+ # as we don't have a general notifications address.
+ send_simple_mail(
+ settings.INVOICE_SENDER_EMAIL,
+ settings.INVOICE_SENDER_EMAIL,
+ "Exception processing digital signature webhook",
+ "An exception occurred while processing a digital signature webhook for {}:\n\n{}\n".format(
+ provider.name,
+ e),
+ )
+ return HttpResponse("ERROR", status=500)