Add IP bans
Users can be banned by IP address now, either by singular IP or in an IP range. If they are banned and attempt to post, they will be met with a "you are banned until X date" screen. There are a few loose threads with this, and IP bans may be obsolete if I decide to go the accounts-required-for-posting route. But I think this is a good start for 4chan style posting. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
26
board/utils.py
Normal file
26
board/utils.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from board.models import Ban, RangeBan
|
||||
import ipaddress
|
||||
|
||||
|
||||
def get_client_ip(request):
|
||||
"Get the IP address of a client-side request. Shamelessly copy/pasted from StackOverflow."
|
||||
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
|
||||
if x_forwarded_for:
|
||||
ip = x_forwarded_for.split(",")[0]
|
||||
else:
|
||||
ip = request.META.get("REMOTE_ADDR")
|
||||
return ip
|
||||
|
||||
|
||||
def get_ip_bans(ip: str) -> list:
|
||||
bans = list(Ban.objects.filter(ip=ip))
|
||||
|
||||
ip_addr = ipaddress.ip_address(ip)
|
||||
for rangeban in RangeBan.objects.all():
|
||||
start = ipaddress.ip_address(rangeban.start)
|
||||
end = ipaddress.ip_address(rangeban.end)
|
||||
if ip_addr.version != start.version or ip_addr.version != end.version:
|
||||
continue
|
||||
if start <= ip_addr <= end: # type: ignore
|
||||
bans += [rangeban]
|
||||
return bans
|
||||
Reference in New Issue
Block a user