Skip to content

Commit 2884569

Browse files
committed
apikeys: check enabled and not expired
1 parent d0e04d9 commit 2884569

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

apikeys/middleware.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
import base64
66

7+
from django.db.models import Q
8+
from django.utils import timezone
9+
710
from .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

Comments
 (0)