44
55import base64
66
7+ from django .db .models import Q
8+ from django .utils import timezone
9+
710from .models import APIKey , APIUser
811
912
@@ -12,11 +15,16 @@ def __init__(self, get_response):
1215 self .get_response = get_response
1316
1417 def __call__ (self , request ):
18+ active_apikeys = APIKey .objects .filter (
19+ Q (expires__isnull = True ) | Q (expires__gt = timezone .now ()),
20+ enabled = True ,
21+ )
22+
1523 if "HTTP_AUTHORIZATION" in request .META :
1624 auth_type , credentials = request .META ["HTTP_AUTHORIZATION" ].split (" " , 1 )
1725 if auth_type .lower () == "bearer" :
1826 try :
19- apikey = APIKey . objects .get (key = credentials )
27+ apikey = active_apikeys .get (key = credentials )
2028 request .user = APIUser (apikey )
2129 request ._dont_enforce_csrf_checks = True
2230 return self .get_response (request )
@@ -27,7 +35,7 @@ def __call__(self, request):
2735 base64 .b64decode (credentials ).decode ().split (":" , 1 )
2836 )
2937 try :
30- apikey = APIKey . objects .get (key = password )
38+ apikey = active_apikeys .get (key = password )
3139 request .user = APIUser (apikey )
3240 request ._dont_enforce_csrf_checks = True
3341 return self .get_response (request )
@@ -36,7 +44,7 @@ def __call__(self, request):
3644
3745 if "X-API-Token" in request .headers :
3846 try :
39- apikey = APIKey . objects .get (key = request .headers ["X-API-Token" ])
47+ apikey = active_apikeys .get (key = request .headers ["X-API-Token" ])
4048 request .user = APIUser (apikey )
4149 request ._dont_enforce_csrf_checks = True
4250 return self .get_response (request )
0 commit comments