Add report cooldowns
This is to prevent report flooding/spamming. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user