diff options
Diffstat (limited to 'pgcommitfest/commitfest/api.py')
-rw-r--r-- | pgcommitfest/commitfest/api.py | 31 |
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') |