Example #1
0
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,
                                    )))
Example #2
0
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)