Esempio n. 1
0
    def get(self):
        """Handle a GET request."""
        # pylint: disable=unexpected-keyword-arg

        # Memoize all project and job names.
        _ = data_handler.get_all_project_names(__memoize_force__=True)
        _ = data_handler.get_all_job_type_names(__memoize_force__=True)

        # Memoize both variants of get_all_fuzzer_names_including_children.
        _ = data_handler.get_all_fuzzer_names_including_children(
            include_parents=True, __memoize_force__=True)
        _ = data_handler.get_all_fuzzer_names_including_children(
            __memoize_force__=True)

        # Memoize expensive testcase attribute calls.
        for testcase_id in data_handler.get_open_testcase_id_iterator():
            try:
                testcase = data_handler.get_testcase_by_id(testcase_id)
            except errors.InvalidTestcaseError:
                # Already deleted.
                continue

            blobs.get_blob_size(testcase.fuzzed_keys)
            blobs.get_blob_size(testcase.minimized_keys)

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('OK')
        self.response.set_status(200)
Esempio n. 2
0
    def get(self):
        """Get the HTML page."""
        key = self.request.get('key')
        if not key:
            raise helpers.EarlyExitException('No key provided.', 400)

        testcase_id = self.request.get('testcase_id')
        if testcase_id:
            testcase = helpers.get_testcase(testcase_id)
            if not access.can_user_access_testcase(testcase):
                raise helpers.AccessDeniedException()

            if key not in [testcase.fuzzed_keys, testcase.minimized_keys]:
                raise helpers.AccessDeniedException()
        else:
            if not access.has_access():
                raise helpers.AccessDeniedException()

        if blobs.get_blob_size(key) > MAX_ALLOWED_CONTENT_SIZE:
            raise helpers.EarlyExitException(
                'Content exceeds max allowed size.', 400)

        try:
            content = unicode(blobs.read_key(key), errors='replace')
        except Exception:
            raise helpers.EarlyExitException('Failed to read content.', 400)

        line_count = len(content.splitlines())
        size = len(content)
        title = '%s, %s' % (utils.get_line_count_string(line_count),
                            utils.get_size_string(size))

        self.render('viewer.html', {'content': content, 'title': title})
Esempio n. 3
0
def _get_blob_size_string(blob_key):
  """Return blob size string."""
  blob_size = blobs.get_blob_size(blob_key)
  if blob_size is None:
    return None

  return utils.get_size_string(blob_size)
Esempio n. 4
0
def _get_blob_size_string(blob_key):
  """Return blob size string."""
  if not blob_key or blob_key == 'NA':
    return ''

  try:
    blob_size = blobs.get_blob_size(blob_key)
    if blob_size is None:
      return ''
  except:
    return ''

  return utils.get_size_string(blob_size)
Esempio n. 5
0
    def get(self):
        """Get the HTML page."""
        key = request.get('key')
        if not key:
            raise helpers.EarlyExitException('No key provided.', 400)

        testcase_id = request.get('testcase_id')
        if testcase_id:
            testcase = helpers.get_testcase(testcase_id)
            if not access.can_user_access_testcase(testcase):
                raise helpers.AccessDeniedException()

            if key not in [testcase.fuzzed_keys, testcase.minimized_keys]:
                raise helpers.AccessDeniedException()
        else:
            if not access.has_access():
                raise helpers.AccessDeniedException()

        blob_size = blobs.get_blob_size(key)
        if blob_size > MAX_ALLOWED_CONTENT_SIZE:
            raise helpers.EarlyExitException(
                'Content exceeds max allowed size.', 400)

        # TODO(mbarbella): Workaround for an issue in the Cloud Storage API. Remove
        # once it is fixed properly upstream:
        # https://github.com/googleapis/google-cloud-python/issues/6572
        if blob_size:
            try:
                content = blobs.read_key(key).decode('utf-8', errors='replace')
            except Exception:
                raise helpers.EarlyExitException('Failed to read content.',
                                                 400)
        else:
            content = u''

        line_count = len(content.splitlines())
        size = len(content)
        title = '%s, %s' % (utils.get_line_count_string(line_count),
                            utils.get_size_string(size))

        return self.render('viewer.html', {'content': content, 'title': title})
Esempio n. 6
0
 def test_get_blob_size_legacy(self):
     """Test get_gcs_path for legacy files."""
     self.assertEqual(123, blobs.get_blob_size('legacyblobkey'))
Esempio n. 7
0
 def test_get_blob_size_gcs(self):
     """Test get_gcs_path for GCS files."""
     self.assertEqual(456, blobs.get_blob_size(TEST_UUID))
Esempio n. 8
0
 def test_get_blob_size_invalid(self):
     """Test get_blob_size for invalid blob."""
     self.assertEqual(None, blobs.get_blob_size(None))
     self.assertEqual(None, blobs.get_blob_size('NA'))
     self.assertEqual(None, blobs.get_blob_size(''))