@@ -1505,10 +1505,10 @@ class Engagement(models.Model):
15051505 default = "threat_model" , editable = False )
15061506 tmodel_path = models .CharField (max_length = 1000 , default = "none" ,
15071507 editable = False , blank = True , null = True )
1508- risk_acceptance = models .ManyToManyField ("Risk_Acceptance" ,
1509- default = None ,
1510- editable = False ,
1511- blank = True )
1508+ # risk_acceptance = models.ManyToManyField("Risk_Acceptance", # TODO: remove this
1509+ # default=None,
1510+ # editable=False,
1511+ # blank=True)
15121512 done_testing = models .BooleanField (default = False , editable = False )
15131513 engagement_type = models .CharField (editable = True , max_length = 30 , default = "Interactive" ,
15141514 null = True ,
@@ -1550,7 +1550,7 @@ def copy(self):
15501550 old_notes = list (self .notes .all ())
15511551 old_files = list (self .files .all ())
15521552 old_tags = list (self .tags .all ())
1553- old_risk_acceptances = list (self .risk_acceptance .all ())
1553+ old_risk_acceptances = list (self .risk_acceptance .all ()) # TODO check this
15541554 old_tests = list (Test .objects .filter (engagement = self ))
15551555 # Save the object before setting any ManyToMany relationships
15561556 copy .save ()
@@ -1564,7 +1564,7 @@ def copy(self):
15641564 for test in old_tests :
15651565 test .copy (engagement = copy )
15661566 # Copy the risk_acceptances
1567- for risk_acceptance in old_risk_acceptances :
1567+ for risk_acceptance in old_risk_acceptances : # TODO check this
15681568 copy .risk_acceptance .add (risk_acceptance .copy (engagement = copy ))
15691569 # Assign any tags
15701570 copy .tags .set (old_tags )
@@ -1596,7 +1596,7 @@ def unaccepted_open_findings(self):
15961596 return findings
15971597
15981598 def accept_risks (self , accepted_risks ):
1599- self .risk_acceptance .add (* accepted_risks )
1599+ self .risk_acceptance .add (* accepted_risks ) # TODO check this
16001600
16011601 @property
16021602 def has_jira_issue (self ):
@@ -2164,7 +2164,7 @@ def unaccepted_open_findings(self):
21642164 return findings
21652165
21662166 def accept_risks (self , accepted_risks ):
2167- self .engagement .risk_acceptance .add (* accepted_risks )
2167+ self .engagement .risk_acceptance .add (* accepted_risks ) # TODO check this
21682168
21692169 @property
21702170 def deduplication_algorithm (self ):
@@ -3663,6 +3663,8 @@ class Risk_Acceptance(models.Model):
36633663
36643664 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" ))
36653665
3666+ engagement = models .ForeignKey (Engagement , editable = False , blank = False , null = False , on_delete = models .CASCADE )
3667+
36663668 accepted_findings = models .ManyToManyField (Finding )
36673669
36683670 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,7 +3706,7 @@ def name_and_expiration_info(self):
37043706 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" ) + ")"
37053707
37063708 def get_breadcrumbs (self ):
3707- bc = self .engagement_set .first ().get_breadcrumbs ()
3709+ bc = self .engagement_set .first ().get_breadcrumbs () # TODO check this
37083710 bc += [{"title" : str (self ),
37093711 "url" : reverse ("view_risk_acceptance" , args = (
37103712 self .engagement_set .first ().product .id , self .id ))}]
@@ -3714,16 +3716,16 @@ def get_breadcrumbs(self):
37143716 def is_expired (self ):
37153717 return self .expiration_date_handled is not None
37163718
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 ]
3719+ # # relationship is many to many, but we use it as one-to-many
3720+ # @property
3721+ # def engagement(self):
3722+ # engs = self.engagement_set.all()
3723+ # if engs:
3724+ # return engs[0]
37233725
3724- return None
3726+ # return None
37253727
3726- def copy (self , engagement = None ):
3728+ def copy (self , engagement = None ): # TODO check this
37273729 copy = _copy_model_util (self )
37283730 # Save the necessary ManyToMany relationships
37293731 old_notes = list (self .notes .all ())
@@ -3734,7 +3736,7 @@ def copy(self, engagement=None):
37343736 for notes in old_notes :
37353737 copy .notes .add (notes .copy ())
37363738 # Assign any accepted findings
3737- if engagement :
3739+ if engagement : # TODO check this
37383740 new_accepted_findings = Finding .objects .filter (test__engagement = engagement , hash_code__in = old_accepted_findings_hash_codes , risk_accepted = True ).distinct ()
37393741 copy .accepted_findings .set (new_accepted_findings )
37403742 return copy
0 commit comments