11import logging
22from contextlib import suppress
3+ from datetime import datetime
34from time import strftime
45
56from django .conf import settings
910from django .dispatch .dispatcher import receiver
1011from django .urls import reverse
1112from django .utils import timezone
13+ from django .utils .timezone import is_naive , make_aware , now
1214from fieldsignals import pre_save_changed
1315
1416import 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+
743756def 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