Files
test-auth/app/api/auth.py

35 lines
1.2 KiB
Python

from urllib import urlencode
from datetime import datetime
from django.http import HttpResponseForbidden
from django.contrib.auth.models import AnonymousUser
from django.utils.timezone import now
from api.models import AuthAPIKey, AuthAPILog
class APIKeyAuthentication(object):
""" Validats a request by API key passed as a GET parameter """
def is_authenticated(self, request):
try:
keyobj = AuthAPIKey.objects.get(key=request.GET.get('apikey', None))
except AuthAPIKey.DoesNotExist:
pass
else:
if keyobj and keyobj.active:
params = request.GET.copy()
if params.get('apikey', None): del params['apikey']
if len(params):
url = "%s?%s" % (request.path, urlencode(params))
else:
url = request.path
AuthAPILog.objects.create(key=keyobj, access_datetime=now(), url=url)
request.user = AnonymousUser()
request.api_key = keyobj
return True
return False
def challenge(self):
return HttpResponseForbidden('Access Denied, use a API Key')