summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorCélestin Matte2021-11-30 20:03:00 +0000
committerMagnus Hagander2021-11-30 20:03:00 +0000
commitec2f19bf1c9c23080b956e80fc8c377a99a276e1 (patch)
tree02d4a01b32d10900fdac577d36b7179e233f8a44 /django
parente56011c3e0401506a47bcfe6668c1ddba0d013a7 (diff)
Allow use of IP ranges for API_CLIENTS
Diffstat (limited to 'django')
-rw-r--r--django/archives/mailarchives/api.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/django/archives/mailarchives/api.py b/django/archives/mailarchives/api.py
index 8909dac..a6b2536 100644
--- a/django/archives/mailarchives/api.py
+++ b/django/archives/mailarchives/api.py
@@ -1,6 +1,7 @@
from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import get_object_or_404
from django.conf import settings
+import ipaddress
from .views import cache
from .models import Message, List
@@ -8,12 +9,19 @@ from .models import Message, List
import json
+def is_host_allowed(request):
+ for ip_range in settings.API_CLIENTS:
+ if ipaddress.ip_address(request.META['REMOTE_ADDR']) in ipaddress.ip_network(ip_range):
+ return True
+ return False
+
+
@cache(hours=4)
def listinfo(request):
if not settings.PUBLIC_ARCHIVES:
return HttpResponseForbidden('No API access on private archives for now')
- if not request.META['REMOTE_ADDR'] in settings.API_CLIENTS:
+ if not is_host_allowed(request):
return HttpResponseForbidden('Invalid host')
resp = HttpResponse(content_type='application/json')
@@ -33,7 +41,7 @@ def latest(request, listname):
if not settings.PUBLIC_ARCHIVES:
return HttpResponseForbidden('No API access on private archives for now')
- if not request.META['REMOTE_ADDR'] in settings.API_CLIENTS:
+ if not is_host_allowed(request):
return HttpResponseForbidden('Invalid host')
# Return the latest <n> messages on this list.
@@ -94,7 +102,7 @@ def thread(request, msgid):
if not settings.PUBLIC_ARCHIVES:
return HttpResponseForbidden('No API access on private archives for now')
- if not request.META['REMOTE_ADDR'] in settings.API_CLIENTS:
+ if not is_host_allowed(request):
return HttpResponseForbidden('Invalid host')
# Return metadata about a single thread. A list of all the emails