def expire_now(risk_acceptance): logger.info('Expiring risk acceptance %i:%s with %i findings', risk_acceptance.id, risk_acceptance, len(risk_acceptance.accepted_findings.all())) reactivated_findings = [] if risk_acceptance.reactivate_expired: for finding in risk_acceptance.accepted_findings.all(): if not finding.active: logger.debug('%i:%s: unaccepting a.k.a reactivating finding.', finding.id, finding) finding.active = True finding.risk_accepted = False if risk_acceptance.restart_sla_expired: finding.sla_start_date = timezone.now().date() if finding.has_jira_issue: jira_helper.add_simple_jira_comment( jira_instance, finding.jira_issue, jira_comment) finding.save(dedupe_option=False) reactivated_findings.append(finding) # findings remain in this risk acceptance for reporting / metrics purposes else: logger.debug('%i:%s already active, no changes made.', finding.id, finding) # best effort JIRA integration, no status changes post_jira_comments(risk_acceptance, risk_acceptance.accepted_findings.all(), expiration_message_creator) risk_acceptance.expiration_date = timezone.now() risk_acceptance.expiration_date_handled = timezone.now() risk_acceptance.save() accepted_findings = risk_acceptance.accepted_findings.all() title = 'Risk acceptance with ' + str(len(accepted_findings)) + " accepted findings has expired for " + \ str(risk_acceptance.engagement.product) + ': ' + str(risk_acceptance.engagement.name) create_notification(event='risk_acceptance_expiration', title=title, risk_acceptance=risk_acceptance, accepted_findings=accepted_findings, reactivated_findings=reactivated_findings, engagement=risk_acceptance.engagement, product=risk_acceptance.engagement.product, url=reverse('view_risk_acceptance', args=( risk_acceptance.engagement.id, risk_acceptance.id, )))
def post_jira_comment(finding, message_factory, heads_up_days=0): if not finding or not finding.has_jira_issue: return jira_project = jira_helper.get_jira_project(finding) if jira_project and jira_project.risk_acceptance_expiration_notification: jira_instance = jira_helper.get_jira_instance(finding) if jira_instance: jira_comment = message_factory(None, heads_up_days) logger.debug("Creating JIRA comment for something risk acceptance related") jira_helper.add_simple_jira_comment(jira_instance, finding.jira_issue, jira_comment)