summaryrefslogtreecommitdiff
path: root/pgcommitfest/commitfest/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'pgcommitfest/commitfest/api.py')
-rw-r--r--pgcommitfest/commitfest/api.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/pgcommitfest/commitfest/api.py b/pgcommitfest/commitfest/api.py
new file mode 100644
index 0000000..ea12043
--- /dev/null
+++ b/pgcommitfest/commitfest/api.py
@@ -0,0 +1,31 @@
+from django.shortcuts import get_object_or_404
+from django.http import HttpResponse, Http404, HttpResponseForbidden
+from django.conf import settings
+from django.views.decorators.csrf import csrf_exempt
+from functools import wraps
+from django.utils.decorators import available_attrs
+
+import json
+
+from models import CommitFest
+
+def api_authenticate(view_func):
+ def _wrapped_view(request, *args, **kwargs):
+ if not request.META['REMOTE_ADDR'] in settings.API_AUTH:
+ return HttpResponseForbidden('Access Denied')
+ if not request.META.get('HTTP_X_API_AUTH', '') == settings.API_AUTH[request.META['REMOTE_ADDR']]:
+ return HttpResponseForbidden('Access Denied')
+ return view_func(request, *args, **kwargs)
+ return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view)
+
+@api_authenticate
+def active_commitfests(request):
+ cfs = list(CommitFest.objects.filter(status=CommitFest.STATUS_INPROGRESS))
+ if not cfs:
+ cfs = CommitFest.objects.filter(status=CommitFest.STATUS_OPEN).order_by('-id')[:1]
+
+ res = [
+ {'id': c.id, 'name': c.name, 'status': c.statusstring, 'numstatus': c.status} for c in cfs
+ ]
+ return HttpResponse(json.dumps(res),
+ content_type='application/json')