Skip to content

Commit dca5d2e

Browse files
committed
🐛 fix finding closed with a provided mitigated date
1 parent 038cf16 commit dca5d2e

1 file changed

Lines changed: 20 additions & 6 deletions

File tree

dojo/finding/helper.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22
from contextlib import suppress
3+
from datetime import datetime
34
from time import strftime
45

56
from django.conf import settings
@@ -9,6 +10,7 @@
910
from django.dispatch.dispatcher import receiver
1011
from django.urls import reverse
1112
from django.utils import timezone
13+
from django.utils.timezone import is_naive, make_aware, now
1214
from fieldsignals import pre_save_changed
1315

1416
import dojo.jira_link.helper as jira_helper
@@ -740,6 +742,17 @@ def save_vulnerability_ids_template(finding_template, vulnerability_ids):
740742
finding_template.cve = None
741743

742744

745+
def normalize_datetime(value):
746+
"""Ensure value is timezone-aware datetime."""
747+
if value:
748+
if not isinstance(value, datetime):
749+
value = datetime.combine(value, datetime.min.time())
750+
# Make timezone-aware if naive
751+
if is_naive(value):
752+
value = make_aware(value)
753+
return value
754+
755+
743756
def close_finding(
744757
*,
745758
finding,
@@ -761,15 +774,16 @@ def close_finding(
761774
"""
762775
# Core status updates
763776
finding.is_mitigated = is_mitigated
764-
now = timezone.now()
765-
finding.mitigated = mitigated or now
777+
current_time = now()
778+
mitigated_date = normalize_datetime(mitigated) or current_time
779+
finding.mitigated = mitigated_date
766780
finding.mitigated_by = mitigated_by or user
767781
finding.active = False
768782
finding.false_p = bool(false_p)
769783
finding.out_of_scope = bool(out_of_scope)
770784
finding.duplicate = bool(duplicate)
771785
finding.under_review = False
772-
finding.last_reviewed = finding.mitigated
786+
finding.last_reviewed = mitigated_date
773787
finding.last_reviewed_by = user
774788

775789
# Create note if provided
@@ -779,16 +793,16 @@ def close_finding(
779793
entry=note_entry,
780794
author=user,
781795
note_type=note_type,
782-
date=finding.mitigated,
796+
date=mitigated_date,
783797
)
784798
finding.notes.add(new_note)
785799

786800
# Endpoint statuses
787801
for status in finding.status_finding.all():
788802
status.mitigated_by = finding.mitigated_by
789-
status.mitigated_time = finding.mitigated
803+
status.mitigated_time = mitigated_date
790804
status.mitigated = True
791-
status.last_modified = timezone.now()
805+
status.last_modified = current_time
792806
status.save()
793807

794808
# Risk acceptance

0 commit comments

Comments
 (0)