Skip to content

Commit ad37d22

Browse files
author
Dmytro Trotsko
committed
Added middleware to block spammer's ips
1 parent a0903b9 commit ad37d22

File tree

4 files changed

+45
-1
lines changed

4 files changed

+45
-1
lines changed

Pipfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ tzdata = "*"
4343
epiweeks = "*"
4444
delphi-utils = "*"
4545
numpy = "1.26.4"
46+
django-ipware = "*"
4647

4748
[dev-packages]
4849
flake8 = "*"

Pipfile.lock

Lines changed: 18 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/epiportal/block_middleware.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import ipaddress
2+
from django.http import HttpResponseForbidden
3+
from epiportal.utils import get_client_ip
4+
5+
6+
class BlockIPRangeMiddleware:
7+
BLOCKED_NETWORKS = [
8+
ipaddress.ip_network("43.173.0.0/16"),
9+
ipaddress.ip_network("43.163.0.0/16"),
10+
ipaddress.ip_network("216.73.216.0/24"),
11+
]
12+
13+
def __init__(self, get_response):
14+
self.get_response = get_response
15+
16+
def __call__(self, request):
17+
client_ip = get_client_ip(request)
18+
if any(
19+
ipaddress.ip_address(client_ip) in network
20+
for network in self.BLOCKED_NETWORKS
21+
):
22+
return HttpResponseForbidden(
23+
"Access denied. Please contact us at support@delphi.cmu.edu if you believe this is an error."
24+
)
25+
return self.get_response(request)

src/epiportal/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@
144144
'django.contrib.messages.middleware.MessageMiddleware',
145145
'django.middleware.clickjacking.XFrameOptionsMiddleware',
146146
'debug_toolbar.middleware.DebugToolbarMiddleware',
147+
'epiportal.block_middleware.BlockIPRangeMiddleware',
147148
]
148149

149150
INTERNAL_IPS: list[str] = [

0 commit comments

Comments
 (0)