summaryrefslogtreecommitdiff
path: root/pgcommitfest/commitfest/api.py
blob: ea12043060072b6272d7410f0808781c36cbd561 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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')