Ejemplo n.º 1
0
    def get(self):
        """Handle a cron job."""
        @memoize.wrap(memoize.FifoInMemory(256))
        def cc_users_for_job(job_type, security_flag):
            """Return users to CC for a job."""
            # Memoized per cron run.
            return external_users.cc_users_for_job(job_type, security_flag)

        for testcase in get_open_testcases_with_bugs():
            issue_tracker = issue_tracker_utils.get_issue_tracker_for_testcase(
                testcase)
            if not issue_tracker:
                logging.error('Failed to get issue tracker manager for %s',
                              testcase.key.id())
                continue

            policy = issue_tracker_policy.get(issue_tracker.project)
            reported_label = policy.label('reported')
            if not reported_label:
                return

            reported_pattern = issue_filer.get_label_pattern(reported_label)

            try:
                issue = issue_tracker.get_original_issue(
                    testcase.bug_information)
            except:
                logging.error('Error occurred when fetching issue %s.',
                              testcase.bug_information)
                continue

            if not issue or not issue.is_open:
                continue

            ccs = cc_users_for_job(testcase.job_type, testcase.security_flag)
            new_ccs = [cc for cc in ccs if cc not in issue.ccs]
            if not new_ccs:
                # Nothing to do.
                continue

            for cc in new_ccs:
                logging.info('CCing %s on %s', cc, issue.id)
                issue.ccs.add(cc)

            comment = None

            if (not issue.labels.has_with_pattern(reported_pattern)
                    and not data_handler.get_value_from_job_definition(
                        testcase.job_type, 'DISABLE_DISCLOSURE', False)):
                # Add reported label and deadline comment if necessary.
                for result in issue_filer.apply_substitutions(
                        policy, reported_label, testcase):
                    issue.labels.add(result)

                if policy.label('restrict_view') in issue.labels:
                    logging.info('Adding deadline comment on %s', issue.id)
                    comment = policy.deadline_policy_message

            issue.save(new_comment=comment, notify=True)
Ejemplo n.º 2
0
def _get_severity_from_labels(security_severity_label, labels):
  """Get the severity from the label list."""
  pattern = issue_filer.get_label_pattern(security_severity_label)
  for label in labels:
    match = pattern.match(label)
    if match:
      return severity_analyzer.string_to_severity(match.group(1))

  return data_types.SecuritySeverity.MISSING