Add report cooldowns

This is to prevent report flooding/spamming.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2022-07-13 13:06:33 -07:00
parent f04604ce69
commit f54337a139
2 changed files with 25 additions and 1 deletions

View File

@@ -101,8 +101,27 @@ class ReportForm(ModelForm):
record = ReportRecord.objects.get(post=self.op)
except ReportRecord.DoesNotExist:
record = ReportRecord.objects.create(post=self.op)
if record.report_set.filter(ip=self.instance.ip):
ip = self.instance.ip
if record.report_set.filter(ip=ip):
raise ValidationError(_("You have already reported this post."))
# Not sure if it's possible to use the ORM to get a related field of a
# related field - report.record.post.board
board = self.op.board
all_reports = [
r
for r in Report.objects.filter(ip=ip).order_by("-created")
if r.record.post.board == board
]
if all_reports:
last_report = all_reports[0]
now = timezone.now()
delta = now - last_report.created
if delta < board.report_cooldown:
raise ValidationError(
_(f"Please wait a few seconds before submitting another report"),
)
self.instance.record = record
return super(ReportForm, self).clean()