@@ -1505,10 +1505,6 @@ class Engagement(models.Model):
1505
1505
default = "threat_model" , editable = False )
1506
1506
tmodel_path = models .CharField (max_length = 1000 , default = "none" ,
1507
1507
editable = False , blank = True , null = True )
1508
- risk_acceptance = models .ManyToManyField ("Risk_Acceptance" ,
1509
- default = None ,
1510
- editable = False ,
1511
- blank = True )
1512
1508
done_testing = models .BooleanField (default = False , editable = False )
1513
1509
engagement_type = models .CharField (editable = True , max_length = 30 , default = "Interactive" ,
1514
1510
null = True ,
@@ -1550,7 +1546,7 @@ def copy(self):
1550
1546
old_notes = list (self .notes .all ())
1551
1547
old_files = list (self .files .all ())
1552
1548
old_tags = list (self .tags .all ())
1553
- old_risk_acceptances = list (self .risk_acceptance .all ())
1549
+ old_risk_acceptances = list (self .risk_acceptance_set .all ())
1554
1550
old_tests = list (Test .objects .filter (engagement = self ))
1555
1551
# Save the object before setting any ManyToMany relationships
1556
1552
copy .save ()
@@ -1565,7 +1561,7 @@ def copy(self):
1565
1561
test .copy (engagement = copy )
1566
1562
# Copy the risk_acceptances
1567
1563
for risk_acceptance in old_risk_acceptances :
1568
- copy . risk_acceptance .add ( risk_acceptance . copy (engagement = copy ) )
1564
+ risk_acceptance .copy (engagement = copy )
1569
1565
# Assign any tags
1570
1566
copy .tags .set (old_tags )
1571
1567
@@ -1595,9 +1591,6 @@ def unaccepted_open_findings(self):
1595
1591
1596
1592
return findings
1597
1593
1598
- def accept_risks (self , accepted_risks ):
1599
- self .risk_acceptance .add (* accepted_risks )
1600
-
1601
1594
@property
1602
1595
def has_jira_issue (self ):
1603
1596
import dojo .jira_link .helper as jira_helper
@@ -2163,9 +2156,6 @@ def unaccepted_open_findings(self):
2163
2156
2164
2157
return findings
2165
2158
2166
- def accept_risks (self , accepted_risks ):
2167
- self .engagement .risk_acceptance .add (* accepted_risks )
2168
-
2169
2159
@property
2170
2160
def deduplication_algorithm (self ):
2171
2161
deduplicationAlgorithm = settings .DEDUPE_ALGO_LEGACY
@@ -3663,6 +3653,8 @@ class Risk_Acceptance(models.Model):
3663
3653
3664
3654
name = models .CharField (max_length = 300 , null = False , blank = False , help_text = _ ("Descriptive name which in the future may also be used to group risk acceptances together across engagements and products" ))
3665
3655
3656
+ engagement = models .ForeignKey (Engagement , editable = False , blank = False , null = False , on_delete = models .CASCADE )
3657
+
3666
3658
accepted_findings = models .ManyToManyField (Finding )
3667
3659
3668
3660
recommendation = models .CharField (choices = TREATMENT_CHOICES , max_length = 2 , null = False , default = TREATMENT_FIX , help_text = _ ("Recommendation from the security team." ), verbose_name = _ ("Security Recommendation" ))
@@ -3704,26 +3696,17 @@ def name_and_expiration_info(self):
3704
3696
return str (self .name ) + (" (expired " if self .is_expired else " (expires " ) + (timezone .localtime (self .expiration_date ).strftime ("%b %d, %Y" ) if self .expiration_date else "Never" ) + ")"
3705
3697
3706
3698
def get_breadcrumbs (self ):
3707
- bc = self .engagement_set . first () .get_breadcrumbs ()
3699
+ bc = self .engagement .get_breadcrumbs ()
3708
3700
bc += [{"title" : str (self ),
3709
3701
"url" : reverse ("view_risk_acceptance" , args = (
3710
- self .engagement_set . first () .product .id , self .id ))}]
3702
+ self .engagement .product .id , self .id ))}]
3711
3703
return bc
3712
3704
3713
3705
@property
3714
3706
def is_expired (self ):
3715
3707
return self .expiration_date_handled is not None
3716
3708
3717
- # relationship is many to many, but we use it as one-to-many
3718
- @property
3719
- def engagement (self ):
3720
- engs = self .engagement_set .all ()
3721
- if engs :
3722
- return engs [0 ]
3723
-
3724
- return None
3725
-
3726
- def copy (self , engagement = None ):
3709
+ def copy (self , engagement ):
3727
3710
copy = _copy_model_util (self )
3728
3711
# Save the necessary ManyToMany relationships
3729
3712
old_notes = list (self .notes .all ())
@@ -3734,9 +3717,10 @@ def copy(self, engagement=None):
3734
3717
for notes in old_notes :
3735
3718
copy .notes .add (notes .copy ())
3736
3719
# Assign any accepted findings
3737
- if engagement :
3738
- new_accepted_findings = Finding .objects .filter (test__engagement = engagement , hash_code__in = old_accepted_findings_hash_codes , risk_accepted = True ).distinct ()
3739
- copy .accepted_findings .set (new_accepted_findings )
3720
+ new_accepted_findings = Finding .objects .filter (test__engagement = engagement , hash_code__in = old_accepted_findings_hash_codes , risk_accepted = True ).distinct ()
3721
+ copy .accepted_findings .set (new_accepted_findings )
3722
+ copy .engagement = engagement
3723
+ copy .save ()
3740
3724
return copy
3741
3725
3742
3726
0 commit comments